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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Метод HDL-описания в модулях XILINX и других.
Олег Гаврильченк...
сообщение Dec 1 2017, 09:50
Сообщение #1


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

Группа: Участник
Сообщений: 161
Регистрация: 10-02-15
Пользователь №: 85 052



Вопрос возможно, покажется непонятным. Он касается методики описания HDL-проекта на HDL-языке, неважно каком, Verilog или VHDL
Мне известны только такие методы описания модуля на HDL:
1. Если это тривиальный модуль, такой как счетчик, мультиплексор и др., то он описывается по шаблону, который легко найти в руководстве по HDL от производителя ПЛИС или в Google.
2. Если это схема соединяющая другие модули, то здесь тоже не сложно. Определить сигналы, определить компоненты, соединить их.
3. Если это не тривиальная схема с последовательной логикой. То я составляю алгоритм ее работы, выделяю какие нужны состояния и регистры(Control path и Data path). Составляю диаграмму состояний и определяю какое следующее значение будет у регистров в Data path. Определяю, какие значения должны будут иметь выходы. Таким образом, если я пишу на VHDL у меня обычно 4 процесса: 2 последовательных, определяют что на каждом такте Clk регистры и состояние должны принимать следующее значение, и 2 процесса, описывающие следующее состояние и следующее значение регистров. И еще описание выходных сигналов.

Однако, когда я просматриваю чужой код, в том числе и код Xilinx модулей как для симуляции, так и для синтеза, я вижу что там все сделано не так, как в п.3. Они применяют какую-то другую методологию описания последовательных схем. Часто там даже нет машины состояний. Зато, очень много коротких описаний процессов. Но логику, по которой все это описано я не понимаю. Если, кто-то ее знает, объясните, пожалуйста.

Сообщение отредактировал Олег Гаврильченко - Dec 1 2017, 09:51
Go to the top of the page
 
+Quote Post
el.d
сообщение Dec 1 2017, 09:59
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 2-08-17
Пользователь №: 98 600



А разве всегда надо пихать конечный автомат?
Go to the top of the page
 
+Quote Post
Олег Гаврильченк...
сообщение Dec 1 2017, 10:07
Сообщение #3


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

Группа: Участник
Сообщений: 161
Регистрация: 10-02-15
Пользователь №: 85 052



Цитата(el.d @ Dec 1 2017, 12:59) *
А разве всегда надо пихать конечный автомат?

Очевидно, нет, раз разработчики из XILINX его не используют. Но я без конечного автомата и Data Path не умею делать ничего сложнее счетчика. И поэтому и задал этот вопрос.
Go to the top of the page
 
+Quote Post
el.d
сообщение Dec 1 2017, 10:11
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 2-08-17
Пользователь №: 98 600



Я лично для себя не могу понять, с чем у вас проблема. По сути, то, что описали - это просто обобщение пункта 2. То есть, вы говорите, что грубо говоря в одной VHDL архитектуре встречали множество маленьких процессов. По сути, каждый такой процесс можно рассматривать как отдельный блок, и тогда получаем структуру из пункта 2, разве нет?
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Dec 1 2017, 10:15
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 430
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Код
Однако, когда я просматриваю чужой код, в том числе и код Xilinx модулей как для симуляции, так и для синтеза, я вижу что там все сделано не так, как в п.3. Они применяют какую-то другую методологию описания последовательных схем. Часто там даже нет машины состояний. Зато, очень много коротких описаний процессов. Но логику, по которой все это описано я не понимаю. Если, кто-то ее знает, объясните, пожалуйста.

Так всё же зависит от алгоритма вычислений.
Одну и ту-же задачу часто можно решить разными алгоритмами.
Можно даже автомат описать не классическим FSM, а регистрами и логикой переключения.
То что у них так описано - это не значит, что это сделано правильно и корректно.
Ведь помимо HDL описания важно его ещё и правильно задокументировать, чтобы потом была возможность поддержки этого проекта, если он не одноразовый.
А документировать кучу маленьких процессов очень, и очень сложно. Если вообще это возможно сделать...
Go to the top of the page
 
+Quote Post
Tpeck
сообщение Dec 1 2017, 11:22
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 200
Регистрация: 14-03-06
Пользователь №: 15 243



Цитата(Олег Гаврильченко @ Dec 1 2017, 12:50) *
3. Если это не тривиальная схема с последовательной логикой. То я составляю алгоритм ее работы, выделяю какие нужны состояния и регистры(Control path и Data path).

А можете пример кода выложить?
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Dec 1 2017, 11:32
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 359
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



Цитата(Олег Гаврильченко @ Dec 1 2017, 12:50) *
в том числе и код Xilinx модулей

Не стоит воспринимать это как референс, там индусы так колхозят на скоряк, что мама не горюй.

Лучше по книгам учиться, например, SystemVerilog For Design Second Edition от Stuart Sutherland и ко.
отличные примеры в исходниках, то, что надо для обучения.
Go to the top of the page
 
+Quote Post
des333
сообщение Dec 1 2017, 22:04
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 111
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Представьте в голове (или на бумаге) схему модуля, который Вы пишите.
А после перенесите её в HDL.
И можно использовать хоть 2 процесса, хоть 200.
Лучше использовать такое количество процессов, которое соответствует наиболее наглядному представлению функциональности.


--------------------
Go to the top of the page
 
+Quote Post
svedach
сообщение Dec 2 2017, 07:59
Сообщение #9


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

Группа: Свой
Сообщений: 117
Регистрация: 8-01-12
Из: Беларусь
Пользователь №: 69 226



Олег Гаврильченко, в целом модули, обрабатывающие поток данных (DSP), пишу так же как Вы описали (разделяю поток обработки и управляющую логику). Зачастую обработка сложная - я разделяю входную часть - ставлю FIFO и автомат состояний для управления входом. По окончании приема данных FSM переключает входное FIFO и генерирует строб автомату, который выполняет обработку сигнала и одновременно выдает на выход данные. Во многом это связано с использованием AXIS и AXI. Так получается удобно модули последовательно составлять - не заботишься, что данные где-то пропадут...
Модули управления, принимающие команды по AXI пишу без FSM, там она не нужна. Согласую их с модулями обработки через CDC.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Dec 2 2017, 08:02
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 3 708
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(el.d @ Dec 1 2017, 12:59) *
А разве всегда надо пихать конечный автомат?

Я сейчас представляю проект как иерархическую структуру автоматов с таймерами и "исполнительных узлов".
Верхний автомат "ведет" весь процесс. Ну скажем, выдает сообщения на хост. Он управляет подчиненным ему автоматом, который формирует и передает кадры данных. А этот, в свою очередь, управляет автоматом, который умеет передавать биты за требуемое время. Причем модули этих двух автоматов могут быть одинаковые.
Таким образом резко сокращается число строк кода в одном файле. А значит, сокращается и вероятность появления ошибок. Такие проекты гораздо проще симулировать, поскольку каждый файл должен быть параметризирован.
Сам же автомат однозначно пишется из блок-схемы процесса управления объектом.


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
dvladim
сообщение Dec 2 2017, 16:22
Сообщение #11


Знающий
****

Группа: Свой
Сообщений: 626
Регистрация: 24-01-07
Из: Воронеж
Пользователь №: 24 737



Цитата(Олег Гаврильченко @ Dec 1 2017, 12:50) *
Часто там даже нет машины состояний. Зато, очень много коротких описаний процессов. Но логику, по которой все это описано я не понимаю.

Скорее всего вы видите код, который прошел обфускацию. Он синтезируем, но совершенно не понятен и не модифицируем.
Go to the top of the page
 
+Quote Post
lembrix
сообщение Dec 4 2017, 07:51
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 18
Регистрация: 13-04-17
Из: Москва
Пользователь №: 96 508



Цитата(Олег Гаврильченко @ Dec 1 2017, 12:50) *
1. Если это тривиальный модуль, такой как счетчик, мультиплексор и др....
3. Если это не тривиальная схема с последовательной логикой...

Однако, когда я просматриваю чужой код, в том числе и код Xilinx модулей как для симуляции, так и для синтеза, я вижу что там все сделано не так, как в п.3. Они применяют какую-то другую методологию описания последовательных схем. Часто там даже нет машины состояний. Зато, очень много коротких описаний процессов. Но логику, по которой все это описано я не понимаю. Если, кто-то ее знает, объясните, пожалуйста.

Любую "не тривиальную схему" можно составить из "тривиальных модулей" в альтернативу использования FSM. Не понятна, все таки, логика по которой это написано, или логика по которой это работает? Если первое, то это вопрос стиля кодирования. А если второе, то надо смотреть конкретный код.
Go to the top of the page
 
+Quote Post
Олег Гаврильченк...
сообщение Dec 4 2017, 08:37
Сообщение #13


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

Группа: Участник
Сообщений: 161
Регистрация: 10-02-15
Пользователь №: 85 052



Цитата(iosifk @ Dec 2 2017, 11:02) *
Я сейчас представляю проект как иерархическую структуру автоматов с таймерами и "исполнительных узлов".
Верхний автомат "ведет" весь процесс. Ну скажем, выдает сообщения на хост. Он управляет подчиненным ему автоматом, который формирует и передает кадры данных. А этот, в свою очередь, управляет автоматом, который умеет передавать биты за требуемое время. Причем модули этих двух автоматов могут быть одинаковые.
Таким образом резко сокращается число строк кода в одном файле. А значит, сокращается и вероятность появления ошибок. Такие проекты гораздо проще симулировать, поскольку каждый файл должен быть параметризирован.
Сам же автомат однозначно пишется из блок-схемы процесса управления объектом.

Буду благодарен, если Вы покажете какой-нибудь пример. Или дадите ссылку на информацию, где это объяснено.
Go to the top of the page
 
+Quote Post
iosifk
сообщение Dec 4 2017, 08:45
Сообщение #14


Гуру
******

Группа: Модераторы
Сообщений: 3 708
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Олег Гаврильченко @ Dec 4 2017, 11:37) *
Буду благодарен, если Вы покажете какой-нибудь пример. Или дадите ссылку на информацию, где это объяснено.

Ответ отправил в личку.


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
GriXa
сообщение Dec 4 2017, 12:10
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 39
Регистрация: 22-05-09
Пользователь №: 49 385



Есть замечательная книга под названием "Advanced FPGA Design Architecture, Implementation, and Optimization" Steve Kilts. ISBN 978-0-470-05437-6
В книге показано на примерах, как структура дизайна влияет на скорость/пропускную способность/задержки в проекте.
Мне показалось, что там подробно расписано, в каких случаях удобно использовать FSM, где лучше использовать тонну комбинаторной логики, а где кучу маленьких процессов.

Если для описания используется VHDL, то Вам, возможно, было бы интересно обратить внимание еще на Two Process Method (Jiri Gaisler).
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 13th December 2017 - 20:54
Рейтинг@Mail.ru


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