System verilog SystemVerilog如何处理case语句中可能的通配符冲突?

System verilog SystemVerilog如何处理case语句中可能的通配符冲突?,system-verilog,case-statement,System Verilog,Case Statement,当我编写一个包含通配符的case语句时,具体的案例是如何处理的 always_comb case(selector) 4'b0???: begin // Pick me if the msb is 0, unless the two lsb's are 01. end 4'b0?01: begin // Pick me if the msb is 0 and the two lsb's are 01. end default: begin // Pick

当我编写一个包含通配符的case语句时,具体的案例是如何处理的

always_comb case(selector)
    4'b0???: begin // Pick me if the msb is 0, unless the two lsb's are 01.
    end
    4'b0?01: begin // Pick me if the msb is 0 and the two lsb's are 01.
    end
    default: begin // Pick me if the msb is X or 1.
    end
endcase

在上面的简化示例中,可以为选择器的任何值选择第一种情况(所有通配符),但我希望它选择最具体的情况。这就是处理案例的方式吗?

SystemVerilog假设案例语句按优先级顺序排列-第二项从不匹配。因此,您需要首先移动最具体的案例。SystemVerilog具有
唯一案例
优先级案例
结构,可以更好地指定您的意图

SystemVerilog假设case语句按优先级顺序排列-第二项从不匹配。因此,您需要首先移动最具体的案例。SystemVerilog具有
唯一案例
优先级案例
结构,可以更好地指定您的意图

案例始终基于优先级,一旦匹配案例语句,该案例下的所有语句都不会执行。案例始终基于优先级,一旦匹配案例语句,该案例下的所有语句都不会执行。我可以在示例中使用unique修饰符吗?它是否传达了设计意图,即更具体的情况和不太具体的情况是相互排斥的(如果可能,总是采用更具体的情况)?将更具体的案例放在第一位并将其标记为优先级对我的使用来说可读性较差。不,
唯一案例
意味着您可以保证只有一个案例项目会与
选择器的任何值匹配。不在乎意味着你不在乎那个位的值,所以你会得到多个匹配项。如果您更具体的案例项比其他匹配项具有更高的优先级,则需要首先指定它们。我可以在示例中使用唯一修饰符吗?它是否传达了设计意图,即更具体的情况和不太具体的情况是相互排斥的(如果可能,总是采用更具体的情况)?将更具体的案例放在第一位并将其标记为优先级对我的使用来说可读性较差。不,
唯一案例
意味着您可以保证只有一个案例项目会与
选择器的任何值匹配。不在乎意味着你不在乎那个位的值,所以你会得到多个匹配项。如果您更具体的案例项比其他匹配项具有更高的优先级,则需要首先指定它们。