verilog里一般不声明输出类型的话 默认是wire型的
如果你想在输出处寄存一下:比如使用always时序语句,则必须声明为reg类型
wire是线网,就是相当于实际中的连接线,你想assign的话就是直接连接,就是用wire型,他的值是随时变化的。比如你想寄存一下,让信号在时钟边沿才变化就需要reg类型了,在程序中用带时钟的always块来实现即可
另外需要注意的是reg型变量不一定是寄存器,因为时序逻辑现在也基本上使用always @*这种语言来写,只是必须被声明为reg型。
输出用wire型的其实并不多,具体情况比如:两给信号的与或等简单逻辑。稍微复杂的即使是组合逻辑也要声明reg型,然后在程序里面用always块来实现组合逻辑
wire表示实打实的电线,reg是寄存器,如果你设一个值为wire,那么这个值输出时是低电平或者高电平,而reg只是一个虚拟的值,比方你要把计算的一个结果放到一个地方存储,这个地方你就可以设为一个reg型的值好存储结果。
简单地说,always块中用reg型,assign语句用wire型。端口之间连线也用wire型。
reg型变量是用存储数据的,可以被赋值。
wire型变量是线性的用来连接数据,或者作为输入端,也可以作为输出端。(assign语句必须用wire型变量)