锁存器和寄存器的区别是什么 锁存器的工作原理( 四 )


两种过程性连续赋值举例:
(1)assign-deassign(赋值-重新赋值)assign用于对寄存器赋值(不可用于线网赋值),deassign用于取消之前由assign赋值给某寄存器的值,也就是说,使用assign给寄存器赋值之后,这个值将一直保持在这个寄存器上,直到遇到deassign为止 。
举例:
module DEF(D,Clr,Clk,Q)
input D,Clr,Clk;
output Q;
reg Q;
always@(negedge Clk)
Q = D;
always@(Clr)
begin
if(!Clr)
assign Q = 0;
else
deassign Q;
end
endmodule
以上的程序段,第一个always会将Q的值赋为D,第二个always语句在Clr的值发生变化时执行,若Clr是由高电平变为低电平,则assign有效,并一直保持这个赋值(直到遇到deassign),这时尽管第一个always也在执行(Clk的下降沿是不会起作用的),Q的值会一直保持“assign Q = 0;”,直到Clr来一个高电平为止(deassign Q语句执行) 。
(2)force-release(强制-释放,虽然它也可以用于对寄存器赋值,但主要用于线网赋值)
当force语句应用于寄存器时,寄存器当前值被force覆盖,当release语句应用于寄存器时寄存器当前值将保持不变,直到被重新赋值 。
举例:
reg[2:0]colt;
……
colt=2;//colt被赋值为2;
……
force colt=1;//colt被强制赋值为1;
……
release colt;//对colt的强制赋值被取消,colt的值将保持为1;
……
assign colt =5;//colt被赋值为5;
……
force colt=3;//colt被强制赋值为3;
……
release colt;//对colt的强制赋值被取消,assign colt=5;重新生效;
……
【锁存器和寄存器的区别是什么 锁存器的工作原理】force colt[1:0]=3;//不合法,寄存器的部分选择不可以设为过程性连续赋值的目标