模块
模块是verilog基本单元的定义,是与外界交互的接口
module module_name
#(parameter_list)#
(port_list);
Declarations_and_Statements;
endmodule
模块的定义必须以关键词module开始,以关键词endmodule结束模块名,端口信号,端口声明和可选参数声明等,出现在设计使用的verilog语句(Declarations_and_Statements之前)
模块内部有可选的 5 部分组成,分别是变量声明,数据流语句,行为级语句,低层模块例化及任务和函数,如下图表示。这 5 部分出现顺序、出现位置都是任意的。但是,各种变量都应在使用之前声明。变量具体声明的位置不要求,但必须保证在使用之前的位置。
端口
端口是模块与外界交互的接口。对于外部环境来说,模块内部是不可见的,对模块的调用只能通过端口连接进行。
端口列表
模块的定义中包含一个可选的端口列表,一般将不带类型、不带位宽的信号变量罗列在模块声明里。下面是一个 PAD 模型的端口列表:
module pad(
DIN,OEN,PULL,
DOUT,PAD);
一个模块如果和外部环境没有交互,则可以不用声明端口列表。例如之前我们仿真时 test.sv 文件中的 test 模块都没有声明具体端口。`
module test; //直接分号结束
… //数据流或行为级描述
endmodule