模块端口和与之链接的信号的数据类型必须遵循以下规定:
1.输入端口在模块内部必须为wire形数据;在模块外部可以连接wire或者reg型数据。
2.输出端口在模块内部可以为wire或者reg型数据,在模块外部必须连接到wire型数据。
3.连接的两个端口位宽可以不同。
veirlog中的端口类型 input output inout,所有的端口在声明时都默认为wire类型。
reg 本质是存储器,有寄存功能
wire本质是一条没有逻辑的连线。
verilog的端口连接规则分为一下两种情况:
1、模块描述时
模块描述时在模块内部对模块的端口进行描述,是从内部角度出发,因此将input端口看作外界引申进来的一条线,只能为net型变
量:同理inout端口作为有输入功能的端口,也应该看作net型变量。而output端口被看作模块的输出,既可以直接输出(如组合逻辑),
也可以寄存后输出(如时序逻辑),因此output端口应该设为reg型变量。
2、模块调用时
模块被调用时是在.上级模块中对下级模块的例化,描述了其采用何种信号与芯片(即底层模块)连接,进行驱动或得到输出。此时是
从外部角度出发…上级模块对 下级模块的输入既可以想输入什么就输入什么,也可以想什么时候输入就什么时候输入,所以input端口可以
为net/reg 型变量。而output端口是上级模块对下级模块的被动接收,是下级模块的一根输出导线,因此output端口只能是net型变量;同
理inout端口也只能是net型变量。
综上所述
模块描述时,input 端口只能为net, output 端口可以为netreg, inout 端口只能为net;
模块调用时,连接模块inpu端口的信号可以为net/reg 型,连接模块output端口的信号只能为net,连接模块inout端口的信号也只能
为net;