Hallo allerseits,
ich möchte Informationen zwischen zwei FPGAs (Cyclone IV @100MHz) via
SPI austauschen. Das muss nicht schnell sein, deshalb habe ich mich für
SPI entschieden und die Implementierung nach:
http://www.lothar-miller.de/s9y/categories/45-SPI-Master
auf dem einen Cyclone und den Slave auf dem zweiten Cyclone nach:
http://www.lothar-miller.de/s9y/categories/26-SPI-Slave
programmiert.
Auf dem Master ist "TX_Data" mit "RX_Data" über ein D-FF
1 | process begin
|
2 | wait until rising_edge(TX_DONE);
|
3 | TX_Data <= RX_Data;
|
4 | end process;
|
sozusagen "geloopbackt". Jetzt gebe ich auf der Slave-Seite einen
konstanten Wert vor und vergleiche diesen mit dem empfangenen Datenwort.
Dabei treten leider sporadisch Fehler auf: Das letzte Bit in einem Wort
kippt dann, wie auf dem Oszillogramm zu sehen. (Grün SCKL Gelb SS Blau
MISO Pink MOSI)
Die Einstellungen von Master und Slave sind:
CPOL & CPHA = 0
Quarzfrequenz = 100'000'000
SPI freq = 1'000'000
wortlaenge = 12
Meine erste Vermutung war, dass es an der Art meines Loopbacks liegt.
Allerdings sind die Ein- und Ausgänge des Masters ja synchron zum
globalen clk auf dem FPGA (also kein Einsynchronisieren mehr nötig?) und
auch einen Delay von 1-100 Taktzyklen zwischen dem zeitpunkt "TX-DONE"
und der Übernahme eines neuen TX-Wortes haben nichts gebracht.
Hat jemand, der sich mit den Beiden auskennt, eventuell einen Tipp für
mich, wo ich weitersuchen könnte?