【发布时间】:2020-04-20 05:57:34
【问题描述】:
这是有问题的示例行为 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
但是,根据this website(以及我正在学习的 FPGA 课程的讲师)的说法,
如果 number 小于 size 常量,那么它将向左填充零。如果指定数字的最高有效位具有未知 (x) 或高阻抗 (z) 值,则该值将用于向左填充。
在这种情况下,输出应该是ZZ 而不是0Z。我很确定这是由于规范的变化(可能是 Verilog 1995 中的 ZZ 和 Verilog 2001 中的 0Z 或其他),但是导致每种行为的标准是什么?我尝试在网上搜索规范,但它们似乎不是免费提供的,例如需要购买或订阅的this one。
作为奖励,我在哪里可以找到各种 Verilog 规范的变化摘要?
【问题讨论】:
标签: language-lawyer verilog constants system-verilog iverilog