在VHDL中签名功能

时间:2014-10-11 18:05:36

标签: vhdl

我目前正在进行一项设计,其中我需要做sgn(x)* y,其中x和y都是有符号向量。使用带符号向量在VHDL中实现可合成sgn函数的首选方法是什么?我会在IEEE.math_real包中使用SIGN函数,但似乎我无法合成它。

2 个答案:

答案 0 :(得分:2)

您真的不需要签名功能来完成您的需要。在numeric_std中,最左边的位始终是signed类型的符号位。检查此位以确定是否需要否定y

variable z : signed(y'range);
...

if x(x'left) = '1' then -- Negative
  z := -y; -- z := -1 * y
else
  z := y; -- z := 1 * y
end if;

-- The same as a VHDL-2008 one-liner
z := -y when x(x'left) else y;

如果需要使用信号分配进行修改,请根据需要进行修改。

答案 1 :(得分:0)

如果您只对使用sign函数感兴趣,最好的选择是在程序中定义一个块,其输入是带符号的向量x,其输出是符号值的另一个位向量。

设计该块的方式是采用向量的最有意义的位,因为它指示符号。然后,如果你写的输出必须是一(1(0),其他 - >(0)或如何写)如果该位是0(正值或空值),或每个位是1(其他 - &gt ;(1))如果该位为1(负值)。

您还可以定义如果输入值为0,则输出也为0。