Forum: FPGA, VHDL & Co. Daten über NIOS 2 in BRAM schreiben


von Chris (Gast)


Lesenswert?

Hallo zusammen,
ich bin ein Einsteiger in der FPGA und habe folgendes Problem. Ich habe 
ein BRAM in dem FPGA, aus dem ich Daten lesen will. Das funktioniert 
auch schon. Der nächste Schritt wäre, dass ich über den NIOS 2 in das 
BRAM die Daten schreiben will. Leider weiß ich nicht genau wie das 
funktionieren soll und wäre sehr dankbar wenn mir da jemand weiterhelfen 
kann.

von Gustl B. (-gb-)


Lesenswert?

Aha. Wie ist denn der BRAM am NIOS angeschlossen? Das sind schlicht viel 
zu wenige Informationen.

von Chris (Gast)


Lesenswert?

Das ist die Frage, ob ich das über die Avalon MM Schnittstelle 
realisieren kann, um dann vom Nios auf den Speicher zugreifen kann? Denn 
ich will einen Speicher definieren, wo ich zum einen vom Nios daten 
hineinschreiben kann und vom FPGA Daten nur lesen kann. Der Sinn ist, 
dass ich in den Speicher einmal die Daten schreibe und dann nur noch die 
Werte aus dem Speicher herausnehme, dich ich benötige.
Ich hoffe es ist jetzt ein bisschen klarer. Sorry für die Verwirrung :)

von Samuel C. (neoexacun)


Lesenswert?

Klar, du kannst dir einen Dual-Port-RAM mit Avalon einbinden und einen 
Port an den Nios anbinden. Den anderen exportierst du und greifst vom 
FPGA drauf zu.

von Chris (Gast)


Lesenswert?

Danke Samuel für die Antwort. Welche Funktion aus dem IP Catalog muss 
ich dafür verwenden, da gibt es so viele und ich bin ziemlich neu auf 
dem Gebiet Nios 2 :(?

von FPGA zum Spass (Gast)


Lesenswert?

Wie kann es sein, das du lesen kannst aber nicht schreiben?

Das ist doch das gleiche Stück RAM und der gleiche Bus.

Hast du mal versucht darauf zu schreiben?
Oder ist der RAM als readonly für diesen Port eingestellt?

von Chris (Gast)


Lesenswert?

Ich habe im folgenden den VHDL Code angehängt, mit dem ich die Daten 
lesen und schreiben kann. Das lesen funktioniert ohne Probleme, jedoch 
weiß ich nicht wie bzw. wo ich waddr, we und q verknüpfen muss, damit 
ich den Speicher vom Nios aus beschreiben kann.



library ieee;
use ieee.std_logic_1164.all;

entity mem is

  port
  (
    clk    : in std_logic;
    raddr  : in natural range 0 to 2**15;
    waddr  : in natural range 0 to 2**15;
    data  : in std_logic_vector((15 downto 0);
    we    : in std_logic := '1';
    q    : out std_logic_vector(15 downto 0)
  );

end mem;

architecture rtl of mem is

  subtype word_t is std_logic_vector(15 downto 0);
  type memory_t is array(15 downto 0) of word_t;

  signal ram : memory_t;

begin

  process(clk)
  begin
  if(rising_edge(clk)) then
    if(we = '1') then
      ram(waddr) <= data;
    end if;
    q <= ram(raddr);
  end if;
  end process;

end rtl;

von FPGA zum Spass (Gast)


Lesenswert?

Chris schrieb:
> wo ich waddr, we und q verknüpfen muss

Ist doch alles gemacht, sollte gehen.

Was klappt denn nicht?
Wird garnichts geschrieben?
Falsche Addressen?

von Samuel C. (neoexacun)


Lesenswert?

Du hast doch den Nios in Qsys konfiguriert, oder?
Dort kannst du dann auch einen Dual-Port-RAM einfügen (in Qsys zu finden 
irgendwo unter Memories, internal, RAM, was auch immer) den einen Port 
verbindest du in Qsys mit dem Nios und den anderen exportierst du.

von Chris (Gast)


Lesenswert?

Mein Problem ist dass ich nicht weiß wie ich den Avalon damit verbinden 
kann, dass er die Daten von Nios in den Speicher schreibt.

von Samuel C. (neoexacun)


Lesenswert?

Indem du die Verbindung zwischen beiden in Qsys anklickst. Und danach 
musst du noch oben im Menü den Punkt "Assign Base Addresses" o.ä. 
durchführen. Danach bekommst du in den Headerfiles für deinen Nios die 
entsprechenden Adressen zur Verfügung gestellt und kannst diese ganz 
normal wie RAM beschreiben.

von Chris (Gast)


Lesenswert?

Muss ich dann den geposteten Code in qsys als eine neue Komponente 
erstellen und diese dann mit dem nios verbinden?

von Samuel C. (neoexacun)


Lesenswert?

Der gepostete Code ist ja nur BRAM mit Interface. Das brauchst du dann 
nciht mehr. Das gibt es fertig in Qsys.

von Chris (Gast)


Angehängte Dateien:

Lesenswert?

@Samuel meinst du es dann so? Dass ich dann den S2 exportiere und dann 
diesen dann zum Lesen des Speichers verwenden soll?

von Samuel C. (neoexacun)


Lesenswert?

Ziemlich genau so. Du solltest dich allerdings noch entscheiden, ob du 
eine oder zwei Clockdomains haben willst.

Wenn Nios und der Rest der Logik mit dem selben Takt laufen, stell den 
Onchip-Memory auf Single-Clock. brauchst du zwei verschiedene Takte, 
dann exprotiere auch clk2 und reset2 und trenne die beiden vom 
Qsys-System.

von Chris (Gast)


Lesenswert?

Ich werde es heute oder morgen mal versuchen und würde mich sonst 
nochmal melden. Vielen Dank für eure Unterstützung.

von Chris (Gast)


Lesenswert?

Es hat funktioniert. Vielen Dank. Ich hätte jetzt noch eine Frage. Ich 
verwende das Intel Cyclone 10 LP FPGA Evaluation Kit und will über eine 
selbst geschriebene Anwendung auf dem Host PC auf mein FPGA zugreifen. 
Ist das auch über USB möglich oder nur über die Ethernet-Schnittstelle?

von Markus F. (mfro)


Lesenswert?

Chris schrieb:
> Ich
> verwende das Intel Cyclone 10 LP FPGA Evaluation Kit und will über eine
> selbst geschriebene Anwendung auf dem Host PC auf mein FPGA zugreifen.
> Ist das auch über USB möglich oder nur über die Ethernet-Schnittstelle?

ist das nur für die Entwicklung/Debugging oder soll das im späteren 
Betrieb auch zur Verfügung stehen?

Mit dem USB-Blaster läßt sich relativ einfach über das Altera/Intel 
JTAG-Terminal eine Schnittstelle basteln.

von Chris (Gast)


Lesenswert?

Das sollte später auch für den Betrieb verwendet werden.

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.