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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> FSM и лог состояний, нужно вести лог состояний FSM в железяке
Kuzmi4
сообщение Sep 23 2009, 12:24
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Здравствуйте.

Есть у нас девайс на FPGA, крутятся там FSM-ы, работает он в обсчем. Ну а теперь вот требуется вести лог состояний всех стейт-машин в этом реальном устройстве (в железе всмысле): записывать последние N состояний, вести учёт состояниям FSM ну и так далее. 07.gif По запросу с ПК - считывать эти данные...
1111493779.gif
Для меня это более чем удивительно конечно wacko.gif , но хотелось бы узнать - это вообсче то где то применяется для FPGA? Если да - то где, как, зачем (всё же интересно) и где можно посмотреть правильную реализацию этого самого логирования..
Если нет - то как бы это объяснить красиво, что так не делают ??
Go to the top of the page
 
+Quote Post
Artem_Petrik
сообщение Sep 23 2009, 12:37
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006



Такое полезно разве что при отладке. В этом случаепросто выел регистр state на signal tap, и все. Чтоб постоянно мониторить надо было - не встречал. Впрочем ситуации бывают разные, может и полезно бывает.

Реализовывать, на мой взгляд, проще так же как и в signal tap сделано. Выводим все подлежащие мониторингу сигналы на один из портов двухпортового ОЗУ, формируем сигнал разрешения записи и счетчик адреса. А со второго порта считываем результат, когда надо.
Go to the top of the page
 
+Quote Post
Elresearch
сообщение Sep 23 2009, 12:44
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 29-12-04
Пользователь №: 1 730



blink.gif Сделать то не сложно (если есть свободные ресурсы в FPGA), если просят, но зачем вопрос открытый wink.gif
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 23 2009, 13:21
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Artem_Petrik - в принципе так и думал сделать для запоминания последних состояний (или скорей всего фифошку поставлю), а вот со счётчиком этих самых состояний как быть ??
2 Elresearch - ну нужно посмотреть на эти состояния вживую людям наверно...

Из ожидаемых последствий, кроме как падение времянки, может быть что-то из разряда подводных камней ??
Go to the top of the page
 
+Quote Post
Elresearch
сообщение Sep 23 2009, 13:29
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 29-12-04
Пользователь №: 1 730



Цитата(Kuzmi4 @ Sep 23 2009, 17:21) *
а вот со счётчиком этих самых состояний как быть ??

так если на каждом клоке записывать в память зачем Вам счётчик? или Вы хотите соптимизировать и писать только по изменению состояния + счётчик сколько в каком состоянии был клоков?
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 23 2009, 13:32
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



По изменению не получится - нужен именно лог последних N состояний машины (тут фифо видимо) + счётчик сколько раз после ресета стейт-машина была в этом состоянии..
Go to the top of the page
 
+Quote Post
Elresearch
сообщение Sep 23 2009, 13:42
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 29-12-04
Пользователь №: 1 730



и на какой частоте Вам предлагают это сделать? зная частоту + количество состояний можно оценить какое фифо Вам понадобиться и возможно идея лога себя изживёт wink.gif
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 23 2009, 13:49
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Elresearch - эта идея вообсче мне с самого начала не нравится... А частота тут не при чём - лог пока ожидается как запись при последних N изменений состояний машин (их там несколько - одни постоянны, вторые меняются) в циклический буфер и всё (N -пока задаётся параметром).
Со счётчиками есть идея (сама суть этих счётчиков в оригинале - достоверно писать сколько в каком состянии машина была без задержки) но она мне кажется кривоватой...
Go to the top of the page
 
+Quote Post
Elresearch
сообщение Sep 23 2009, 13:56
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 214
Регистрация: 29-12-04
Пользователь №: 1 730



Так от частоты и будет зависеть Ваш "счётчик состояния от ресета" сколько разрядов на каждое состояние (а то ведь переполниться и конец достоверности) + кол-во состояний вот Вам и затраты wink.gif
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 23 2009, 14:00
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Я вас недопонял наверное - пока остановились на 32-х разрядах, сказали что пока хватит им.

Да и реально переходы в состояниях по приходу данных на девайс начинаются, так что им точно для начала хватит (если нулевые стейты повыкидывать или сделать их побольше разрядными)..
Go to the top of the page
 
+Quote Post
Artem_Petrik
сообщение Sep 23 2009, 15:09
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006



Цитата(Kuzmi4 @ Sep 23 2009, 16:21) *
в принципе так и думал сделать для запоминания последних состояний (или скорей всего фифошку поставлю), а вот со счётчиком этих самых состояний как быть ??

Ну, фифо конечно понятие растяжимое, но я все же уточню. Обычное FIFO как бы не рассчитано на то, что будет переполнение, и, обычно, ведет себя в этом случае неподходяще для этого случая.

Нам нужно просто писать по кругу, и передавать на сторону чтения адрес, по которому писали в последний раз. Читаем всегда всю память, а по переданному значению определяем, где там начало данных, а где конец. Но нужно помнить, что чтение памяти занимает некоторое время, и за это время могло быть что-то записано. Я бы считывал значение переданного указателя записи перед и после чтения памяти, и, данным, лежащим между этими значениями не доверял (может мы еще старое считали, а может уже и новое - фиг его знает.)

Счетчик состояний - самое простое. Делаем регистр, в который записываем старое значение STATE. Если новое равно старому - счетчик инкрементируется, если не равно - обнуляется. Также, если не равно, инкрементируется указатель записи. Вроде все.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Nov 14 2009, 18:17
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



И снова здравствуйте biggrin.gif
В обсчем как оно мне не нравилось, а всё таки заваял я этот логер (правда это только логер изменяющихся состояний).
Прицепил
Прикрепленный файл  state_logger_v03.rar ( 43.69 килобайт ) Кол-во скачиваний: 126

Кому будет интересно - глянте, интересны мнения laughing.gif
(Обновил чуток: 02 -> 03, теперь вроде всё есть и работает как нужно)
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 16 2009, 05:41
Сообщение #13


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Kuzmi4 @ Nov 14 2009, 12:17) *
Кому будет интересно - глянте, интересны мнения laughing.gif


ИМХО кое где сумбурно написано, кое где излишне усложненно и перерасход ресурса и если бы вы были моим подваном за такое описание КА "уши бы я вам пооткрутил" (с) старый мульт. Естественно это все на мой вкус и цвет. smile.gif


--------------------
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Nov 16 2009, 08:40
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 des00 - ну так я и выложил сюда, чтоб послушать мнения laughing.gif
А подетальнее можно - что именно сумбурно, "излишне усложненно "- это где?, чем описание КА страшное, .. ??
Go to the top of the page
 
+Quote Post
des00
сообщение Nov 16 2009, 09:03
Сообщение #15


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Kuzmi4 @ Nov 16 2009, 02:40) *
"излишне усложненно "- это где?,


блок wr_logger, логика однократного срабатывания после сброса. Вы городите подобие КА, которое тут ну совершенно не к месту. ИМХО проще сделать так :
Код
if (rst)
  pwr_srl <= 2'b01;
else
  pwr_srl <= (pwr_srl << 1);
..
pwr_on_sig <= pwr_srl[1];


Цитата
чем описание КА страшное, .. ??


кодирование состояний у вас в голове и это цифры, которые нужно помнить и анализировать. Куда нагляднее читать в коде что то вроде STATE_INIT_RAM_CLEAR/STATE_RAM_CLEAR чем мифические 4'd02/4'd03 и т.д.

Цитата
что именно сумбурно


совершенно лишнее использование макросов для задания границ счетчиков, есть ненужный перерасход ресурса и комменты стоят странно, часть фсм полностью расписана вплоть до примитивных действий (что ИМХО не нужно), другая часть вообще не комментирована.


--------------------
Go to the top of the page
 
+Quote Post

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

 


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


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