ReedCat 0 9 февраля, 2008 Опубликовано 9 февраля, 2008 (изменено) · Жалоба Вот и следующий этап наступил. :) Схема нормально симулируется, синтезируется и... Конечно не работает. :) Post-Route simulation показывает, что FSM при старте всего этого безобразия оказалась не в состоянии "0" (как при моделировании), а в состоянии "7". Собственно, вопрос: как корректно установить схему в начальное состояние при старте кристалла (по конфигурации из компа или EPROM)? За что "зацепиться"? Кристалл - Spartan-3E Изменено 9 февраля, 2008 пользователем ReedCat Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Artem_Petrik 0 9 февраля, 2008 Опубликовано 9 февраля, 2008 · Жалоба Для инициализации обычно используется сигнал reset. Хотя бы для того, чтобы можно было переинициализировать систему не выключая питание. Но обычно компилятор понимает, что состояние, в которое автомат переводится по ресету - исходное, и после инициализации переводит его именно в это состояние. По крайней мере у меня на альтере так было всегда. Но все же наличие ресета - обязательно. Хотя бы просто как хороший стиль кодирования. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 9 февраля, 2008 Опубликовано 9 февраля, 2008 · Жалоба Reset FSM - средство действенное, но вообще-то должно и без Reset работать правильно. Поэтому для решения Вашей проблемы, укажите среды разработки которыми Вы пользуетесь для синтеза, имплементации и моделирования (одного названия ПЛИС недостаточно). Также необходимо, чтобы Вы поделились фрагментом кода описывающего этот FSM - тогда можно будет посмотреть: может, что нитак в коде ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RHnd 0 9 февраля, 2008 Опубликовано 9 февраля, 2008 · Жалоба А размерность регистра состояния какая? Если reg [2:0], то понятно - просто у Вас тригера по умолчанию не в 0 становятся, а в 1. А методы борьбы разные. Начиная от объявления типа reg [2:0] State=InitState, работающего не везде, и до нормального резета. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ReedCat 0 9 февраля, 2008 Опубликовано 9 февраля, 2008 · Жалоба А размерность регистра состояния какая? Если 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, симулятор - его же встроенный Сейчас вроде бы заработало (с инициализацией в коде), но, хотелось бы всё-таки узнать, за какой сигнал чипа можно "зацепиться", чтобы отследить первоначальный старт микросхемы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
CaPpuCcino 0 9 февраля, 2008 Опубликовано 9 февраля, 2008 · Жалоба Сейчас вроде бы заработало (с инициализацией в коде), но, хотелось бы всё-таки узнать, за какой сигнал чипа можно "зацепиться", чтобы отследить первоначальный старт микросхемы? используйте сигнал LOCKED от DCM. как только тактовый сигнал стабилизируется, дезайну будет уютно работать в кристалле. ЗЫ: на мой взгляд лучше ввести линию задержки из цепочки триггеров для удержания ресета на пару-тройку тактов после защёлкивания DCM Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 10 февраля, 2008 Опубликовано 10 февраля, 2008 · Жалоба Если бы так... Он 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 это его аналог. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beby 8 10 февраля, 2008 Опубликовано 10 февраля, 2008 · Жалоба Среда - 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
id_gene 0 11 февраля, 2008 Опубликовано 11 февраля, 2008 · Жалоба И еще добавлю, что ситнезаторы любят перекодировать машины состояний в удобном для них виде. В опциях это настраивается, но по умолчанию включено. В отчетах результат перекодирования выписан. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться