Daten über NIOS 2 in BRAM schreiben

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren