基于SV LRM的reg上允许连续指派数量的测试问题

问题描述 投票:0回答:1

我想根据 SV LRM 计算出一根线/寄存器中连续分配的数量是合法的。

我查看了 verilog 和 SV LRM,它说明了以下内容。

"Continuous assignments shall drive values onto nets or variables" - SV LRM 10.3

这意味着与 verilog 不同,允许对 reg 进行连续分配。
(连续分配应将值驱动到网络上 - verilog LRM 6.1)


"The continuous assignment statement shall place a continuous assignment on a net or variable data type." - SV LRM 10.3.2

这意味着线路/寄存器上的连续分配数量限制为 1。



妥协以上两个,
我得出的结论是,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”)

verilog system-verilog
1个回答
0
投票

网络/线路可以有多个“连续”分配,但不能有“程序”分配。一个变量可以有多个“过程”赋值,或者单个连续赋值。请参阅 https://blogs.sw.siemens.com/verificationhorizons/2013/05/03/wire-vs-reg/

© www.soinside.com 2019 - 2024. All rights reserved.