Forum: FPGA, VHDL & Co. Schreiben/ Lesen von Daten in den SDRAM (DE1-SoC)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Christoph1990 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

Im Zuge eines Projektes will ich mit dem THDB-ADA und dem DE1-SoC Board 
einen Datenlogger zu realisieren.

Der Ablauf sei wie folgt:
Messung des Signals (THDB-ADA) --> Verarbeitung der Daten (DE1-SoC) --> 
Abspeichern der Daten im SDRAM oder im DDR3-RAM --> Anschließendes 
Schreiben der Daten auf eine microSD-Karte.
Eine weitere Variante wäre die Daten über Ethernet an einen PC mit 
MATLAB/SIMULINK zu streamen.

Momentaner Stand:
Das ADC-Board wurde schon angebunden und mit den maximalen 65MSPs 
ausgelesen (über eigens erzeugte PLL). Im Qsys habe ich einen SDRAM 
Controller angelegt und entsprechend konfiguriert.
Muss der Ablauf über FSM (Finite State Machine) für den SDRAM bzw. den 
DDR3RAM von mir noch implementiert werden oder kann man hier auf 
Methoden oder IPs im Qsys darauf zugreifen?

Ich habe schon ein Programm für das Schreiben bzw. das Lesen schon 
erstellt aber ich lese immer die falschen Werte aus.

Source Code:
process(CLK143)
    begin
      if rising_edge(CLK143) then      --write process
        --case BUFF_CTRL is
          --when st0=>------------write image to  SDRAM
            --if (SDRAM_WAIT='0')then
                SDRAM_WE_N<='0';
                SDRAM_RE_N<='1';
                --SDRAM_WRITEDATA<="1010101010101010";
                DRAM_DQ(15) <= '0';
                DRAM_DQ(14) <= '0';
                DRAM_DQ(13 downto 0) <= ADC_DB(13 downto 0);
                SDRAM_WRITEDATA<=DRAM_DQ;
                SDRAM_ADDR<=std_logic_vector(unsigned(SDRAM_ADDR)+1);

            --end if;

          --when st1=>-----------write from SDRAM to BUFFER
            SDRAM_WE_N<='1';
            --RAMWE1<=SDRAM_RDVAL;
            --SDRAM_RDVAL<='1';
            RAMWE1<='1';
            SDRAM_RE_N<='0';
            SDRAM_WAIT<='0';

               SDRAM_ADDR<=std_logic_vector(unsigned(SDRAM_ADDR)+1);
            RAMIN1<=SDRAM_READDATA(15 downto 0);


        --end case;
       end if;
  end process;




Bin dankbar für jeden nützlichen Post.

Greets,
Chris

P.S.: Bin leider ein Newbie mit VHDL und FPGA Programmierung und kenne 
mich nicht so gut, wie manch anderer in diesem Forum aus. ;)

von Gustl B. (-gb-)


Bewertung
0 lesenswert
nicht lesenswert
Nein das musst Du nicht machen und vor allem auch nicht so. SDRAM ist 
kompliziert und braucht Refresh, das will man nicht selber bauen. Ich 
kenne mich da auch nicht aus, aber es gibt bestimmt eine IP als RAM 
Controller mit schöner Schnittstelle.

von Christoph1990 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo Gustl Buheitel die Parameter wie z.B. Refresh wurden in der IP 
SDRAM Controller (in QSYS) eingestellt. Weiters wurde auch eine Dual 
Port Clock für den RAM konfiguriert. Aber das Schreiben und Lesen (FSM) 
müsste trotzdem von mir selber implementiert werden oder gibt es dazu 
Vorlagen?

von Strubi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Christoph1990 schrieb:
> Hallo Gustl Buheitel die Parameter wie z.B. Refresh wurden in der
> IP
> SDRAM Controller (in QSYS) eingestellt. Weiters wurde auch eine Dual
> Port Clock für den RAM konfiguriert. Aber das Schreiben und Lesen (FSM)
> müsste trotzdem von mir selber implementiert werden oder gibt es dazu
> Vorlagen?

Google mal nach "Hamster papilio SDRAM", der Code ist gut getestet, 
selbermachen lohnt wirklich nicht.
Selbiger Hamster hat auch noch einen bare metal UDP core im Rucksack, 
den man allenfalls für Sofort-Streaming der Daten über GigE (ohne SDRAM) 
nutzen kann, hier gabs auch mal wo nen Beitrag dazu.

von Christoph1990 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
@Strubi:
  kann dies auch beim DE1-SoC verwendet werden, habe leider keine 
Information über den eingesetzten SDRAM gefunden? Weiter werden sind die 
cmd Ports nicht auf dem Board vorhanden.

von Strubi (Gast)


Bewertung
0 lesenswert
nicht lesenswert
So ganz plug'n'play ist es natürlich nicht, du musst schon die 
Datenblätter studieren und die Timings anpassen. Die cmd_-Leitungen sind 
dein Host-Interface, das musst du entsprechend an deine CPU oder 
Datenschaufel-Logik ranbacken.

von Christoph1990 (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Ok das mit den Anpassungen habe ich schon fast vermutet, die cmd ports 
haben mich nur ein wenig verwirrt.
Danke für die Info, werde es mal versuchen ;)

von Donni D. (donnidonis)


Bewertung
0 lesenswert
nicht lesenswert
ftp://ftp.altera.com/up/pub/Altera_Material/14.0/Tutorials/VHDL/DE1-SoC/ 
Using_the_SDRAM.pdf

Altera hat für viele Boards immer Using Guides, ich denke hier drin 
findet man alles, was man wissen muss. Timing, Clocks etc. ist alles 
beschrieben.

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]
  • [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.