Hallo an alle,
ich benutze ein SPI-Modul von den Lattice Reference Designes. Da ist mir
eine Sache unklar. Die SPI-Daten werden über Vektor DATA_IN ans Modul
übergeben und vom Modul dann an MOSI rausgeschoben. Aber sie gelangen
nicht direkt in das Schieberegister reg_txdata, sondern werden zuerst in
einem weiteren Register latch_s_data zwischengespeichert. Was ist der
Zweck des Ganzen?
1 | PROCESS(CLK_I,RST_I)
|
2 | BEGIN
|
3 | IF (RST_I = '0') THEN
|
4 | latch_s_data <= X"0000";--AFTER to_time(UDLY);
|
5 | ELSIF(CLK_I'EVENT AND CLK_I = '1') THEN
|
6 | latch_s_data <= DATA_IN;-- AFTER to_time(UDLY);
|
7 | END IF;
|
8 | END PROCESS;
|
und dann
1 | PROCESS(CLK_I,RST_I)
|
2 | BEGIN
|
3 | IF (RST_I = '0') THEN
|
4 | reg_txdata <= (OTHERS => '0');
|
5 | ELSIF(CLK_I'EVENT AND CLK_I = '1')Then
|
6 | if ((reg_wr and reg_trdy) = '1') then
|
7 | reg_txdata <= latch_s_data;-- AFTER to_time(UDLY);
|
8 | END IF;
|
9 | END IF;
|
10 | END PROCESS;
|
Warum werden die Daten von DATA_IN nicht direkt in reg_txdata
geschrieben?
Ich will das Design jetzt so erweitern, dass die Adresse des
anzusprechenden SPI-Slave auch in einem Vektor (3 Bit breit) eingelesen
wird und dann entsprechen die Slave Select Leitungen gesetzt werden. Und
dabei frage ich mich, ob ich diese Adresse auch über so ein
Zwischenregister einlesen soll.