【问题标题】:Why is a sum statement so bizarrely synthesized?为什么 sum 语句如此奇怪地合成?
【发布时间】:2014-05-16 15:38:12
【问题描述】:

我在 FPGA 开发板上有 4 个按钮,所以我写了

function [HEX0] = Bar(KEY)
  n = uint8(sum(KEY, 'native'));
  ...

不幸的是,HDL Coder 把它变成了下面的 VHDL 块:

y := '0';

FOR k IN 0 TO 3 LOOP
  y := y OR KEY(k);
END LOOP;

y_0 := '0' & '0' & '0' & '0' & '0' & '0' & '0' & y;

我就是不明白。你能帮我弄清楚这是怎么回事吗?

【问题讨论】:

  • 如果这真的与 Matalb 有关,你能告诉我是怎么回事,或者提供更多的上下文吗?
  • @LuisMendo 我不确定你在问什么。上面的代码是 MATLAB。底部是 MALTAB 的 HDL Coder 给我的。
  • @DmitriNesteruk:一些示例输入(包括数据类型)和预期的行为总是有用的。我不确定你的 m 代码是否真的实现了你想要的。
  • @DmitriNesteruk 对不起,我的错。我从未见过'native' 选项到sum;这就是让我困惑的地方

标签: matlab vhdl hdl-coder


【解决方案1】:

要理解这一点,您必须了解带有逻辑输入和本机选项的 matlab sum。逻辑的总和是一个逻辑。因此sum 可以替换为or

sum([true,true],'native')

这正是您的 Coder 推出的。 for 循环实现了求和 (sum(KEY, 'native')),编码人员认识到它可以使用 OR 来实现。

最后,从逻辑到 uint8 的转换是通过填充 7 个零位完成的。

【讨论】:

  • 谢谢,我现在明白了。我想我一定需要double 而不是native,对吧?
  • @DmitriNesteruk:n = sum(uint8(KEY), 'native'); uint8 的本机总和又是一个 uint8。如果您想要所有活动端口的总和,这是最简单的解决方案。我不知道你的目标系统是什么,但也许你应该避免双打。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-19
  • 2011-05-29
  • 2018-07-21
  • 1970-01-01
  • 2021-11-01
  • 1970-01-01
相关资源
最近更新 更多