Вот пример поведенческого кода Verilog, о котором идет речь
module constant;
reg [7:0] foo;
initial begin
foo = 1'bz;
$display("%H", foo);
end
endmodule
Icarus Verilog дал мне
$ iverilog -o constant constant.v
$ ./constant
0Z
Однако, согласно этот сайт (и лектор курса ПЛИС, который я беру),
Если число меньше константы размера, то оно будет дополнено нулями слева. Если старший значащий бит указанного числа имеет неизвестное (x) или высокоимпедансное (z) значение, то это значение будет использоваться для заполнения влево.
В этом случае вывод должен быть ZZ
вместо 0Z
. Я почти уверен, что это связано с изменением спецификации (возможно, это ZZ
в Verilog 1995 и 0Z
в Verilog 2001 или что-то еще), но какие стандарты приводят к каждому поведению? Я попытался найти спецификацию в Интернете, но, похоже, она не доступна бесплатно, например , эта , для которой требуется покупка или подписка.
В качестве бонуса, где я могу найти Сводка изменений в различных спецификациях Verilog?