¿Cómo actualizar un proyecto Quartus II de SOPC a QSys?

No entiendo mis errores en QSys, ¿pueden ayudarme? Estoy tratando de realizar este ejercicio: http://www.cs.columbia.edu/~sedwards/classes/2013/4840/lab3.pdf

En Qsys, cuando conecto los componentes, aparece el siguiente error quejándose de las conexiones que las instrucciones no dicen cómo cablear:

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

Puedo reducir la cantidad de errores, pero no puedo reducirlos a 0 y realmente no sé lo que estoy haciendo, ya que no hay instrucciones sobre cómo conectar las conexiones. ¿Me puedes ayudar?

ingrese la descripción de la imagen aquí

Probablemente no haya nada malo con el VHDL.

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;

Subí mis archivos aquí .

Actualizar

Traté de hacer todos los cambios desde la respuesta aquí y todavía recibo algunos mensajes de error:

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

ingrese la descripción de la imagen aquí

Actualización 2

Ahora trato de asignar los pines de reloj/reinicio al sram pero no hay opciones para eso:

ingrese la descripción de la imagen aquí

Eché un vistazo rápido a la tarea y, por lo que puedo ver, se le indica que use el generador SOCP, el predecesor de QSys. Hay varias diferencias entre estas dos herramientas, por lo que ese podría ser el origen de sus problemas. Además de eso, es casi imposible ayudar sin poder reproducir el problema. Le sugiero que comparta los archivos de su proyecto para que otros puedan verlo por sí mismos en lugar de simplemente mirar una captura de pantalla.
@trondd Gracias por el comentario. Subí los archivos aquí: bayfiles.net/file/UPWx/n3zhyB/lab3.zip Creo que necesitas Quartus II para ayudarme, pero es la versión gratuita que uso, así que puedes descargarlo si no lo tienes y si El constructor SOCP puede hacerlo, entonces QSys debería poder hacerlo. Estoy usando la versión 13 de Quartus II.
Bayfiles es demasiado doloroso de usar. Si lanzas el proyecto a Github, te ayudaré a que funcione.

Respuestas (1)

Al menos lo siguiente necesita arreglo:

  • Rompe el enlace entre clk_0\clk_in_resety jtag_uart_0\reset- has hecho una mala conexión (¿al azar?) aquí en un intento de corregir las advertencias.
  • en System Contentsel nios2bloque
    • Dejar custom_instruction_master debe estar desconectado
    • El esclavo Jtag MM jtag_debug_moduledebe estar desconectado por ahora; aún tendrá una depuración externa a través de. las líneas FPGA JTAG sin conectar esto.
  • La señal clk_in_reseten la clk0fuente del reloj debe exportarse. Nada está impulsando toda la línea de reinicio de su sistema en este momento, por lo que nada funcionará. Más tarde, puede vincular la señal exportada de manera adecuada a un reinicio de nivel de placa. Para hacer esto: haga doble clic en la columna de exportación y escriba "reset_in" o similar.
  • El componente del controlador LED ledstiene un puerto llamado conduit_end. Estos serán los cables que conectará a los pines del chip para controlar los LED. Para obtener esta señal de QSYS, también necesita 'exportarla' como antes: haga doble clic en la columna de exportación, escriba un nombre como "led_pins" y luego desaparecerá esta advertencia:Warning: System.leds: leds.conduit_end must be exported, or connected to a matching conduit.
  • Agregó un puerto esclavo Avalon MM en el ledscomponente sin especificar completamente los detalles de la interfaz. Al menos necesita decir qué otros puertos controlan ledsel reloj y reinician para esos accesos a la memoria. Así es como arreglas esta advertencia:Error: System.leds.avalon_slave_0: leds.avalon_slave_0 must declare an associated reset

    • Abra el editor de componentes ledshaciendo clic derecho en la biblioteca (NO en el diseño), luego elija Edit....
    • Ir a la Interfacespestaña
    • Busque la sección llamada avalon_slave0 (Avalon Memory Mapped Slave)y elija valores para los cuadros desplegables Associated Clocky Associated Reset.
    • Haga clic Finishen el Editor de componentes.
    • Regrese a QSYS y presioneFile -> Refresh System
  • También debe editar el ledscomponente y, en la Interfacespestaña, hacer clic en Remove Interfaces with No Signalsel botón para eliminar las interfaces vacías (informadas como System.leds.reset: Interface has no signals). A menudo, QSYS los crea automáticamente cuando detecta incorrectamente la configuración de su interfaz (inferida de los nombres de los puertos). Necesitas recordar limpiarlos. Guarde el componente y luego vuelva a cargar QSYS para que desaparezca.

Cuestión general de orden: intente no salir del administrador de componentes mientras tenga advertencias. Debe corregirlos antes de pasar a la integración.

  • Definitivamente debe sramtener una señal clocky resetagregada en el lado interno para ir con la interfaz Avalon-MM, y la interfaz necesita configurarse para usarla como con leds.
  • Si sramse supone que el bloque debe conducir un chip de memoria externo a través del puerto de conducto, en lugar de usar RAM de bloque interno, se divertirá mucho haciendo que funcione.
    • Considere reemplazar sramel módulo con piezas de stock por ahora; mire a continuación Library -> Memories and Memory Controllers -> On-Chip -> On-Chip Memory (RAM or ROM). Eso usará bloques de RAM para implementar su Nios RAM sin tener que usar memoria externa, suficiente para ver el arranque de la CPU sobre JTAG.
  • conéctese jtag_uat_0\reseta clk0\clk_reset, para que el periférico JTAG uart se reinicie con el resto de su sistema.

No es difícil crear estas cosas en QSYS una vez que se familiariza con ellas; si aún no lo ha hecho, siga los tutoriales en video de Altera en altera.com para familiarizarse con la herramienta.

La razón por la que necesita vincular el reloj/restablecimiento para cada puerto Avalon-MM (y declararlo como tal a QSYS) es para que pueda verificar los dominios del reloj e insertar la lógica de cruce del reloj cuando sea necesario. QSYS puede cruzar dominios, configuraciones de ráfagas, anchos de memoria y direcciones base: es excelente para estas cosas.

Gracias por la extensa respuesta. Hice todos los cambios que mencionas y me quedaron 9 errores. Su respuesta anterior ha sido muy informativa, ¿quizás pueda echar un vistazo a mis resultados tratando de resolver todos los problemas? No entiendo 1) "Dejar custom_instruction_master debe estar desconectado" - ¿significa simplemente "dejar custom_instruction_master desconectado"? Tampoco entendí "Si se supone que el bloque sram debe conducir un chip de memoria externo a través del puerto de conducto, en lugar de usar rames de bloque internos, se divertirá mucho haciendo que funcione". pero tratare de aprender.
Si arreglo el diseño y lo coloco en Internet, creo que les haré un flaco favor a los futuros estudiantes del 'CSEE W4840 Embedded System Design Lab 3'. Y no estoy seguro de si los derivados de ese diseño se pueden compartir; no hay ninguna licencia que pueda ver.
1) Todavía no tiene pines de reloj/restablecimiento asignados en la interfaz Avalon-MM del módulo sram
Gracias. Pero no entiendo cómo asignar pines de reloj/restablecimiento en el sram. ¿Puedes por favor darme un poco más de detalle? (No estoy siguiendo el curso, estoy aprendiendo esto porque me interesa).