plesa 0 4 августа, 2011 Опубликовано 4 августа, 2011 · Жалоба Доброе время суток... Перевожу некоторые наработки с Max Plus'а в Quartus. Вот пример некторого модуля AHDL: PARAMETERS ( WIDTH = 16 ); SUBDESIGN ShiftRegZ ( CLK : input; LDn : input; Data[WIDTH-1..0]: input; Out[WIDTH-1..0]: output; Zero : output; ) VARIABLE Q[WIDTH-1..0] : dff; Ds[WIDTH-1..0] : node; QC[WIDTH-1..0] : node; BEGIN Q[].clk = clk; Q[].clrn = vcc; Ds[] = (Q[WIDTH-2..0], gnd); if(!LDn) then Q[] = Data[]; else Q[] = Ds[]; end if; QC[0] = carry(!Q[0]); for i IN 1 to WIDTH-1 generate QC[i] = carry( QC[i-1] and !Q[i] ); end generate; Zero = lcell(QC[WIDTH-1]); Out[] = Q[]; END; При компиляции в Max Plus - занимает 17 ячеек. При компиляции в Quartus 9.0 - 33 ячейки. Оптимизация везде Speed. Quartus отказывается впихивать CARRY в ячеки со соответствующими тригерами. Перебор вариантов опций в Quartus ничего не дал. Как победить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LV26 0 4 августа, 2011 Опубликовано 4 августа, 2011 · Жалоба Доброе время суток... Перевожу некоторые наработки с Max Plus'а в Quartus. Вот пример некторого модуля AHDL: PARAMETERS ( WIDTH = 16 ); SUBDESIGN ShiftRegZ ( CLK : input; LDn : input; Data[WIDTH-1..0]: input; Out[WIDTH-1..0]: output; Zero : output; ) VARIABLE Q[WIDTH-1..0] : dff; Ds[WIDTH-1..0] : node; QC[WIDTH-1..0] : node; BEGIN Q[].clk = clk; Q[].clrn = vcc; Ds[] = (Q[WIDTH-2..0], gnd); if(!LDn) then Q[] = Data[]; else Q[] = Ds[]; end if; QC[0] = carry(!Q[0]); for i IN 1 to WIDTH-1 generate QC[i] = carry( QC[i-1] and !Q[i] ); end generate; Zero = lcell(QC[WIDTH-1]); Out[] = Q[]; END; При компиляции в Max Plus - занимает 17 ячеек. При компиляции в Quartus 9.0 - 33 ячейки. Оптимизация везде Speed. Quartus отказывается впихивать CARRY в ячеки со соответствующими тригерами. Перебор вариантов опций в Quartus ничего не дал. Как победить? Переписать по-нормальному, без "умничанья" в виде абсолютно тут ненужных carry и тем более lcell. Это Ваш код? Или Вас кто-то хотел поразить "крутизной" оптимизации? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
plesa 0 4 августа, 2011 Опубликовано 4 августа, 2011 · Жалоба Переписать по-нормальному, без "умничанья" в виде абсолютно тут ненужных carry и тем более lcell. Это Ваш код? Или Вас кто-то хотел поразить "крутизной" оптимизации? Код мой, здесь в несколько упрощенном варианте. Был написан из-за необходимости впихнуть невпихуемое. Переписать? Нет смысла. Проще в таком случае и далее использовать MaxPlus для этих проектов. Конечно, сейчас на SV до такого не "опускаюсь". Но хочется разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slava_edf 0 11 января, 2012 Опубликовано 11 января, 2012 · Жалоба Проще в таком случае и далее использовать MaxPlus для этих проектов. Проще ! Я за. Я здесь комбинаторику тестировал http://project-ideas-yaroslav.blogspot.com...01_archive.html Пробуй через Netlist Writer витянуть Verilog code + додаэш модули как здесь http://project-ideas-yaroslav.blogspot.com...01_archive.html + у тебя еще будет DFF или DFFE. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться