Ich hab sowas gemacht, und zwar deswegen, weil der AVR mit einer SD dann
bequem das FPGA booten kann. Im FPGA läuft dann ein Microblaze, der dann
wiederum den AVR als eine Art IO-Expander für die SD und AD-Wandler
nutzt. Als Interface werden die Pins für das Slave-parallel-IF des FPGAs
und der gemuxte 8Bit AD-Bus des AVRs genommen (+ALE/RD/WR).
Im (gebooteten) FPGA hängt dann daran ein Dual-Port-RAM, dass vom
Microblaze über verschiedene IO-Adressen angesprochen werden kann. Eine
bildet das uart-lite-Verhalten nach, d.h. der AVR macht RS232-IO. Hat
den Vorteil, dass AVR und FPGA-Ausgaben über dieselbe Schnittstelle
laufen. Dann gibts noch ein Sektor-read/write-IF (ähnlich IDE), worüber
das MB-Linux dann sein SD-IO abwickelt. Die AD-Werte stehen auch drin,
eine Doorbell-Interrupt in beide Richtungen gibts auch.
Der Bootvorgang sieht so aus, dass der AVR via FAT-FS auf der SD-Karte
das "neueste" FPGA-Image findet (man kann per RS232 manuell auch was
anderes wählen) und damit das FPGA konfiguriert. Das dann startende
MB-Bios fordert vom AVR den im selben Ordner liegenden
Linux-Kernel+Initrd an, der AVR hangelt sich dabei (wie beim Bitstream)
noch selbst durch die FAT. Wenn das Linux gestartet ist, wird für die
SD-Karte nur noch das Sektor-IF benutzt, der Linuxtreiber dazu ist recht
trivial, er muss ja nur die Sektornummer weiterreichen...