|
|
  |
Новичковое: начальное состояние FSM |
|
|
|
Feb 9 2008, 16:34
|

Частый гость
 
Группа: Свой
Сообщений: 109
Регистрация: 14-01-08
Из: Москва
Пользователь №: 34 069

|
Вот и следующий этап наступил.  Схема нормально симулируется, синтезируется и... Конечно не работает. Post-Route simulation показывает, что FSM при старте всего этого безобразия оказалась не в состоянии "0" (как при моделировании), а в состоянии "7". Собственно, вопрос: как корректно установить схему в начальное состояние при старте кристалла (по конфигурации из компа или EPROM)? За что "зацепиться"? Кристалл - Spartan-3E
Сообщение отредактировал ReedCat - Feb 9 2008, 16:37
|
|
|
|
|
Feb 9 2008, 19:26
|

Частый гость
 
Группа: Свой
Сообщений: 109
Регистрация: 14-01-08
Из: Москва
Пользователь №: 34 069

|
Цитата(RHnd @ Feb 9 2008, 21:51)  А размерность регистра состояния какая? Если reg [2:0], то понятно - просто у Вас тригера по умолчанию не в 0 становятся, а в 1. А методы борьбы разные. Начиная от объявления типа reg [2:0] State=InitState, работающего не везде, и до нормального резета. Если бы так... Он reg[3:0]. Если бы оно встало в "F" - я бы не удивился. А семерка - как-то выбила из колеи А по поводу reg [3:0] state=4'h0; - это оказалось единственное место, где я забыл это сделать Поставил - и всё заработало! Спасибо за пинок в правильном направлении! Цитата(Boris_TS @ Feb 9 2008, 21:12)  Reset FSM - средство действенное, но вообще-то должно и без Reset работать правильно. Поэтому для решения Вашей проблемы, укажите среды разработки которыми Вы пользуетесь для синтеза, имплементации и моделирования (одного названия ПЛИС недостаточно). Также необходимо, чтобы Вы поделились фрагментом кода описывающего этот FSM - тогда можно будет посмотреть: может, что нитак в коде ? Поскольку FSM связан с приходом внешних данных, стартовать он должен в состоянии ожидания их. В этом случае - всё работает корректно, а вот как обеспечить, чтобы при включении питания (завершени загрузки конфигурации) он встал именно в это состояние - это и хочется узнать. Среда - ISE Xilinx 9.2i, симулятор - его же встроенный Сейчас вроде бы заработало (с инициализацией в коде), но, хотелось бы всё-таки узнать, за какой сигнал чипа можно "зацепиться", чтобы отследить первоначальный старт микросхемы?
|
|
|
|
|
Feb 10 2008, 07:37
|
Гуру
     
Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804

|
Цитата(ReedCat @ Feb 9 2008, 22:26)  Если бы так... Он 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 это его аналог.
|
|
|
|
|
Feb 10 2008, 09:09
|
Злополезный
   
Группа: Свой
Сообщений: 608
Регистрация: 19-06-06
Из: Russia Taganrog
Пользователь №: 18 188

|
Цитата(ReedCat @ Feb 9 2008, 22:26)  Среда - 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.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|