|
Особенности аппаратного синтеза конструкций 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, 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
--------------------
|
|
|
|
Сообщений в этой теме
shamrel Особенности аппаратного синтеза конструкций Verilog Mar 26 2016, 09:26 des00 Цитата(shamrel @ Mar 26 2016, 17:26) но г... Mar 26 2016, 10:58 Bad0512 Цитата(shamrel @ Mar 26 2016, 15:26) Прив... Mar 28 2016, 03:13 shamrel Цитата(Bad0512 @ Mar 28 2016, 06:13) Ваш ... Mar 28 2016, 04:04 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
|
|
|