模块和端口

结构建模有三类: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 端口在例化时可以删除。

  • 端口连接规则:
  1. 输入端口:模块外部input端口可以连接wire和reg类型变量,但是在模块内部input必须是wire类型;
  2. 输出端口:模块外部output端口只连接wire类型变量,在模块内部是wire或reg类型
  3. inout:模块内外都需要连续wire类型
  4. 端口悬空:output悬空时可以删除,input悬空表示高阻态(逻辑Z)例化时不能删除
  • 模块格式
module module_name
#(parameter_lister)
(port_list);
     Declarations_and_Statements ;

endmodule        

模块定义必须以关键字 module 开始,以关键字 endmodule 结束。
各种变量都应在使用之前声明。变量具体声明的位置不要求,但必须保证在使用之前的位置。

2. 端口

端口是连接外部和模块的接口,想要调用模块只能通过端口连接进行。

  • 端口声明:根据方向来划分有inputoutputinout
    inputinout不能声明为reg类型,reg是来存数据的,但是输入端口是来反映与其相连外部信号的变化。注意在 Verilog 中,端口隐式的声明为 wire 型变量,当需要reg类型时则不能省略。
//端口类型声明
input        DIN, OEN ;
input [1:0]  PULL ;     
inout        PAD ;     
output reg   DOUT ;    

没有写reg的隐式声明为wire


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注