Verilog-HDL基本语法.ppt
合集下载
Verilog-HDL中的基本语法
⑤ 可以用/*……*/或//……对Verilog HDL程序的任 何部分作注释。
一个完整的源程序都应当加上需要的注释, 以加强程序的可读性。
2.2 Verilog HDL的语法
2.2.1 空白符和注释
Verilog HDL的空白符包括空格、tab符号、换行 和换页。
空白符如果不是出现在字符串中,编译源程序 时将被忽略。
8. 条件操作符(Conditional operators)
条件操作符为:?:
条件操作符的操作数有3个,其使用格式为
操作数 = 条件 ? 表达式1:表达式2;
即当条件为真(条件结果值为1)时,操作数 = 表达式1;为假(条件结果值为0)时,操作数 = 表达 式2。
9. 位并接操作符(Concatenation operators) 并接操作符为:{} 并接操作符的使用格式: {操作数1的某些位,操作数2的某些位,…,操作数n 的某些位};
位运算操作符包括:~(按位取反)、&(按位与)、 |(按位或)、^(按位异或)、^~或~^(按位同或)。
在进行位运算时,当两个操作数的位宽不同时, 计算机会自动将两个操作数按右端对齐,位数少的操 作数会在高位用0补齐。
4. 关系操作符(Pelational operators)
关系操作符有:
<(小于)、<=(小于等于)、>(大于)、>=(大 于等于)。
② 每个模块首先要进行端口定义,并说明输入 (input)、输出(output)或双向(inouts),然 后对模块的功能进行逻辑描述。
③ Verilog HDL程序的书写格式自由,一行可以一 条或多条语句,一条语句也可以分为多行写。
④ 除了endmodule语句外,每条语句后必须要有 分号“;”。
一个完整的源程序都应当加上需要的注释, 以加强程序的可读性。
2.2 Verilog HDL的语法
2.2.1 空白符和注释
Verilog HDL的空白符包括空格、tab符号、换行 和换页。
空白符如果不是出现在字符串中,编译源程序 时将被忽略。
8. 条件操作符(Conditional operators)
条件操作符为:?:
条件操作符的操作数有3个,其使用格式为
操作数 = 条件 ? 表达式1:表达式2;
即当条件为真(条件结果值为1)时,操作数 = 表达式1;为假(条件结果值为0)时,操作数 = 表达 式2。
9. 位并接操作符(Concatenation operators) 并接操作符为:{} 并接操作符的使用格式: {操作数1的某些位,操作数2的某些位,…,操作数n 的某些位};
位运算操作符包括:~(按位取反)、&(按位与)、 |(按位或)、^(按位异或)、^~或~^(按位同或)。
在进行位运算时,当两个操作数的位宽不同时, 计算机会自动将两个操作数按右端对齐,位数少的操 作数会在高位用0补齐。
4. 关系操作符(Pelational operators)
关系操作符有:
<(小于)、<=(小于等于)、>(大于)、>=(大 于等于)。
② 每个模块首先要进行端口定义,并说明输入 (input)、输出(output)或双向(inouts),然 后对模块的功能进行逻辑描述。
③ Verilog HDL程序的书写格式自由,一行可以一 条或多条语句,一条语句也可以分为多行写。
④ 除了endmodule语句外,每条语句后必须要有 分号“;”。
VerilogHDL基本语法课件
parameter average_delay = (r+f)/2; //用常数表达式赋值
VerilogHDL基本语法
9
变量
变量即在程序运行过程中其值可以改变的量 Verilog HDL中共有19种数据类型;其中3个最基本的数据类
型为: • 网络型(nets type) • 寄存器型(register type ) • 数组型(memory type)
VerilogHDL基本语法
10
变量
线网类型:nets type表示Verilog结构化元件间的物理连线。它 的值由驱动元件的值决定;如果没有驱动元件连接到线网,线 网的缺省值为z。 寄存器类型:register type表示一个抽象的数据存储单元,它只 能在always语句和initial语句中被赋值,并且它的值从一个赋值 到另一个赋值被保存下来。寄存器类型的变量具有x的缺省值。
每个向量 位宽为n
共有m个reg 型向量
14
变量
register型变量与nets型变量的根本区别是:
❖register型变量需要被明确地赋值,并且在 被重新赋值前一直保持原值。
❖register型变量必须通过过程赋值语句赋值! 不能通过assign语句赋值!
❖在过程块内被赋值的每个信号必须定义成 register型!
VerilogHDL基本语法
阻态z • 为提高可读性,在较长的数字之间可用下划线_隔开!但不可以
用在<进制>和<数字>之间。 • 当常量未指明位宽时,默认为32位。
VerilogHDL基本语法
6
常量
• 17 //位宽, 基数符号不写会采用default值
(32bit十进制)
VerilogHDL基本语法
9
变量
变量即在程序运行过程中其值可以改变的量 Verilog HDL中共有19种数据类型;其中3个最基本的数据类
型为: • 网络型(nets type) • 寄存器型(register type ) • 数组型(memory type)
VerilogHDL基本语法
10
变量
线网类型:nets type表示Verilog结构化元件间的物理连线。它 的值由驱动元件的值决定;如果没有驱动元件连接到线网,线 网的缺省值为z。 寄存器类型:register type表示一个抽象的数据存储单元,它只 能在always语句和initial语句中被赋值,并且它的值从一个赋值 到另一个赋值被保存下来。寄存器类型的变量具有x的缺省值。
每个向量 位宽为n
共有m个reg 型向量
14
变量
register型变量与nets型变量的根本区别是:
❖register型变量需要被明确地赋值,并且在 被重新赋值前一直保持原值。
❖register型变量必须通过过程赋值语句赋值! 不能通过assign语句赋值!
❖在过程块内被赋值的每个信号必须定义成 register型!
VerilogHDL基本语法
阻态z • 为提高可读性,在较长的数字之间可用下划线_隔开!但不可以
用在<进制>和<数字>之间。 • 当常量未指明位宽时,默认为32位。
VerilogHDL基本语法
6
常量
• 17 //位宽, 基数符号不写会采用default值
(32bit十进制)
第4部分verilog语法入门学习课件
·在过程块中对变量赋值时,忘了把它定义为寄存器 类型(reg)或已把它定义为连接类型了(wire) · 把实例的输出连接出去时,把它定义为寄存器类型
寄存器类型变量共有四种数据类型:
类型
功能
.
reg
无符号整数变量,可以选择不同的位宽。
integer 有符号整数变量,32位宽,算术运算可产生2的补码。
real
有符号的浮点数,双精度。
time
无符号整数变量,64位宽(Verilog-XL仿真工具用64位的
正数来记录仿真时刻)
Reg [7:0]a 8位寄存器a
file = /libs/TTL_U/udp.lib
4.3 Verilog 的数据类型和逻辑值
1、Verilog 的四种逻辑值
4buf 4buf
04 0、低、伪、逻辑低、地、VSS、负插入 14 1、高、真、逻辑高、电源、VDD、正插入
4buf
X4 X、不确定:逻辑冲突无法确定其逻辑值
4bufif
endmodule
4.1 简单的 Verilog HDL模块
module trist1(out,in,enable); output out; input in, enable; mytri tri_inst(out,in,enable) endmodule
module mytri(out,in,enable); output out; input in, enable; assign out = enable? In : "bz; endmodule
· 标识符最长可以达到1023个字符。
· 模块名、端口名和实例名都是标识符。
· Verilog语言是大小写敏感的
4、标识符
寄存器类型变量共有四种数据类型:
类型
功能
.
reg
无符号整数变量,可以选择不同的位宽。
integer 有符号整数变量,32位宽,算术运算可产生2的补码。
real
有符号的浮点数,双精度。
time
无符号整数变量,64位宽(Verilog-XL仿真工具用64位的
正数来记录仿真时刻)
Reg [7:0]a 8位寄存器a
file = /libs/TTL_U/udp.lib
4.3 Verilog 的数据类型和逻辑值
1、Verilog 的四种逻辑值
4buf 4buf
04 0、低、伪、逻辑低、地、VSS、负插入 14 1、高、真、逻辑高、电源、VDD、正插入
4buf
X4 X、不确定:逻辑冲突无法确定其逻辑值
4bufif
endmodule
4.1 简单的 Verilog HDL模块
module trist1(out,in,enable); output out; input in, enable; mytri tri_inst(out,in,enable) endmodule
module mytri(out,in,enable); output out; input in, enable; assign out = enable? In : "bz; endmodule
· 标识符最长可以达到1023个字符。
· 模块名、端口名和实例名都是标识符。
· Verilog语言是大小写敏感的
4、标识符
第9章verilog_HDL_程序设计PPT课件
reg[12:0] temp2; reg[11:0] temp3; reg[10:0] temp4;
reg[9:0] temp5; reg[8:0] temp6;
reg[7:0] temp7;
function[7:0] mult8x1;
//该函数实现8×1乘法
input[7:0] operand; input sel;
temp5<=((mult8x1(a,b[2]))<<2);temp4<=((mult8x1(a,b[3]))<<3);
temp3<=((mult8x1(a,b[4]))<<4);temp2<=((mult8x1(a,b[5]))<<5);
temp1<=((mult8x1(a,b[6]))<<6);temp0<=((mult8x1(a,b[7]))<<7);
module count7(reset,clk,cout);
input clk,reset; output wire cout;
reg[2:0] m,n; reg cout1,cout2;
assign cout=cout1|cout2;
//两个计数器的输出相或
always @(posedge clk)
endmodule
(4)查找表乘法器
查找表乘法器将乘积直接存放在存储器中,将操作数 (乘数和被乘数)作为地址访问存储器,得到的输出 数据就是乘法运算的结果。
查找表方式的乘法器速度只局限于所使用存储器的存 取速度。但由于查找表规模随操作数位数增加而迅速 增大,因此如用于实现位数宽的乘法操作,需要 FPGA器件具有较大的片内存储器模块。比如,要实 现8×8乘法,要求存储器的地址位宽为16位,字长 为16位,即存储器大小为1M比特。
VerilogHDL基础语法ppt课件
留意:
一切的关键字都必需小写。
定义为reg型的线网不一定会生成存放器。
虽然信号和内部变量定义声明只需出如今被调用的语句之前就行 ,可是代码风格普通要求在执行语句之前就定义好,这样可以提 高代码的可读性。
在声明后,便是功能执行语句,功能执行语句包括always语句、 initial语句、assign语句、task、function、模块例化等等。可以混 合描画,没有先后顺序,但是要留意的是initial语句只能用于仿真 程序中,不能生成实践的电路。
时序性:Verilog言语可以用来描画过去的时间和相应发生的事件 ;而软件言语那么做不到。
互连:互连是硬件系统中的一个根本概念,Verilog言语中的wire 变量可以很好地表达这样的功能;而软件言语并没有这样的描画 。
3.2 Verilog HDL的描画方式
Verilog HDL采用三种描画方式来进展设计: 数据流描画:采用assign语句,延续赋值,数据实时变化,赋值
//模块功能实现
数据流描画: assign
行为级描画:initial, always
构造化描画: module例化
其他用户原语
endmoduleFra bibliotek例 3–1 端口声明 //Port Declaration input [4:0] a; // 信号名为a的5输入信号 inout b; // 双向信号b output [6:0] c; // 信号名为c的7输出总线信号
存放器型表示数据的存取,在仿真器中会占据一个内存空间。存 放器型也有许多子类型,包括reg、integer、time、real、 realtime等等。用reg可以表示一位或者多位的存放器,也可以表 示存取器。
例 3–5 采用reg表示的存放器和存取器
一切的关键字都必需小写。
定义为reg型的线网不一定会生成存放器。
虽然信号和内部变量定义声明只需出如今被调用的语句之前就行 ,可是代码风格普通要求在执行语句之前就定义好,这样可以提 高代码的可读性。
在声明后,便是功能执行语句,功能执行语句包括always语句、 initial语句、assign语句、task、function、模块例化等等。可以混 合描画,没有先后顺序,但是要留意的是initial语句只能用于仿真 程序中,不能生成实践的电路。
时序性:Verilog言语可以用来描画过去的时间和相应发生的事件 ;而软件言语那么做不到。
互连:互连是硬件系统中的一个根本概念,Verilog言语中的wire 变量可以很好地表达这样的功能;而软件言语并没有这样的描画 。
3.2 Verilog HDL的描画方式
Verilog HDL采用三种描画方式来进展设计: 数据流描画:采用assign语句,延续赋值,数据实时变化,赋值
//模块功能实现
数据流描画: assign
行为级描画:initial, always
构造化描画: module例化
其他用户原语
endmoduleFra bibliotek例 3–1 端口声明 //Port Declaration input [4:0] a; // 信号名为a的5输入信号 inout b; // 双向信号b output [6:0] c; // 信号名为c的7输出总线信号
存放器型表示数据的存取,在仿真器中会占据一个内存空间。存 放器型也有许多子类型,包括reg、integer、time、real、 realtime等等。用reg可以表示一位或者多位的存放器,也可以表 示存取器。
例 3–5 采用reg表示的存放器和存取器
第四章 Verilog基本语法(一)PPT教学课件
16
2020/12/11
玉溪师范学院
参数
➢ 参数是一个常量。用parameter定义一个标识符来代表 一个常量。参数经常用于定义时延和变量的宽度。
格式: parameter param1 = const_expr1,
param2 = const_expr2,
…,
paramN = const_exprN;
assign #XOR_DELAY S=A^B;
assign #AND_DELAY C=A&B;
endmodule
19
TOP HA
2020/12/11
玉溪师范学院
参数值的模块引用
module TOP3(NewA,NewB,NewS,NewC); input NewA, NewB; output NewS,NewC; HA #(5,2) Ha1 (NewA, NewB, NewS, NewC);ut
selb
26
2020/12/11
玉溪师范学院
reg型
寄存器是数据存储单元的抽象 reg型数据常用来表示always块内的指定信号,常代表触
发器 reg型数据用initial或者always块中指定信号 reg型数据的缺省值是x。可以被赋正值或者负值。当它作
为一个表达式中的操作数时候,作为无符号数。 reg数据类型定义格式为
2.0 ; -0.1等
科学记数法,例如:
235.1e2 等于23510.0
234_12e2
等于2341200.0
实数小数通过四舍五入被隐式地转换为最相近的整数。例如:
42.446, 42.45 转换为整数42
92.5, 92.699 转换为整数93
-5.62 转换为整数-6
2020/12/11
玉溪师范学院
参数
➢ 参数是一个常量。用parameter定义一个标识符来代表 一个常量。参数经常用于定义时延和变量的宽度。
格式: parameter param1 = const_expr1,
param2 = const_expr2,
…,
paramN = const_exprN;
assign #XOR_DELAY S=A^B;
assign #AND_DELAY C=A&B;
endmodule
19
TOP HA
2020/12/11
玉溪师范学院
参数值的模块引用
module TOP3(NewA,NewB,NewS,NewC); input NewA, NewB; output NewS,NewC; HA #(5,2) Ha1 (NewA, NewB, NewS, NewC);ut
selb
26
2020/12/11
玉溪师范学院
reg型
寄存器是数据存储单元的抽象 reg型数据常用来表示always块内的指定信号,常代表触
发器 reg型数据用initial或者always块中指定信号 reg型数据的缺省值是x。可以被赋正值或者负值。当它作
为一个表达式中的操作数时候,作为无符号数。 reg数据类型定义格式为
2.0 ; -0.1等
科学记数法,例如:
235.1e2 等于23510.0
234_12e2
等于2341200.0
实数小数通过四舍五入被隐式地转换为最相近的整数。例如:
42.446, 42.45 转换为整数42
92.5, 92.699 转换为整数93
-5.62 转换为整数-6
第3章 Verilog HDL的基本语法
3.1 Verilog HDL程序的基本结构
3.1.1 VerilogHDL设计风格 1.VerilogHDL功能描述方式
VerilogHDL可综合硬件逻辑电路的功能描述通常有三种 方式:结构描述方式、数据流描述方式和行为描述方式。
(1)结构描述方式也称为门级描述方式,是通过调用 VerilogHDL语言预定义的基础元件(也称为原语,即 Primitive), 比如逻辑门元件,并定义各元件间的连接关系来构建电路。 这种方式构建的电路模型综合和执行效率高,但描述效率低, 难于设计复杂数字系统。
第3章 Verilog HDL的基本语法
2.端口说明 端口说明用于说明端口列表中每个端口的位宽和输入/ 输出方向。输入/输出方向可用input、output或inout进行说明。 input输入端口说明格式为input[msb1:lsb1]端口名11,端口名 12,…;、 input[msb2:lsb2]端口名21,端口名22,…; output输出端口说明格式为 output[msb1:lsb1]端口名11,端口名12,…; output[msb2:lsb2]端口名21,端口名22,…; inout双向端口说明格式为 inout[msb1:lsb1]端口名11,端口名12,…; inout[msb2:lsb2]端口名21,端口名22,…;
第3章 Verilog HDL的基本语法
5.并行执行 作为电路建模语言,在学习 VerilogHDL时必须注意的是, 模块中的实例化语句、连续赋值语句与过程块之间是并行执 行的。这是 VerilogHDL与一般高级语言最为不同的地方。 若 Verilog模块用到了多个实例引用语句,或者多个 assign语句,或者多个always块,或者将这些语句混合使用,那 么它们的书写顺序是任意的,因为它们对仿真程序和综合程 序的执行来说是并行的。也就是说,当它们被综合器综合成 实际电路时,会形成不同的电路块,当输入信号变化时,这些电 路块在满足延时的条件下同时动作,是并行执行的。 但是,需要明确的是,always块内部的高级抽象描述语句 是按顺序执行的。因为“if…else…”这样的语句若不按顺序 执行,其功能就没有任何意义。
3.1.1 VerilogHDL设计风格 1.VerilogHDL功能描述方式
VerilogHDL可综合硬件逻辑电路的功能描述通常有三种 方式:结构描述方式、数据流描述方式和行为描述方式。
(1)结构描述方式也称为门级描述方式,是通过调用 VerilogHDL语言预定义的基础元件(也称为原语,即 Primitive), 比如逻辑门元件,并定义各元件间的连接关系来构建电路。 这种方式构建的电路模型综合和执行效率高,但描述效率低, 难于设计复杂数字系统。
第3章 Verilog HDL的基本语法
2.端口说明 端口说明用于说明端口列表中每个端口的位宽和输入/ 输出方向。输入/输出方向可用input、output或inout进行说明。 input输入端口说明格式为input[msb1:lsb1]端口名11,端口名 12,…;、 input[msb2:lsb2]端口名21,端口名22,…; output输出端口说明格式为 output[msb1:lsb1]端口名11,端口名12,…; output[msb2:lsb2]端口名21,端口名22,…; inout双向端口说明格式为 inout[msb1:lsb1]端口名11,端口名12,…; inout[msb2:lsb2]端口名21,端口名22,…;
第3章 Verilog HDL的基本语法
5.并行执行 作为电路建模语言,在学习 VerilogHDL时必须注意的是, 模块中的实例化语句、连续赋值语句与过程块之间是并行执 行的。这是 VerilogHDL与一般高级语言最为不同的地方。 若 Verilog模块用到了多个实例引用语句,或者多个 assign语句,或者多个always块,或者将这些语句混合使用,那 么它们的书写顺序是任意的,因为它们对仿真程序和综合程 序的执行来说是并行的。也就是说,当它们被综合器综合成 实际电路时,会形成不同的电路块,当输入信号变化时,这些电 路块在满足延时的条件下同时动作,是并行执行的。 但是,需要明确的是,always块内部的高级抽象描述语句 是按顺序执行的。因为“if…else…”这样的语句若不按顺序 执行,其功能就没有任何意义。
VerilogHDL语言基础教材教学课件
IEEE标准
1990年代,Verilog HDL成为IEEE标准,并不断发展完善。
新版本
随着数字电路设计的发展,Verilog HDL不断推出新版本,支持更高级的硬件描述和验证功能。
Verilog HDL的历史和发展
01
02
03
04
ASIC设计
在ASIC设计中,Verilog HDL用于描述数字电路的结构和行为。
FPGA设计
在FPGA设计中,Verilog HDL用于描述逻辑块、路由和IO接口等。
仿真验证
Verilog HDL还用于数字电路的仿真验证,通过模拟电路的行为来检测设计中的错误和缺陷。
学术研究
在数字电路和系统设计领域,Verilog HDL广泛应用于学术研究、教学和实验中。
Verilog HDL的应用领域
测试平台编写是指编写用于测试Verilog设计的测试平台代码。测试平台代码可以使用Verilog语言编写,并使用仿真测试平台进行测试和验证。
仿真测试平台
测试平台编写
仿真和测试平台
Verilog HDL设计实例
04
组合逻辑设计
总结词:组合逻辑设计是Verilog HDL中最基础的设计之一,主要用于实现逻辑函数。
02
数字系统设计涉及逻辑门、触发器、寄存器、组合逻辑、时序逻辑等基本数字逻辑单元的设计和组合,Verilog HDL语言能够方便地描述这些结构和行为。
03
数字系统广泛应用于计算机、通信、控制等领域,通过Verilog HDL语言可以实现高效、可靠的数字系统设计。
01
Verilog HDL的未来发展
发展趋势和挑战
THANKS
ASIC设计涉及逻辑设计、电路设计、物理实现等环节,Verilog HDL语言能够描述硬件结构和行为,为ASIC设计提供强大的支持。
1990年代,Verilog HDL成为IEEE标准,并不断发展完善。
新版本
随着数字电路设计的发展,Verilog HDL不断推出新版本,支持更高级的硬件描述和验证功能。
Verilog HDL的历史和发展
01
02
03
04
ASIC设计
在ASIC设计中,Verilog HDL用于描述数字电路的结构和行为。
FPGA设计
在FPGA设计中,Verilog HDL用于描述逻辑块、路由和IO接口等。
仿真验证
Verilog HDL还用于数字电路的仿真验证,通过模拟电路的行为来检测设计中的错误和缺陷。
学术研究
在数字电路和系统设计领域,Verilog HDL广泛应用于学术研究、教学和实验中。
Verilog HDL的应用领域
测试平台编写是指编写用于测试Verilog设计的测试平台代码。测试平台代码可以使用Verilog语言编写,并使用仿真测试平台进行测试和验证。
仿真测试平台
测试平台编写
仿真和测试平台
Verilog HDL设计实例
04
组合逻辑设计
总结词:组合逻辑设计是Verilog HDL中最基础的设计之一,主要用于实现逻辑函数。
02
数字系统设计涉及逻辑门、触发器、寄存器、组合逻辑、时序逻辑等基本数字逻辑单元的设计和组合,Verilog HDL语言能够方便地描述这些结构和行为。
03
数字系统广泛应用于计算机、通信、控制等领域,通过Verilog HDL语言可以实现高效、可靠的数字系统设计。
01
Verilog HDL的未来发展
发展趋势和挑战
THANKS
ASIC设计涉及逻辑设计、电路设计、物理实现等环节,Verilog HDL语言能够描述硬件结构和行为,为ASIC设计提供强大的支持。
verilog_hdl教程_硬件描述语言_课件_PPT
门元件关键字
例化元件名
门元件例化
注1:元件例化即是调用Verilog HDL提供的元件; 注2:元件例化包括门元件例化和模块元件例化; 注3:每个实例元件的名字必须唯一!以避免与其 它调用元件的实例相混淆。 注4:例化元件名也可以省略!
模块元件例化
15
3.2 Verilog HDL基本结构
第3章
硬件描述语言Verilog HDL
3.1 3.2 3.3 3.4 3.5 3.6 3.7 引言 Verilog HDL基本结构 数据类型及常量、变量 运算符及表达式 语句 赋值语句和块语句 条件语句
3.8 循环语句 3.9 结构说明语句 3.10 编译预处理语句 3.11 语句的顺序执行与并行执行 3.12 不同抽象级别的Verilog HDL模型 3.13 设计技巧
4
3.1 引言 三、不同层次的Verilog HDL抽象
Verilog HDL模型可以是实际电路的不同级别的抽象。 抽象级别可分为五级:
系统级(system level): 用高级语言结构(如case语句)
实现的设计模块外部性能的模型;
算法级(algorithmic level): 用高级语言结构实现的设
程序书写格式自由,一行可以写几个语句,一个语句也可以分多 行写。
除了endmodule语句、begin_end语句和fork_join语句外,每个语 句和数据定义的最后必须有分号。 可用/*.....*/和//...对程序的任何部分作注释。加上必要的注释,以 增强程序的可读性和可维护性。
13
例化元件名
子模块
返回逻辑 功能定义
module mytri(out,in,enable); output out; input in, enable; assign out = enable? in:‘bz; / * 如果enable为1,则out = in,否则为高阻态 * / endmodule
例化元件名
门元件例化
注1:元件例化即是调用Verilog HDL提供的元件; 注2:元件例化包括门元件例化和模块元件例化; 注3:每个实例元件的名字必须唯一!以避免与其 它调用元件的实例相混淆。 注4:例化元件名也可以省略!
模块元件例化
15
3.2 Verilog HDL基本结构
第3章
硬件描述语言Verilog HDL
3.1 3.2 3.3 3.4 3.5 3.6 3.7 引言 Verilog HDL基本结构 数据类型及常量、变量 运算符及表达式 语句 赋值语句和块语句 条件语句
3.8 循环语句 3.9 结构说明语句 3.10 编译预处理语句 3.11 语句的顺序执行与并行执行 3.12 不同抽象级别的Verilog HDL模型 3.13 设计技巧
4
3.1 引言 三、不同层次的Verilog HDL抽象
Verilog HDL模型可以是实际电路的不同级别的抽象。 抽象级别可分为五级:
系统级(system level): 用高级语言结构(如case语句)
实现的设计模块外部性能的模型;
算法级(algorithmic level): 用高级语言结构实现的设
程序书写格式自由,一行可以写几个语句,一个语句也可以分多 行写。
除了endmodule语句、begin_end语句和fork_join语句外,每个语 句和数据定义的最后必须有分号。 可用/*.....*/和//...对程序的任何部分作注释。加上必要的注释,以 增强程序的可读性和可维护性。
13
例化元件名
子模块
返回逻辑 功能定义
module mytri(out,in,enable); output out; input in, enable; assign out = enable? in:‘bz; / * 如果enable为1,则out = in,否则为高阻态 * / endmodule
Verilog HDL 基本语法.ppt
关键词
❖ Verilog HDL 定义了一系列保留字,叫做关键 词
❖ 注意只有小写的关键词才是保留字
书写规范建议
❖ 1、用有意义的有效的名字如 Sum 、CPU_addr等。 ❖ 2、用下划线区分词。 ❖ 3、采用一些前缀或后缀,如
时钟采用clk 前缀:clk_50,clk_CPU; 低电平采用_n 后缀:enable_n;
按位逻辑运算符
❖ A = 'b0110; ❖ B = 'b0100; ❖ 那么: ❖ A | B 结果为0 1 1 0 ❖ A & B 结果为0 1 0 0
❖ 如果操作数长度不相等, 长度较小的操作数在最左侧添0 补 位。例如, 'b0110 ^ 'b10000 与如下式的操作相同: 'b00110 ^ 'b10000 结果为' b 1 0 11 0 。
//4bit //6bit
关系运算符
❖ >(大于) ❖ <(小于) ❖ >=(不小于) ❖ <=(不大于) ❖ = = (逻辑相等) ❖ != (逻辑不等)
❖ 关系操作符的结果为真(1 )或假(0 )。如果操 作数中有一位为X 或Z ,那么结果为X 。
关系运算符举例
❖ 23 > 45 结果为假(0 )。 ❖ 52 < 8'hxFF 结果为x 。 ❖ 如果操作数长度不同,长度较短的操作数在最重要的位方向
是可选的;如果没有定义范围,缺省值为1 位寄存器。例如:
❖ reg [3:0] Sat; // Sat 为4 位寄存器。 ❖ reg Cnt; //1 位寄存器。 ❖ reg [31:0] Kisp, Pisp, Lisp ; ❖ 对数组类型,请按降序方式,如[7:0] ;
VerilogHDL语言基础幻灯片PPT
Verilog HDL硬件描述语言功能
4.提供显式语言结构指定设计中的端口到端口的时 延及路径时延和设计的时序检查。
5.可采用三种不同方式或混合方式对设计建模。这 些方式包括:
➢ 行为描述方式—使用过程化结构建模; ➢ 数据流方式—使用连续赋值语句方式建模; ➢ 结构化方式—使用门和模块实例语句描述建模。
15.Verilog HDL能够监控模拟验证的执行,即模拟验 证执行过程中设计的值能够被监控和显示。这些值也能够 用于与期望值比较,在不匹配的情况下,打印报告消息。
16.在行为级描述中,Verilog HDL不仅能够在RTL级 上进行设计描述,而且能够在体系结构级描述及其算法级 行为上进行设计描述。
module 模块名(端口列表); 端口定义 input输入端口 output输出端口 inout输入/输出端口
数据类型说明 wire reg parameter、、、
逻辑功能定义 Assign连续赋值语句 Initial、Always过程语句 Function、Task调用 元件、模块调用 …...
Verilog HDL语言基础--本章概述
✓ Verilog的门级描述语句; ✓ Verilog编译指示语句; ✓ Verilog系统任务和函数; ✓ Verilog用户定义任务和函数和Verilog语言模块描 述方式。
本章内容对于初步掌握Verilog语言规则非常重 要。
--Verilog语言概述
17.能够使用门和模块实例化语句在结构级进行结构 描述。
Verilog程序结构
一个复杂电路系统的完整Verilog HDL模型是由若 干个Verilog HDL模块构成的,每一个模块又可以由若干 个子模块构成。Verilog使用大约100个预定义的关键词定 义该语言的结构。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
② 每个模块首先要进行端口定义,并说明输入 (input)、输出(output)或双向(inouts),然 后对模块的功能进行逻辑描述。
ko
13
③ Verilog HDL程序的书写格式自由,一行可以一 条或多条语句,一条语句也可以分为多行写。
④ 除了endmodule语句外,每条语句后必须要有 分号“;”。
ko
10
always @(posedge clk) //时钟上升沿,每次上升沿, 执行always语句
begin
if (clr)
out <=8'b0;
else if (load) out <= data;
else
out <= out+8'b1;
end
assign cout = &out & cin; //”&out”-与缩减运算式
ko
5
(1)用assign语句建模
用 assign语 句 建 模 的 方 法 很 简 单 , 只 需 要 在 “assign”后面再加一个表达式即可。
assign语句一般适合对组合逻辑进行赋值,称为连续 赋值方式。
【例2.1】1位全加器的设计。
ina
inb
adder1
cin
sum cout
ko
6
Verilog HDL源程序如下 module adder1(sum,cout,ina,inb,cin);
//模块端口定义 input ina,inb,cin; output sum,cout;//I/O声明 assign {cout,sum} = ina+inb+cin;
//功能描述语句 endmodule //endmodule后不加分号
默认的数据类型为wire(连线)型,{ }为拼接
运算符,是将cout、sum这样两
2.1 Verilog HDL程序模块结构
模块端口定义
设
模块内容
计
I/O说明
模 块
信号类型说明
功能描述
ko
1
2.1.1 模块端口定义
模块端口定义用来声明设计电路模块的输入输出 端口。端口定义格式如下
module 模块名(端口1,端口2,端口3,…);
在端口定义的圆括弧中,是设计电路模块与外界 联系的全部输入输出端口信号或引脚,它是设计实体 对外的一个通信界面,是外界可以看到的部分(不包 含电源和接地端),多个端口名之间用“,”分隔。
为一个2位操作数。
ko
7
(2)用元件例化(instantiate)方式建模
元件例化方式建模是利用Verilog HDL提供的元 件库实现的。
例如,用与门例化元件定义一个3输入端与门可以 写为
and myand3(y,a,b,c);
ko
8
(3)用always块语句建模
always块语句可以产生各种逻辑,常用于时序逻辑 的功能描述。一个程序设计模块中,可以包含一个 或多个always语句。程序运行中,在某种条件满足 时,就重复执行一遍always结构中的语句。
【例2.2】8位二进制加法计数器的设计。
ko
9
module cnt8(out,cout,data,load,cin,clk,clr); input [7:0] data; input load, cin, clk, clr; output [7:0] out; output cout; reg [7:0] out; //寄存器型参量,具有寄存功能
例如,module adder(sum,cont,ina,inb,cin);
ko
2
2.1.2 模块内容
模块内容包括I/O说明、信号类型声明和功能描述。
1. 模块的I/O说明
模块的I/O说明用来声明模块端口定义中各端口数据流动方向 包括输入(input)、输出(output)和双向(inout)。I/O说 明格式如下
input
端口1,端口2,端口3,…;
output
端口1,端口2,端口3,…;
例如
input
ina,inb,cin;
output
sum,cont;
ko
3
2. 信号类型声明
信号类型声明用来说明设计电路的功能描述中,所用的 信号的数据类型以及函数声明。
信号的数据类型主要有连线(wire)、寄存器(reg)、 整型(integer)、实型(real)和时间(time)等类型。
注释分为行注释和块注释两种方式。行注释用 符号//(两个斜杠)开始,注释到本行结束。块注 释用/*开始,用*/结束。块注释可以跨越多行,但 它们不能嵌套。
ko
15
2.2.2 常数
Verilog HDL的常数包括数字、未知X和高阻Z三 种。数字可以用二进制、十进制、八进制和十六进制 等4种不同数制来表示,完整的数字格式为
<位宽>’<进制符号><数字>
其中,位宽表示数字对应的二进制数的位数宽度; 进制符号包括b或B(表示二进制数),d或D(表示 十进制数),h或H(表示十六进制数),o或O(表 示八进制数)。
ko
16
例如
8’b10110001 //表示位宽为8位的二进制数
8’hf5 //表示位宽为8位的十六进制数
ko
4
3. 功能描述
功能描述是Verilog HDL程序设计中最主要的部分,用来 描述设计模块的内部结构和模块端口间的逻辑关系,在电路 上相当于器件的内部电路结构。
功能描述可以用assign语句、元件例化(instantiate)、 always块语句、initial块语句等方法来实现,通常把确定这些 设计模块描述的方法称为建模。
⑤ 可以用/*……*/或//……对Verilog HDL程序的任 何部分作注释。
一个完整的源程序都应当加上需要的注释, 以加强程序的可读性。
ko
14
2.2 Verilog HDL的词法
2.2.1 空白符和注释
Verilog HDL的空白符包括空格、tab符号、换行 和换页。
空白符如果不是出现在字符串中,编译源程序 时将被忽略。
endmodule
ko
11
(4)用initial块语句建模
initial块语句与always语句类似,不过在程序中它 只执行1次就结束了。
ko
12
Verilog HDL程序设计模块的基本结构小结:
① Verilog HDL程序是由模块构成的。每个模块的 内容都是嵌在module和endmodule两语句之间,每 个模块实现特定的功能,模块是可以进行层次嵌套 的。
ko
13
③ Verilog HDL程序的书写格式自由,一行可以一 条或多条语句,一条语句也可以分为多行写。
④ 除了endmodule语句外,每条语句后必须要有 分号“;”。
ko
10
always @(posedge clk) //时钟上升沿,每次上升沿, 执行always语句
begin
if (clr)
out <=8'b0;
else if (load) out <= data;
else
out <= out+8'b1;
end
assign cout = &out & cin; //”&out”-与缩减运算式
ko
5
(1)用assign语句建模
用 assign语 句 建 模 的 方 法 很 简 单 , 只 需 要 在 “assign”后面再加一个表达式即可。
assign语句一般适合对组合逻辑进行赋值,称为连续 赋值方式。
【例2.1】1位全加器的设计。
ina
inb
adder1
cin
sum cout
ko
6
Verilog HDL源程序如下 module adder1(sum,cout,ina,inb,cin);
//模块端口定义 input ina,inb,cin; output sum,cout;//I/O声明 assign {cout,sum} = ina+inb+cin;
//功能描述语句 endmodule //endmodule后不加分号
默认的数据类型为wire(连线)型,{ }为拼接
运算符,是将cout、sum这样两
2.1 Verilog HDL程序模块结构
模块端口定义
设
模块内容
计
I/O说明
模 块
信号类型说明
功能描述
ko
1
2.1.1 模块端口定义
模块端口定义用来声明设计电路模块的输入输出 端口。端口定义格式如下
module 模块名(端口1,端口2,端口3,…);
在端口定义的圆括弧中,是设计电路模块与外界 联系的全部输入输出端口信号或引脚,它是设计实体 对外的一个通信界面,是外界可以看到的部分(不包 含电源和接地端),多个端口名之间用“,”分隔。
为一个2位操作数。
ko
7
(2)用元件例化(instantiate)方式建模
元件例化方式建模是利用Verilog HDL提供的元 件库实现的。
例如,用与门例化元件定义一个3输入端与门可以 写为
and myand3(y,a,b,c);
ko
8
(3)用always块语句建模
always块语句可以产生各种逻辑,常用于时序逻辑 的功能描述。一个程序设计模块中,可以包含一个 或多个always语句。程序运行中,在某种条件满足 时,就重复执行一遍always结构中的语句。
【例2.2】8位二进制加法计数器的设计。
ko
9
module cnt8(out,cout,data,load,cin,clk,clr); input [7:0] data; input load, cin, clk, clr; output [7:0] out; output cout; reg [7:0] out; //寄存器型参量,具有寄存功能
例如,module adder(sum,cont,ina,inb,cin);
ko
2
2.1.2 模块内容
模块内容包括I/O说明、信号类型声明和功能描述。
1. 模块的I/O说明
模块的I/O说明用来声明模块端口定义中各端口数据流动方向 包括输入(input)、输出(output)和双向(inout)。I/O说 明格式如下
input
端口1,端口2,端口3,…;
output
端口1,端口2,端口3,…;
例如
input
ina,inb,cin;
output
sum,cont;
ko
3
2. 信号类型声明
信号类型声明用来说明设计电路的功能描述中,所用的 信号的数据类型以及函数声明。
信号的数据类型主要有连线(wire)、寄存器(reg)、 整型(integer)、实型(real)和时间(time)等类型。
注释分为行注释和块注释两种方式。行注释用 符号//(两个斜杠)开始,注释到本行结束。块注 释用/*开始,用*/结束。块注释可以跨越多行,但 它们不能嵌套。
ko
15
2.2.2 常数
Verilog HDL的常数包括数字、未知X和高阻Z三 种。数字可以用二进制、十进制、八进制和十六进制 等4种不同数制来表示,完整的数字格式为
<位宽>’<进制符号><数字>
其中,位宽表示数字对应的二进制数的位数宽度; 进制符号包括b或B(表示二进制数),d或D(表示 十进制数),h或H(表示十六进制数),o或O(表 示八进制数)。
ko
16
例如
8’b10110001 //表示位宽为8位的二进制数
8’hf5 //表示位宽为8位的十六进制数
ko
4
3. 功能描述
功能描述是Verilog HDL程序设计中最主要的部分,用来 描述设计模块的内部结构和模块端口间的逻辑关系,在电路 上相当于器件的内部电路结构。
功能描述可以用assign语句、元件例化(instantiate)、 always块语句、initial块语句等方法来实现,通常把确定这些 设计模块描述的方法称为建模。
⑤ 可以用/*……*/或//……对Verilog HDL程序的任 何部分作注释。
一个完整的源程序都应当加上需要的注释, 以加强程序的可读性。
ko
14
2.2 Verilog HDL的词法
2.2.1 空白符和注释
Verilog HDL的空白符包括空格、tab符号、换行 和换页。
空白符如果不是出现在字符串中,编译源程序 时将被忽略。
endmodule
ko
11
(4)用initial块语句建模
initial块语句与always语句类似,不过在程序中它 只执行1次就结束了。
ko
12
Verilog HDL程序设计模块的基本结构小结:
① Verilog HDL程序是由模块构成的。每个模块的 内容都是嵌在module和endmodule两语句之间,每 个模块实现特定的功能,模块是可以进行层次嵌套 的。