结构建模有三类:1.Gate 门级实例化语句;2.UDP 用户定义原语实例化语句;
3.module 模块实例化语句。
1. 模块例化
- 在一个模块中引用另一个模块,对其端口进行相关连接,叫做模块例化
- 下面是命名端口连接
full_adder1 u_adder0(
.Ai (a[0]),
.Bi (b[0]),
.Ci (c==1'b1 ? 1'b0 : 1'b1),
.So (so_bit0),
.Co (co_temp[0]));
一般来说,
==input 端口在例化时不能删除==,output 端口在例化时可以删除。
- 端口连接规则:
- 输入端口:模块外部input端口可以连接wire和reg类型变量,但是在模块内部input必须是wire类型;
- 输出端口:模块外部output端口只连接wire类型变量,在模块内部是wire或reg类型
- inout:模块内外都需要连续wire类型
- 端口悬空:output悬空时可以删除,input悬空表示高阻态(逻辑Z)例化时不能删除
- 模块格式
module module_name
#(parameter_lister)
(port_list);
Declarations_and_Statements ;
endmodule
模块定义必须以关键字 module 开始,以关键字 endmodule 结束。
各种变量都应在使用之前声明。变量具体声明的位置不要求,但必须保证在使用之前的位置。
2. 端口
端口是连接外部和模块的接口,想要调用模块只能通过端口连接进行。
- 端口声明:根据方向来划分有
input、output、inoutinput和inout不能声明为reg类型,reg是来存数据的,但是输入端口是来反映与其相连外部信号的变化。注意在 Verilog 中,端口隐式的声明为 wire 型变量,当需要reg类型时则不能省略。
//端口类型声明
input DIN, OEN ;
input [1:0] PULL ;
inout PAD ;
output reg DOUT ;
没有写reg的隐式声明为wire。

发表回复