第二讲 Verilog语法的基本概念汇总

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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
行为综合 综合前仿真 逻辑综合
用可综合的Verilog模块表示
门级/结构级:
用实例引用的 Verilog 模块表 示
版图布局/物理级:
综合后仿真
用几何形状来表示
布局布线
10
二、VerilogHDL的模块
Verilog HDL程序是由模块构成的。模块是可以进行层次嵌套的。正 因为如此,才可以将大型的数字电路设计分割成不同的小模块来实现特 定的功能,最后通过顶层模块调用子模块来实现整体功能。
13
2.1.2模块的结构
从上面的例子可以看出: - Verilog模块结构完全嵌在module和endmodule声明语句之间 ; - 每个Verilog程序包括四个主要部分:端口定义、 I/O 说明、内 部信号声明、功能定义。
端口 I/O 内部信号 功能
端口定义 各信号的 名称等
I/O说明 输入输出 引脚性质
8பைடு நூலகம்
Verilog HDL的应用
• 可描述顺序执行或并行执行的程序结构。
• 用延迟表达式或事件表达式来明确地控制过程的启动时间。 • 通过命名的事件来触发其它过程里的激活行为或停止行为。 • 提供了条件、if-else、case、循环程序结构。
• 提供了可带参数且非零延续时间的任务(task)程序结构。
TJIC
第二讲 Verilog语法的基本概念 - 模块与测试
天津大学电子科学与技术系史再峰 shizaifeng@tju.edu.cn
1
一、概述:Verilog HDL的应用
Verilog HDL是一种用于数字逻辑电路设计的语言:
- 用 Verilog HDL 描述的电路设计就是该电路的 Verilog HDL模型。 - Verilog HDL 既是一种行为描述的语言也是一种结构描述 的语言。 这也就是说,既可以用电路的功能描述也可以用元器件和它 们之间的连接来建立所设计电路的 Verilog HDL 模型。 Verilog 模型可以是实际电路的不同级别的抽象。这些抽 象的级别和它们对应的模型类型共有以下五种:
内部信号 声明; 指电路内部 线网和寄存 器等
功能定义, 内部信号 流实现逻 辑功能
14
模块的端口定义
模块的端口声明了模块的输入输出口。 其格式如下
module 模块名(端口1,端口2,端口3,端口4..);
15
模块内容
模块内容包括I/O说明,内部信号声明和功能定义 及描述。每一语句后用;表示该语句结束 I/O说明的格式如下:
input 端口1,端口2 …. ; //输入端口 output 端口1,端口2 …. ; //输出端口 inout 端口1,端口2 …. ; //双向端口
也可以写在端口声明语句中,如
module XXX(input port1, output port2…);
16
功能定义
用assign声明语句
D_bus
A_bus
21
空格和注释
Verilog 是一种格式很自由的语言。
空格在文本中起一个分离符的作用, 别的没有其他用处。 单行注释符用 //********* 与C 语言一致 多行注释符用 /* ------------------------与C 语言一致 */
22
特别的标识符
24
例[3]
module trist2(out,in,enable); output out; input in, enable; bufif1 mybuf(out,in,enable); endmodule 这个程序描述了一个三态驱动器。程序通过调用一 个实例元件bufif1来实现其功能。
25
例[4]
Top.\3inst .net1 , //在层次模块中的标识名
23
例[2]
module compare ( equal,a,b ); output equal; //声明输出信号equal input [1:0] a,b; //声明输入信号a,b assign equal=(a==b)?1:0; /*如果两个输入信号相等,输出为1。否则为0*/ endmodule 这 个 程 序 描 述 了 一 个 比 较 器 . 在 这 个 程 序 中 ,/*........*/ 和 //.........表示注释部分,注释只是为了方便程序员理解程序, 对编译是不起作用的。
6
Verilog HDL的应用
Verilog HDL作为一种高级的硬件描述编程语言,有着 类似C语言的风格。其中有许多语句如:if语句、case语 句等和C语言中的对应语句十分相似。
如果已经掌握C语言编程的基础,那么学习 Verilog HDL并不困难,我们只要对Verilog HDL某些语句的特殊 方面着重理解,并加强上机练习就能很好地掌握它,利用 它的强大功能来设计复杂的数字逻辑电路。
Gate Level Models
(function+structure)
o
Switch Level Models
(function+structure)
Detailed models
5
Verilog HDL的应用

Verilog HDL的构造性语句可以精确地建立信号的 模型。这是因为在Verilog HDL中,提供了延迟和输 出强度的原语来建立精确程度很高的信号模型。信号 值可以有不同的的强度,可以通过设定宽范围的模糊 值来降低不确定条件的影响。
7
Verilog HDL的应用
一个复杂电路的完整Verilog HDL模型是由若个 Verilog HDL 模块构成的,每一个模块又可以由若干 个子模块构成。
利用Verilog HDL语言结构所提供的这种功能就可以 构造一个模块间的清晰层次结构来描述极其复杂的大 型设计。 Verilog HDL行为描述语言作为一种结构化和过程性 的语言,其语法结构非常适合于算法级和RTL级的模 型设计。这种行为描述语言具有以下八项功能:
3
VerilogHDL的抽象级别
系统级算法级
寄存器传输级
门级
开关级
4
Model的抽象层次
Behavioral Models
(function only) if enable is true for (i=0; i<=15; i=i+1)
Abstract Models
RTL Models
(Register Transfer Level) always @ (posedge clock) result_register=a+b+carry;
11
模块的结构
Verilog的基本设计单元是“模块” 。一个模块是由两部分 组成的描述接口和描述逻辑功能,即定义输入是如何影响 输出的。
module block (a,b,c,d); input a,b; output c,d; assign c= a | b ; assign d= a & b; endmodule
19
合法和非法标识符
合法的:
shift_reg_a busa_index
非法的:
34net a*b_net
//不能用数字开头 //不能含有非字母符号*
bus263
n@263
//不能含有非字母符号@
Verilog 是大小写敏感的。所有的 Verilog 关键词都是小写的。
20
课堂练习(二)
建立该模块的verilog描述,未确定的模块名和端口名称自 己定义。
18
标识符
所谓标识别符就是用户为程序描述中的 Verilog 对象所起的名 字。
标识符必须以英语字母(a-z, A-Z)起头,或者用下横线符( _ )起头。其中可以包含数字、$符和下横线符。 标识符最长可以达到1023个字符。 模块名、端口名和实例名都是标识符。
Verilog语言是大小写敏感的,因此sel 和 SEL 是两个不同的标 识符。
28
2.1.5 模块的测试
如何检查上述例子其功能是否正确?
需要有测试激励信号输入到被测模块 需要记录被测模块的输出信号 需要把用功能和行为描述的Verilog模块转换为门级 电路互连的电路结构(综合)。 需要对已经转换为门级电路结构的逻辑进行测试(门 级电路仿真)。 需要对布局布线后的电路结构进行测试。(布局布线 后仿真)。
assign a= b & C;
用实例化元件


and u1(q, a, b);
alwas @(posedge clk) beigin if(clr) q<=1’b0; else q<=a; end
17
用always语句块或者initial语句块
课堂练习(一)
手写描述一个模块,要求: 模块名称:My_Multiply_Chip 输入端口: CLK, reset, cand, cator, en 输出端口:result, cout,
特别标识符是用 “\” 符开始,以空格符结束的标 识符。它可以包含任何可打印的ASCII字符。
但“\”符和空格并不算是标识符的一部分。
特别标识符往往是由RTL级源代码或电路图类型的 设计输入经过综合器自动综合生成的网表结构型 Verilog 语句中的标识符。
举例说明:
\~#@sel , \bus+index , \{A,B} ,
2
Verilog HDL的应用
• 系统级(system): 用高级语言结构实现设计模块的外部 性能的模
• 算法级(algorithmic): 用高级语言结构实现设计算法的 模型。 • RTL级(Register Transfer Level): 描述数据在寄存器之 间流动和如何处理这些数据的模型。 • 门级(gate-level): 描述逻辑门以及逻辑门之间的连接 的模型。 • 开关级(switch-level): 描述器件中三极管和储存节点 以及它们之间连接的模型。
a
c
b
d
12
简单的VerilogHDL模块
例[2.1.1]: module adder ( count,sum,a,b,cin ); input [2:0] a,b; input cin; output count; output [2:0] sum; assign {count,sum}=a+b+cin; endmodule 这个例子描述了一个三位的加法器。从例子中可以看出整 个Verilog HDL程序是嵌套在module和endmodule声 明语句里的。
每个模块要进行端口定义,并说明输入输出口,然后对模块的功能进行 行为逻辑描述。 Verilog HDL程序的书写格式自由 ,一行可以写几个语句 ,一个语句也 可以分写多行。
除了endmodule语句外,每个语句和数据定义的最后必须有分号
可以用/*.....*/和//...对Verilog HDL程序的任何部分作注释。一个好 的 ,有使用价值的源程序都应当加上必要的注释 ,以增强程序的可读性 和可维护性。
• 提供了可定义新的操作符的函数结构(function)。 • 提供了用于建立表达式的算术运算符、逻辑运算符、位运算符。
• Verilog HDL语言作为一种结构化的语言也非常适合于门级和开 关级的模型设计。
9
模块的抽象
技术指标:
用文字表示 用算法表示 用高级行为的 Verilog 模块表 示
RTL/功能级:
26
关于例[4]说明
上述程序例子通过另一种方法描述了一个三态门。 在这个例子中存在着两个模块:模块trist1调用模块 mytri 的实例元件 tri_inst。模块 trist1 是上层模块。模块 mytri 则被称为子模块。
通过这种结构性模块构造可构成特大型模块。
27
2.1.5 模块的测试
module adder ( count,sum,a,b,cin ); input [2:0] a,b; input cin; output count; output [2:0] sum; assign {count,sum}=a+b+cin; endmodule
相关文档
最新文档