www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Zweck des Zwischenregisters in Lattice SPI Reference Design unklar


Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?
  PROCESS(CLK_I,RST_I)
     BEGIN
         IF (RST_I = '0') THEN
           latch_s_data <= X"0000";--AFTER to_time(UDLY);
         ELSIF(CLK_I'EVENT AND CLK_I = '1') THEN
           latch_s_data <= DATA_IN;-- AFTER to_time(UDLY);
        END IF;
     END PROCESS;

und dann
     PROCESS(CLK_I,RST_I)
     BEGIN
         IF (RST_I = '0') THEN
             reg_txdata <= (OTHERS => '0');
         ELSIF(CLK_I'EVENT AND CLK_I = '1')Then
        if ((reg_wr and reg_trdy) = '1') then
              reg_txdata <= latch_s_data;-- AFTER to_time(UDLY);
             END IF;
        END IF;
     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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
noips schrieb:
> 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?
Das nennt sich "Double Buffering" Du kannst dadurch das nächste zu 
sendende Datum schon in das vorgelagerte Senderegister schreiben, auch 
wenn noch einen Übertragung via reg_txdata im Gange ist. Erst nachdem 
die Übertragung beendet ist, werden die gepufferten Daten ins reg_txdata 
übernommen.
M.E. ist diese Geschichte auf Hardwareebene unsinnig, denn du kannst dir 
dieses Zwischenregister ohne jegliche Probleme bei Bedarf selber 
erzeugen. In einem uC ist so ein "Schattenregister" aber schon sinnvoll, 
damit kontinuierlich Daten gesendet werden können, weil die Software 
u.U. nicht so schnell neue Daten ins TX-Register schreiben kann.

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Besten Dank für die Antwort!

> M.E. ist diese Geschichte auf Hardwareebene unsinnig, denn du kannst dir
> dieses Zwischenregister ohne jegliche Probleme bei Bedarf selber
> erzeugen.

Ich dachte mir auch, ich könnte diese Zwischenspeicherung aus dem Code 
entfernen, da ich bei meiner Anwendung keine Bedeutung sehe. Aber ich 
dachte, bevor ich das mache, muss ich wissen aus welchem Grund man so 
etwas überhaupt reinbaut.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.