mikrocontroller.net

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


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.
Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gustl B. (-gb-)
Datum:

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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Samuel C. (neoexacun)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :(?

Autor: FPGA zum Spass (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: FPGA zum Spass (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Samuel C. (neoexacun)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Samuel C. (neoexacun)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Chris (Gast)
Datum:

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

Autor: Samuel C. (neoexacun)
Datum:

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

Autor: Chris (Gast)
Datum:
Angehängte Dateien:

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

Autor: Samuel C. (neoexacun)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Chris (Gast)
Datum:

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

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Markus F. (mfro)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das sollte später auch für den Betrieb verwendet werden.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.