1. verilog 模块与端口
结构建模方式有 3 类描述语句:gate(门级)例化语句
,UDP(用户定义原语)例化语句
,module(模块)例化语句
。
使用最多的时 module(模块)及例化语句。
2. 模块
模块是 verilog 中基本单元的定义形式,是与外界交互的接口。
格式如下
module module_name #(
#(parameter_list)
)(
port_list
);
declaration_and_statements ;
endmodule
- 模块定义必须以关键字
module
开始,以关键字endmodule
结束。 - 变量具体声明的位置不要求,但是必须保证在使用前的位置。
3. 端口
端口是模块与外界交互的接口。
对于外部环境来说,模块内部是不可见的,对模块的调用只能通过端口连接进行。
3.1 端口列表
模块的定义中包含一个可选的端口列表:
示例如下
module test(
input a ,
input b ,
output c
);
endmodule
一个模块如果和外部环境没有交互,则可以不用声明端口列表。例如写测试文件(testbench)时。
示例如下
module test;
...
...
...
module
3.2 端口声明
- 端口信号在端口列表罗列出来后,就可以在模块实体中进行声明了。
根据端口的方向。端口类型分为 3 种:输入(input),输出(output)和双向端口(inout)。
input,inout 类型不能声明为 reg 数据类型,因为 reg 类型是用于保存数值的,而输入端口只能反映与其相连的外部信号的变化,不能保存这些信号的值。
output 可以声明为 wire 或 reg 数据类型。
- 在 verilog 中,端口隐式的声明为 wire 型变量,当端口是 wire 型变量时, 不用再次声明为 wire 型,但端口是 reg 型时,那么 reg 不可省略。
笔记
input wire a ,/// a 是wire类型变量时,wire可以不写
input a ,
output reg [7:0] b , /// b是reg类型变量时,reg必须写