|
|
  |
Особенности аппаратного синтеза конструкций 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 как шпаргалку по синтаксису, но никак не однозначный пример архитектурно зависимого кода.
--------------------
|
|
|
|
|
Mar 28 2016, 18:46
|

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

|
blackfin, спасибо за участие, но как раз про каналы асинхронного сброса мне известно из "Recommended HDL Coding Styles" (по сути часть той же книжки, что вы предложили). Вот сейчас мучает вопрос. В LAB есть так называемые LAB-Wide сигналы, так сказать широковещательные сигналы в пределах одного LAB. Среди них сигнал синхронной загрузки, сигнал синхронной очистки сигнал разрешения и другие (всего их 8). Когда делаешь HDL описания триггера (или регистра) и используешь эти сигналы у компилятора два пути, он может для создания этого функционала использовать LUT, а может непосредственно LAB-Wide. В книжке написано, что для того, что бы были задействованы именно LAB-Wide нужно делать описание с учетом приоритетов этих сигналов (имеется ввиду цепочка if (aclr).. else if(ena)...else if ... ), но у меня никак не получается задействовать эти сигналы и высвободить LUT. Код always @(posedge clk or posedge aclr) if (aclr) q <= 1'b0; else if(ena) if (sclr) q <= 0; else q <= d; Что я делаю не так?
--------------------
|
|
|
|
|
Mar 29 2016, 02:51
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(shamrel @ Mar 29 2016, 01:46)  Что я делаю не так? Ндя. мыши плакали, кололись....... (с) Сразу сказал вам, читайте хендбук и немного подумайте. В хендбуке черным по белому написано с какими кубиками вы работаете. Например для сыклона 3 Cyclone III Device Handbook -> 2. Logic Elements andLogic Array Blocks in Cyclone III Devices -> LABs -> Topology Цитата Each LAB consists of the following features: 16 LEs Cyclone III Device Handbook -> 2. Logic Elements and Logic Array Blocks in Cyclone III Devices -> LABs -> LAB Control Signals Цитата Each LAB contains dedicated logic for driving control signals to its LEs. The control signals include:
Two clocks Two clock enables Two asynchronous clears One synchronous clear One synchronous load
You can use up to eight control signals at a time. Register packing and synchronous load cannot be used simultaneously. Each LAB can have up to four non-global control signals. You can use additional LAB control signals as long asthey are global signals.
Synchronous clear and load signals are useful for implementing counters and other functions. The synchronous clear and synchronous load signals are LAB-wide signals that affect all registers in the LAB.
Each LAB can use two clocks and two clock enable signals. The clock and clock enable signals of each LAB are linked. For example, any LE in a particular LAB using the labclk1signal also uses the labclkena1. If the LAB uses both the rising and falling edges of a clock, it also uses both LAB-wide clock signals. Deasserting the clock enable signal turns off the LAB-wide clock. Смысл квартусу "убивать" 15 ть LE (т.к. их регистры после этого уже нельзя использовать), ради одного вашего триггера, если он может спокойно реализовать то, что вам надо, на люте?
--------------------
|
|
|
|
|
Mar 29 2016, 03:58
|

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

|
Цитата(des00 @ Mar 29 2016, 05:51)  Ндя. мыши плакали, кололись....... (с) Сразу сказал вам, читайте хендбук и немного подумайте. В хендбуке черным по белому написано с какими кубиками вы работаете. Например для сыклона 3
Смысл квартусу "убивать" 15 ть LE (т.к. их регистры после этого уже нельзя использовать), ради одного вашего триггера, если он может спокойно реализовать то, что вам надо, на люте? В общем, мыши -- странный народец. Хендбук читал и думал ... много. С архитектурой ячеек знаком. В том-то и дело, что проблема возникла не на сферическом триггере в вакуме, а с многоразрядными регистрами. Какой смысл квартусу "убивать" 16 ть LUT, если их можно заменить одной LAB-Wire ?
--------------------
|
|
|
|
|
Mar 30 2016, 03:06
|
Вечный ламер
     
Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453

|
Цитата(shamrel @ Mar 29 2016, 10:58)  В том-то и дело, что проблема возникла не на сферическом триггере в вакуме, а с многоразрядными регистрами. Какой смысл квартусу "убивать" 16 ть LUT, если их можно заменить одной LAB-Wire ? Зависит от логики проекта, заполненности плис, доступности ресурсов разводки, требований ко времянке. в каждом конкретном случае, квартус ведет себя так, как решает его оптимизатор. Не хотите от этого зависеть, используйте dffeas
--------------------
|
|
|
|
|
Mar 30 2016, 13:39
|

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

|
Цитата(myq @ Mar 30 2016, 16:05)  А что за use case такой, где надо иметь и асинхронный сброс и асинхронную установку?
Вообще есть рекомендации по написанию синтезируемого кода. Могу ошибаться, с Альтерой давно не работал, но Xilinx явно не рекомендует больше одного сброса/установки на триггер. Всё, что больше одного, имитируется с помощью увеличения LUT/FF Usage. Это был пример аппаратно зависимого синтеза. Алтера не рекомендует использовать одновременно асинхронный и синхронный сброс, это написано в хендбуке. Вопрос в другом. В идеале хочется делать код, который по минимуму зависит от платформы, а на практике получается, что для того, что бы все улеглось в кристалл оптимальным (по плотности и/или быстродействию) образом, требуется учитывать архитектуру. Причем реализации будут так нехило отличаться (сравниваю Stratix и Cyclone). Я удивлен? Нет, я не удивлен. Просто просил помощи с литературой, где были бы эти особенности доступно описаны. Хендбуки прочитаны, и на ПЛИС и на Квартус. Рекомендованные дизайны изучены. Вопросов осталось много. Как бы эти непонятки реализации текущего проекта не мешают, но хочется разобраться. Поэтому, в свободное время экспериментирую, составляю конспект.
--------------------
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|