第三章 Verilog HDL的基本语法(last)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2. 逻辑运算符
逻辑运算符包括: && (逻辑与) || (逻辑或) ! (逻辑非)
3. 关系运算符
关系运算符包括: < (小于) <= (小于等于) > (大于) >= (大于等于)
4. 等值运算符
等值运算符包括: == (逻辑相等) != (逻辑不等) === (全等) !== (非全等)
wire a,b,c; assign c=a & b;
2.过程赋值语句
• 不阻塞(non-blocking) 赋值语句:
always @(posedge clk) begin b <= a ; c <= b; end
clk
D a DFF Q b D Q DFF c
2.过程赋值语句
• 阻塞(blocking) 赋值语句:
always @(posedge clk) begin b= a; c = b; end
clk
D a DFF Q c
b
两种不同的赋值语句区别要点
• 非阻塞(non-blocking) 赋值语句 ( b<= a): - 块内的赋值语句同时赋值; - b 的值被赋成新值 a 的操作, 是与块内其他 赋值语句同时完成的; - 建议在可综合风格的模块中使用不阻塞赋值。 • 阻塞(blocking) 赋值语句 ( b = a): - 完成该赋值语句后才能做下一句的操作; - b 的值立刻被赋成新值 a; - 时序电路中硬件没有对应的电路,因而综合 结果未知。
二、条件语句
2. case语句 Verilog HDL语言中的case语句可以直 接处理多分支选择。 case语句格式: case (控制表达式) 分支项表达式1:语句1 分支项表达式2:语句2 … 分支项表达式m:语句m default: 语句n endcase
三、 循环语句
1.forever循环 2. repeat循环 3. while循环 4. for 循环
整数型
常量 实数型常量
科学记数法
如: 23_5.1e2、5E-4
23510.0、 0.0005
Verilog允许用参数定义语句定义一个标识符来代表一个常量,称 为符号常量。定义的格式为: parameter 参数名1=常量表达式1,参数名2=常量表达式2,……; 如 parameter BIT=1, BYTE=8, PI=3.14;
+(正) -(负) ! ~ * / % +(加) -(减) << >> < <= > >= == != === !== & ~& ^ ^~ ~^ | ~| && || ?:
高
低
3.4 Verilog HDL的基本语句
赋值语句 条件语句 循环语句 结构声明语句 编译预处理语句
一、赋值语句
1. 连续赋值语句 连续赋值语句用来驱动wire型变量。连 续赋值语句用来描述组合逻辑。 连续赋值语句格式: assign #(延时量) wire型变量名=赋值表达式;
第三章 Verilog HDL的基本语法
3.1 Verilog程序的基本结构
3.2 Verilog HDL的数据类型
3.3 Verilog HDL的运算符 3.4 Verilog HDห้องสมุดไป่ตู้的基本语句
3.5
模块化程序设计
3.1 Verilog程序的基本结构
Verilog使用大约100个预定义的关键词定义该语言的结构
左移和右移运算符是对操作数进行逻辑移 位操作,空位用0进行填补。 移位运算的格式为: a<<n或a>>n 其中,a为操作数,n为移位的次数。
8. 条件运算符
条件运算符格式如下: 条件?表达式1:表达式2 条件表达式的含义是: 如果条件为真,结果为表达式1的值; 如果条件为假,结果为表达式2的值。
9. 拼接运算符
拼接运算符是: {} 拼接运算符用来将两个或多个数据的某些位 拼接起来。拼接运算符格式如下: {数据1的某些位,数据2的某些位,…… ,数据n的 某些位}
例如: X={a[7:4],b[3],c[2:0]} 表示X是由a的第7~4位、b的第3位和c的第 2~0位拼接而成。
运算符的优先级
运算符 优先级
寄存器类型 reg 功能说明 常用的寄存器型变量 32位带符号的整数型变量 64位带符号的实数型变量, 64位无符号的时间变量
抽象描述, 不对应具 体硬件
integer real time
例: reg clock;//定义一个1位寄存器变量 reg [3:0] counter; //定义一个4位寄存器变量
1、 VerilogHDL程序由模块构成。每个模块的内容都是嵌在关键
词module和endmodule两个语句之间。每个模块实现特定的功能。
2、每个模块先要进行端口的定义,并说明输入(input)和输出
(output),然后对模块功能进行描述。 3、除了endmodule语句外,每个语句后必须有分号。
二、条件语句
• 1. if…else语句
(1)if(表达式) 语句 例如: if(x>y) q=x;
(3)if(表达式1) 语句1 else if(表达式2) 语句2 else if(表达式3) 语句3 … else if(表达式m) 语句m else 语句n
(2)if(表达式) 语句1 else 语句2 例如: if(Reset) Q = 0; else Q = D;
模式功能描述
• 用来描述设计模块内部结构和模块端口间 的逻辑关系,在电路上相当于器件的内部 结构。 • Assign语句 • Always块语句 • Initial块语句 • 实例化元件
模式功能描述
• assign语句:实现组合逻辑电路 assign a=b & c; //b,c的与,输出为a • 实例化元件 and u1(q,a,b); • always块语句:实现组合和时序逻辑电路 • initial块语句:电路初始化,只被执行一次
4. for 循环语句
格式 :
for (初值表达式; 条件; 循环变量增值) 语句
for循环的执行过程为: (1)计算初值表达式; (2)进行条件判断,若条件为真,继续第3步,若 (3)执行过程语句,对循环变量进行增值。 (4)转回第2步继续执行。 (5)执行for循环下面的语句。
3.4.4 结构声明语句
变量宽度
例:wire L; //将上述电路的输出信号L声明为网络型变量 wire [7:0] data bus; //声明一个8-bit宽的网络型总线变量
2.reg(寄存器型) 寄存器型变量对应的是具有状态保持作用的电等路元件,如触 发器寄存器。寄存器型变量只能在initial或always内部被赋值。 4种寄存器类型的变量
1.forever 语句
forever循环语句常用于产生周期性的 波形。它与always语句不同之处在于它不 能独立写在程序中,而必须写在initial块中。
例如: initial begin clock = 0; # 5 forever #10 clock = ~ clock; end
2. repeat 循环语句
5. 位运算符
位运算符包括: ~ (非) & (与) ~& (与非) | (或) ~| (或非) ^ (异或) ^~ 或~^ (同或)
6. 缩减运算符
例如: 缩减运算符包括: reg [7:0] a; & (与) reg b ~& (与非) b=&a; | (或) ~| (或非) ^ (异或) ^~ (同或)
3.memory(存储器型) memory型是存储器型,是通过建 立reg型数组来描述的,可以描述RAM存 储器、ROM存储器和reg文件。 memory型变量的定义格式:
reg [msb:lsb] 存储单元1[n1:m1],存储单元2[n2:m2], ……;
Memory型举例:
reg memory1[1023:0]; //存储器为1024个单元,每个单元为1位 reg [7:0] memory2[15:0]; //存储器为16个 单元,每个单元为8位 reg [31:0] memory2[511:0]; //存储器为 512个单元,每个单元为32位
模块定义的一般语法结构如下:
module 模块名(端口名 端口名 端口名 1, 2, 3,…); (input outout inout ; , , ) 端口类型说明
参数定义 (可选); 数据类型定义wire, reg等); ( 实例化低层模块和基本门级元件; assign 连续赋值语句( ); 过程块结构 initial always ( 和 ) 行为描述语句; endmodule 说明部分
3.3 Verilog HDL的运算符
算术运算符 逻辑运算符 关系运算符 等值运算符 位运算符 缩减运算符 移位运算符 条件运算符 拼接运算符
1.算术运算符
算术运算符包括: + (加法运算符或正值运算符,如x+y,+8) - (减法运算符或负值运算符,如x-y,-90) * (乘法运算符,如x*y) / (除法运算符,如x/y) % (取模运算符,如x % y)
二、变量
1.Wire(线网类型):是指输出始终根据输入的变化而 更新其值的变量,它一般指的是硬件电路中的各种物理 连接.
例:网络型变量L的值由与门的驱动信号 a和b所决定,即L=a&b。a、b的值发 生变化,线网L的值会立即跟着变化。
a b
&
L
常用的网络类型由关键词wire定义 wire型变量的定义格式如下: wire [n-1:0] 变量名1,变量名2,…,变量名n;
1. Initial说明语句 2. always说明语句 3. task说明语句 4. function说明语句
这几种结构语句会在后边的章 节中详细介绍和说明
五、编译预处理语句
1 x或X z或Z 逻辑1、逻辑真 不确定的值(未知状态) 高阻态
3.2 Verilog HDL的数据类型
常量 变量
一、常量 十进制数的形式的表示方法:表示有符号常量 例如:30、-2 带基数的形式的表示方法: 表示常量 格式为:<+/-><位宽>’<基数符号><数值> 例如:3’b101、5’o37、8’he3,8’b1001_0011 十进制记数法 如: 0.1、2.0、5.67
2.注释符:注释只是为了改善程序的可读性,在编译时不起作用。
3.标识符和关键词 标识符:给对象(如模块名、电路的输入与输出端口、 变量等)取名所用的字符串。以英文字母或下划线开始
如,clk、counter8、_net、bus_A 。 关键词:是Verilog语言本身规定的特殊字符串,用来定 义语言的结构。例如,module、endmodule、input、 output、wire、reg、and等都是关键词。关键词都是小 写,关键词不能作为标识符使用 。 4.逻辑值集合 为了表示数字逻辑电路的逻辑状态,Verilog语言规定了 4种基本的逻辑值。 0 逻辑0、逻辑假
语句b=&a;与语句 b=a[0] & a[1] & a[2] & a[3] & a[4] & a[5] & a[6] & a7]; 等价。
缩减运算符与逻辑运算符的法则一样,但 缩减运算符是对单个操作数按位进行逻辑 递推运算,运算结果为1位二进制数。
7. 移位运算符
移位运算符包括: << (左移) >> (右移)
格式: repeat(表达式) 语句 repeat循环语句中的表达式通常为常量表达 式,表示循环的次数。如果循环计数表达 式的值不确定,即为x或z时,那么循环次 数按0处理。
3. while 循环语句
格式: while(条件) 语句 说明:执行while时,先对条件进行判断,如 果条件为真,就执行语句;如果条件为假, 就退出循环;如果条件在开始时就为假, 那就一次都不执行语句。如果条件为x或z, 按0(假)处理。
逻辑功能描 述部分,其 顺序是任 意的
补充: Verilog语言的基本语法规则
为对数字电路进行描述(常称为建模),Verilog语言规定
了一套完整的语法结构。 1.间隔符: Verilog 的间隔符主要起分隔文本的作用,可以
使文本错落有致,便于阅读与修改。
间隔符包括空格符(\b)、TAB 键(\t)、换行符(\n)及 换页符。 多行注释符(用于写多行注释): /* --- */; 单行注释符 :以//开始到行尾结束为注释文字。