你可以在verilog中将int与总线进行比较吗?

时间:2016-03-02 03:53:17

标签: verilog system-verilog

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

我在测试平台中有以下代码,因此无需合成。这种比较会按预期工作吗?

logic [4:0] bus;

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

1 个答案:

答案 0 :(得分:1)

正如dwikle指出的那样,答案是肯定的。但是,本着教导一个人捕鱼的精神,你可能想知道为什么......

在System-Verilog中有2种状态类型和4种状态类型。 2状态只能取值0和1; 4状态类型可以取值0,1,X和Z. logic是4状态类型; bit是一种双状态类型。

你可以用以下任何一种方式制作“公共汽车”:

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位有符号双态总线:

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