Wie aktualisiere ich ein Quartus II-Projekt von SOPC auf QSys?

Ich verstehe meine Fehler in QSys nicht, können Sie mir helfen? Ich versuche, diese Übung durchzugehen: http://www.cs.columbia.edu/~sedwards/classes/2013/4840/lab3.pdf

Wenn ich in Qsys die Komponenten anschließe, erhalte ich den folgenden Fehler, der sich über die Verbindungen beschwert, die in den Anweisungen nicht angegeben sind, wie sie zu verdrahten sind:

Error: System.nios2_qsys_0: Reset slave sram_0.avalon_slave_0 not connected to instruction_master.
Error: System.nios2_qsys_0: Exception slave sram_0.avalon_slave_0 not connected to instruction_master.
Error: System.sram.avalon_slave_0: Interface must have an associated clock
Error: System.sram.avalon_slave_0: Interface must have an associated reset
Error: System.leds.avalon_slave_0: Interface must have an associated reset
Error: System.nios2_qsys_0.data_master: leds.avalon_slave_0 (0x0..0x3f) overlaps jtag_uart_0.avalon_jtag_slave (0x0..0x7)
Error: System.nios2_qsys_0.instruction_master: leds.avalon_slave_0 (0x0..0x3f) overlaps jtag_uart_0.avalon_jtag_slave (0x0..0x7)
Error: System.sram.avalon_slave_0: sram.avalon_slave_0 must declare an associated reset
Error: System.leds.avalon_slave_0: leds.avalon_slave_0 must declare an associated reset
Warning: System.leds.reset: Interface has no signals
Warning: System.sram: sram.conduit_end must be exported, or connected to a matching conduit.
Warning: System.leds: leds.conduit_end must be exported, or connected to a matching conduit.
Warning: System.jtag_uart_0: Interrupt sender jtag_uart_0.irq is not connected to an interrupt receiver

Ich kann die Anzahl der Fehler reduzieren, aber ich kann sie nicht auf 0 herunterbekommen, und ich weiß nicht wirklich, was ich tue, da es keine Anleitung zum Verbinden der Verbindungen gibt. Kannst du mir helfen?

Geben Sie hier die Bildbeschreibung ein

An VHDL ist wahrscheinlich nichts auszusetzen.

library ieee;
use ieee.std_logic_1164.all;
entity de2_sram_controller is
port (
signal chipselect : in std_logic;
signal write, read : in std_logic;
signal address : in std_logic_vector(17 downto 0);
signal readdata : out std_logic_vector(15 downto 0);
signal writedata : in std_logic_vector(15 downto 0);
signal byteenable : in std_logic_vector(1 downto 0);
signal SRAM_DQ : inout std_logic_vector(15 downto 0);
signal SRAM_ADDR : out std_logic_vector(17 downto 0);
signal SRAM_UB_N, SRAM_LB_N : out std_logic;
signal SRAM_WE_N, SRAM_CE_N : out std_logic;
signal SRAM_OE_N : out std_logic
);
end de2_sram_controller;

architecture dp of de2_sram_controller is
begin

    SRAM_DQ <= writedata when write = '1'
                    else (others => 'Z');
    readdata <= SRAM_DQ;
    SRAM_ADDR <= address;
    SRAM_UB_N <= not byteenable(1);
    SRAM_LB_N <= not byteenable(0);
    SRAM_WE_N <= not write;
    SRAM_CE_N <= not chipselect;
    SRAM_OE_N <= not read;

end dp;


library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity de2_led_flasher is
port (
clk : in std_logic;
reset_n : in std_logic;
read : in std_logic;
write : in std_logic;
chipselect : in std_logic;
address : in std_logic_vector(4 downto 0);
readdata : out std_logic_vector(15 downto 0);
writedata : in std_logic_vector(15 downto 0);
leds : out std_logic_vector(15 downto 0)
);
end de2_led_flasher;
architecture rtl of de2_led_flasher is
type ram_type is array(15 downto 0) of
std_logic_vector(15 downto 0);
signal RAM : ram_type;
signal ram_address, display_address : unsigned(3 downto 0);
signal counter_delay : unsigned(15 downto 0);
signal counter : unsigned(31 downto 0);
begin
ram_address <= unsigned(address(3 downto 0));
process (clk)
begin
if rising_edge(clk) then
if reset_n = '0' then
readdata <= (others => '0');
display_address <= (others => '0');
counter <= (others => '0');
counter_delay <= (others => '1');
else
if chipselect = '1' then
if address(4) = '0' then
if read = '1' then
readdata <= RAM(to_integer(ram_address));
elsif write = '1' then
RAM(to_integer(ram_address)) <= writedata;
end if;
else
if write = '1' then
counter_delay <= unsigned(writedata);
counter <= unsigned(writedata) & x"0000";
end if;
end if;
else
leds <= RAM(to_integer(display_address));
if counter = x"00000000" then
counter <= counter_delay & x"0000";
display_address <= display_address + 1;
else
counter <= counter - 1;
end if;
end if;
end if;
end if;
end process;
end rtl;

Ich habe meine Dateien hier hochgeladen .

Aktualisieren

Ich habe versucht, alle Änderungen aus der Antwort hier vorzunehmen, und ich erhalte immer noch einige Fehlermeldungen:

Error: System.nios2_qsys_0: Reset slave sram_0.avalon_slave_0 not connected to instruction_master.
Error: System.nios2_qsys_0: Exception slave sram_0.avalon_slave_0 not connected to instruction_master.
Error: System.nios2_qsys_0: Debug slave nios2_qsys_0.jtag_debug_module not connected to instruction_master.
Error: System.sram.avalon_slave_0: Interface must have an associated clock
Error: System.sram.avalon_slave_0: Interface must have an associated reset
Error: System.leds.avalon_slave_0: Interface must have an associated reset
Error: System.nios2.data_master: leds.avalon_slave_0 (0x0..0x3f) overlaps jtag_uart_0.avalon_jtag_slave (0x0..0x7)
Error: System.nios2.instruction_master: leds.avalon_slave_0 (0x0..0x3f) overlaps jtag_uart_0.avalon_jtag_slave (0x0..0x7)
Error: System.clk_0.clk_reset/leds.reset: Missing connection end (try "Remove Dangling Connections")
Error: System.sram.avalon_slave_0: sram.avalon_slave_0 must declare an associated reset
Error: System.leds.avalon_slave_0: leds.avalon_slave_0 must declare an associated reset
Warning: System.nios2: nios2.jtag_debug_module must be connected to an Avalon-MM master
Warning: System.sram: sram.conduit_end must be exported, or connected to a matching conduit.
Warning: System.jtag_uart_0: Interrupt sender jtag_uart_0.irq is not connected to an interrupt receiver

Geben Sie hier die Bildbeschreibung ein

Aktualisierung 2

Jetzt versuche ich, dem Sram die Clock/Reset-Pins zuzuweisen, aber dafür gibt es keine Optionen:

Geben Sie hier die Bildbeschreibung ein

Ich habe mir die Aufgabe kurz angesehen, und soweit ich sehen kann, werden Sie angewiesen, den SOCP-Builder zu verwenden - den Vorgänger von QSys. Es gibt mehrere Unterschiede zwischen diesen beiden Tools, sodass dies möglicherweise der Ursprung Ihrer Probleme ist. Außerdem ist es fast unmöglich zu helfen, ohne das Problem reproduzieren zu können. Ich schlage vor, dass Sie Ihre Projektdateien freigeben, damit andere sie selbst sehen können, anstatt nur einen Screenshot anzusehen.
@trondd Vielen Dank für den Kommentar. Ich habe die Dateien hier hochgeladen: bayfiles.net/file/UPWx/n3zhyB/lab3.zip Ich denke, Sie brauchen Quartus II, um mir zu helfen, aber es ist die kostenlose Version, die ich benutze, also können Sie sie herunterladen, wenn Sie sie nicht haben und wenn SOCP Builder kann dies tun, dann sollte QSys in der Lage sein, dies zu tun. Ich verwende die Version 13 von Quartus II.
Bayfiles ist zu schmerzhaft zu verwenden. Wenn Sie das Projekt auf Github veröffentlichen, helfe ich Ihnen, es zum Laufen zu bringen.

Antworten (1)

Mindestens Folgendes muss repariert werden:

  • Unterbrechen Sie die Verbindung zwischen clk_0\clk_in_resetund jtag_uart_0\reset- Sie haben hier (zufällig?) eine schlechte Verbindung hergestellt, um Warnungen zu beheben.
  • Auf System Contentsdem nios2Block
    • Leave custom_instruction_master sollte getrennt werden
    • Jtag MM-Slave jtag_debug_modulesollte vorerst getrennt werden - Sie haben immer noch externes Debugging über. die FPGA-JTAG-Leitungen, ohne diese anzuschließen.
  • Das Signal clk_in_resetin der clk0Clock Source muss exportiert werden. Nichts treibt im Moment Ihre gesamte System-Reset-Leitung, also wird nichts funktionieren. Später können Sie das exportierte Signal entsprechend mit einem Board-Level-Reset verknüpfen. Dazu: Doppelklicken Sie in die Export-Spalte und geben Sie "reset_in" oder ähnliches ein.
  • Die LED-Treiberkomponente ledshat einen Port namens conduit_end. Dies sind die Drähte, die Sie mit Pins auf dem Chip verbinden, um die LEDs anzusteuern. Um dieses Signal aus QSYS herauszuholen, müssen Sie es auch wie zuvor 'exportieren' - doppelklicken Sie in die Export-Spalte, geben Sie einen Namen wie "led_pins" ein und dann verschwindet diese Warnung:Warning: System.leds: leds.conduit_end must be exported, or connected to a matching conduit.
  • Sie haben der ledsKomponente einen Avalon MM-Slave-Port hinzugefügt, ohne die Schnittstellendetails vollständig anzugeben. Zumindest müssen Sie sagen, welche anderen Ports ledsdie Uhr steuern und für diese Speicherzugriffe zurücksetzen . So beheben Sie diese Warnung:Error: System.leds.avalon_slave_0: leds.avalon_slave_0 must declare an associated reset

    • Öffnen Sie den Komponenteneditor für, indem Sie in der Bibliothekleds mit der rechten Maustaste darauf klicken (NICHT das Design), und wählen Sie dann .Edit...
    • Gehen Sie zur InterfacesRegisterkarte
    • Suchen Sie den Abschnitt mit dem Namen avalon_slave0 (Avalon Memory Mapped Slave)und wählen Sie Werte für die Dropdown-Felder Associated Clockund aus Associated Reset.
    • Klicken Sie Finishim Komponenten-Editor auf .
    • Kehren Sie zu QSYS zurück und drücken SieFile -> Refresh System
  • Sie müssen auch die Komponente bearbeiten ledsund auf der InterfacesRegisterkarte auf Remove Interfaces with No Signalsdie Schaltfläche klicken, um die leeren Schnittstellen (gemeldet als System.leds.reset: Interface has no signals) zu löschen. Diese werden oft automatisch von QSYS erstellt, wenn es Ihr Schnittstellen-Setup schlecht automatisch erkennt (abgeleitet von Port-Namen). Sie müssen daran denken, sie zu reinigen. Speichern Sie die Komponente und laden Sie QSYS neu, um zu sehen, wie diese verschwindet.

Allgemeiner Hinweis zur Geschäftsordnung: Versuchen Sie nicht, den Komponentenmanager zu verlassen, während er Warnungen enthält. Sie sollten diese beheben, bevor Sie mit der Integration fortfahren.

  • Sie sramsollten auf jeden Fall ein clockund- resetSignal auf der internen Seite hinzugefügt haben, um mit der Avalon-MM-Schnittstelle zu gehen, und die Schnittstelle muss konfiguriert werden, um sie wie mit zu verwenden leds.
  • Wenn der sramBlock einen externen Speicherchip durch den Conduit-Port treiben soll, anstatt interne Block-RAMs zu verwenden, werden Sie viel Spaß daran haben, das zum Laufen zu bringen.
    • sramErwägen Sie vorerst, das Modul durch Originalteile zu ersetzen – schauen Sie unter Library -> Memories and Memory Controllers -> On-Chip -> On-Chip Memory (RAM or ROM). Dadurch werden Block-RAMs verwendet, um Ihren Nios-RAM zu implementieren, ohne externen Speicher verwenden zu müssen - ausreichend, um zu sehen, wie die CPU über JTAG bootet.
  • Verbinden Sie jtag_uat_0\resetsich mit clk0\clk_reset, damit das JTAG-UART-Peripheriegerät mit dem Rest Ihres Systems zurückgesetzt wird.

Es ist nicht schwierig, dieses Zeug in QSYS zu bauen, sobald Sie den Dreh raus haben - wenn Sie es noch nicht getan haben, dann arbeiten Sie sich die Altera-Video-Tutorials auf altera.com durch, um sich mit dem Tool vertraut zu machen.

Der Grund, warum Sie Clock/Reset für jeden Avalon-MM-Port verbinden (und QSYS als solches deklarieren) müssen, ist, damit es die Clock-Domains überprüfen und bei Bedarf eine Clock-Crossing-Logik für Sie einfügen kann. QSYS kann Domänen, Burst-Einstellungen, Speicherbreiten und Basisadressen überqueren - es ist großartig für diese Dinge.

Vielen Dank für die umfangreiche Antwort. Ich habe alle von Ihnen erwähnten Änderungen vorgenommen und es sind noch 9 Fehler übrig. Ihre obige Antwort war sehr informativ. Vielleicht können Sie sich meine Ergebnisse ansehen und versuchen, alle Probleme zu lösen? Ich verstehe nicht 1) "Leave custom_instruction_master sollte getrennt werden" - bedeutet es nur "leave custom_instruction_master getrennt"? Ich habe auch nicht verstanden: "Wenn der Sram-Block einen externen Speicherchip durch den Conduit-Port treiben soll, anstatt interne Block-RAMs zu verwenden, werden Sie viel Spaß daran haben, das zum Laufen zu bringen." werde aber versuchen zu lernen.
Wenn ich das Design repariere und ins Internet stelle, denke ich, dass ich den zukünftigen Studenten des 'CSEE W4840 Embedded System Design Lab 3' einen Bärendienst erweisen werde. Und ich bin mir nicht sicher, ob Ableitungen dieses Designs geteilt werden können - ich kann keine Lizenz sehen.
1) Auf der Avalon-MM-Schnittstelle des Sram-Moduls sind noch keine Clock/Reset-Pins zugewiesen
Danke schön. Aber ich verstehe nicht, wie man Clock/Reset-Pins auf dem Sram zuweist? Kannst du mir bitte etwas mehr Details geben? (Ich folge dem Kurs nicht, ich lerne das, weil es mich interessiert.)