赋值语句将值放到线网或者变量上,它有三种基本形式:
- 过程性赋值
- 连续赋值
- 过程连续赋值
赋值要求
一个赋值语句有两个部分–右值(RHS)和左值(LHS),中间有一个相等的符号(=)或一个小于相等的符号(<=)。
=为阻塞赋值,<=为非阻塞赋值。
在过程性赋值中,合理的左值应该是:
- 变量(矢量/标量)
- 向量reg、integer或time变量的位选择或部分选择。
- 存储器(Memory word)
- 上述任何一项的合并
过程赋值通常发生在块语句中,例如initial块,always块,还有task以及function中。
在连续性赋值中,合理的左值应该是:
- 线网(矢量/标量)
- 矢量线网的位选择或部分选择。
- 位选择和部分选择的合并
连续性赋值通常发生在assign中。
在过程连续性赋值中,合理的左值应该是:
- 线网或者变量(向量/标量)
- 线网向量的位选择或者部分选择
RHS可以包含任何计算为最终值的表达式,而LHS表示一个线网或一个变量,RHS中的值被赋值给它。
例如:
module tb;
reg clk;
reg a, b, c, d, e;
wire f, y;
reg z;
// clk is on the LHS and the not of clk forms RHS
always #10 clk = ~clk;
// y is the LHS and the constant 1 is RHS
assign y = 1;
// f is the LHS, and the expression of a,b,d,e forms the RHS
assign f = (a | b) ^ (d

文章详细介绍了Verilog编程语言中的三种赋值方式:过程性赋值、连续赋值和过程连续赋值。过程性赋值常用于always和initial块,变量的值会保持不变直到下次赋值;连续赋值用于组合逻辑,当右值改变时立即更新线网;过程连续赋值包括assign...deassign和force...release,用于临时覆盖变量或线网的赋值。
3197

被折叠的 条评论
为什么被折叠?



