Вообщем, такая ситуация.
Есть источник входных данных, который по своему клоку(CLK_WR) выдает 8 бит. Есть выходной, так сказать "потребитель", который эти же данные принимает, но уже со своим клоком(CLK_RD).
Данные от источника идут не сплошным потоком, а частями, пакетами.
Для передачи между ними, я использовал FPGA-шную встроенную SRAM(буфер так сказать). Входные данные записываются в этот буфер. Затем, когда он заполнится(пакет принят), я устанавливаю спец. флаг и принимающая часть по этому флагу, начинает читать из буфера и по окончании чтения сбрасывает флаг. По сброшенному флагу, "источник данных" начинает запись в буфер следующий пакет.
Проблема в том, что кроме передачи пакета, надо также передавать спец. число с адресом этого пакета.
Я cделал так: 1.vhdl
Сигналы '1' на входах FLAG_SET и FLAG_CLR имеют длительность в 5-10 периодов WR_CLK, так что однозначно распознаются. Да и сам пакет передается без искажений и наложения одного пакета на другой.
Проблема состоит в том, что время от времени, портится значение PKT_ADDR_OUT.
То есть при переходе от одного CLK домена в другой, сигналы FLAG_POLL и PKT_ADDR_OUT передаются с разными задержками, в результате чего PKT_ADDR_OUT читается в тот момент, когда оно меняется.
Каким образом мне ограничить разницу во временах прихода флага и данных? Какие из constraints за это отвечают?
Среда разработки: Quartus, используется "classic timing analiser"
ЗЫ: хотел добавить, что проблема именно с constraints а не с логикой работы системы, так как если менять другие блоки, которые совершенно не связаны с даным, при компиляции, расположение на кристалле меняется, и проблема то проявляется то исчезает. То есть дело именно в разводке.
Сообщение отредактировал Amper25 - Aug 4 2008, 18:57
Прикрепленные файлы
1.vhdl.txt ( 1.12 килобайт )
Кол-во скачиваний: 81