Daten über NIOS 2 in BRAM schreiben

Gast #5925379
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.
Gast #5925763
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 :)
Gast #5925860
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 :(?
Gast #5925950
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?
Gast #5925968
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;
#5926114
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.
#5926122
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.
#5926362
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.
Gast #5929318
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?
#5929331
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [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 einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.