我想在vhdl中多次签名和未签名

时间:2013-06-02 13:09:38

标签: vhdl unsigned signed

我有以下问题: 我需要乘法并添加各种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 ... then ... elsif ...然后......其他...结束if;施工? 先感谢您!我真的需要帮助!

1 个答案:

答案 0 :(得分:0)

如果使用numeric_std库,则需要将信号向量转换为有符号或无符号。整数常量也应该没问题。

如果信号可以是有符号或无符号(取决于另一个控制信号),并且您打算只推断一个乘法器块,那么一个简单的技巧可能会有所帮助: 关键是乘以总是有符号但在操作数上再使用一位。附加位由sign-extend进行签名(复制符号位)或零扩展为无符号操作数生成。所以新位是一个简单的AND“is_signed”控制信号并给定MSB位。我在FPGA的通用ALU中使用它。

对于限制为正8位值,我认为最好在签名结果上执行此操作。