Автомат состояний из StateCad отлично проверяется в StateBench но практически не работает в реальности. (Сорри, не знаю в какой форум это идет)
Отправлено
titanic 09 июля 2007 г. 17:54
Привет. Подскажите плиз, что может быть за глюк: есть простенькая диаграмма, нарисованная в 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 что-то не понимаю? Спасибо.