|
Автомат состояний из StateCad отлично проверяется в StateBench но практически не работает в реальности. |
|
|
|
Jul 9 2007, 14:03
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Привет. Подскажите плиз, что может быть за глюк: есть простенькая диаграмма, нарисованная в StateCad на картинке. Смысл в том, чтобы проверять длину входящего импульса ERR_IN и если она больше 18 циклов, то устанавливать флаг ERROR_OUT. Для подсчета используется счетчик COUNT_ERR. Скорость всего этого 3 МГц на Спартане 3 с 75Мгц кристалом. Сигнал ERR_IN - асинхронный STATE_CAD сгенерировал очень понятный VHDL код с CASE и IFами, который я на основании знаний основных язаков программирования, но не VHDL, оцениванию как правильный. Прикол в том, что при проверке CHIPSCOPEом в реальности часто происходят такие сбои, хотя в большинстве случаев работает правильно: 1. При подаче импульса счетчик считает до 2-4, а потом устанавливается флаг ERROR_OUT 2. При подаче импульса ERR_IN счетчик считает до 1-2 а потом устанавливается в 0. Когда через несколько циклов ERR_IN исчезает , то в этот момент устанавливется ERROR_OUT. 3. Если ERR_IN устанавливается в 0 во время счета то иногда в COUNT_ERR все равно хранится предыдущее состояние, а не 0. Если чесно, то это абсолютно ново для меня - но выглядет, как будто синтезатор что - то левое генерирует. Подскажите, может, надо регистр ставить на ERR_IN, или я в FPGA что-то не понимаю? Спасибо.
|
|
|
|
|
 |
Ответов
|
Jul 11 2007, 19:43
|

Знающий
   
Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045

|
Мое мнение такое - пусть с логикой работы схемы автор разбирается сам, поскольку только так можно научиться грамотному проектированию. После определенного количества мучений упрощения и оптимизации находятся сами собой, а уж потом появляется интуиция, подсказывающая как нужно делать ту или иную вещь. Однако, кодирование схем ПЛИС на HDL языках порождает у мигрантов из программирования некоторые иллюзии, которые на первых порах сбивают их с толку и приводят к ошибкам, о существовании которых они и не подозревают. Одно из таких темных мест мы тут и рассмотрели, хотя на каком-нибудь более злобном форуме народ сразу начинает вопить, что это мульен раз уже говорилось, писалось и есть в любой книжке по цифровой схемотехнике. А автор замолчал что-то. Интересно, чем закончились его изыскания?
--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
|
|
|
|
|
Jul 12 2007, 09:18
|
Профессионал
    
Группа: Свой
Сообщений: 1 817
Регистрация: 14-02-07
Из: наших, которые работают за бугром
Пользователь №: 25 368

|
Спасибо всем. Все заработало, после того как пропустил ERR_IN через регистр, тактируемый CLK. Вообще-то я разбираюсь в логических схемах, но не имел опыта программирования на VHDL поэтому и пролетел. Но по поводу того, что "это гораздо проще написать на VHDL" не согласен. Я много текстов перелопатил на С, ассемблерах, и Javaх. Использовал и макросы и все остальное, но все равно читаемость любого текста на порядок хуже чем диаграммы. Здесь один рисунок, в котором можно легко разобраться( согласен, что автомат возможно не очень правильно описан) но зато все видно сразу. А в VHDL коде,как и в любом другом языке, описание функции или переменной где-то в одном месте, использование в другом, а определение в третьем. И пока будешь искать например использование забудешь описание и т.д.
|
|
|
|
|
Jul 12 2007, 09:34
|

Знающий
   
Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045

|
Цитата(syoma @ Jul 12 2007, 13:18)  Вообще-то я разбираюсь в логических схемах, но не имел опыта программирования на VHDL поэтому и пролетел. Ошибка!!! - это не программирование, а описание схемы на языке. Т.е. в итоге Вы имеете дело не с программой (как программа описание себя ведет только до этапа синтеза), а со схемой, которую сгенерил софт по Вашему описанию. И обычный просчет многих в том, что описание рассматривается как программа, а это не так.
--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
|
|
|
|
Сообщений в этой теме
syoma Автомат состояний из StateCad отлично проверяется в StateBench но практически не работает в реальности. Jul 9 2007, 14:03 SunnyAngel Вы бы лучше код привели,чем диаграмму состояний. Т... Jul 9 2007, 19:32 syoma Цитатав данном случае необходимо пропустить указан... Jul 10 2007, 10:29 BSV Самое простое, что приходит в голову - все входы а... Jul 9 2007, 22:06 sazh А зачем тут с автоматом. Это просто счетчик в инте... Jul 10 2007, 06:08 BSV Фокус в том, что приведенный Вами кусок описывает ... Jul 10 2007, 10:49 syoma После предыдущего кода есть кусок:
next_COUNT_ERR... Jul 10 2007, 11:42 sazh Кстати, вариант со счетчиком, предложенный выше, т... Jul 10 2007, 11:40 BSV Цитата(sazh @ Jul 10 2007, 15:40) Впрочем... Jul 10 2007, 12:25  syoma Цитата(BSV @ Jul 10 2007, 14:25) Кодproce... Jul 10 2007, 14:57 sazh process (CLK)
begin
if (CLK'event and CLK = ... Jul 10 2007, 15:54 BSV Цитата(sazh @ Jul 10 2007, 19:54) Вобще т... Jul 10 2007, 23:16 SunnyAngel to syoma -> ИМХО, sazh прав. Зачем Вам этот гро... Jul 10 2007, 20:09 sazh Считаете, что это излишняя перестраховка? Net Skew... Jul 11 2007, 06:03 des00 Позвольте вмешаться
Цитата(sazh @ Jul 11 2... Jul 12 2007, 02:52 sazh Спасибо всем. Все заработало, после того как пропу... Jul 12 2007, 12:26 syoma Цитата(sazh @ Jul 12 2007, 14:26) Уж очен... Jul 20 2007, 08:20
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|