Verilog语言知识学习快速基础学习

合集下载

第 3 章 Verilog HDL 基础知识

第 3 章    Verilog HDL 基础知识

第三章
Verilog 基础知识
module D_ff(q,data,enable,reset,clock); output q; input data,enable,reset,clock; reg q; always @(posedge clock) //时钟上升沿有效 if (reset == 0) q = 1’b0; else if (enable==1) q = data; //隐含: else q = q: endmodule
第三章
Verilog 基础知识
3) 指定位宽的基数格式 这种格式的表示形式为: <size>’<base_format><number> 参数<size>用来指定所表示数的位宽。当位宽小于数 值的实际位数时,相应的高位部分被忽略;当位宽大于数 值的实际位数,且数值的最高位是 0 或 1 时,相应的高位 部分补0;而当位宽大于数值的实际位数,但数值的最高 位是 x 或 z 时,相应的高位部分补 x 或z。二进制的一个 x 或 z 表示 1 位处于 x 或 z,八进制的一个 x 或 z 表示 3 位 二进制位都处于 x 或 z,十六进制的一个 x 或 z 表示 4 位 二进制位都处于 x 或 z。另外,数值中的 z 可以用“ ?” 来代替。
第三章
Verilog 基础知识
第3章
Verilog HDL 基础知识
希望通过本章的介绍,能够对 Verilog HDL 有初步 的了解。 (1)词法:包括间隔符与注释符、数值、字符串与关键字。 (2)数据类型:包括物理数据类型与抽象数据类型。 (3)运算符:包括算术运算符、逻辑运算符、关系运算 符、相等关系运算符、按位运算符、归约运算符、移 位运算符、条件运算符、连接与复制操作及其优先级。 (4)系统任务与系统函数:包括标准输出任务、文件管理 任务、仿真控制任务、时间函数及其他常用函数。 (5)编译指令:宏编译指令、文件包含指令、条件编译指 令、时间定标指令与工作库定义指令。

verilog 基本语法

verilog 基本语法

verilog 基本语法Verilog基本语法Verilog是一种硬件描述语言,用于描述数字电路的行为和结构。

它具有强大的建模能力,能够描述复杂的数字系统,并用于逻辑设计和硬件验证。

本文将介绍Verilog的基本语法,以帮助读者对这种语言有一个基本的了解。

1. 模块声明在Verilog中,所有的设计都是通过模块来实现的。

模块是Verilog 的基本组织单位,类似于其他编程语言中的函数或类。

模块声明由关键字module开头,后面跟着模块的名称和输入输出端口的定义。

例如:module my_module(input a, b, output c);// 模块的主体endmodule2. 端口声明在模块声明中,使用关键字input和output来声明输入和输出端口。

输入端口用于接收信号,输出端口用于输出信号。

端口可以是单个的信号,也可以是信号的数组。

例如:input a, b; // 单个输入端口output c; // 单个输出端口input [7:0] d; // 输入信号的数组3. 信号声明在Verilog中,使用关键字wire、reg、integer等来声明信号。

wire用于声明连续的信号,reg用于声明时序的信号,integer用于声明整数变量。

例如:wire a, b; // 连续信号reg [7:0] c; // 时序信号,有8位integer d; // 整数变量4. 时钟和复位在数字电路中,时钟和复位信号是非常重要的。

在Verilog中,可以使用关键字input来声明时钟和复位信号,并在模块的输入端口中定义。

例如:input clk; // 时钟信号input rst; // 复位信号5. 运算符Verilog支持各种运算符,包括算术运算符、逻辑运算符、位运算符等。

算术运算符用于执行加减乘除等操作,逻辑运算符用于执行与或非等逻辑操作,位运算符用于执行位操作。

例如:a =b + c; // 加法运算d = ~(a & b); // 与运算和非运算6. 控制结构在Verilog中,可以使用if语句、case语句等控制结构来实现条件判断和多路选择。

verilog 教程

verilog 教程

Verilog 的应用
Verilog HDL是一种用于数字逻辑电路设计的语言: - 用Verilog HDL描述的电路设计就是该电路
的 Verilog HDL模型。 - Verilog HDL 既是一种行为描述的语言也 是一种结构描述的语言。
这也就是说,既可以用电路的功能描述也可以用元器件和它们之间的连接来建立所设计电路的 Verilog HDL模型。Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别和它们 对应的模型类型共有以下五种:
state <= state <= state <= state <= 2 ’bxx;
Start; Stop; Clear; Idle;
设计示例四 (续)
always @(state or Reset or A) begin if ( !Reset) F = 0; else if (state == Stop) F = 1; end
设计示例一
• 用门级结构描述D触发器:
设计示例一 module input output nand #10 flop(data,clock,clear,q,qb); data,clock,clear; q,qb; nd1(a,data,clock,clear), nd2(b,ndata,clock), nd4(d,c,b,clear), nd5(e,c,nclock), nd6(f,d,nclock), nd8(qb,q,f,clear); nd3(c,a,d), nd7(q,e,qb); iv1(ndata,data), iv2(nclock,clock);
设计示例四 (续)
always @(posedge Clock) if (!Reset) begin state <= Idle; end else case (state) Idle: if (A) Start: if (!A) Stop: if (A) Clear: if (!A) default: state <= endcase

Verilog所有知识点

Verilog所有知识点

Verilog基础:1.间隔符:空格〔\b〕,Tab〔\t〕,换行符〔\n〕,换页符。

2.注释:/**/ //3.标识符,关键词:标识符由英文字母、数字、$符、下划线组成,以英文字母或下划线开头。

4.逻辑值:0:逻辑假1:逻辑真x或X:不确定状态z或Z:高阻态5.常量:<1>格式:<+/-><位宽>’<基数符号><数值>b/o/d/h:二、八、十、十六进制<2>数字可加下划线:8’b1001_1001表示8位二进制数10011001<3>科学计数:5E-4: 5*10^4<4>利用参数定义语句来定义一个标识符表示常量:parameter 参数名1=常量1,参数名2=常量2;例:parameter BIT=1,BYTE=8;6.字符串:双撇号内的字符序列,不能分多行书写,表达式或赋值语句中字符串要换成无符号整数,用8位ASCII码表示,一个8位ASCII码表示一个字符变量的数据类型:1.线网〔net type〕类型:线网类被定义后假设没有被元件驱动,则默认值为高阻态关键词:wire:wire[n-1:0]变量名1,变量名2,…,变量名n;除wire外还有wand、wor、tri、triand、trior、trireg2.寄存器类型:寄存器型变量只能在initial或always内被赋值,没被赋值默认为x状态。

4种类型的寄存器变量:<1>reg:行为描述中对寄存器型变量说明<2>integer:32位有符号整数型<3>real:64位有符号实型变量〔默认值是0〕<4>time:64位无符号时间型①reg:格式:reg[n-1:0]变量名1,…,变量名n;例:integer counter;initial //initial是过程语句结构,赋值给寄存器类型变量counter=-1;③real:通常用于对实数型常量进行储存运算例:real delta;initialbegindelta=4e10;delta=2.13endinteger i;initial i=delta; //i得到的值为2④time:主要用于储存仿真时间,只储存无符号整数,常调用系统函数$time例:time current_time;initialcurrent_time=$time;Verilog 基本结构module 模块名〔端口名1,端口名2,…〕端口类型说明〔input,output,inout〕//inout是双向端口参数定义;//将常量用符号常量代替,非必须结构数据类型定义〔wire,reg等〕实例化底层模块和基本门级元件;连续赋值语句〔assign〕;过程块结构〔initial和always〕;行为描述语句;endmodule描述方式:①结构描述方式:调用其他已定义好的底层模块对整个电路进行描述,或直接调用基本门级元件描述。

Verilog语言详解

Verilog语言详解

第三章 Cadence仿真器
学习内容
逻辑仿真算法 如何启动Verilog-XL和NC Verilog仿真器 如何显示波形
仿真算法
主要有三种仿真算法
基于时间的(SPICE仿真器) 基于事件的(Verilog-XL和NC Verilog仿真器) 基于周期的(cycle)
仿真算法
基于时间的算法用于处理连续的时间及变量
课程内容(三)
• 逻辑综合的介绍
– – – – – 简介 设计对象 静态时序分析 (STA) design analyzer环境 可综合的HDL编码风格
• 可综合的Verilog HDL
– Verilog HDL中的一些窍门 – Designware库 – 综合划分

实验 (1)
课程内容(四)
• 设计约束( Constraint)
Verilog HDL是在1983年由GDA(GateWay Design Automation)公司的Phil Moorby所创。Phi Moorby 后来成为Verilog-XL的主要设计者和Cadence公司的第一个合伙人。
在1984~1985年间,Moorby设计出了第一个Verilog-XL的仿真器。
Verilog还有一定的晶体管级描述能力及算法级描述能力
行为级和RTL级
MUX的行为可以描述为:只要信号a或b或sel发生变化,如果sel为0则选择a输出;否则选择 b输出。
module muxtwo (out, a, b, sel); input a, b, sel; output out; reg out; always @( sel or a or b) if (! sel) out = a; else out = b; endmodule

Verilog HDL语言

Verilog HDL语言
关系运算的结果是1位逻辑值。在进行关系运算时,如果 关系是真,则计算结果为1;如果关系是假,则计算结果为0; 如果某个操作数的值不定,则计算结果不定(未知),表示结 果是模糊的。
2021/8/14
22
5. 等式操作符(Equality operators)
等值操作符包括:
==(等于)、!=(不等于)、===(全等)、 !==(不全等)4种。
2021/8/14
4
2. 信号类型声明
变量类型声明用来说明设计电路的功能描述中,所用的信号 的数据类型以及函数声明。
变量的数据类型主要有连线(wire)、寄存器(reg)、整型 (integer)、实型(real)和时间(time)等类型。
2021/8/14
5
3. 功能描述
功能描述是Verilog HDL程序设计中最主要的部分,用 来描述设计模块的内部结构和模块端口间的逻辑关系,在电 路上相当于器件的内部电路结构。
① 首字符不能是数字。
② 字符数不能多于1024个。 ③ 大小写字母是不同的。
④ 不要与关键字同名。
2021/8/14
18
4.2.6 操作符
操作符也称为运算符,是Verilog HDL预定义的函数名 字,这些函数对被操作的对象(即操作数)进行规定的运算, 得到一个结果。
操作符通常由1~3个字符组成,例如,“+”表示加操作, “==”(两个=字符)表示逻辑等操作,“===”(3个=字符) 表示全等操作。有些操作符的操作数只有1个,称为单目操作; 有些操作符的操作数有2个,称为双目操作;有些操作符的操 作数有3个,称为三目操作。
字符串是用双引号括起来的可打印字符序列,它必须包含在同 一行中。例如,
“ABC”, “A BOY.” ,“A”, “1234” 都是字符串。

Verilog HDL入门教程

Verilog HDL入门教程

共41页资源类别: HDL 语言内部公开1.0密级版本文档编号文档中心Verilog HDL 入门教程(仅供内部使用)yyyy/mm/dd日期:批准:日期:中研基础批准:2004.8.3日期:中研基础拟制:版权所有 不得复制修订记录初稿完成1.002004.8.3作者描述修订版本日期绝密请输入文档编号Verilog HDL 入门教程2004-08-16第2页,共41页版权所有,侵权必究目 录285 结构建模..............................................................274.8 case 语句. (25)4.7 条件语句 (25)4.6.6 连接运算符 (25)4.6.5 条件运算符 (24)4.6.4 按位逻辑运算符 (23)4.6.3 逻辑运算符 (22)4.6.2 关系运算符 (21)4.6.1 算术运算符 (21)4.6 运算符和表达式 (20)4.5.2 寄存器类型 (20)4.5.1 线网类型 (20)4.5 数据类型 (18)4.4.2 常量 (18)4.4.1 值集合 (18)4.4 数字值集合 (18)4.3 格式 (17)4.2 注释 (17)4.1.3 书写规范建议 (17)4.1.2 关键词 (17)4.1.1 定义 (17)4.1 标识符 (17)4 Verilog HDL 基本语法....................................................163.3.4 混合设计描述.. (15)3.3.3 行为描述方式 (14)3.3.2 数据流描述方式 (12)3.3.1 结构化描述方式 (12)3.3 三种建模方式 (11)3.2 时延 (11)3.1.3 模块语法 (10)3.1.2 模块的结构 (9)3.1.1 简单事例 (9)3.1 模块 (9)3 Verilog HDL 建模概述.....................................................72.4.2 能力. (7)2.4.1 历史 (7)2.4 Verilog HDL 简介 (6)2.3 设计方法学 (6)2.2 硬件描述语言 (5)2.1 数字电路设计方法 (5)2 HDL 设计方法学简介......................................................51 前言...................................................................绝密请输入文档编号Verilog HDL 入门教程2004-08-16第3页,共41页版权所有,侵权必究4010 附录A Verilog 保留字...................................................399 习题..................................................................398 其他方面..............................................................377.4 行为建模具体实例...................................................367.3 过程赋值语句......................................................357.2 顺序语句块........................................................357.1 简介.............................................................357 行为建模..............................................................346.3 数据流建模具体实例.................................................346.2 阻塞赋值语句......................................................346.1 连续赋值语句......................................................346 数据流建模............................................................315.4 结构化建模具体实例.................................................295.3 实例化语句........................................................285.2 模块端口..........................................................285.1 模块定义结构......................................................绝密请输入文档编号Verilog HDL 入门教程2004-08-16第4页,共41页版权所有,侵权必究Verilog HDL 入门教程关键词:摘 要:本文主要介绍了Verilog HDL 语言的一些基本知识,目的是使初学者能够迅速掌握HDL设计方法,初步了解并掌握Verilog HDL 语言的基本要素,能够读懂简单的设计代码并能够进行一些简单设计的Verilog HDL 建模。

verilog语法入门

verilog语法入门

模块的测试
测试模块常见的形式:
module t; reg …; //被测模块输入/输出变量类型定义 wire…; //被测模块输入/输出变量类型定义 initial begin …; …; …; end … …//产生测试信号 always #delay begin …; end … …//产生测试信号
语法详细讲解
编译引导语句
使用`define 编译引导能提供简单的文本替代功能 `define <宏名> <宏文本> 在编译时会用宏文本来替代源代码中的宏名。 合理地使用`define可以提高程序的可读性
举例说明:
`define on 1’b1 `define off 1’b0 `define and_delay #3 在程序中可以用有含义的文字来表示没有意思的数码提高了程序 的可读性,在程序中可以用 `on, `off, `and_delay 分别表 示 1,0,和 #3 。
语法详细讲解
编译引导语句
编译引导语句用主键盘左上角小写键 “ ` ” 起头 用于指导仿真编译器在编译时采取一些特殊处理 编译引导语句一直保持有效,直到被取消或重写 `resetall 编译引导语句把所有设置的编译引导恢复到 缺省状态 常用的编译引导有: a) `define b) `include c) `timescale d) `uselib e) `resetall ……..
语法详细讲解

特殊符号 “#”
特殊符号 “#” 常用来表示延迟:
在过程赋值语句时表示延迟。 例:initial begin #10 rst=1; #50 rst=0; end 在门级实例引用时表示延迟。 例:not #1 not1(nsel, sel); and #2 and2(a1, a, nsel); 在模块实例引用时表示参数传递 介绍参数类型变量时再讲。。。。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

a
yA b
y
module 模块名 ([端口列表]); [端口信号声明;]
内部信号 声明
assign 语句
底层模块或 门原语调用
endmodule
always 语句块
特点:
之所以称为连续赋值语句是指其总是处于激活状态,只 要表达式中的操作数有变化,立即进行计算和赋值。 (与连续赋值语句对应的另一种语句称为过程赋值语句)
always 语句块
特点:
always语句本身不是单一的有意义的一条语句,而是和下面的语
句一起构成一个语句块,称之为过程块;过程块中的赋值语句称过
程赋值语句;
该语句块不是总处于激活状态,当满足激活条件时才能被执行,否
则被挂起,挂起时即使操作数有变化,也不执行赋值,赋值目标值
保持不变;
赋值目标必须是reg型的。
只有一位。
(7) 移位运算符
>> 右移 << 左移 >>> 算术右移 <<< 算术左移
例: Y= 4’b1001 >> 1; Y= 4’sb1001 >>> 1;
结果为0100 结果为1100
格式 操作数 移位符 n;
说明 移位运算的操作数是1位或多位二进制数; 向左或向右移n位; 只有对有符号数的算术右移自动补符号位; 其他移位均自动补0。
Verilog设计快速入门
1
Verilog模块结构
module 模块名 ([端口列表]); [端口信号声明;] [参数声明;]
内部信号声明
assign语句
底层模块或门原语 调用(包括生成块)
Initial或always 语句块
任务和函数定义 specify 块(路径延迟)
模块说明部分
说明: 浅色部分用得较少; 常用语句只有三种:
module 模块名 ([端口列表]); [端口信号声明;] [参数声明;]
内部信号 声明
assign 语句
底层模块或 门原语调用
always 语句块
endmodule
5
Verilog模块结构
1.模块说明部分
module 模块名 ([端口列表]);
[端口信号声明;] [参数声明;]
输入输出属性 数据类型 位宽 名称
always @ (posedge clk) Q=D;
只有当clk上升沿到来时,才能激活该 块语句,才能进行计算和赋值;否则, 即使D发生变化也不会计算和赋值。在 未被激活时,Q的值保持不变。 Q必须是reg型。
25
3. always语句块
always语句块中除了可以使用表达式赋值以外,还可以使用 if,case等行为描述语句,还能够描述边沿变化,因此其功 能比assign语句更强大(assign语句不能使用if等语句,也 不能描述边沿变化)。
赋值目标必须是wire型的,wire表示电路间的连线。
8
2. assign语句
例:assign M=B|C;
assign Y=A&M;
M
M和Y都必须是wire型的
9
2. assign语句 详见夏宇闻教材第6章,自学。
Verilog具有丰富的表达式运算功能,可用于assign语句
10
(1) 算术型
例: always @ (D)
Q=D;
D
Q
当D有变化时(不管是由1变0还是由 0变1),激活该语句块,将D的值赋 给Q; 否则,该语句块挂起,Q的值保持不 变,直到下一次赋值。
3. always语句块
说明: 过程块中的赋值目标必须是reg型的。 由于always语句可以描述边沿变化,在设计时序电路中得
3. always语句块
module 模块名 ([端口列表]); [端口信号声明;]
always语句块又称过程块
基本格式: always @(敏感信号条件表)
各类顺序语句;
例: always @ (posedge CLK) Q=D;
内部信号 声明
assign 语句
底层模块或 门原语调用
endmodule
等于 不等于 case等于 case不等
例: Y=(3==2) ; Y=(3!=2);
结果为0 结果为1
Y=(3==3);
结果为1
Y=(1’b1 ==1’bx);
结果为x
Y=(1’bx ==1’bx);
结果为x
Y=(1’b1 ===1’bx); 结果为0
Y=(1’bx ===1’bx); 结果为1
说明
•过程赋值语句只有当激活该过程时,才会进行计算和赋值,如 果该过程不被激活,即使操作数发生变化也不会计算和赋值。
•verilog规定assign中的赋值目标必须是wire型的,而 always语句中的赋值目标必须是reg型的。
例: assign Q=D
只要D发生变化,马 上进行计算和赋值; Q必须是wire型。
参数声明要说明参数的名称和初值
6
例: module full_adder (A,B,CIN,S,COUT); input [3:0] A,B; input CIN; output reg [3:0] S; output COUT;
位宽如果不做说明的话,默认是1位; 数据类型不做说明的话,默认是wire型的。
逻辑非,结果为0 逻辑与,结果为0 逻辑或,结果为1 逻辑与,结果为x 逻辑或,结果为1
说明 逻辑型运算的结果可能是1(逻辑真)、0(逻辑假)、x(不确定); 逻辑运算的操作数可以是任意表达式,表达式的结果被当做逻辑值处理,
只有1、0、x三种情况,非0、x即1; 表达式最好加括号。
(3) 关系运算符
例:
module DFF2 (CLK,D,Q,RST,EN)
D
input CLK,D,RST,EN;
EN
output Q;
CLK
reg Q;
always @(posedge CLK or negedge RST)
begin
if (!RST) Q<=0;
else if (EN) Q<=D
end
endmodule
到广泛应用。 always语句中还可以使用if、case、for循环等语句,其
功能更加强大。
例: always @ (posedge CLK)
Q=D;
例: always @ (D)
Q=D;
必须是reg型的
3. always语句块
assign语句和always语句的主要区别:
•连续赋值语句总是处于激活状态,只要操作数有变化马上进行 计算和赋值;
Dቤተ መጻሕፍቲ ባይዱ Q
RST
26
3. always语句块
always语句块中如果有多条赋值语句必须将其用begin end包括起来,assign语句中没有begin end。
例: module adder (a,b,cin,s,cout)
input a,b,cin; output s,cout; reg s,cout; always @ (a,b,cin) begin s=a^b^cin; cout=(a&b)|(a&cin)|(b&cin); end endmodule
assign语句 always语句 底层模块调用语句
三种语句顺序无关 除开始的module模
块名和结束的 endmodule必须写 外,其他都是可选的。
endmodule
功能描述部分
2
Verilog模块结构
例1:二选一数据选择器的描述
二选一数据选择器的符号
二选一数据选择器的结构之一
设a、b、s波形已知,可得y波形:
例: (negedge clk)
电平敏感: (信号名列表) 信号列表中的任一个信号有变化
例: (a,b,c)
当a,b,c中有一个发生变化
说明: 逗号可以换成or
例: (a or b or c)
3. always语句块
例: always @ (posedge CLK)
Q=D;
D
DQ Q
CLK
当CLK上升沿到来时,激活该语句块, 将D的值赋给Q; 否则,该语句块挂起,即使D有变化, Q的值也保持不变,直到下一次赋值。
20
3. always语句块
激活条件由敏感信号条件表决定,当敏感条件满足时, 过程块被激活。 敏感条件有两种,一种是边沿敏感,一种是电平敏感。
3. always语句块
边沿敏感: (posedge 信号名) 信号上升沿到来 (negedge 信号名) 信号下降沿到来
例: (posedge clk)
等于和不等于运算的结果可能是1(逻辑真)、0(逻辑假)、x(不确
定);对于x或z,认为是不确定的值,比较结果为x;
case等和case不等的结果只能是1或0,对于x、z认为是确定的值,参
加比较;
(5) 按位运算符
~ 按位非 & 按位与 | 按位或 ^ 按位异或 ~^ 按位同或 ^~
例:
Y=~ 4’b1001 ;
结果为0110
Y= 4’b1001 & 4’b 0111 结果为0001
Y=4’b1001 | 4’b 0111; 结果为1111
Y=3’b001 | 4’b 0111; 结果为0111
Y=3’b001 | 4’b 0111 & 3’b101;
结果为0101
说明 按位运算的操作数是1位或多位二进制数, 按位非的操作数只有一个,将该数的每一位求非运算。 其它按位运算的操作数有2个或多个,将两个操作数对应的位两两运算; 如果操作数位宽不同,位宽小的会自动左添0补齐; 结果与操作数位宽相同;
相关文档
最新文档