wire表示直通,即只要输入有变化,输出马上无条件地反映;reg表示一定要有触发,输出才会反映输入。wire表示直通,即只要输入有变化,输出马上无条件地反映;reg表示一定要有触发,输出才会反映输入。
不指定就默认为1位wire类型。专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initial和always中赋值。wire使用在连续赋值语句中,而reg使用在过程赋值语句中。
不指定就默认为1位wire类型。专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initial和always中赋值。wire使用在连续赋值语句中,而reg使用在过程赋值语句中。
对于wire和reg,也要从这两个角度来考虑。对于wire和reg,也要从这两个角度来考虑。
1. 从仿真的角度来说,HDL语言面对的是编译器(如Modelsim等),相当于软件思路。1. 从仿真的角度来说,HDL语言面对的是编译器(如Modelsim等),相当于软件思路。
这时:这时:
wire对应于连续赋值,如assignwire对应于连续赋值,如assign
reg对应于过程赋值,如always,initialreg对应于过程赋值,如always,initial
2. 从综合的角度来说,HDL语言面对的是综合器(如DC等),要从电路的角度来考虑。2. 从综合的角度来说,HDL语言面对的是综合器(如DC等),要从电路的角度来考虑。
这时:这时:
1、wire型的变量综合出来一般是一根导线;1、wire型的变量综合出来一般是一根导线;
2、reg变量在always块中有两种情况:2、reg变量在always块中有两种情况:
(1)、always后的敏感表中是(a or b or c)形式的,也就是不带时钟边沿的,综合出来还是组合逻辑(1)、always后的敏感表中是(a or b or c)形式的,也就是不带时钟边沿的,综合出来还是组合逻辑
(2)、always后的敏感表中是(posedge clk)形式的,也就是带边沿的,综合出来一般是时序逻辑,会包含触发器(Flip-Flop)(2)、always后的敏感表中是(posedge clk)形式的,也就是带边沿的,综合出来一般是时序逻辑,会包含触发器(Flip-Flop)
在设计中,输入信号一般来说你是不知道上一级是寄存器输出还是组合逻辑输出,那么对于本级来说就是一根导线,也就是wire型。而输出信号则由你自己来决定是寄存器输出还是组合逻辑输出,wire型、reg型都可以。但一般的,整个设计的外部输出(即最顶层模块的输出),要求是寄存器输出,较稳定、扇出能力也较好。