组合逻辑输出变量,可以直接用assign。
如果不指定为reg类型,那么就默认为1位wire类型,故无需指定1位wire类型的变量。
专门指定出wire类型,可能是多位或为使程序易读。
wire只能被assign连续赋值,reg只能在initial和always中赋值。
其实他们是不同的抽象级别,wire 如同vhdl中的signal类型,是和实际的物理连接对应的,而reg属于算法描述层次用的类型,和实际电路没有直接的对应关系,也就是说它相当于c语言中的变量(int,float等),vhdl中的variable。reg不和实际的电路如寄存器对应,高层次的描述时用。而always其实算是算法级描述的语句,所以其中的变量必须声明为reg
具体的可以参考这篇文章http://blog.sina.com.cn/s/blog_5400f7380100hie4.html
wire,可以當輸出輸入上的連線,不可暫存,不可驅動狀態,使用assign或者=
reg,可以當輸出輸入,可暫存,並可用來驅動下一個狀態,使用<=賦值,放置在always和initial來指定下一狀態/初始值
如果是combinational circuit,基本上兩者都可以使用
但如果是sequential circuit,則需要暫存的狀態值需要reg存放,wire則否
以上供參考
在Verilog中,wire永远是wire,就是相当于一条连线,用来连接电路,不能存储数据,无驱动能力,是组合逻辑,只能在assign左侧赋值,不能在always @ 中赋值;但reg可以综合成register,latch,甚至wire(当其只是中间变量的时候),可以用于组合逻辑或者时序逻辑,能存储数据,有驱动能力,在always @模块表达式左侧被赋值。两个共同具有性质:都能用于assign与always @模块表达式的右侧。