vhdl - VHDL 如何确保使用尽可能小的加法器?
问题描述
我不想在综合后发现 32 位加法器用于某些操作,而不是实际需要的小得多的加法器。对于下面的代码,我是否需要将其拆分并将每个减法运算分配给适当大小的变量,以使合成避免默认使用 32 位加法器,还是需要更多步骤?
diff := diff +
abs(to_int(reference_window(i)(j)(15 downto 11)) - to_int(search_window(i)(j+k)(15 downto 11))) +
abs(to_int(reference_window(i)(j)(10 downto 5)) - to_int(search_window(i)(j+k)(10 downto 5))) +
abs(to_int(reference_window(i)(j)(4 downto 0)) - to_int(search_window(i)(j+k)(4 downto 0)));
to_int() 定义如下:
function to_int(a : std_logic_vector) return integer is
begin
return to_integer(unsigned(a));
end to_int;
我认为这可能是一个可能的答案,但如果有人发布一个提供特定规则的答案会更好,以确保您的代码不会意外合成为 32 位加法器。
red_diff := unsigned(abs(signed(unsigned(reference_window(i)(j)(15 downto 11))) - signed(unsigned(search_window(i)(j+k)(15 downto 11)))));
green_diff := unsigned(abs(signed(unsigned(reference_window(i)(j)(10 downto 5))) - signed(unsigned(search_window(i)(j+k)(10 downto 5)))));
blue_diff := unsigned(abs(signed(unsigned(reference_window(i)(j)(4 downto 0))) - signed(unsigned(search_window(i)(j+k)(4 downto 0)))));
diff := diff + red_diff + green_diff + blue_diff;
我必须使用看起来很奇怪的有符号(无符号())转换,因为 abs() 不接受 abs(无符号(a) - 无符号(b))
解决方案
推荐阅读
- ios - 为什么 Xcode 不是每 10 分钟更新一次远程引用?
- zip - 使用相同的父文件名重命名提取的文件
- python - 联合强化学习
- nlp - 我如何找到下面列出的尺寸?
- c# - 在 Puppeteersharp 中设置/更改/更改文本层
- javascript - 反应状态,Onclick第一次不会触发..只有第二次
- amazon-web-services - 如何在 docker 镜像中使用 AWS cli?
- json - 如何使用 Python 检查 JSON 字符串以获取列表?
- sql-server - 多个队列的 Service Broker 问题
- javascript - 数据表,使用下拉值导出到 excel