|
Особенности аппаратного синтеза конструкций Verilog, Quartus II, Cyclone IV |
|
|
|
Mar 26 2016, 09:26
|

Частый гость
 
Группа: Свой
Сообщений: 132
Регистрация: 10-10-07
Из: Новосибирск
Пользователь №: 31 229

|
Приветствую! Нужна литература. Видимо с английским у меня все плохо: не могу грамотно сформулировать вопрос гуглу. Потому прошу подсказать литературу. Device Handbook и "Recommended HDL Coding Styles" уже прочитаны. Хочется большего. Суть вопроса. В силу аппаратных особенностей ПЛИС (структура LE, LUT, LAB) некоторые конструкции синтезируются оптимальным образом, достигается максимальное быстродействие и плотность упаковки, а какие-то нет. Например, если в триггере логического элемента есть асинхронный сброс, то конструкция: Код always @ (posedge reset or posedge clk) if(reset) q <= 0; else q <= x; Займет один LAB, но если добавить еще и асинхронную установку, то схема займет уже 4 LE: Код always @ (posedge reset or posedge set or posedge clk) if(reset) q <= 0; else if (set) q <= 1; ekse q <= x; А вот если set убрать из списка чувствительности, то опять 1 LE. Или как лучше оформить выражение, что бы был задействован вход ENA триггера, а не обратная связь? И много подобны вопросов. Оно мне понятно почему и как, но где об этом почитать подробнее? Кое-что есть в "Advanced Synthesis Cookbook", но это для Stratix. Уж очень он от Cyclone отличается.
--------------------
|
|
|
|
|
 |
Ответов
|
Mar 28 2016, 03:13
|
Знающий
   
Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650

|
Цитата(shamrel @ Mar 26 2016, 15:26)  Приветствую! Нужна литература. Видимо с английским у меня все плохо: не могу грамотно сформулировать вопрос гуглу. Потому прошу подсказать литературу. Device Handbook и "Recommended HDL Coding Styles" уже прочитаны. Хочется большего. Суть вопроса. В силу аппаратных особенностей ПЛИС (структура LE, LUT, LAB) некоторые конструкции синтезируются оптимальным образом, достигается максимальное быстродействие и плотность упаковки, а какие-то нет. Например, если в триггере логического элемента есть асинхронный сброс, то конструкция: Код always @ (posedge reset or posedge clk) if(reset) q <= 0; else q <= x; Займет один LAB, но если добавить еще и асинхронную установку, то схема займет уже 4 LE: Код always @ (posedge reset or posedge set or posedge clk) if(reset) q <= 0; else if (set) q <= 1; ekse q <= x; А вот если set убрать из списка чувствительности, то опять 1 LE. Или как лучше оформить выражение, что бы был задействован вход ENA триггера, а не обратная связь? И много подобны вопросов. Оно мне понятно почему и как, но где об этом почитать подробнее? Кое-что есть в "Advanced Synthesis Cookbook", но это для Stratix. Уж очень он от Cyclone отличается. Ваш случай может происходить, например, из-за неоптимального (с точки зрения архитектуры) приоритета между set и reset. С этой точки зрения полезно поглядеть темплейты - там все эти тонкости учтены.
|
|
|
|
|
Mar 28 2016, 04:04
|

Частый гость
 
Группа: Свой
Сообщений: 132
Регистрация: 10-10-07
Из: Новосибирск
Пользователь №: 31 229

|
Цитата(Bad0512 @ Mar 28 2016, 06:13)  Ваш случай может происходить, например, из-за неоптимального (с точки зрения архитектуры) приоритета между set и reset. С этой точки зрения полезно поглядеть темплейты - там все эти тонкости учтены. Я бы не стал доверять темплейтам, как-то раз захотел взять оттуда знаковый сумматор, а там флаг переноса объявлен как unsigned, и без приведения суммируется со знаковыми операндами. А мы ведь знаем, что в Verilog, если хотя бы один аргумент выражения беззнаковый, то и результат будет беззнаковым, и сумматор в итоге неверно распространял знаковый разряд. Обида прошла, но осадочек остался. Кроме того, Template не всегда учитывают архитектуру: им все равно, 4-х входовый LUT у ПЛИС, или 6-ти ... А разница существенна. Плюс, в некоторых архитектурах в LE включены выделенные полные сумматоры, а в некоторых нет. Так на стратикс можно одновременно складывать три вектора, а вот в циклоне, лучше конвейер сделать, если, конечно, важно быстродействие. Так что, я бы рекомендовал, рассматривать Template как шпаргалку по синтаксису, но никак не однозначный пример архитектурно зависимого кода.
--------------------
|
|
|
|
Сообщений в этой теме
shamrel Особенности аппаратного синтеза конструкций Verilog Mar 26 2016, 09:26 des00 Цитата(shamrel @ Mar 26 2016, 17:26) но г... Mar 26 2016, 10:58 blackfin Цитата(shamrel @ Mar 26 2016, 13:26) Пото... Mar 28 2016, 04:14 shamrel blackfin, спасибо за участие, но как раз про канал... Mar 28 2016, 18:46  des00 Цитата(shamrel @ Mar 29 2016, 01:46) Что ... Mar 29 2016, 02:51   shamrel Цитата(des00 @ Mar 29 2016, 05:51) Ндя. м... Mar 29 2016, 03:58    des00 Цитата(shamrel @ Mar 29 2016, 10:58) В то... Mar 30 2016, 03:06 myq А что за use case такой, где надо иметь и асинхрон... Mar 30 2016, 12:05 des00 Цитата(myq @ Mar 30 2016, 19:05) но Xilin... Mar 30 2016, 12:18  blackfin Цитата(des00 @ Mar 30 2016, 15:18) от сем... Mar 30 2016, 12:58 shamrel Цитата(myq @ Mar 30 2016, 16:05) А что за... Mar 30 2016, 13:39 Corner Как показала практика, если код изначально написан... Apr 3 2016, 19:22
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|