首页 文章

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

提问于
浏览
0

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

1 回答

  • 0

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

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

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

相关问题