我知道这可能是微不足道的,但这是我用Google搜索过的无数次,所以我想得到一个明确的答案。
我在测试平台中有以下代码,因此无需合成。这种比较会按预期工作吗?
logic [4:0] bus;
task mytask;
input int i;
begin
if(i == bus)
$write("Match");
end
endtask
答案 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。