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