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

问题描述 投票:0回答:1

我有以下问题:我需要乘以并添加各种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 ...然后......别...结束if;建设?提前谢谢!我真的需要帮助!

vhdl unsigned signed
1个回答
0
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.