Цитата(skilful @ Sep 11 2012, 10:41)

а как мне "разделенные" регистры связать?
да и не сильно это усложнит логику?
для упрощения объяснения задачи -- пусть будет регистр внутри ПЛИС счетным.
То есть ПЛИС инкрементирует его постоянно, но может и записать начальное значение.
МК тоже может записать начальное значение, а может и просто считать.
В деталях проблема не ясна но отвечу на что понял...
1) Вы работаете с SPI интерфейсом.
Это значит что один конец мастер, а другой слейв.
Сделайте МК мастером. Это значит что только он инициирует передачу данных.
2) Как сделать доступ в один и тот-же регистр и со стороны МК и со стороны ПЛИС по записи.
-Придумайте протокол обмена по SPI: код команды, адрес, данные.
-Когда МК даёт команду записи в регист, она принимается SPI декодером команд (в виде автомата)
-Декодер команды останавливает ПЛИС и меняет регистр
-Декодер команды перезапускает ПЛИС с новым значением
3) как сказать МК, что ПЛИС сменила значение регистра
- по прерыванию
- по SPI. В этом случае надо "завести" регистр состояния ПЛИС и читать его переодически командой SPI.
Например, ПЛИС взводит бит состояния в 1 при последней записи в регистр, а при чтении регистра состояния этот бит автоматически обнуляется.
4) что от чего тактировать....
- проще всего SPI склок выдавать из МК (задайте нужную конфигурацию МК SPI)
- ПЛИС должна иметь свой генератор клока выше частоты SPI клока
- Все входные SPI сигналы в ПЛИС привязать к внутреннему клоку через ресинхронизаторы (2 тригера)
- анализируя уровни SPI входов при помощи соответствующего автомата - декодировать SPI поток данных.
Вот как-то так...
---------------------
Есчё добавлю...
SPI понятие розтяжимое....
Фактически надо говорить о СТЕКЕ протоколов.
В этом случае SPI - это только описание доступа к каналу передачи (клок, данные) - канальный уровень
Дальше идёт формат команды SPI (код команды, адрес, данные)
Дальше интерпретатор команд (напр. чтение из регистра 1 выполняется со сбросом бита состояния, а регистра 2 без таких-же действий) - прикладной уровень