verilog赋多位值_Verilog(1)关于赋值
Verilog的赋值语句主要包括以下四种:按照赋值的强度顺序分别为”force”>”procedural block中的assign”>”=”>=”<=”;
其中force之后要⽤relea来释放赋值,才可以让被赋值的变量被其他值赋值;⼀般procedural block中是不允许assign的,但实际上它是允许存在的,但有⼀个要求,就是assign完之后要记得deassign将赋值变量释放,这样就可以让变量重新被赋值,否则就会出现问题,之后变量值将保持不变;⽽<=和=分别为non-blockingassignment和blocking assignment,分别是指⾮阻塞赋值和阻塞赋值。
下⾯举⼀个例⼦:
always @(podgeclk)begin
force a=6;
relea
劳务派遣合同
end
交流英语单词
程序中任何⼀个位置只要是force了⼀个变量值,那么不管任何其他条件,这个时候该变量的值就会是相应的值,优先级最⾼;⽽always 和initial等proceduralblock中的assign的优先级则稍微低⼀点,并且同时对同⼀个变量进⾏赋值,会把最后⼀个assign的值赋给变量,如下所⽰:
always @( podge clk ) begin
weighty奉天是哪里assign a=8;
运动分类
assign a=10;
deassign a
end
要注意⼀个问题:assign会把最后⼀个值10赋给变量a;并且连续的赋值的assign只需要⼀个deassign就可以了,⽽force则是类似
的,relea会把上⾯的所有的force释放掉;⽽相应的assign 也可以⽤到组合逻辑中⽤来进⾏组合逻辑的赋值;⽽<=则⼀般⽤在procedural block中表⽰时序电路中的赋值;注意相应的#delay的⽤法,如下所⽰:
1)#delay a = b;
消防安全教案2)#delay a<= b;爱上离婚女人
三亚好玩吗3)a = #delay b;
4)a <= #delay b;
如上所⽰,1)和2)的⾏为是⼀致的,都是到达触发点的时候经过delay的时间,将相应的该时间的b的值赋给a;3)是将触发点的b值经过相应的dealy时间赋给a,并且delay时间内即使有触发条件发⽣也不会将触发时的值赋给a,⽽是等到赋值完毕后再进⾏之后的;4)是将b的⾏为经过delay时间赋给a,两者的波形基本上是⼀致的,不过也得看相应的触发条件,就是讲相应的触发时的b状态值赋给a,且但凡触发条件满⾜都会进⾏,没有delay时间的限制。
另外以上的⼏种赋值⽅式需要注意的是,⼀般force是⽤在测试的时候,写相应的测试pattern,⽽第⼆种基本上也是这种⽤法,⽽且这两种语法⼀般不可综合,第⼆种其实是可以综合的,但容易出问题;⽽第三种<=和=的赋值⽅式是可以综合的,分别⽤在时序逻辑和组合逻辑电路的构建中,这个需要特别注意。