Почему оператор сумм так странно синтезирован?
У меня есть 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 нулевыми битами.