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