if else 语句的 Xilinx Vivado 原理图

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

我正在学习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=默认值?

if-statement system-verilog xilinx vivado synthesis
1个回答
0
投票

请参阅 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
© www.soinside.com 2019 - 2024. All rights reserved.