您可以将 int 与 Verilog 中的总线进行比较吗?

can you compare an int to a bus in verilog?

我知道这可能是微不足道的,但这是我第无数次用谷歌搜索它,所以我想得到一个明确的答案。

我在测试台中有以下代码,因此它不需要是可综合的。这种比较会按预期工作吗?

logic [4:0] bus;

task mytask;
    input int i;
    begin
        if(i == bus)
            $write("Match");
    end
endtask

正如 dwikle 所指出的,答案是肯定的。但本着授人以渔的精神,你可能想知道为什么...

在 System-Verilog 中有 2 态类型和 4 态类型。 2-states 只能取值 0 和 1; 4 态类型可以取值 0、1、X 和 Z。logic 是 4 态类型; bit 是 2 态类型。

您可以将 "buses" 设为:

logic [7:0] my_4_state_8_bit_bus;
bit   [7:0] my_2_state_8_bit_bus;

这些也可以是有符号或无符号的:

logic signed [7:0] my_4_state_signed_8_bit_bus;
bit unsigned [7:0] my_2_state_unsigned_8_bit_bus;

类型 int 仅仅是一个预定义的、32 位、有符号、2 态总线:

int               this_is_the_same;
bit signed [31:0] as_this;

您可以将 4 态类型分配给 2 态类型。如果将 4 态类型分配给 2 态类型,则 X 和 Z 将转换为 0。

您可以将 4 态类型与 2 态类型进行比较。如果 4 状态类型的任何位是 X 或 Z,则比较结果将为 1'bX。

http://www.edaplayground.com/x/Rdu