Verilog HDL模块的结构
一个设计是由一个个模块(module)构成的。一个模块的设计如下:
1、模块内容是嵌在module 和endmodule两个语句之间。每个模块实现特定的功能,模块可进行层次的嵌套,因此可以将大型的数字电路设计分割成大小不一的小模块来实现特定的功能,最
后通过由顶层模块调用子模块来实现整体功能,这就是Top-Down的设计思想,如 3.3.1的例[3]。
2、模块包括接口描述部分和逻辑功能描述部分。这可以把模块与器件相类比。 模块的端口定义部分:
如上例: module addr (a, b, cin, count, sum); 其中module 是模块的保留字,addr 是模块的名 字,相当于器件名。()内是该模块的端口声明,定义了该模块的管脚名,是该模块与其他模块 通讯的外部接口,相当于器件的pin 。
模块的内容,包括I/O说明,内部信号、调用模块等的声明语句和功能定义语句。
I/O说明语句如: input [2:0] a; input [2:0] b; input cin; output count; 其 中 的 input 、
output、inout 是保留字,定义了管脚信号的流向,[n:0]表示该信号的位宽(总线或单根信号线)。\
逻辑功能描述部分如: assign d_out = d_en ? din :'bz;
mytri u_mytri(din,d_en,d_out);
功能描述用来产生各种逻辑(主要是组合逻辑和时序逻辑,可用多种方法进行描述,具体的
用法下面章节有介绍),还可用来实例化一个器件,该器件可以是厂家的器件库也可以是我们自 己用HDL设计的模块(相当于在原理图输入时调用一个库元件)。在逻辑功能描述中,主要用到 assign 和always 两个语句。
3、对每个模块都要进行端口定义,并说明输入、输出口,然后对模块的功能进行逻辑描述, 当然,对测试模块,可以没有输入输出口。
4、Verilog HDL 的书写格式自由,一行可以写几个语句,也可以一个语句分几行写。具体由 代码书写规范约束。
5、除endmodule 语句外,每个语句后面需有分号表示该语句结束。