源自 微信公众号 “数字芯片实验室”
1、连续赋值和过程赋值之间有什么区别?
2、initial和always中的赋值有什么区别?
initial和always中的赋值都是过程赋值。
3、阻塞和非阻塞赋值之间有什么区别?
阻塞和非阻塞赋值都是过程赋值。
4、如何使用连续赋值建模双向nets?
assign语句构成一个连续赋值。 RHS变化立即影响LHS。 然而,LHS的任何变化都不会影响RHS。
例如,在以下声明,rhs net的更改将更新到lhs net,但反之不会。
wire rhs,1hs ;
assign lhs = rhs ;
System Verilog引入了一个关键字alias,能定义双向nets。
例如,在以下代码中,rhs的任何变化都会更新到lhs,反之亦然。
module test_alias ;wire [3:0] lhs ,rhs ;alias lhs = rhs ;
initial beginforce rhs = 4’h2 ;$display(“lhs = %0h , rhs = %0h”,lhs,rhs) ;release rhs ;
force lhs = 4’hc ;
$display(“lhs = %0h , rhs = %0h”,lhs,rhs) ;
release lhs ;