2013-06-02 43 views
0

我有以下问题: 我需要乘,并添加各种std_logic_vectors并获得结果,可以是否定的或积极的。然后我必须检查结果:1.如果它是负值,我应该给它一个零值; 2.如果它大于255我应该给它一个值255; 3.如果它在0到255之间,它应该保持不变。 我正在使用8位std_logic向量。结果存储在16位std_logic_vector中(因为我有乘法和加法,所以这个值可以大于2^8(255)。所以,如果你有任何想法,请帮助。我不知道如何使用有符号的,无符号的值,因为在我的情况下,我必须使用两者,例如,我乘以-1,4等等 例如,我有:结果< = op1 *( - 1)+ op2 * 4 + op3 *( - 2)...我已经写出了负数作为整数,所以你知道它们是负数(-1 = x“ff”)。我应该使用哪些库?以及如何构造if ...那么... elsif ... then ... else ... end if; construction? 先谢谢了!我真的需要帮助!我想乘以有符号和无符号vhdl

+0

我解决了!谢谢! – fanciulla

+4

安娜,你为什么不告诉我们? – Fabrizio

回答

0

如果您使用numeric_std库,那么您需要将您的信号向量无论是有符号还是无符号。整数常量sho也不错。

如果信号可以是有符号的或无符号的(取决于另一个控制信号),并且您打算只推断出一个乘法器模块,那么一个简单的技巧可能会有所帮助:密钥是将总是有符号的乘法运算,但多用一个位操作数。附加位是由签名扩展(复制符号位)或零扩展(无符号操作数)生成的。所以新的一点,它是一个简单的“is_signed”控制信号和MSB位。我在一个用于FPGA的通用ALU中使用了它。

对于正8位数值的限制,我认为最好在签名结果上这样做。