[an error occurred while processing this directive]
|
Установил Quartus4+SP1 и скомпилировал пример, о котором писал раннее
http://www.telesys.ru/wwwboards/fpga/127/messages/41470.shtml
Результат аналогичный Q2.2 - 33LC. CARRY и CASCADE цепи раскладываются
на отдельные независимые LC. Компилятор так же меняет CARRY на CARRY_SUM.
Описание последнего такое же неполное.
По библиотечному addcore.tdf разобрался как работать с CARRY_SUM и переписал
пример с использованием CARRY_SUM.
Цепь переноса для i-го разряда:
a_gr_b[15 - i].cin = dataa[15 - i] & !datab[15 - i]
# (dataa[15 - i] !$ datab[15 - i]) & a_gr_b[15 - 1 - i].cout;
Цепь каскадирования для i-го разряда:
Вариант1
a_eq_b[15 - i] = CASCADE((dataa[15 - i] !$ datab[15 - i]) & a_eq_b[15 - 1 - i]);
Результат: CARRY и CASCADE цепи раскладываются на отдельные независимые LC.
Входы dataа и datab подключаются к LC от входных выводов.
Вариант2
a_gr_b[15..0] : CARRY_SUM;
a_gr_b[15 - i].sin = (dataa[15 - i] !$ datab[15 - i]);
a_eq_b[15 - i] = CASCADE(a_gr_b[15 - i].sout & a_eq_b[15 - 1 - i]);
Результат: образуется CARRY цепь, CASCADE цепи нет, вместо чего на отдельных LC
реализована заданная функция, но при этом использующая промежуточный результат
(dataa[15 - i] !$ datab[15 - i]), полученный в цепи CARRY.
Вариант3
a_gr_b[15 - i].sin = CASCADE((dataa[15 - i] !$ datab[15 - i]) & a_gr_b[15 - 1 - i].sout);
Результат: нет обоих цепей! Предупреждение компилятора о невозможности запитать порт sin выходом CASCADE.
Если у вас есть иные варианты или новости по этой теме, дайте знать.
Буду очень признателен!
E-mail: info@telesys.ru