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

Новичковое: начальное состояние FSM

Вот и следующий этап наступил. :)

Схема нормально симулируется, синтезируется и... Конечно не работает. :)

 

Post-Route simulation показывает, что FSM при старте всего этого безобразия оказалась не в состоянии "0" (как при моделировании), а в состоянии "7".

 

Собственно, вопрос: как корректно установить схему в начальное состояние при старте кристалла (по конфигурации из компа или EPROM)? За что "зацепиться"?

 

Кристалл - Spartan-3E

Изменено пользователем ReedCat

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


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

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

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


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

Reset FSM - средство действенное, но вообще-то должно и без Reset работать правильно.

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

Также необходимо, чтобы Вы поделились фрагментом кода описывающего этот FSM - тогда можно будет посмотреть: может, что нитак в коде ?

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


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

А размерность регистра состояния какая? Если reg [2:0], то понятно - просто у Вас тригера по умолчанию не в 0 становятся, а в 1. А методы борьбы разные. Начиная от объявления типа reg [2:0] State=InitState, работающего не везде, и до нормального резета.

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


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

А размерность регистра состояния какая? Если reg [2:0], то понятно - просто у Вас тригера по умолчанию не в 0 становятся, а в 1. А методы борьбы разные. Начиная от объявления типа reg [2:0] State=InitState, работающего не везде, и до нормального резета.

Если бы так... Он reg[3:0]. Если бы оно встало в "F" - я бы не удивился. А семерка - как-то выбила из колеи :)

 

А по поводу reg [3:0] state=4'h0; - это оказалось единственное место, где я забыл это сделать :(

Поставил - и всё заработало! Спасибо за пинок в правильном направлении! :)

 

 

 

Reset FSM - средство действенное, но вообще-то должно и без Reset работать правильно.

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

Также необходимо, чтобы Вы поделились фрагментом кода описывающего этот FSM - тогда можно будет посмотреть: может, что нитак в коде ?

Поскольку FSM связан с приходом внешних данных, стартовать он должен в состоянии ожидания их.

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

 

Среда - ISE Xilinx 9.2i, симулятор - его же встроенный

 

Сейчас вроде бы заработало (с инициализацией в коде), но, хотелось бы всё-таки узнать, за какой сигнал чипа можно "зацепиться", чтобы отследить первоначальный старт микросхемы?

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


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

Сейчас вроде бы заработало (с инициализацией в коде), но, хотелось бы всё-таки узнать, за какой сигнал чипа можно "зацепиться", чтобы отследить первоначальный старт микросхемы?

используйте сигнал LOCKED от DCM. как только тактовый сигнал стабилизируется, дезайну будет уютно работать в кристалле.

ЗЫ: на мой взгляд лучше ввести линию задержки из цепочки триггеров для удержания ресета на пару-тройку тактов после защёлкивания DCM

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


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

Если бы так... Он reg[3:0]. Если бы оно встало в "F" - я бы не удивился. А семерка - как-то выбила из колеи :)

 

А по поводуreg [3:0] state=4'h0; - это оказалось единственное место, где я забыл это сделать :(

Поставил - и всё заработало! Спасибо за пинок в правильном направлении! :)

Поскольку FSM связан с приходом внешних данных, стартовать он должен в состоянии ожидания их.

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

 

Среда - ISE Xilinx 9.2i, симулятор - его же встроенный

 

Сейчас вроде бы заработало (с инициализацией в коде), но, хотелось бы всё-таки узнать, за какой сигнал чипа можно "зацепиться", чтобы отследить первоначальный старт микросхемы?

 

Посмотрите описание кристалла. FPGA у Xilinx при инициализации наверно в нулях регистры имеет.

Посмотрите специфику пакета при моделировании.

Посмотрите рекомендации по написанию тестбенчей для пакета xilinx.

кажется там для правильной инициализации в системе моделирования обязательно используется сигнал GSR

Может статься reg [3:0] state=4'h0 это его аналог.

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


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

Среда - ISE Xilinx 9.2i, симулятор - его же встроенный

Сейчас вроде бы заработало (с инициализацией в коде), но, хотелось бы всё-таки узнать, за какой сигнал чипа можно "зацепиться", чтобы отследить первоначальный старт микросхемы?

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

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

Если Ваша FSM тактируется от DCM, то для безотказной работы необходимо использовать сигнал LOCKED, как это описал CaPpuCcino.

 

Для более полного понимания работы синтезатора с FSM, рекомендую прочитать в XST.PDF раздельчик "Finite State Machines (FSMs)" и о всех constraint'ах связанyых с FSM.

О том откуда берется GSR и как он работает можно прочитать в DataSheet и UserGuide на Spartan-3E.

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


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

И еще добавлю, что ситнезаторы любят перекодировать машины состояний в удобном для них виде. В опциях это настраивается, но по умолчанию включено.

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

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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