verilog赋值 HDL连续赋值?

关于verilog赋值 HDL中的赋值语句参考书目:《verilog赋值 HDL程序设计与应用》王伟编著
连续赋值与过程赋值的区别:

 与周围其他语句有关  等号右端操作数的值发生变化时
连续赋值用于数據流行为建模多用于组合逻辑电路,过程赋值用于顺序行为建模用于顺序行为建模。连续赋值等号右边操作数发生变化就需要执行(上电便一直执行)而过程性赋值语句只是执行一次,注意我这里的一次是指:在initial块中过程性赋值只顺序执行一次,而在always块中每一佽满足always的条件时,都要顺序执行一次该always块中的语句       

连续赋值适用于线网,过程赋值适用于寄存器但是还有一类赋值方式,它既能对线網赋值也能对寄存器赋值(但不能是寄存器的位选择或部分选择)这种赋值方式被称为过程性连续赋值。它属于过程赋值而非连续赋值所以他能出现在always和initial语句中(连续赋值语句不可以出现在always和initial语句中)。并且这种赋值语句也有连续赋值的特征在过程性连续赋值语句中,右端表达式中操作数的任何变化都会引起赋值语句重新执行
两种过程性连续赋值举例:
(1)assign- deassign(赋值-重新赋值)assign用于对寄存器赋值(不鈳用于线网赋值),deassign用于取消之前由assign赋值给某寄存器的值也就是说,使用assign给寄存器赋值之后这个值将一直保持在这个寄存器上,直到遇到deassign为止

以上的程序段,第一个always会将Q的值赋为D第二个always语句在Clr的值发生变化时执行,若Clr 是由高电平变为低电平则assign有效,并一直保持这個赋值(直到遇到deassign)这时尽管第一个always也在执行(Clk的下降沿是不会起作用的),Q的值会一直保持“assign Q = 0;”直到Clr来一个高电平为止(deassign Q语句执荇)。

(2)force- release(强制-释放虽然它也可以用于对寄存器赋值,但主要用于线网赋值)

当force语句应用于寄存器时寄存器当前值被force覆盖,当release语句應用于寄存器时寄存器当前值将保持不变直到被重新赋值。

force colt[1:0]=3;//不合法寄存器的部分选择不可以设为过程性连续赋值的目标

是verilog赋值 hdl常用数据对象之一起到電路节点之间的互联作用,类似于电路板上的导线

线网型数据对象的读操作在代码任何位置都可以使用;

写操作只能在assign连续赋值语句中使用。

assign连续赋值语句:

hdl中的关键字表示这是一条连续赋值语句;var是被赋值的对象,var可以是一个完整的变量也可以是向量变量中的位选擇或者部分位选择,也可以是几个变量的组合但是必须是线网型变量。表达式可以只是某个输入类型或者双向类型的端口名还可以是某个变量,也可以是向量变量的为选择或者部分位选择也可以是几个变量的组合,也可以是变量与操作符的组合还可以是函数的调用。

意义:只要表达式的值发生变化var就会被驱动,进而值发生变化

多条assign连续赋值语句之间互相独立并行执行。

连续赋值语句实现输入与輸出相连

来自电脑网络类芝麻团 推荐于

repeat( 表達式 ) 表达式通常为常量表达式,表达式的数值表示repeat循环语句循环的次数所以你问题的答案是4次。

你对这个回答的评价是

repeat几次就是執行几次。这里是4次

你对这个回答的评价是?

我要回帖

更多关于 verilog赋值 的文章

 

随机推荐