2 Verilog语言快速入门PPT
合集下载
Verilog语法基础PPT教案学习
#10 num <= rega << 5 ; // num =
01_1000_0000
#10 regb <= rega << 5 ; // regb =
1000_0000
#20 num <= rega >> 3; // num =
00_0000_0001
#20 regb <= rega >> 3 ; // regb =
x
to b");
x
else $display(" a is not
equal to b");
a = 2'b1x;
z
b = 2'b1x;
0
if (a === b)
0
$display(" a is
0
identical to b");
1
else
$display(" a is not
Case等只i能d用e于nt行i为ca描l述t,o不b能"用);于RTL描述。
regc; reg val;
initial begin rega = 4'b0011; regb = 4'b1010; regc = 4'b1x10;
end initial fork
#10 val = rega == regb ; // val = 0
#20 val = rega != regc; // val = 1
第9页/共72页
注意逻辑等与 case等的差别 2‘b1x==2’b0x
值为0,因为不相等 2‘b1x==2’b1x
值为x,因为可能不 相等,也可能相等
《Verilog设计入门》PPT课件
精选PPT
18
3.1 组合电路的Verilog描述
3.1.2 4选1多路选择器及其case语句表述方式 6.赋值操作符 “<=”,只能用于顺序语句,不能用于assign引 导的并行语句
两种过程赋值操作: (1)阻塞式赋值“=”:语句执行结束,右侧表达式的值立刻赋给左侧 目标变量。
对于always引导的块语句中含有多条阻塞式赋值语句时,当执行某 一条语句时,其它语句不允许执行,被阻塞了,具有顺序执行的特点。
精选PPT
23
3.1 组合电路的Verilog描述
3.1.4 4选1多路选择器及其if语句描述方式
精选PPT
24
3.1 组合电路的Verilog描述
3.1.4 4选1多路选择器及其if语句描述方式 1.if_ else条件语句 if(表达式) begin 语句1;语句2;…..语句n; end else begin 语句n+1;语句n+2;…..语句n+n; end
input a,b;
output so,co;
assign so = a ^ b;
assign co = a & b;
endmodule
精选PPT
28
3.1 组合电路的Verilog描述
3.1.5 加法器及其Verilog描述
2.基于always @引导的过程语句和逻辑操作符的描述
module h_adder2(a,b,so,co);
endmodule
精选PPT
34
3.1 组合电路的Verilog描述
3.1.5 加法器及其Verilog描述 5. 全加器描述----用半加器、或门模块及例化语句描述
精选PPT
verilog初学者 学习ppt
Typical IC Design Flow
Institute of Artificial Intelligence and Robotics
Introduction to Verilog
Verilog workshop
Introduction to HDL
Institute of Artificial Intelligence and Robotics
Verilog workshop
Verilog Basic
Institute of Artificial Intelligence and Robotics
The real design result
data_out
data_in Reg0 Reg1 Reg2 Reg3
clk
rst_
Verilog workshop
Institute of Artificial Intelligence and Robotics
• module declaration : define the module name • in/out port declaration : define the in/out port name • input declaration : define the input port name and its bit-width • output declaration : define the output port name and its bit-width • register declaration : define the register name and its bit-width • wire declaration : define the wire name and its bit-width • combinational logic : describe the combinational logic in your design • sequential logic : describe the sequential logic in your design
Institute of Artificial Intelligence and Robotics
Introduction to Verilog
Verilog workshop
Introduction to HDL
Institute of Artificial Intelligence and Robotics
Verilog workshop
Verilog Basic
Institute of Artificial Intelligence and Robotics
The real design result
data_out
data_in Reg0 Reg1 Reg2 Reg3
clk
rst_
Verilog workshop
Institute of Artificial Intelligence and Robotics
• module declaration : define the module name • in/out port declaration : define the in/out port name • input declaration : define the input port name and its bit-width • output declaration : define the output port name and its bit-width • register declaration : define the register name and its bit-width • wire declaration : define the wire name and its bit-width • combinational logic : describe the combinational logic in your design • sequential logic : describe the sequential logic in your design
2Verilog语言快速入门专题培训课件
只有1、0、x三种情况,非0、x即1; 表达式最好加括号。
(3) 关系运算符
> 大于 < 小于 >= 大于等于 <= 小于等于
例: Y=(3>2) Y=(3<2); Y=(3>=2); Y=(3<=2); Y=(3<=1’bx);
结果为1 结果为0 结果为1 结果为0
结果为x
说明 关系运算的结果可能是1(逻辑真)、0(逻辑假)、x(不确定);
2Verilog语言快速入门
Verilog模块结构
module 模块名 ([端口列表]); [端口信号声明;] [参数声明;]
内部信号声明
assign语句
底层模块或门原语 调用(包括生成块)
Initial或always 语句块
任务和函数定义 specify 块(路径延迟)
模块说明部分
说明: 浅色部分用得较少; 常用语句只有三种:
赋值目标必须是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) 算术型
参数声明要说明参数的名称和初值
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型的。
(3) 关系运算符
> 大于 < 小于 >= 大于等于 <= 小于等于
例: Y=(3>2) Y=(3<2); Y=(3>=2); Y=(3<=2); Y=(3<=1’bx);
结果为1 结果为0 结果为1 结果为0
结果为x
说明 关系运算的结果可能是1(逻辑真)、0(逻辑假)、x(不确定);
2Verilog语言快速入门
Verilog模块结构
module 模块名 ([端口列表]); [端口信号声明;] [参数声明;]
内部信号声明
assign语句
底层模块或门原语 调用(包括生成块)
Initial或always 语句块
任务和函数定义 specify 块(路径延迟)
模块说明部分
说明: 浅色部分用得较少; 常用语句只有三种:
赋值目标必须是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) 算术型
参数声明要说明参数的名称和初值
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型的。
verilog_hdl教程_硬件描述语言_课件_PPT
▪ 既可以用电路的功能描述,也可以用元器件及其之间的 连接来建立Verilog HDL模型。
3
3.1 引言
二、Verilog HDL的发展历史
▪ 1983年,由GDA(GateWay Design Automation)公 司的Phil Moorby首创;
▪ 1989年,Cadence公司收购了GDA公司; ▪ 1990年, Cadence公司公开发表Verilog HDL; ▪ 1995 年 , IEEE 制 定 并 公 开 发 表 Verilog HDL1364-
3.13 设计技巧
1
3.1 引言
内容概要
一、什么是Verilog HDL 二、Verilog HDL的发展历史 三、不同层次的Verilog HDL抽象 四、Verilog HDL的特点
2
3.1 引言
一、什么是Verilog HDL
▪ Verilog HDL是一种用于数字逻辑电路设计的硬件描述 语言(Hradware Description Language ),可以用来进 行数字电路的仿真验证、时序分析、逻辑综合。 ➢ 用Verilog HDL描述的电路设计就是该电路的 Verilog HDL模型。 ➢ Verilog HDL 既是一种行为描述语言也是一种结构描述 语言。
begin //过程赋值语句 //if语句 // case语句 // while,repeat,for循环语句 // task,function调用
end
17
3.2 Verilog HDL基本结构
// (3)元件例化 < module_name > < instance_name > (<port_list>);
always @(posedge clk) // 每当时钟上升沿到来时执行一遍块内语句
3
3.1 引言
二、Verilog HDL的发展历史
▪ 1983年,由GDA(GateWay Design Automation)公 司的Phil Moorby首创;
▪ 1989年,Cadence公司收购了GDA公司; ▪ 1990年, Cadence公司公开发表Verilog HDL; ▪ 1995 年 , IEEE 制 定 并 公 开 发 表 Verilog HDL1364-
3.13 设计技巧
1
3.1 引言
内容概要
一、什么是Verilog HDL 二、Verilog HDL的发展历史 三、不同层次的Verilog HDL抽象 四、Verilog HDL的特点
2
3.1 引言
一、什么是Verilog HDL
▪ Verilog HDL是一种用于数字逻辑电路设计的硬件描述 语言(Hradware Description Language ),可以用来进 行数字电路的仿真验证、时序分析、逻辑综合。 ➢ 用Verilog HDL描述的电路设计就是该电路的 Verilog HDL模型。 ➢ Verilog HDL 既是一种行为描述语言也是一种结构描述 语言。
begin //过程赋值语句 //if语句 // case语句 // while,repeat,for循环语句 // task,function调用
end
17
3.2 Verilog HDL基本结构
// (3)元件例化 < module_name > < instance_name > (<port_list>);
always @(posedge clk) // 每当时钟上升沿到来时执行一遍块内语句
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表示的存放器和存取器
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设计提供强大的支持。
2 Verilog语言快速入门
og模块结构
module 模块名 ([端口列表]); [端口信号声明;] [参数声明;]
内部信号 声明 底层模块或 门原语调用 assign 语句 always 语句块
模块说明部分
逻辑功能描述
endmodule
模块结束
7
二、Verilog模块结构
例1:二选一数据选择器的描述
3.Verilog的表达式和运算符 Verilog有9类运算符,可用来实现各种逻辑功能 (1) 算术型 例: 求余,结果为1 Y=5%2; * 乘法 求幂,结果为8 Y=2**3; / 除法 + 加法 说明 减法 算术型运算符用来进行算术运算; % 求余 加减乘除、求幂的操作数可以是实数也可以是整数, 求余运算的操作数只能是整数; ** 求幂
assign语句 always语句 底层模块调用语句
底层模块或门原语 调用(包括生成块)
Initial或always 语句块
任务和函数定义
specify 块(路径延迟)
三种语句顺序无关 除开始的module模 块名和结束的 endmodule必须写 外,其他都是可选的。
endmodule
求余运算结果取第一个操作数的符号。
18
四、用 assign语句描述电路
(2) 逻辑型
! 逻辑非 && 逻辑与 || 逻辑或
例: Y=! (3>2) Y=(2<3) && (5>6); Y=(2<3) || (5>6); Y=(2<3) && 1’bx; Y=(2+3) || (3-3);
逻辑非,结果为0 逻辑与,结果为0 逻辑或,结果为1 逻辑与,结果为x 逻辑或,结果为1
module 模块名 ([端口列表]); [端口信号声明;] [参数声明;]
内部信号 声明 底层模块或 门原语调用 assign 语句 always 语句块
模块说明部分
逻辑功能描述
endmodule
模块结束
7
二、Verilog模块结构
例1:二选一数据选择器的描述
3.Verilog的表达式和运算符 Verilog有9类运算符,可用来实现各种逻辑功能 (1) 算术型 例: 求余,结果为1 Y=5%2; * 乘法 求幂,结果为8 Y=2**3; / 除法 + 加法 说明 减法 算术型运算符用来进行算术运算; % 求余 加减乘除、求幂的操作数可以是实数也可以是整数, 求余运算的操作数只能是整数; ** 求幂
assign语句 always语句 底层模块调用语句
底层模块或门原语 调用(包括生成块)
Initial或always 语句块
任务和函数定义
specify 块(路径延迟)
三种语句顺序无关 除开始的module模 块名和结束的 endmodule必须写 外,其他都是可选的。
endmodule
求余运算结果取第一个操作数的符号。
18
四、用 assign语句描述电路
(2) 逻辑型
! 逻辑非 && 逻辑与 || 逻辑或
例: Y=! (3>2) Y=(2<3) && (5>6); Y=(2<3) || (5>6); Y=(2<3) && 1’bx; Y=(2+3) || (3-3);
逻辑非,结果为0 逻辑与,结果为0 逻辑或,结果为1 逻辑与,结果为x 逻辑或,结果为1
Verilog课件2
6.if-else语句例子
if对应,因为它们相距最近
21
从if语句推导出锁存器
if语句使用不当会生成不想要的锁存器。
`timescale
1ns/1ns din module if_atch (din,en,qout); en input din; input en; output qout; reg qout; always @(en,din) // 需核实 begin if(en) qout<=din; end endmodule
din
0
0 qout 1
qout
可直观的看出该电路在 en为0时输出0,否则qout 与输入信号din相同。电路 综合后得到的电路是一个 二选一选择器电路。
23
if/else优先级编码
• if-else语句实际上具有隐含的优先级。
A B C D E Sel0 Sel1 Sel2 Sel3 F
优先级别依次为: E > D > C > B > A
10
信号跳变沿事件控制
边沿触发是指指定信号的边沿跳变时发生的行为, 分为上升沿和下降沿控制 在Verilog HDL中posedge和negedge是表示正沿 和负沿的关键字
always @(posedge clock)//由一个沿触发的always块 begin …… end
always @(posedge clock or negedge reset) //由两个沿触发的always块 begin …… end
13
always语句小结
initial和always均为过程赋值语句,它们只能 用于对寄存器类型的变量进行赋值。 always @ (灵敏度表) 赋值描述 •••••• 其中,灵敏度表内元素可以为: •posedge 信号(多数为时钟信号及复位) •negedge 信号(多数为时钟信号及复位) •用reg、wire定义的变量及信号 各信号之间用“or”或“,”隔开。
最新verilog 简单语法 夏宇闻 语法入门PPT课件
量值发生变化,便在仿真单位时间结束时显示其变 量列表中所有变量的值。
例: initial begin $monitor ($time, , “out=%b a=%b sel=%b”, out,a,b,sel); end
模块的测试
如何把被测模块的输出变化记录到数据库文件中?
(文件格式为VCD,大多数的波形显示工具都能读取该格式)
• Verilog HDL程序的书写格式自由,一行可以写几个语句,一个语句也 可以分写多行。
• 除了endmodule语句外,每个语句和数据定义的最后必须有分号
• 可以用/*.....*/和//...对Verilog HDL程序的任何部分作注释。一 个好的,有使用价值的源程序都应当加上必要的注释,以增强程序的可 读性和可维护性。
- Verilog HDL 既是一种行为描述的语言也 是一种结构描述的语言。
这也就是说,既可以用电路的功能描述也可以用元器件和它们之间的连接来建立所设计电路的 Verilog HDL模型。Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别和它们 对应的模型类型共有以下五种:
Verilog 的应用
简单的 Verilog HDL 模块
通过上面的例子可以看到: • Verilog HDL程序是由模块构成的。模块是可以进行层次嵌套的。正
因为如此,才可以将大型的数字电路设计分割成不同的小模块来实现特 定的功能,最后通过顶层模块调用子模块来实现整体功能。
• 每个模块要进行端口定义,并说明输入输出口,然后对模块的功能进行 行为逻辑描述。
行为。 • 提供了条件、if-else、case、循环程序结构。 • 提供了可带参数且非零延续时间的任务(task)程序结
构。 • 提供了可定义新的操作符的函数结构(function)。
例: initial begin $monitor ($time, , “out=%b a=%b sel=%b”, out,a,b,sel); end
模块的测试
如何把被测模块的输出变化记录到数据库文件中?
(文件格式为VCD,大多数的波形显示工具都能读取该格式)
• Verilog HDL程序的书写格式自由,一行可以写几个语句,一个语句也 可以分写多行。
• 除了endmodule语句外,每个语句和数据定义的最后必须有分号
• 可以用/*.....*/和//...对Verilog HDL程序的任何部分作注释。一 个好的,有使用价值的源程序都应当加上必要的注释,以增强程序的可 读性和可维护性。
- Verilog HDL 既是一种行为描述的语言也 是一种结构描述的语言。
这也就是说,既可以用电路的功能描述也可以用元器件和它们之间的连接来建立所设计电路的 Verilog HDL模型。Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别和它们 对应的模型类型共有以下五种:
Verilog 的应用
简单的 Verilog HDL 模块
通过上面的例子可以看到: • Verilog HDL程序是由模块构成的。模块是可以进行层次嵌套的。正
因为如此,才可以将大型的数字电路设计分割成不同的小模块来实现特 定的功能,最后通过顶层模块调用子模块来实现整体功能。
• 每个模块要进行端口定义,并说明输入输出口,然后对模块的功能进行 行为逻辑描述。
行为。 • 提供了条件、if-else、case、循环程序结构。 • 提供了可带参数且非零延续时间的任务(task)程序结
构。 • 提供了可定义新的操作符的函数结构(function)。
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
等于 不等于 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
说明
S位宽为4位,对应信号为S[3]、S[2]、S[1]、S[0] 根据模块说明部分,我们可以得出电路符号
A B CIN
full_adder
S COUT
7
2. assign语句
assign语句称作连续赋值语句 基本格式: assign 赋值目标 = 表达式
例: assign y=a;
assign y=a&b;
结果为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补齐; 结果与操作数位宽相同;
赋值目标必须是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) 算术型
逻辑非,结果为0 逻辑与,结果为0 逻辑或,结果为1 逻辑与,结果为x 逻辑或,结果为1
说明 逻辑型运算的结果可能是1(逻辑真)、0(逻辑假)、x(不确定); 逻辑运算的操作数可以是任意表达式,表达式的结果被当做逻辑值处理,
只有1、0、x三种情况,非0、x即1; 表达式最好加括号。
12
(3) 关系运算符
等于和不等于运算的结果可能是1(逻辑真)、0(逻辑假)、x(不确
定);对于x或z,认为是不确定的值,比较结果为x;
case等和case不等的结果只能是1或0,对于x、z认为是确定的值,参
加比较;
14
(5) 按位运算符
~ 按位非 & 按位与 | 按位或 ^ 按位异或 ~^ 按位同或 ^~
例:
Y=~ 4’b1001 ;
Verilog设计快速入门
1
Verilog模块结构
module 模块名 ([端口列表]); [端口信号声明;] [参数声明;]
内部信号声明
assign语句
底层模块或门原语 调用(包括生成块)
Initial或always 语句块
任务和函数定义 specify 块(路径延迟)
模块说明部分
说明: 浅色部分用得较少; 常用语句只有三种:
* 乘法 / 除法
例: Y=5%2; Y=2**3;
求余,结果为1 求幂,结果为8
+ 加法 说明
- 减法 % 求余 ** 求幂
加减乘除、求幂的操作数可以是实数也可以是整数, 求余运算的操作数只能是整数。
求余运算结果取第一个操作数的符号;
11
(2) 逻辑型
! 逻辑非 && 逻辑与 || 逻辑或
例: Y=! (3>2) Y=(2<3) && (5>6); Y=(2<3) || (5>6); Y=(2<3) && 1’bx; Y=(2+3) || (3-3);
parameter 数据类型 参数名 = 初值
模块名是指电路的名字,由用户指定,最好与文件名一致(特别是在 Quartus II软件中调试时);
端口列表是指电路的输入/输出信号名称列表,信号名由用户指定,各名 称间用逗号隔开;
端口信号声明是要说明端口信号的输入输出属性、信号的数据类型,以及 信号的位宽;输入输出属性有input,output,inout三种,信号的数 据类型常用的有wire和reg两种;信号的位宽用[n1:n2]表示;同一类 信号之间用逗号隔开;
> 大于 < 小于 >= 大于等于 <= 小于等于
例: Y=(3>2)
结果为1
Y=(3<2);
结果为0
Y=(3>=2);
结果为1
Y=(3<=2);
结果为0
Y=(3<=1’bx);
结果为x
说明 关系运算的结果可能是1(逻辑真)、0(逻辑假)、x(不确定);
13
(4) 等价运算符
== != === !==
3
Verilo描述
module 模块名 ([端口列表]); [端口信号声明;] [参数声明;]
内部信号 声明
assign 语句
MUX21a
a
b
y
s
底层模块或 门原语调用
endmodule
always 语句块
4
Verilog程序结构
例2:边沿D触发器的Verilog描述
module 模块名 ([端口列表]); [端口信号声明;] [参数声明;]
内部信号 声明
assign 语句
底层模块或 门原语调用
always 语句块
endmodule
5
Verilog模块结构
1.模块说明部分
module 模块名 ([端口列表]);
[端口信号声明;] [参数声明;]
输入输出属性 数据类型 位宽 名称
assign语句 always语句 底层模块调用语句
三种语句顺序无关 除开始的module模
块名和结束的 endmodule必须写 外,其他都是可选的。
endmodule
功能描述部分
2
Verilog模块结构
例1:二选一数据选择器的描述
二选一数据选择器的符号
二选一数据选择器的结构之一
设a、b、s波形已知,可得y波形:
a
yA b
y
module 模块名 ([端口列表]); [端口信号声明;]
内部信号 声明
assign 语句
底层模块或 门原语调用
endmodule
always 语句块
特点:
之所以称为连续赋值语句是指其总是处于激活状态,只 要表达式中的操作数有变化,立即进行计算和赋值。 (与连续赋值语句对应的另一种语句称为过程赋值语句)
参数声明要说明参数的名称和初值
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型的。