我希望在always@
块内获得一个带有时钟的寄存器绝对值,但是我得到前一个值的abs而不是当前值。
之前我看过this,这就是我在做的事情:
reg signed [7:0] x;
reg signed [7:0] xabs;
...
always @ (posedge CLK or posedge RST)
begin
...
if($signed(x) < 0)
xabs <= -$signed(x);
else
xabs <= x;
...
end
我有什么问题吗?
波形: waveform
答案 0 :(得分:0)
如果您使用always @posedge
,则会在xabs
分配后为x
分配一个周期。
如果您想在xabs
更改后立即更改x
,则可以使用立即触发的always @*
。
reg [32-1:0] xabs;
always @* begin
...
if($signed(x) < 0)
xabs = -$signed(x);
else
xabs = x;
...
end
我们可以使用xabs
电汇并使用assign
。
wire [32-1:0] xabs;
assign xabs = ($signed(x) < 0) ? -$signed(x) : x;