Matlab 为什么sum语句合成得如此奇怪?

Matlab 为什么sum语句合成得如此奇怪?,matlab,vhdl,hdl-coder,Matlab,Vhdl,Hdl Coder,我在FPGA开发板上有4个按钮,所以我写了 function [HEX0] = Bar(KEY) n = uint8(sum(KEY, 'native')); ... 不幸的是,HDL编码器将其转换为以下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' &a

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

function [HEX0] = Bar(KEY)
  n = uint8(sum(KEY, 'native'));
  ...
不幸的是,HDL编码器将其转换为以下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;

我就是不明白。你能帮我弄清楚这里发生了什么吗?

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

sum([true,true],'native')
这正是你的编码员所说的。for循环实现sum(
sum(KEY,'native')
),其中编码器认识到它可以使用OR实现


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

如果这真的与Matalb有关,你能告诉我怎么做,或者提供更多的上下文吗?@LuisMendo我不确定你在问什么。上面的代码是MATLAB。底部是MALTAB的HDL编码器给我的。@DmitriNesteruk:一些示例输入(包括数据类型)和预期行为总是有用的。我不确定你的m代码是否真的实现了你想要的。@DmitriNesteruk对不起,我的错。我从来没有见过
'native'
选项
sum
;我现在明白了,这就是让我困惑的地方。我想我一定需要
double
而不是
native
,对吗?@DmitriNesteruk:
n=sum(uint8(键),'native')uint8的本机和也是uint8。如果需要所有活动端口的总和,这是最简单的解决方案。我不知道你的目标系统是什么,但也许你应该避免双打。