我是Verilog的新手,正在尝试实现一个简单的16位绝对值模块,但是,我只得到未知值作为输出。
下面是我编写的代码:
module refabs(b, a);
input wire [15:0] a;
output reg signed [15:0] b;
always @* begin
b = ((a < 0) ? -a : a);
end
endmodule
module testbench;
reg [15:0] a;
wire [15:0] b;
refabs abs(b, a);
initial begin
a = -30000;
begin
$display("refabs(%x) = %x", a, b);
end
end
endmodule
我最终得到的输出是:refabs(8ad0)= xxxx。 非常感谢您的帮助。
答案 0 :(得分:0)
在您的示例中,initial
块以0的延迟执行,而没有给always @*
一个执行的机会。
将$display
更改为$strobe
,或在$display
语句之前添加延迟。