Цитата(skilful @ Sep 11 2012, 12:13)

вот чтобы всяких пересинхронизаций не было -- и думал взять двухклоковое фифо.
ПЛИС работает с ним на своей частоте, МК -- на своей.
Еще я не понимаю про "ресинхронизаторы (2 тригера)". Как с этим работать?
До этого думал что все "разноклоковые процессы" синхронизируются в двухклоковых фифо или же через PLL
1) двухклоковых фифо, PLL и ресинхронизаторы - это способы как связать асинхронные клок домены.
2) ресинхронизаторы убирают метастабильность. Гдето тут была ветка про метастабильность и способы её подавления - стоит почитать.
В т.ч. и при помощи ФИФО.
http://electronix.ru/forum/index.php?showtopic=936503) Что вы будуте делать с ФИФО когда адрес чтения совпадёт с адресом записи?
Цитата(skilful @ Sep 11 2012, 12:13)

То что все прерывания асинхронны я понимаю.
Я не понимаю следующего (может быть повторюсь) -- из "фифо чтения" читает МК на малой частоте, а пишет ПЛИС на бОльшей частоте.
Когда ПЛИС запишет на бОльшей частоте сигнал "фифо не пустое" выставится, но он будет привязан к клоку ПЛИС.
Это не проблема. МК привяжет асинхронное прерывание к своему клоку.
Цитата(skilful @ Sep 11 2012, 12:13)

Из описания мегафункции Альтеры:
rdempty -- If asserted, indicates that the dcfifo is empty and disables the rdreq port. Synchronized with rdclk
wrempty -- Indicates that the dcfifo is empty. Delayed version of rdempty that is synchronized with wrclk.
Generated from the rdempty signal with a single synchronization register added to synchronize it to the wrclk clock domain.
Насколько я понял Вы предлагаете завести сигнал wrempty на прерывание МК?
http://electronix.ru/redirect.php?http://w...8Boston_CDC.pdf Читать п.5.8.2 - Ваш случай.
Цитата(skilful @ Sep 11 2012, 13:05)

Подал один и тот же клок на клоки чтения и записи. Сигнал wrempty изменяется при первой же записи.
Сигнал rdempty изменяется аж после 7 такта.
Значит пауза после получения прерывания все-таки нужна, если использовать двухклоковое фифо?
похоже тут не тупая задержка нужна, а надо 7 раз клок чтения передёрнуть, чтобы rdempty получить....
-----
Не тратьте время - выкинте все ФИФО, привяжите SPI к клоку ПЛИС и спокойно работайте.
================================================================================
Цитата(troiden @ Sep 11 2012, 12:40)

Чуть подумав, 40 тактов превратилось в 16 - в случае, если за командой записи следует команда чтения.
Т.е. в вашем случае - конвеер. Чтобы прочитать данные надо выдать команду чтения, а потом какую-то другую, чтобы забрать данные.
Ну для вычетки массива - вариант, а для роботы с одиночными командами - только затраты на 2-е повторение.... Не всегда гут.
Может лутше SPI.CLK в 2 раза понизить?
Цитата(troiden @ Sep 11 2012, 12:40)

Зависит от кристалла. Шестой спартан 100 МГц примет без вопросов.
100МГц на SPI.CLK означает что у вас есть полтакта (5нс) на все задержки распространения сигнала от [МК -to -FPGA.PAD- to - внутренний флоп FPGA ]....
Какая величина задержки на плате (при дорожке 10см напр)?
Какое минимальное её значение, а какое максимальное (это критично для сетап-холд таймингов)?
Какой реальный розбросс задержек на плате (skew)?
Какое сетап\холд требование для MISO на МК?
Цитата(troiden @ Sep 11 2012, 12:40)

Отнюдь. См выше - у нас минимум 16 тактов стабильных данных. На внутреннюю частоту пересинхривается только признак приема команды, из него формируется импульс в один такт внутренней частоты, от которого и срабатывает дальнейшая логика.
А что если внутренняя частота меньше SPI.CLK? Хватит на ресинхронизацию и на обработку команды?
----------
Ну это на засыпку...

А ваше решение с конвеером в принципе хорошее. Но лутше всётаки отработать за одну команду команду.