我想根据 SV LRM 计算出一根线/寄存器中连续分配的数量是合法的。
我查看了 verilog 和 SV LRM,它说明了以下内容。
"Continuous assignments shall drive values onto nets or variables" - SV LRM 10.3
"The continuous assignment statement shall place a continuous assignment on a net or variable data type." - SV LRM 10.3.2
妥协以上两个,
我得出的结论是,wire 和 reg 在 SV 中只能有一个连续分配。
然后我想在Modelsim中检查编译。
> testing multi assignments in reg
module test_1;
reg a;
assign a = 1;
assign a = 0;
endmodule
控制台:“‘a’由多个连续赋值驱动”
所以,这个汇编很好地寻找了 reg 上的多驾驶。没什么可抱怨的。
>testing multi assignments on wire
module test_2;
wire a;
assign a = 1;
assign a = 0;
endmodule
控制台:“SVtest.sv 编译成功”
我预计结果会给出错误。
但是,这个编译并没有解决多驱动在线错误。
这意味着UVA允许在线双驱动,这与我的预期完全不同。
问题摘要:
我对 SV LRM 的解释(线路/寄存器上只允许一次连续分配)是否错误?或者只是模拟器没有严格反映SV LRM?
此外,我之前所做的解释(在verilog中,连续赋值只允许在线上一次,但不允许在reg上)也是错误的吗?(基于“连续赋值应将值驱动到网络上 - verilog LRM 6.1”)
网络/线路可以有多个“连续”分配,但不能有“程序”分配。一个变量可以有多个“过程”赋值,或者单个连续赋值。请参阅 https://blogs.sw.siemens.com/verificationhorizons/2013/05/03/wire-vs-reg/