Hallo ich habe mich mal eingeloggt fragender(ICH),
ich danke euch für eure super Beiträge. Ich habe jetzt den code
geändert und eure Vorschläge eingearbeitet.
Lothar M. schrieb:
>> Hätte zwar nie gedacht das es bei den Frequenzen schon Probleme gibt
> Für "das Problem" reichen 2 Flipflops, 1 Taktflanke, und 1 Signal. Der
> Takt kann also beliebig langsam sein. Es tritt dann nur nicht "so
> häufig" auf...
Ich habe jetzt diesen process vorab erzeugt der die Signale einsynct:
1 | SYNC: process
|
2 | begin
|
3 | wait until rising_edge(SYS_CLK);
|
4 | S_CLK_SYNC <= S_CLK_SYNC(0) & M_CLK;
|
5 | S_MISO_SYNC <= S_MISO_SYNC(0) & MOSI;
|
6 | S_CS_SYNC <= S_CS_SYNC(0) & M_CS;
|
7 | end process SYNC;
|
damit ist das Problem in der tat weg :/ Aber eine frage dazu:
Muss ich das ebenfalls mit Signalen zwischen Architekturen machen? In
deinem Artikel steht alles unter 200 Mhz ist unkritisch.
Jürgen S. schrieb:
> Nein, Du "wartest" auf die fallende Flanke. Du muss entweder den neueren
Richtig! Ich habe auch deine Vorschlag eingearbeitet.
Jürgen S. schrieb:
> Eine kleine Frage: Wie willst Du eigentlich die Bits einsammeln?
JA will ich :) aber ein schritt nach dem anderen
der process sieht jetzt so aus:
1 | STATE: process
|
2 | begin
|
3 | wait until rising_edge(SYS_CLK);
|
4 | S_MCLK_OLD <= S_CLK_SYNC(1);
|
5 | if S_CS_SYNC(1)='0' then --cs ist nicht da!
|
6 | S_BIT_CNT <= BIT_LAENGE-1;
|
7 | else --cs aktive es geht los
|
8 | if (S_MCLK_OLD = '1') and (S_CLK_SYNC(1)='0') then --fallende Flanke wird gesucht!
|
9 | S_RXDATEN <= S_RXDATEN(BIT_LAENGE-2 downto 0) & S_MISO_SYNC(1);
|
10 | M_TMP <= S_MISO_SYNC(1);
|
11 | if S_BIT_CNT = 0 then
|
12 | RX_FINISH <= '1';
|
13 | S_BIT_CNT <= BIT_LAENGE-1;
|
14 | else
|
15 | S_BIT_CNT <= S_BIT_CNT-1;
|
16 | RX_FINISH <= '0';
|
17 | end if;
|
18 | else
|
19 |
|
20 | end if;
|
21 | end if;
|
22 | end process STATE;
|
jetzt sehe ich auf dem oszi keine fehler mehr!