我正在学习SystemVerilog。在编码时,以下
if statements
的合成原理图对我来说没有意义。
module ifelseDUT(
input logic sela, selb, selc, da,db,dc,
output logic dout
);
always @*
begin
dout = 0;
priority if(sela)
dout = da;
if(selb)
dout = db;
if(selc)
dout = dc;
end
endmodule
不使用sela时如何看懂原理图?我也无法理解复用器上的 S=默认值?
请参阅 IEEE Std 1800-2017,第 12.4.2 节 unique-if、unique0-if 和priority-if
如果使用关键字unique或priority,违规举报 如果没有条件匹配,则发出,除非有明确的 else。
由于您没有
else
和 priority if
,Cadence 模拟器会生成警告。也许 Vivado 模拟器也能做到这一点。检查您的日志文件。
您可能想要一个
if/else
声明:
module ifelseDUT(
input logic sela, selb, selc, da,db,dc,
output logic dout
);
always @*
begin
dout = 0;
if (sela) begin
dout = da;
end else if (selb) begin
dout = db;
end else if (selc) begin
dout = dc;
end
end
endmodule