Общие вопросы по HDL и САПР

Общие вопросы по HDL и САПР

Сообщение MIX@ » 09 ноя 2008, 23:15

Доброго времени суток!

Разбираясь с Quartus 8.0 не нашёл в нём возможности симуляции HDL-моделей.
Единственное что нашёл - симуляцию временных диаграмм, и то все входные сигналы нужно вводить руками.
Отсюда вопрос - действительно ли в Квартусе нет средств полноценного моделирования?
Под полноценным моделированием понимаю написание тестбенча, который бы автоматом генерировал тестовые входные воздействия, а пользователь бы уже анализировал результаты посредством systemtask ($display, $monitor, etc) и/или временных диаграмм.
Аватара пользователя
MIX@
 
Сообщения: 115
Зарегистрирован: 08 апр 2008, 11:57

Re: Общие вопросы по HDL и САПР

Сообщение Интегральный вычислитель » 09 ноя 2008, 23:43

Может попробуете подкрутить к нему Modelsim? Там есть такая возможность..

P/S в ближайшее время посмотрю поподробнее (тоже с quartus'ом воюю)
I Have Seen The Truth And It Doesn't Make Any Sense
Аватара пользователя
Интегральный вычислитель
 
Сообщения: 561
Зарегистрирован: 02 апр 2008, 16:04
Откуда: из Леса

Re: Общие вопросы по HDL и САПР

Сообщение Соратник слонопотама » 10 ноя 2008, 15:59

Да, Квартус не умеет симулировать HDL-тестбенчи (в отличие от Xilinx ISE), для этого к нему прикручивают Modelsim Altera Edition :D
Аватара пользователя
Соратник слонопотама
 
Сообщения: 250
Зарегистрирован: 16 апр 2008, 13:18

Re: Общие вопросы по HDL и САПР

Сообщение MIX@ » 30 янв 2009, 02:18

Столкнулся с потребностью защёлкивать один из выходных сигналов FSM, удобнее всего это делать в самом описании FSM.
Мой автомат реализован с помощью двух always блоков (типичный автомат Мили): 1 для генерации комбинаторной логики (генерация выходных сигналов на переходах и самих переходов между состояниями) и 1 для регистра состояния автомата. Так вот в комбинаторном блоке я и хочу защёлкнуть один из сигналов, соответсвенно, опускаю его описание в некоторых ветвях case. После чего синтезатор Synplify заботливо предупреждает о возможной нежелательной защёлке. Возможно ли отключить такое предупреждение для некоторых переменных? Сейчас этот ворнинг не проблема, но когда прожект разрастётся - будет сильно надоедать.
Аватара пользователя
MIX@
 
Сообщения: 115
Зарегистрирован: 08 апр 2008, 11:57

Re: Общие вопросы по HDL и САПР

Сообщение Соратник слонопотама » 30 янв 2009, 10:57

MIX@ писал(а):Столкнулся с потребностью защёлкивать один из выходных сигналов FSM, удобнее всего это делать в самом описании FSM.
Мой автомат реализован с помощью двух always блоков (типичный автомат Мили): 1 для генерации комбинаторной логики (генерация выходных сигналов на переходах и самих переходов между состояниями) и 1 для регистра состояния автомата. Так вот в комбинаторном блоке я и хочу защёлкнуть один из сигналов, соответсвенно, опускаю его описание в некоторых ветвях case. После чего синтезатор Synplify заботливо предупреждает о возможной нежелательной защёлке. Возможно ли отключить такое предупреждение для некоторых переменных? Сейчас этот ворнинг не проблема, но когда прожект разрастётся - будет сильно надоедать.

Йа так думаю, что вопрос об отключении конкретных предупреждений надо бы искать в документации на "Симплифай", ибо вряд ли тут много народу, который им пользуется и, помимо этого, еще и в курсе подобных тонкостей ) Но вообще, скорее всего, это предупреждение свидетельствует о неаккуратном стиле описания таких автоматов. Можно попробовать что-нибудь более поведенческое. Синтезатор - умная штука, он сам отлично умеет генерить автоматы, оптимизировать состояния, кодировать их номера для улучшения тестопригодности и т.д. :) Мало того, в случае с ПЛИС всё равно почти вся комбинационная логика будет засунута в LUT-ы, поэтому ничего странного, что он удивляется, откуда в комбинационной схеме появился регистр :D

Вообще, было бы неплохо глянуть на код :)
Аватара пользователя
Соратник слонопотама
 
Сообщения: 250
Зарегистрирован: 16 апр 2008, 13:18

Re: Общие вопросы по HDL и САПР

Сообщение MIX@ » 02 фев 2009, 04:01

Соратник слонопотама писал(а):Йа так думаю, что вопрос об отключении конкретных предупреждений надо бы искать в документации на "Симплифай", ибо вряд ли тут много народу, который им пользуется и, помимо этого, еще и в курсе подобных тонкостей )

В доках на эту тему написано только как добавить ворнинг в фильтр, однако в итоговом отчёте он от этого всё равно не устранится. Про директивы, разрешающие порождение защёлок - ни слова. Хм, а чем ещё пользоваться для синтеза - не квартусом же.

Соратник слонопотама писал(а):Но вообще, скорее всего, это предупреждение свидетельствует о неаккуратном стиле описания таких автоматов. Можно попробовать что-нибудь более поведенческое. Синтезатор - умная штука, он сам отлично умеет генерить автоматы, оптимизировать состояния, кодировать их номера для улучшения тестопригодности и т.д. :) Мало того, в случае с ПЛИС всё равно почти вся комбинационная логика будет засунута в LUT-ы, поэтому ничего странного, что он удивляется, откуда в комбинационной схеме появился регистр :D


Тут даже дело не в стиле описания, а в том, что без защёлки в моём случае не обойтись. Кстати, если в LE используется только LUT-ы, но не используется триггер - он уже не может использоваться как обособленный элемент памяти для связи с триггерами или LUT других ячеек?

Соратник слонопотама писал(а):Вообще, было бы неплохо глянуть на код :)

http://crypt.org.ru/~mixa/project/hex_loader/uart/uart_receiver.v
Собственно, изобретаю свой велосипед - ни одна из увиденных реализаций не пришлась по душе.
Сейчас подправил стиль кодирования автомата, однако проблема от этого не исчезла - нужно, чтобы в состоянии IDLE переменная ready сохраняла своё предыдущее значение, иначе говоря защёлкивалась. Как это реализовать более эффективно?
Аватара пользователя
MIX@
 
Сообщения: 115
Зарегистрирован: 08 апр 2008, 11:57

Re: Общие вопросы по HDL и САПР

Сообщение Соратник слонопотама » 02 фев 2009, 12:17

MIX@ писал(а):Хм, а чем ещё пользоваться для синтеза - не квартусом же.


Можно Симплифаем, и Квартусом, и XST (синтезатор в Xilinx ISE), и Precision'ом (он в 369а стоит), и ABC'ом - а патом сравнить и родить мега-научное исследование =)

Тут даже дело не в стиле описания, а в том, что без защёлки в моём случае не обойтись. Кстати, если в LE используется только LUT-ы, но не используется триггер - он уже не может использоваться как обособленный элемент памяти для связи с триггерами или LUT других ячеек?


Если без защелки не обойтись, нужно как-то явно дать это понять синтезатору. Директивой какой али нужным стилем программирования - уже не столь важно ). Насчет триггера в LE - это все зависит от структуры LE. У разных производителей она разная, мало того, в разных семействах ПЛИС одного производителя она тоже разная. Что еще хуже, в документации могут быть описаны не все возможности коммутации сигналов и элементов, например, при задействованном LUT-е триггер, может быть, можно использовать в качестве распределенного ОЗУ, но этого может и не быть в документации, ибо считается, что юзеру этого знать не треба :D - когда вставляешь мегафункцию памяти, можно выбирать, реализывать ее с использованием отдельных банков ОЗУ или с использованием распределенного ОЗУ, и в последнем случае синтезатор сам распихивает биты по триггерам в LE-ах, значит, у него есть для этого какие-то возможности. Кстати, может, в качестве распределенного ОЗУ используется сам LUT

http://crypt.org.ru/~mixa/project/hex_loader/uart/uart_receiver.v
Собственно, изобретаю свой велосипед - ни одна из увиденных реализаций не пришлась по душе.
Сейчас подправил стиль кодирования автомата, однако проблема от этого не исчезла - нужно, чтобы в состоянии IDLE переменная ready сохраняла своё предыдущее значение, иначе говоря защёлкивалась. Как это реализовать более эффективно?

Погляжу на досуге. Кстати, сразу, что такое baud16?
Аватара пользователя
Соратник слонопотама
 
Сообщения: 250
Зарегистрирован: 16 апр 2008, 13:18

Re: Общие вопросы по HDL и САПР

Сообщение MIX@ » 03 фев 2009, 02:06

Соратник слонопотама писал(а):Можно Симплифаем, и Квартусом, и XST (синтезатор в Xilinx ISE), и Precision'ом (он в 369а стоит), и ABC'ом - а патом сравнить и родить мега-научное исследование =)

Думаю, что результат на 90% можно предсказать без исследований - Simplify и/или Precision займут пьедестал почёта. Хотя бы за счёт универсальности - Symplify, например, поддерживает великое множество серий FPGA разных разработчиков. Да и качество синтеза квартуса и симплифай на данный момент тоже отличается в пользу последнего. Полагаю, ситуация с синтезатором от Xilinx и Precision аналогична. Ну а университетская разработка тихо помирает...
Однако ж я не знал про существование ABC - главная ценность которой, на мой взгляд - открытость, а как следствие - кроссплатформенность.
Можно скрестить ABC, Icarus Verilog, GTKWave и получится какая-никакая среда разработки под открытые ОС. Думаю, что это будет полезнее чем проводить сомнительные эксперименты над коммерческими синтезаторами.

Соратник слонопотама писал(а):Если без защелки не обойтись, нужно как-то явно дать это понять синтезатору. Директивой какой али нужным стилем программирования - уже не столь важно ).

Меня сильно раскритиковали на electronix.ru, когда я напрямую спросил об использовании защёлок. Советовали воздержаться от их использования в реальных проектах. Правда я так и не понял почему, но таю надежды на уточнение этой ситуции :( Только не совсем ясно, как тогда реализовывать "регистровые" выходные воздействия от FSM, да ещё и без задержек.

Соратник слонопотама писал(а):Насчет триггера в LE - это все зависит от структуры LE. У разных производителей она разная, мало того, в разных семействах ПЛИС одного производителя она тоже разная. Что еще хуже, в документации могут быть описаны не все возможности коммутации сигналов и элементов, например, при задействованном LUT-е триггер, может быть, можно использовать в качестве распределенного ОЗУ, но этого может и не быть в документации, ибо считается, что юзеру этого знать не треба :D - когда вставляешь мегафункцию памяти, можно выбирать, реализывать ее с использованием отдельных банков ОЗУ или с использованием распределенного ОЗУ, и в последнем случае синтезатор сам распихивает биты по триггерам в LE-ах, значит, у него есть для этого какие-то возможности. Кстати, может, в качестве распределенного ОЗУ используется сам LUT

Иными словами - отчёт об использовании ресурсов FPGA, выдаваемый синтезатором, содержит весьма приблизительные цифры?
Поглядел в список директив Simplify - вроде бы написано, что он умеет размещать регистровые файлы в блочной памяти, а не на триггерах.
Каким образом LUT может использоваться в качестве элемента ОЗУ? Разве его единственное предназначение - не комбинаторное преобразование?

Соратник слонопотама писал(а):Погляжу на досуге. Кстати, сразу, что такое baud16?

Благодарствую.
baud16 - это частота baud умноженная на 16, иначе говоря частота семплирования, взятая с коэффициентом - 16. По началу взял 64, но понял, что перегнул :o Будет генерироваться в отдельном модуле baud_gen - так будет проще масштабировать в будущем.
Аватара пользователя
MIX@
 
Сообщения: 115
Зарегистрирован: 08 апр 2008, 11:57

Re: Общие вопросы по HDL и САПР

Сообщение Соратник слонопотама » 03 фев 2009, 10:34

MIX@ писал(а):Думаю, что результат на 90% можно предсказать без исследований - Simplify и/или Precision займут пьедестал почёта. Хотя бы за счёт универсальности - Symplify, например, поддерживает великое множество серий FPGA разных разработчиков. Да и качество синтеза квартуса и симплифай на данный момент тоже отличается в пользу последнего. Полагаю, ситуация с синтезатором от Xilinx и Precision аналогична. Ну а университетская разработка тихо помирает...
Однако ж я не знал про существование ABC - главная ценность которой, на мой взгляд - открытость, а как следствие - кроссплатформенность.
Можно скрестить ABC, Icarus Verilog, GTKWave и получится какая-никакая среда разработки под открытые ОС. Думаю, что это будет полезнее чем проводить сомнительные эксперименты над коммерческими синтезаторами.


Первое - универсальность синтезатора в отношении числа поддерживаемых серий FPGA не имеет никакого отношения к его синтезаторским качествам ;) Поддержка какой-нибудь новой FPGA требует всего лишь подключения соответствующей технологической библиотеки с описанием структурной организации микросхемы и временными задержками её логических ячеек и трассировочных каналов.
Второе - честно говоря, не верю, что студент может осилить такой проект, на котором реально проявятся отличия вышеперечисленных синтезаторов (за исключением, пожалуй, ABC - я его еще не мучал). Когда речь пойдет о десятках тысяч логических ячеек - возможно, качество синтеза и станет заметно отличимым, и то не в локальном, а в глобальном масштабе, да и то при условии наличия кучи временных и прочих ограничений и всего того, что так осложняет жысть синтезатору =) Так что пока не увижу своими глазами сравнительное исследование результатов синтеза того же Квартуса и Симплифая - не поверю :)
Третье - я бы не был столь категоричным в оценке университетских разработок, ибо велик шанс, что через пару-тройку лет они окажутся внутри вполне себе коммерческих синтезаторов, ибо если посмотреть на штат некоторых кафедр, балующихся тихо помирающими исследованиями, то там можно обнаружить основателей таких небезызвестных фирм, как Synopsys и Cadence :evil: Плюс к тому, не удивлюсь, что даже в таком сыром виде, как сейчас, ABC, возможно, даст в некоторых случаях фору другим синтезаторам =) Что касается среды разработки с использованием открытого софта, то есть один нюанс - где взять открытые технологические библиотеки? =)

З.Ы. Кстати, Синопсис купил Синплисити вместе со всеми потрохами (типа Симплифая).
Аватара пользователя
Соратник слонопотама
 
Сообщения: 250
Зарегистрирован: 16 апр 2008, 13:18

Re: Общие вопросы по HDL и САПР

Сообщение Соратник слонопотама » 03 фев 2009, 10:53

MIX@ писал(а):Меня сильно раскритиковали на electronix.ru, когда я напрямую спросил об использовании защёлок. Советовали воздержаться от их использования в реальных проектах. Правда я так и не понял почему, но таю надежды на уточнение этой ситуции :( Только не совсем ясно, как тогда реализовывать "регистровые" выходные воздействия от FSM, да ещё и без задержек.

Потому что, в первую очередь с целью устранения метастабильности, в FPGA крайне желательно реализовывать синхронные схемы. Синхронная схема в общем виде - это несколько триггеров (ну или регистров) с управлением по фронту и комбинационная логика между ними, причем триггера тактируются от одного и того же тактового сигнала. Вся штука в том, что триггера с управлением по фронту аппаратно реализованы в FPGA, а триггера с управление по уровню (защелки) - нет, поэтому, во-первых, на них будет потрачено больше ресурсов, и, во-вторых, как раз может появиться метастабильность.
Аватара пользователя
Соратник слонопотама
 
Сообщения: 250
Зарегистрирован: 16 апр 2008, 13:18

Re: Общие вопросы по HDL и САПР

Сообщение Соратник слонопотама » 03 фев 2009, 11:10

MIX@ писал(а):Иными словами - отчёт об использовании ресурсов FPGA, выдаваемый синтезатором, содержит весьма приблизительные цифры?
Поглядел в список директив Simplify - вроде бы написано, что он умеет размещать регистровые файлы в блочной памяти, а не на триггерах.
Каким образом LUT может использоваться в качестве элемента ОЗУ? Разве его единственное предназначение - не комбинаторное преобразование?

Синтезатор - он ведь как пчела, никогда не знаешь, что у него на уме :crazy: Так что отчёт содержит точные цифры, просто они довольно сложно прогнозируемы.
Насчет LUT. Её предназначение - комбинаторное преобразование. Но фактически она просто таблица истинности. Если у нас 4-входовой LUT, то в таблице истинности должно быть 16 строк. Для каждой строки в LUT-е есть триггер, хранящий вычисленное на этапе синтеза значение некоторой функции, которую выполняет наша LUT. Соответственно, если LUT не используется, 16 бит отличной статической памяти простаивают =) Может быть, их можно как-то использовать :unknown:
Аватара пользователя
Соратник слонопотама
 
Сообщения: 250
Зарегистрирован: 16 апр 2008, 13:18

Re: Общие вопросы по HDL и САПР

Сообщение MIX@ » 11 фев 2009, 19:04

Стал прикручивать сброс и столкнулся с проблемой.

Собственно, сброс:

Код: Выделить всё
module internal_reset(clk,rst);
   input clk;
   output rst;
   
   reg [24:0] rst_cnt;
   wire rst = &rst_cnt;
   always @(posedge clk)
      if (!rst) rst_cnt <= rst_cnt + 1;
   
endmodule


Сделал по подобию сброса в тестовой прошивке.

После синтеза Sinplify выдаёт ворнинги в которых говорит, что старшие 4 разряда rst_cnt нафик не нужны (дескать, они всегда в 1), при этом приводя в качестве примера аналогичной ошибки следующее:

In the test case below, signal out is tied to 0 because the if condition always has zero results.
module async1 (out1, clk, g, d);
output out1;
reg out;
input g, d,clk;

always @ (posedge clk)
if (g & d)
out1 = !g & out1; // signal out1 is used in the R.H.S and L.H.S
else
out1 = out1; // of the expression and no clock is defined
endmodule


Как связаны мой случай и приведённый - не понимаю.

По началу думал, что не успевает отрабатывать за затребованное время (40 MHz), но судя по логам запас есть и немальнький.
В чём может быть дело?

Прилагаю:
logs.zip
Логи после синтеза
(6.87 Кб) Скачиваний: 338

internal_rst_syn.JPG
Результаты синтеза (RTL)
internal_rst_syn.JPG (21.08 Кб) Просмотров: 12203
Аватара пользователя
MIX@
 
Сообщения: 115
Зарегистрирован: 08 апр 2008, 11:57

Re: Общие вопросы по HDL и САПР

Сообщение Соратник слонопотама » 11 фев 2009, 23:25

Можно попробовать так:
Код: Выделить всё
module internal_reset(clk,rst);
   input clk;
   output reg rst;
   
   reg [24:0] rst_cnt;
        always @(posedge clk)
                rst = &rst_cnt[24:1];
   always @(posedge clk)
      if (!rst) rst_cnt <= rst_cnt + 1;
   
endmodule
Аватара пользователя
Соратник слонопотама
 
Сообщения: 250
Зарегистрирован: 16 апр 2008, 13:18

Re: Общие вопросы по HDL и САПР

Сообщение MIX@ » 12 фев 2009, 21:49

Всё оказалось проще:

Код: Выделить всё
reg [24:0] rst_cnt = 25'b0


Кстати, защёлка без вопросов воспринимается Sinplify только таким макаром:

Код: Выделить всё
assign latch = en ? data_in : latch


Но в поведенческий блок её никак не всунуть.
Аватара пользователя
MIX@
 
Сообщения: 115
Зарегистрирован: 08 апр 2008, 11:57

Re: Общие вопросы по HDL и САПР

Сообщение MIX@ » 07 дек 2009, 23:41

Представился случай проверить синтезаторы от Xilinx (Xst) и Sinplicity (Synplify)

Пытался синтезировать следующую конструкцию:
Код: Выделить всё
integer i;
reg [4:0] counter;
always @(ALU_OUT_TRUE_FORM)
begin
   counter = 0;
   begin: zero_count
      for (i=1; i<26; i=i+1)
         if (ALU_OUT_TRUE_FORM[i] == 1'b0) counter = counter + 1;
         else disable zero_count;
   end
end


Результаты:
XST сдался, выдав ошибку: Disable statement not supported in a for loop.
Synplify, как и положено, построил шифратор.
Аватара пользователя
MIX@
 
Сообщения: 115
Зарегистрирован: 08 апр 2008, 11:57

Re: Общие вопросы по HDL и САПР

Сообщение Соратник слонопотама » 08 дек 2009, 00:17

Глупо ожидать от XST превосходных качеств - Xilinx не может вкладывать в бесплатный (в крайнем случае - недорогой) софт столько же ресурсов, сколько вкладывают конторы, живущие за счет разработки и продажи программ. Вообще удивительно, зачем Xilinx разрабатывает свой синтезатор вместо того, чтобы продавать чужие OEM-версии (например, Actel так и делает)?
Аватара пользователя
Соратник слонопотама
 
Сообщения: 250
Зарегистрирован: 16 апр 2008, 13:18


Вернуться в Языки описания аппаратуры (HDL)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron