Доброго времени, коллеги!
Разрабатываю описание аппаратуры для системы сбора и передачи данных.
Есть КА сбора данных и формирования протокола (общая длина 250 Байт), время формирования протокола 60 мкс, в течение которого данные записываются в двухпортовую память.
По окончанию работы в цикле этот КА формирует сигнал "готовности данных" (PRcomplete, второй снизу на диаграмме), длительностью порядка 900 нс.
По переднему фронту "готовности данных" второй КА формирует сигналы адреса и чтения из двухпортовой памяти, а также сигналы wrreq и wrclk управления буфером FIFO (на времянке представлен только сигнал разрешения записи и обозначен lngfifowrreq). Собственно буфер представляет сгенерированную квартусом (9.0 web Edition) мегафункцию с двумя раздельными тактовыми сигналами синхронизации для записи и чтения (улучшенной защитой от метастабильности). Перезапись данных происходит примерно за 5 мкс.
Оба КА работают безупречно, на одном тактовом домене 200 МГц. Запись производится на чатоте 50 МГц (на один такт записи тратится 4 такта 200 МГц).
Странности начинаются при попытке чтения дынных из буфера FIFO.
Предполагалось, что по окончанию перезаписи протокола в буфер, задним фронтом сигнала lngfifowrreq, должен запуститься КА формирующий сигналы rdreq и rdclk. Сиганл rdclk должен во время генерации идти с частотой 60 МГц. КА работат в тактовом домене 240 МГц, поэтому lngfifowrreq, поступает на КА через три триггера (входной с доменом 200МГц, а два выходных с доменом 240 МГц). В КА так же заводится сигнал опустошения читаемого буфера lngfifordempty, по которому должно прекратиться чтение данных из буфера. Отладка в моделсим показала правильные начало и остановку чтения буфера.
В реальном железе (cyclon II) КА не запускается, т.к. после перезаписи данных в FIFO вместе с установкой lngfifowrreq=0, выставляется сигнал lngfifordempty=1, несмотря на то, что во время перезаписи этот сигнал обнулялся(см временную диаграмму).
Попробовал вместо rdclk подать постоянную частоту 60МГц, дополнительно принудительно подавая нуль вместо сигнала rdempty - КА заработал, но не останавливается и иногда в приемной программе появляются повторы байт, которых быть не должно.
Подскажите, в чем может быть причина установки признака "буфер чтения пуст" (rdempty) при снятии сигнала wrreq?