Eu queria descobrir quantas atribuições contínuas mantidas em um fio/reg são legais com base no SV LRM.
Examinei o verilog e o SV LRM e ele afirma o seguinte.
"Continuous assignments shall drive values onto nets or variables" - SV LRM 10.3
Isso significa que a atribuição contínua no reg é permitida, diferentemente do verilog.
(Atribuições contínuas devem direcionar valores para redes - 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
Isso significa que o número de atribuições contínuas em wire/reg é limitado a 1.
Comprometendo acima de dois,
concluí que wire e reg podem ter apenas uma atribuição contínua para cada um em SV.
Então eu queria verificar a compilação no Modelsim.
> testing multi assignments in reg
module test_1;
reg a;
assign a = 1;
assign a = 0;
endmodule
Console: "'a' é impulsionado por mais de uma atribuição contínua"
Então, esta compilação buscou muito bem o multidriving no reg. Nada a reclamar.
>testing multi assignments on wire
module test_2;
wire a;
assign a = 1;
assign a = 0;
endmodule
Console: "A compilação de SVtest.sv foi bem-sucedida"
Eu esperava que o resultado desse erro.
No entanto, esta compilação não resolveu o erro de vários drivers conectados.
O que significa que o UVA permite acionamento duplo no fio bem diferente do que eu esperava.
Resumo da pergunta:
Minha interpretação do SV LRM (apenas uma atribuição contínua é permitida em um fio/reg) está errada? Ou é apenas um simulador que não reflete estritamente o SV LRM?
Além disso, a interpretação que fiz anteriormente (no verilog, a atribuição contínua é permitida apenas uma vez na rede, mas não permitida no registro) também está errada? (com base em "Atribuições contínuas devem direcionar valores para redes - verilog LRM 6.1")