Hi, ich habe mir zum ersten Mal ein System mit einem Nios aufgebaut. Das System besteht aus einem Nios, SDRAM-Controller, CF-Speicherkartencontroller. Zuerst habe ich mir Daten von der Speicherkarte in den SDRAM geladen. Dies funktioniert auch. Nun möchte ich diese Daten über einen DAC ausgeben. Ich habe das mit der Ausgab der Daten probiert, aber leider ist die Ausgabe der Daten zu langsam und außerdem werden die Daten wegen der Bearbeitung der C-Befehle nicht kontinuierlich ausgegeben. Jetzt wollte ich mir einen Avalon-Master bauen, der den SDRAM-Controller anspricht. Leider habe ich keine Ahnung wie das in etwa aussehen müsste. Hat jemand von euch schon einmal ein Avalon-Master in VHDL programmiert? Was gäbe es noch für eine Möglichkeit um die Daten aus dem SDRAM kontinuierlich und mit recht hoher Geschwindigkeit auszulesen (ca. 4 MHz.)? Danke für die Hilfe.
Die SPEC von Altera enthält infos, was da zu machen ist. Im Prinzip brauchst du die Gegenstelle zum Slave. Es kommt aber darauf an, was Du für ein Interface bauen willst. MM oder ST ? Und wie willst du an den Rest ankoppeln ? Deine RAM-Probleme könnten im Übrigen von der Altera Ruond Robin Architaktur mit der 3/7 Zeitscheibe für den Proz herrühren.
Hi, Die Spezifikationen zum Avalonsystem findest du hier: http://altera.com/literature/manual/mnl_avalon_spec.pdf Wenn du den SDRAM-Controller von Altera verwendest stellt dieser ein Avalon-MemoryMapped-Slaveinterface bereit welches du ansprechen kannst. Der einfachste Master, der nur lesen kann, benötigt folgende Signale: Takt, Adressausgang, Dateneingang, Lesesignal. Mit einer Fifo sollte es kein Problem darstellen, die Daten genug schnell auszulesen und weiterzugeben. Wenn du etwas VHDL-Code willst kann ich mal suchen gehen. Aber ich habe nur sehr spezielle Masterinterfaces geschrieben bisher. Mit den Spezifikationen sollte es jedoch ein leichtes sein, ein einfaches Interface zu erstellen. Danach musst du im SOPC-Builder einen neuen Komponenten erstellen und in dein System einfügen. Zur Kontrolle kannst du ihm auch einige Register als Avalon-Slave verpassen. Hier doch noch etwas Code: library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; entity MyUnit is port( signal clk, reset : in std_logic; --Control slave (typ avalon slave) signal ctrl_address_in : in std_logic_vector(11 downto 0); signal ctrl_write_in, ctrl_read_in : in std_logic; signal ctrl_writedata_in : in std_logic_vector(31 downto 0); signal ctrl_readdata_out : out std_logic_vector(31 downto 0); signal ctrl_waitrequest_out : out std_logic; --Read Master (typ avalon master) signal address_out : out std_logic_vector(31 downto 0); signal read_out : out std_logic; signal readdata_in : in std_logic_vector(31 downto 0); signal waitrequest_in : in std_logic; --User signals (typ export) signal ... ); end entity; architecture arch of MyUnit is type State_t is (READMEM, IDLE); signal state : State_t := IDLE; begin ctrl_waitrequest_out <= '0'; process(clk, reset) begin if reset = '1' then state <= IDLE; read_out <= '0'; elsif rising_edge(clk) then --Write at adress 0 triggers read if ctrl_write_in = '1' then if ctrl_address_in = X"000" then --read address given address_out <= ctrl_writedata_in; read_out <= '1'; state <= READ; end if; end if; if state = READ and waitrequest_in = '0' then --data available on readdata_in read_out <= '0'; state <= IDLE; end if; end if; end process; end arch; Mit dem Process in diesem Code kannst du zum Beispiel eine FIFO füllen und dann mit einem anderen Process weiterverarbeiten.
@Gastinformatiker Hi, könntest du vielleicht hierzu etwas erzählen: ... Altera Ruond Robin Architaktur mit der 3/7 Zeitscheibe .. Danke Dir, Maddi
Es gibt da ein Scheduling Modell, nach dem dem NIOS Rechenzeit zugewiesen wird, wenn mehr als ein Master aktiv sind, z.B. DMA oder so. Der Avalon Master NIOS kriegt dann nur einen begrenzten Anteil an Rechenzeit. Meiner Errinnerung navh waren das 3/7 oder so. Müsste aber in der SPEC stehen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.