[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
А чем вы осцилл. синхронизируете? FRAME#?
Но вообще-то вопрос стоит неправильно. Падение FRAME# - вот стартовое событие. Был-был-был '1' - упал в '0' и на этом же такте, когда он упал, AD[] IDSEL CBE[] несут информацию об адресе и команде. А момент перехода в '1' - это момент завершения транзакции. И ни по каким косвенным признакам на AD[] и CBE[] вы начало транзакции не опознаете. Target FSM в общих чертах как работает - по RESET попали в Idle (кстати посмотрите вашу FSM на этот счет, может случайно по RESET все состояния не активны и она как-бы никуда перейти не может?), если FRAME# акт. (упал) переходим на проверку AD[] CBE[] IDSEL и если транзакция наша переходим в S_data если чужая то в Bus_busy и в одном из этих состояний находимся до поднятия FRAME#, т.е. до завершения своей или чужой транзакции, затем снова Idle (через состояние Turn Around если была своя транзакция), затем ждем очередной FRAME#. И он (FRAME#) управляет этими процессами. На AD[] CBE[] IDSEL - вспомогательная информация, но не наоборот.
Объявите/нарисуйте регистры для всех входных сигналов: FRAME# IRDY# IDSEL AD[] CBE[], пусть они в схеме приходят Только На Эти регистры и защелкиваются естес. просто CLK приходящим, полагаю, с GCLKPADx (если Xilinx). Т.е. CLK делается глобальным и не инвертируется. Далее работайте только с этими защелкнутыми версиями сигналов, добавив к именам (чтобы не запутаться) окончания _REG. Формируемые вами AD[] TRDY# STOP# DEVSEL# и PAR тоже должны оканчиваться регистрами и триггерами. Сигналы разрешения (OE) для AD[] PAR и TRDY# STOP# DEVSEL# тоже защелкиваются (кстати для трех последних OE один и тот же). Я хочу сказать что на PCI нельзя выводить никакую комбинаторную логику.
Выведите из кристалла Target FSM наружу (если макетка) и смотрите осциллом Idle BusBusy S_data TurnAr. Они должны подчиняться FRAME#, не 'зависать' и между ними не должно быть зазоров.
--IgorK
E-mail: info@telesys.ru