реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Дерево IF - рекомендации альтеры, теория и практика
RHnd
сообщение Jul 19 2007, 15:33
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 518
Регистрация: 12-04-07
Из: Санкт-Петербург
Пользователь №: 26 997



Читаю Recommended HDL Coding Styles по ссылке http://www.altera.com/literature/hb/qts/qts_qii51007.pdf. Написано там примерно следующее (раздел multiplexers): если имеем длинное дерево if - else if - else if - else if, то рекомендуется попробовать перекодировать условия так, чтоб получить мультиплексоры 4-1 - это существенно может сэкономить ресурсы fpga. Даже пример приведен, показывающий уменьшение задействованных ресурсов на 20% (стр. 6-68). Вот у меня вопрос возник: для небольшого примера все примерно понятно, а как обстоит дело при разработке реальных проектов? Насколько критична такая оптимизация? Понятно, что дерево условий стараются разработать минимальной длинны (так ведь?), но занимаются ли разработчики перекодированием? В ручную-то делать - не самое быстрое и веселое занятие. Может, есть какой-то софт для подобных вещей? Вообщем, интересует мнение опытных людей по данному вопросу.
Go to the top of the page
 
+Quote Post
Doka
сообщение Jul 19 2007, 19:19
Сообщение #2


Electrical Engineer
******

Группа: СуперМодераторы
Сообщений: 2 163
Регистрация: 4-10-04
Пользователь №: 778



Цитата(RHnd @ Jul 19 2007, 19:33) *
Может, есть какой-то софт для подобных вещей?

софт есть: называется он - синтезатор..
ИМХО, для того чтобы он бы эффективным, необходимо стараться:
а) стараться по возможности уходить от вентильного описания к поведенческому где это возможно (дабы дать синтезатору свободу для творчества - возможность оптимальной имплементации схемы в заданный элементный базис)
б) не забывать про прагмы, например для того же case есть всяческие full_case, parallel_case для того чтобы донести синтезатору информацию о том, чего же мы таки хотим от него (в SV помоему еще больше - и распрастраняется и на if|else) - пользоваться ими где это уместно/необходимо.


--------------------
Блог iDoka.ru
CV linkedin.com/in/iDoka
Sources github.com/iDoka


Never stop thinking...........................
Go to the top of the page
 
+Quote Post
RHnd
сообщение Jul 19 2007, 20:53
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 518
Регистрация: 12-04-07
Из: Санкт-Петербург
Пользователь №: 26 997



Либо я не очень понимаю, что есть поведенческое описание, либо мой вопрос как раз к нему и относится. Приведу пример:
Код
always @(posedge clk) begin
  if (A)
    Logic1;
  else if (B)
    Logic2;
  else if (C)
    if (D)
      Logic3;
    else
      Logic4;
  else if (E)
    Logic5;
  else
    Logic 6;
end

Тогда мы имеем такую картинку (направо true, налево false, цифры в скобках понадобятся дальше):
Код
               A
              / \ (00)
             B    L1;
            /  \(01)
           C    L2;
      (11)/ \(10)
         /   D
        E   / \
       / \ L4  L3
      L6 L5

т.е. имеем проверку 4 условий.
Альтера предлагает сделать так:
Код
wire x = (!A) & (!B);
wire y = (!A) & (B | !C);

case {x,y}
     00: L1;
     01: L2;
     10:
         if (D) L3; else L4;
     11:
         if (E) L5; else L6;
endcase

и утверждает, что в этом случае будет существенная экономия ресурсов. Вот мне и интересно - кодирует ли кто-нить вот так x и y? Или оно того не стоит/синтезатор справляется?

PS: Перечитал мануал. Там в начале раздела есть ссылка, что квартус и сам справляется с задачей, но для лучшего понимания... и далее идет рассказ о перекодировании условий. smile.gif Но все равно, зато чему-то новому научился. smile.gif
Go to the top of the page
 
+Quote Post
Evil Archer
сообщение Jul 19 2007, 23:46
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 78
Регистрация: 1-12-05
Пользователь №: 11 662



Что-то мне кажется игра не стоит свеч. Значительная доля красоты HDL в независимости от конкретной элементной базы. Если речь идет о небольшом проекте, котрому суждено посмертно остаться на данной отдельно взятой технологии, то может конечно игра и стоит свеч, но как только речь заходит о дизайнах большого размера и тем более об IP-блоках, едва ли там такое вообще может быть полезно.
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Jul 20 2007, 09:46
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



Когда корпуса были большими, а объемы логики в них маленькими :-) я пробовал заниматься рационализацией логики на уровне элементарных функций. Для MAX7128S максимальный выйгрыш был 1-2 ячейки при полной загрузке, а то и вовсе было незаметно.
По собственному опыту могу сказать, что гораздо важнее последовательность "срабатывания" функций, на которые заведены быстрые сигналы, реализуемые по некой временной диаграмме.
Простейший пример:
IF not(CS) then -- если есть выбор кристалла
IF ADR[]==devADR[] then -- если совпадает адрес
IF not(RD) then outEN=VCC -- если команда чтения, то...
и запись
outEN=not(CS) & (ADR[]==devADR[]) & not(RD);
должны выполняться с разной скоростью, причём первый вариант вроде как быстрее. Однако, на практике они часто один в один совпадают :-)


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
CaPpuCcino
сообщение Jul 21 2007, 20:48
Сообщение #6


тоже уже Гуру
******

Группа: Свой
Сообщений: 2 047
Регистрация: 13-06-05
Из: Кёлн - Санкт-Петербург
Пользователь №: 5 973



Цитата(Doka @ Jul 19 2007, 23:19) *
б) не забывать про прагмы, например для того же case есть всяческие full_case, parallel_case для того чтобы донести синтезатору информацию о том, чего же мы таки хотим от него (в SV помоему еще больше - и распрастраняется и на if|else) - пользоваться ими где это уместно/необходимо.

ага вот это действительно может быть значимо (правда в СВ это уже не прагмы а ключевые слова - unique и priority): в некоторых ситуациях последнее действительно может давать более сложную логику


--------------------
И снова на арене цирка - дрессированные клоуны!! Оказываем консультации по электронике за симпу круглосуточно.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 2nd July 2025 - 03:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.10356 секунд с 7
ELECTRONIX ©2004-2016