我是新来的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。任何帮助深表感谢。
在您的例子中,initial
块具有0延迟执行不给always @*
执行的机会。
要么改变你的$display
到$strobe
,或$display
语句之前增加一个延迟。