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

 
 
> Взаимодействие state machines друг с другом
justontime
сообщение Dec 19 2017, 20:01
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 254
Регистрация: 6-12-14
Из: СПб
Пользователь №: 84 003



Пытаюсь поделить немерено разросшуюся FSM на несколько частей, в т.ч. выделить кусок в нечто типа функции (не в смысле понятия функции в HDL, а просто как узел, используемый из разных частей схемы).

Как правильно организовывать взаимодействие между несколькими FSM ? Флагами, или есть более красивый/правильный способ ?

И что делать, если две FSM должны управлять одними и теми же сигналами ? Например, есть автомат, производящий довольно сложный процесс инициализации устройства по SPI. Этот автомат должен использовать отдельную FSM для передачи байтов в устройство, но при этом и сам основной автомат хочет иногда подергать сигналы SPI.
Как правильнее поступать в подобных случаях ? У меня все работает, но нагромождение флагов и прочей фигни делает код нечитаемым даже для меня sad.gif

P.S. Вообще пишу на VHDL, но вряд ли это сильно зависит от конкретного языка - скорее, интересует общий подход...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
iosifk
сообщение Dec 19 2017, 20:22
Сообщение #2


Гуру
******

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



Цитата(justontime @ Dec 19 2017, 23:01) *
Пытаюсь поделить немерено разросшуюся FSM на несколько частей, в т.ч. выделить кусок в нечто типа функции (не в смысле понятия функции в HDL, а просто как узел, используемый из разных частей схемы).

Как правильно организовывать взаимодействие между несколькими FSM ? Флагами, или есть более красивый/правильный способ ?

И что делать, если две FSM должны управлять одними и теми же сигналами ? Например, есть автомат, производящий довольно сложный процесс инициализации устройства по SPI. Этот автомат должен использовать отдельную FSM для передачи байтов в устройство, но при этом и сам основной автомат хочет иногда подергать сигналы SPI.
Как правильнее поступать в подобных случаях ? У меня все работает, но нагромождение флагов и прочей фигни делает код нечитаемым даже для меня sad.gif

P.S. Вообще пишу на VHDL, но вряд ли это сильно зависит от конкретного языка - скорее, интересует общий подход...

У Вас немного прицел сбился. Надо делать так:
Наверху автомат, который ведет весь процесс. Он управляет вообще всем, что есть в проекте, либо непосредственно сигналами управления, либо другими автоматами...
Под ним работают автоматы, которые выполняют указания. Например для SPI верхний говорит "передать такие-то сообщения", а эти "средние" формируют эти сообщения и передают нижним, которые уже связаны с физикой. Например для SPI средние передают кадры, а нижние работают с битом в линии. Т.е. проверяют время бита, и если нужно, то фильтруют клоки из линии.
Обмен сигналами стандартный: "Старт" и "Готовность"...
Каждый такой автомат может иметь подключенный к нему таймер.
Рисуем блок-схему, из нее делаем граф состояний и его реализуем в виде автоматов...
Подробнее: Краткий Курс, глава дополнительная об автоматах.
Хотите подробнее - могу рассказать по скайпу...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 30th July 2025 - 18:32
Рейтинг@Mail.ru


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