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


von Christoph1990 (Gast)


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-)


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)


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)


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)


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)


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)


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. (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.