Verilog中的绝对值(顺序设计)

时间:2018-01-17 23:41:40

标签: verilog

我希望在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

1 个答案:

答案 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;