Перейти к содержанию
    

Проблема с машиной состояний

Принципиально отличается тем, что у Вас все выходные сигналы - триггеры + я не понимаю как можно в триггер записать значение 'Z'. В моем варианте - и функция переходов и функция выходов - комбинаторные, поэтому если нужны выходы без пичков, то необходимо дополнительно ухищряться. Для понимания ИМХО - гораздо проще. В любой книге про ВХДЛ Вы что-то подобное увидите (да хоть Language Templates возьмите), разве что не будет разделения выходов и переходов - это будет в одном процессе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Принципиально отличается тем, что у Вас все выходные сигналы - триггеры + я не понимаю как можно в триггер записать значение 'Z'. В моем варианте - и функция переходов и функция выходов - комбинаторные, поэтому если нужны выходы без пичков, то необходимо дополнительно ухищряться. Для понимания ИМХО - гораздо проще. В любой книге про ВХДЛ Вы что-то подобное увидите (да хоть Language Templates возьмите), разве что не будет разделения выходов и переходов - это будет в одном процессе.

 

На самом деле все сигналы с тремя состояниями являются выходные. Т.е. для их реализации использется тригер с 3-мя состояниями. И ничего поделать я с этим не могу. Т.к. я дожен отпускать линии управления шиной, когда не владею щиной. Подругому это сделать невозможно.

 

Я попробовал Ваш код. Возникли проблемы из-за того что выходные сигналы комбинаторные. Все это хозяйство работает на 50Мгц(начальник правда думает что и 100 потянет, но мне кажется это фантастика), поэтому комбинаторика не очень хорошо себя ведет. Задержка некоторых сигналов после замены ваши вариантом привела к тому, что задержки сигналов выросли с 9нс до 23 нс. Не знаю как так вышло, но это уже в 50Мгц никак не укадывается.

 

Рузюмирую - ничего не заработато... кроме идеальной модели. Если повозится, то наверно можно запустить. Но у меня рядом сидит старщий товарищь, который морщится от слова асинхроный дизайн. И говорит, чтоб было меньше проблем (которых много), надо делать все синхронно. И вохоже он прав. Т.к. изначально у меня весь проек был асинхронный и я не смог его запрустить. После того, как я его целиком перевел на машину состояний, он заработал. Но есть проблемы с не ставбильной работой автомата. Все таки хотель бы понять где я его не правильно описываю и как избежать таких проблем.

 

 

Могу еще добавить.

Б. последний и самый сильный удар - вспомнить про LOC'и и залочить весь автомат в том состоянии, когда он работает. Тоесть насильно привязать к кристаллу... Если частота не предельная для кристалла и ресурсов хватает - то дальше дело должно пойти проще...

Удачи!

 

А по этому у вас статьи нет? Т.к. у меня действительно ресурсов хватает - можно былобы пробовать. Но я не понял, как это работает. Ведь при изменении проекта, он весь пересинтеруется и заново разводится. Разве реально зафиксировать одельную стайт машину?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2Little_boo

выкиньте все z-состояния из SM (заменив их неактивной 1 например), и введите сигнал управления трехстабильными буферами. И выводите наружу не триггер, а пропустите его через трехстабильный буфер, которым и управляйте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Наверно и машину состояний туда же. Неужели тут без машины необойтись.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2Little_boo

выкиньте все z-состояния из SM (заменив их неактивной 1 например), и введите сигнал управления трехстабильными буферами. И выводите наружу не триггер, а пропустите его через трехстабильный буфер, которым и управляйте.

 

Наверно, я не правильно написал. Не тригер, а буфер с 3-мя состояниями.

Я посмотрел - синтезатор, мою писанину имеено так и интерпретирует, как Вы говорите. Ставит буфера, а из автомата тянет управляющие сигналы.

 

Потом, я же говорил тут преведена одна часть машины. Я её разделил на 3 части, думал будет лучше. ТАк 3 процесса управляют одним сигналом, как тут без Z обойтись?

 

Потом с приведенно коде, проблема возникает как раз с сигналом, который не имеет состояния Z.

 

 

 

Наверно и машину состояний туда же. Неужели тут без машины необойтись.

 

Я же написал выше. Что при асинхронноми сигнале, начинается бардак. Мне необхожимо реализовать протокол пересылки. Если делать это асинхронно, то на выходе получаются гличи, что не есть хорошо.

У меня не очень быстрая (как мне кажется ПЛИС), и поэтому чтоб все сигналы приходили в один момент их нужно синхронитровать.

 

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я же написал выше. Что при асинхронноми сигнале, начинается бардак. Мне необхожимо реализовать протокол пересылки. Если делать это асинхронно, то на выходе получаются гличи, что не есть хорошо.

У меня не очень быстрая (как мне кажется ПЛИС), и поэтому чтоб все сигналы приходили в один момент их нужно синхронитровать.

 

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

 

Обязательно:

1. устраните асинхронные входные сигналы (пропустите через 2-х тактный синхронизатор).

2. синхронизируйте сигнал асинхронного сброса (или пользуйте сигнал синхронного сброса).

3. По возможности НЕ используйте сигнал сброса автомата как сигнал управления. Автомат всегда должне возвращаться в начальное состояние.

4. Опишите абсолютно все переходы автомата из состояния в состояние (это гораздо проще сделать, если следовать правилам ниже).

 

Необязательно, но желательно:

1. опишите стейт машину в 3/4-х процессах:

1. комбинационый процесс функции переходов,

2. синхронный процесс смены состояний.

3. комбинационный процесс функции выходов.

4. регистровый процесс функции выходов (если такие функции есть).

2. Если позволяет логика устраните глитчи на выходах автомата сделав их регистровыми.

 

Если после синхронизаторов вы получите слишком долгий отклик на входное воздействие (2-3 такта частоты), то посадите автомат на более высокую тактовую частоту.

 

И желательно когда постите код обрамляйте его тегами code

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На самом деле все сигналы с тремя состояниями являются выходные. Т.е. для их реализации использется тригер с 3-мя состояниями. И ничего поделать я с этим не могу. Т.к. я дожен отпускать линии управления шиной, когда не владею щиной. Подругому это сделать невозможно.

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

 

Я попробовал Ваш код. Возникли проблемы из-за того что выходные сигналы комбинаторные. Все это хозяйство работает на 50Мгц(начальник правда думает что и 100 потянет, но мне кажется это фантастика), поэтому комбинаторика не очень хорошо себя ведет. Задержка некоторых сигналов после замены ваши вариантом привела к тому, что задержки сигналов выросли с 9нс до 23 нс. Не знаю как так вышло, но это уже в 50Мгц никак не укадывается.

Понятное дело - я просто переписал Ваш код в соответствии со своими представлениями о том как нужно описывать автомат, Вы же свои требования не указали ни по входам ни по выходам. Чтобы удовлетворить требования по времянкам, возможно потребуется изменить логику автомата и формирование выходов, разместить триггеры выходных и входных сигналов в блоках ввода-вывода. Задать констрейны, наконец. У меня ГОСТ28147 на 64 МГц во 2-м Спартане работает, а это все-ж 32-разрядные сумматоры, не считая всего остального.

 

Рузюмирую - ничего не заработато... кроме идеальной модели. Если повозится, то наверно можно запустить. Но у меня рядом сидит старщий товарищь, который морщится от слова асинхроный дизайн. И говорит, чтоб было меньше проблем (которых много), надо делать все синхронно. И вохоже он прав. Т.к. изначально у меня весь проек был асинхронный и я не смог его запрустить. После того, как я его целиком перевел на машину состояний, он заработал. Но есть проблемы с не ставбильной работой автомата. Все таки хотель бы понять где я его не правильно описываю и как избежать таких проблем.

В том то и дело, что мой вариант тоже абсолютно синхронный и такой подход прекрасно работает не в одном проекте. Просто нужно учитывать особенности ПЛИС. Вообще, сначала схему нужно нарисовать, а уж потом ее на языке описывать и еще проверять - чтой-то там синтезатор вкупе с остальными наколбасили. И если видите, что наколбасили не то, нужно добиваться нужного результата. А Вы думали кто-то за Вас Вашу работу сделает? Направление показать - пожалуйста, а уж дальше сами...

 

А по этому у вас статьи нет? Т.к. у меня действительно ресурсов хватает - можно былобы пробовать. Но я не понял, как это работает. Ведь при изменении проекта, он весь пересинтеруется и заново разводится. Разве реально зафиксировать одельную стайт машину?

Loc'и Вас не спасут, добейте автомат сначала. Еще такой вопрос - а для Вас критично, что выходы зависят не только от состояний, но и от входов? Первый вариант несколько попроще и побыстрее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обязательно:

1. устраните асинхронные входные сигналы (пропустите через 2-х тактный синхронизатор).

 

Не понял, что Вы называете 2-х тактным синхронизатором.

 

И в этом нет необходимости, все сигналы приходящие на машину состояний - по идее синхронны. Но по факту получается скорее всего разброс из-за задержек.

 

Необязательно, но желательно:

1. опишите стейт машину в 3/4-х процессах:

1. комбинационый процесс функции переходов,

2. синхронный процесс смены состояний.

3. комбинационный процесс функции выходов.

4. регистровый процесс функции выходов (если такие функции есть).

2. Если позволяет логика устраните глитчи на выходах автомата сделав их регистровыми.

 

По-поводу 1.4 и 2. Что такое регистровый процесс? Защелкивание сигналов в регистры? Т.е. полученный комбитароной логикой сигнал, синхронизируем записью в регистр?

 

Если после синхронизаторов вы получите слишком долгий отклик на входное воздействие (2-3 такта частоты), то посадите автомат на более высокую тактовую частоту.

 

И желательно когда постите код обрамляйте его тегами code

 

У меня 1 частота. Ей тактируется внешняя шина процессоров и мой автомат, который с этой шиной работает. Более высокая частота автомата - более высокая частота шины. На имеющейся DLL нет удвоителя частоты. Так что эта идея меня посещала, но я не нашел метода её реальзации.

 

Первый раз выкладывал - буду знать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Понятное дело - я просто переписал Ваш код в соответствии со своими представлениями о том как нужно описывать автомат, Вы же свои требования не указали ни по входам ни по выходам. Чтобы удовлетворить требования по времянкам, возможно потребуется изменить логику автомата и формирование выходов, разместить триггеры выходных и входных сигналов в блоках ввода-вывода. Задать констрейны, наконец. У меня ГОСТ28147 на 64 МГц во 2-м Спартане работает, а это все-ж 32-разрядные сумматоры, не считая всего остального.

 

У меня тоже две 32-х разрядных шины адреса и данных. И тоже есть сумматоры. Тут скорее не в ширене дела, а в сокорости. Не могу написать так, что это быстро работало. Ваш вариант интересней, но у меня он вышел медлееней.

И даже дело не том как лучше писать, а в том что я получаю при разной синтезации разрый результат не меняя кода. При этом модели работаю идеально. Даже переписав как Вы показали, я получил не соответствие реального поведения и ПОСТ-ФИТ модели, что мне не потятно.

 

В том то и дело, что мой вариант тоже абсолютно синхронный и такой подход прекрасно работает не в одном проекте. Просто нужно учитывать особенности ПЛИС. Вообще, сначала схему нужно нарисовать, а уж потом ее на языке описывать и еще проверять - чтой-то там синтезатор вкупе с остальными наколбасили. И если видите, что наколбасили не то, нужно добиваться нужного результата. А Вы думали кто-то за Вас Вашу работу сделает? Направление показать - пожалуйста, а уж дальше сами...

 

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

 

Я все рекомендации учту, спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не понял, что Вы называете 2-х тактным синхронизатором.

 

пропуск сигнала через 2 последовательных тригера.

 

И в этом нет необходимости, все сигналы приходящие на машину состояний - по идее синхронны. Но по факту получается скорее всего разброс из-за задержек.

 

плохое слово по идее и скорее всего.

Если бы сигналы были синхронные(т.е. сигналы которые идут с тригеров, тактируемых системной частотой), то проблем бы не было. При условии что вы запускаете КА на частоте НЕ ВЫШЕ той, что указал вам Timing Analyzer после разводки. Если быть точным +-10%.

 

У меня 1 частота. Ей тактируется внешняя шина процессоров и мой автомат, который с этой шиной работает. Более высокая частота автомата - более высокая частота шины. На имеющейся DLL нет удвоителя частоты. Так что эта идея меня посещала, но я не нашел метода её реальзации.

 

Так так, а вот с этого момента попобнее. на КА идут сигналы с процессорной шины? (EMIF что ли от TI).

Если клок идет с проца, то как вы работаете с ним в ФПГА? Вы учли задержку трасс между процем и фпга ? Задержку на входных элементах фпга ? В каком режиме вы работаете с процессорной шинной?

 

По-поводу 1.4 и 2. Что такое регистровый процесс? Защелкивание сигналов в регистры? Т.е. полученный комбитароной логикой сигнал, синхронизируем записью в регистр?

 

регистровый/синхронный - процесс, который приводит к синтезу регистра/ов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так так, а вот с этого момента попобнее. на КА идут сигналы с процессорной шины? (EMIF что ли от TI).

Если клок идет с проца, то как вы работаете с ним в ФПГА? Вы учли задержку трасс между процем и фпга ? Задержку на входных элементах фпга ? В каком режиме вы работаете с процессорной шинной?

 

Шина TigerShacr. Она и ПЛИС тактируются генератором. И не процессором. Учет задержек трасс это и есть проблема. Но учитывая огромные задержки ПЛИС - они не значительны. Об это я тут спрашиваю:

http://electronix.ru/forum/index.php?showt...mp;#entry204988

 

Вот и выходит ~1нс (не проверял ) между процем с ПЛИС - не много. И 5 нс в ПЛИС, что просто ужасно. На выходе тактовая чатостота и сигналы с КА получаются без разбега.

 

Сейчас говорю с руководителем, о замене на Виртекс. Т.к. 100Мгц Спартан точно не понят, тем более в моих руках.

 

 

Проблема в этой теме была изначально о том, что КА совершает не правильные переходы. Я переписал его с учетом тех пунтков, что Вы написали. И это не помогло, всё равно он наровит вывалитсмя не туда, по не понятной для меня причине. Хотя ща я всё таки добился - этот автомат работает. Одиночные циклы записи и чтения проходят.

 

Возникла другая пролема. С блочной записью, т.е. на каждый такт. :biggrin: Раньше не было. У меня такое ощушение, что я выставляю 32 линии данных и они имея разные задержки приходят на разные циклы. Т.е. линии 31-28 попадают на следующий такт.... ща разбираюсь с этим.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спартан 3 можно использовать - он раза в 2 пошустрее, чем Спартан 2. Только там внутри трехстабильных буферов нету, если они Вам нужны. А Виртекс 2 (не говоря уже про 4 и 5) больно дорог, хотя быстр и хорош.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Так так, а вот с этого момента попобнее. на КА идут сигналы с процессорной шины? (EMIF что ли от TI).

Если клок идет с проца, то как вы работаете с ним в ФПГА? Вы учли задержку трасс между процем и фпга ? Задержку на входных элементах фпга ? В каком режиме вы работаете с процессорной шинной?

 

Шина TigerShacr. Она и ПЛИС тактируются генератором. И не процессором. Учет задержек трасс это и есть проблема. Но учитывая огромные задержки ПЛИС - они не значительны. Об это я тут спрашиваю:

http://electronix.ru/forum/index.php?showt...mp;#entry204988

 

Вот и выходит ~1нс (не проверял ) между процем с ПЛИС - не много. И 5 нс в ПЛИС, что просто ужасно. На выходе тактовая чатостота и сигналы с КА получаются без разбега.

 

Сейчас говорю с руководителем, о замене на Виртекс. Т.к. 100Мгц Спартан точно не понят, тем более в моих руках.

 

 

Проблема в этой теме была изначально о том, что КА совершает не правильные переходы. Я переписал его с учетом тех пунтков, что Вы написали. И это не помогло, всё равно он наровит вывалитсмя не туда, по не понятной для меня причине. Хотя ща я всё таки добился - этот автомат работает. Одиночные циклы записи и чтения проходят.

 

Возникла другая пролема. С блочной записью, т.е. на каждый такт. :biggrin: Раньше не было. У меня такое ощушение, что я выставляю 32 линии данных и они имея разные задержки приходят на разные циклы. Т.е. линии 31-28 попадают на следующий такт.... ща разбираюсь с этим.

 

ну вот и разобрались. у вас есть только 2 варианта:

1.Если вы работаете в синхронном режиме шины то нужно хлопнуть все входные сигналы шины в регистры. сразу же, как они заходят в фпга. и указать MAX_OFFSET. Если вы это не сделаете у вас будет глючить всегда.

 

2. Если в асинхронном режиме то перетактировать все входные сигналы и дальше работать с ними.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну вот и разобрались. у вас есть только 2 варианта:

1.Если вы работаете в синхронном режиме шины то нужно хлопнуть все входные сигналы шины в регистры. сразу же, как они заходят в фпга. и указать MAX_OFFSET. Если вы это не сделаете у вас будет глючить всегда.

 

2. Если в асинхронном режиме то перетактировать все входные сигналы и дальше работать с ними.

 

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

 

У меня 2 шины. Одна асинхронная, вторая синхронная.

Сингалы с певрой идут на стайт первую машину. С нее управляющие сигналы (синхронные) идут на вторую, которая генерит циклы на синхронной шине. Так же сюда приходят шигналы с ФИФО и шины, не знаю насколько их можно считать синхронными с учетом задержек. С ФИФО они идут сдвинутые на полпериода, т.к. я тактирую его инвертирыванным клоком, т.к. нет нормального ДЛЛ.

 

Сейчас все стараюсь сделать весь проект синхронным.

Что значит MAX_OFFSET и где это указывается?

 

 

 

 

Спартан 3 можно использовать - он раза в 2 пошустрее, чем Спартан 2. Только там внутри трехстабильных буферов нету, если они Вам нужны. А Виртекс 2 (не говоря уже про 4 и 5) больно дорог, хотя быстр и хорош.

 

Человек, который проектировал плату и подбирал ПЛИС свинтил. Поэтому настучать по голове некому. Он изначально хотел поставить Виртекс, но когда сказали что лучше поставить толлерантную к 5-ти вольтам, он предложил Спартан, как он расчитывал при этом быстродействие - не понятно.

 

Завтра буду выбирать себе присину и думать какие буфера ставить. Видимо Спартан3 не подойдет. Т.к. шину надо захватывать - отпускать, куда без 3-го состояния.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...