Почему оператор сумм так странно синтезирован?

У меня есть 4 кнопки на плате разработки FPGA, поэтому я написал

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;

Который я просто не понимаю. Можете ли вы помочь мне выяснить, что здесь происходит?

1 ответ

Решение

Чтобы понять это, вы должны понимать Matlab sum с логическими входами и родной опцией. Сумма логики является логической. таким образом sum может быть заменен на or

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

И это именно то, что выдает ваш кодер. Цикл for реализует сумму (sum(KEY, 'native')), где кодер распознает, что это может быть реализовано с использованием ИЛИ.

Наконец, преобразование из логического в uint8 выполняется с заполнением 7 нулевыми битами.

Другие вопросы по тегам