|
|
  |
Оптимизация AHDL в MAX+ PLUS II, ... |
|
|
|
Mar 31 2006, 13:35
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Привет всем! Только начинаю осваивать ПЛИС. Написал на AHDL код вот такого лог. элемента. Код subdesign sstv_decoder ( XI[7..0]: input = gnd; YI[10..0]: input = gnd; sync_pulse: output; clear_pulse: output; count_reset: output; )
variable level_sync: node; frame_sync: node; row_sync: node; clear_node: node;
begin
if((XI[] > 216) and (XI[] < 255)) then level_sync = vcc; else level_sync = gnd; end if;
if((XI[] > 17) and (XI[] < 255)) then frame_sync = vcc; else frame_sync = gnd; end if;
if((XI[] > 11) and (XI[] < 47)) then clear_node = vcc; else clear_node = gnd; end if;
if(((YI[0],XI[]) > 36) and ((YI[0],XI[]) < 511)) then row_sync = vcc; else row_sync = gnd; end if;
--count_reset section if(YI[] < 1250) then count_reset = vcc; else count_reset = gnd; end if;
--level and frame sync pulse section if((YI[] < 10) or ((YI[] > 619) and (YI[] < 634)) or (YI[] > 1243)) then clear_pulse = gnd; if((YI[] < 5) or ((YI[] > 624) and (YI[] < 630))) then sync_pulse = frame_sync; else sync_pulse = level_sync; end if; else sync_pulse = row_sync; clear_pulse = clear_node; end if; end; Ко входам IX и IY подключается 19-и разрядный счетчик, причем IX - младшие разряды счетчика. Старшие разряды ( от YI ) сбрасываются выходом count_reset. Вобщем то пока вся схема. Анализирую выходы sync_pulse и clear_pulse. После компиляции получилось задействованных 35 lcells, при чем 20 непосредственно в схеме. Для остальных компилятор применил термин shareable. Я так понимаю, что забрал у них входную логику а сами триггеры еще как то можно будет использовать в последствии. Так вот собственно вопрос. Есть ли какие то методы оптимизации кода, в частности, приведенного выше, или может быть есть какие то методы-приемы уменьшения расхода входной логики ячеек.
--------------------
|
|
|
|
|
Apr 2 2006, 09:02
|
Местный
  
Группа: Свой
Сообщений: 316
Регистрация: 20-02-05
Из: Ленинградская обл.
Пользователь №: 2 765

|
1. По моему невеликому опыту - необходимо учитывать структуру макроячеек той серии ПЛИС, для которой пишете. Например: где-то есть CASCADE, а где-то - нет, где-то можно пименить EXP, а где-то - пустой звук, и т.д.. 2. Мне кажется, что для многих сравнений нельзя надеяться на великий ум фиттера, т.к. сравниваете с константами, то можно было-бы ограничиться меньшим количеством разрядов ( ну, например, когда Вы проверяете на "больше, чем 216, то взять XI7 AND XI6 как флаг разрешения и сравнивать меньшее количество оставшихся разрядов ). 3. Где-то можно проинвертировать сравнение - например, там где >17. 4. Во многих местах встречается <255, поэтому, выделив отдельное сравнение на равенство всех разрядов 1 ( это можно сделать по "И" ), можно сделать общую границу для нескольких других сравнений.
Мне такая "ручная" оптимизация частенько помогала, правда, такие мои потуги могут быть вызваны и плохим знанием MaxPLUS'а.
|
|
|
|
|
Apr 3 2006, 11:31
|

Гуру
     
Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659

|
Цитата(Gate @ Apr 2 2006, 20:44)  По моему скромному мнению, здесь надо оптимизировать не локально - операторы языка, а глобально - способ проектирования: 1. Забыть ahdl и изучать verilog или vhdl 2. Изучить норм. симулятор и синтезатор, а в синтезаторе изучить, как задаются constrains и что такое critical path и как его оптимизировать 3. Квартус использовать только как place&route А вот когда Вы все это изучите, то можно уже заниматься грошовыми оптимизациями - экономить ячейки. Правда тогда Вам это не будет казаться таким важным. А если надо будет добиваться экстремального быстродействия - то изучать методы физического синтеза, управлять расположением блоков на кристалле и ручным расставлением логических ячеек. Спасибо за советы. Но для всего насоветованного надо много времени, как мне кажется. AHDL мне забывать не надо, я его и не знал, а программу написал по примерам, разобраться в простом (сдесь же только логика) не сложно. VHDL изучать, конечно, буду но параллельно. В любом случае, всем спасибо, кто откликнулся, все советы полезные!
--------------------
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|