[an error occurred while processing this directive]
Два вопроса к знающим Квартус и примитивы Альтеры
(«Телесистемы»: Конференция «Программируемые логические схемы и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Andy_P 08 апреля 2004 г. 12:33

Logic Elements семейств ACEX/APEX/FLEX в арифметическом режиме допускают одновременное использование Cascade и Carry цепей, если логика для их получения формируется из двух одних и тех же сигналов. Вот эту возможность я попытался использовать в приведенном ниже примере (AHDL) для функции компаратора двух 16 битных чисел. Компаратор имеет два выхода: «РАВНО» и «БОЛЬШЕ».
«РАВНО» использует Cascade Chain, а «БОЛЬШЕ» - Carry Chain. (На правильность работы даже не проверял – дело не в этом)
При компиляции в МАХ с установкой Global Project Logic Synthesis – Fast, чтобы разрешить использовать цепи переноса и каскадирования, результат: 17 LC и я достигаю желаемого: оба выхода функции используют одни и те же LC!
При компиляции в Квартус (2.2) никакими мне известными способами не удалось получить аналогичный результат. «РАВНО» использует одни LC, а «БОЛЬШЕ» - другие LC, но при этом цепи переноса и каскадирования имеют место!

ВОПРОС 1: как объяснить Квартусу сделать все на одних LC?

«Чем дальше, тем все страньше и страньше...» (Алиса в ...Квартусе)

При изучении рапорта в Квартусе: «примитивы CARRY заменены на CARRY_SUM»!
Зачем, если это ACEX???
Да, CARRY_SUM с двумя входами и выходами призваны поддержать спекулятивные цепи переноса в Cyclone & Stratix – это понятно, но здесь...???

ВОПРОС 2: объясните, пожалуйста, (лучше на примере) как обращаться с CARRY_SUM? Help меня не удовлетворил.

ПРИМЕР КОМПАРАТОРА

TITLE "Comparator of two 16 bits digits with A>B and A==B outputs";


-- ************************************************************************************************************
--
-- Comparator of two 16 bits digits with A>B and A==B outputs.
-- To minimize area, Carry and Cascade buffers in same Logics Cells are used extensively.
--
-- Specification:
--
-- Input data A and B width: 16 bits
-- Outputs: A > B and A == B
--
-- ************************************************************************************************************


SUBDESIGN cmp_cc
(
dataa[15..0] : INPUT; -- Data A to compare
datab[15..0] : INPUT; -- Data B to compare
AeB : OUTPUT; -- A == B
AgB : OUTPUT; -- A > B
)

VARIABLE

a_eq_b[15..0] : NODE; -- Output of Cascade buffers to derive A == B
a_gr_b[15..0] : NODE; -- Output of Carry buffers to derive A > B


BEGIN

FOR i IN 1 TO 14 GENERATE

-- A == B generation

a_eq_b[15 - i] = CASCADE( (dataa[15 - i] !$ datab[15 - i]) & a_eq_b[15 - 1 - i] );


-- A > B generation

a_gr_b[15 - i] = CARRY( dataa[15 - i] & !datab[15 - i]
# (dataa[15 - i] !$ datab[15 - i]) & a_gr_b[15 - 1 - i] );

END GENERATE;


-- A == B the first and the final stages

a_eq_b[0] = CASCADE(dataa[0] !$ datab[0]);

a_eq_b[15] = (dataa[15] !$ datab[15]) & a_eq_b[14];

AeB = a_eq_b[15];


-- A > B the first and the final stages

a_gr_b[0] = CARRY(dataa[0] & !datab[0]);

a_gr_b[15] = CARRY( dataa[15] & !datab[15]
# (dataa[15] !$ datab[15]) & a_gr_b[14] );

AgB = a_gr_b[15];

END;

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru