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

1

No entiendo mis errores en QSys, ¿puedes ayudarme? Estoy tratando de pasar por este ejercicio: enlace

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

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é qué estoy haciendo, ya que no hay instrucciones sobre cómo conectar las conexiones. ¿Puedes ayudarme?

ProbablementenohaynadademaloenelVHDL.

libraryieee;useieee.std_logic_1164.all;entityde2_sram_controllerisport(signalchipselect:instd_logic;signalwrite,read:instd_logic;signaladdress:instd_logic_vector(17downto0);signalreaddata:outstd_logic_vector(15downto0);signalwritedata:instd_logic_vector(15downto0);signalbyteenable:instd_logic_vector(1downto0);signalSRAM_DQ:inoutstd_logic_vector(15downto0);signalSRAM_ADDR:outstd_logic_vector(17downto0);signalSRAM_UB_N,SRAM_LB_N:outstd_logic;signalSRAM_WE_N,SRAM_CE_N:outstd_logic;signalSRAM_OE_N:outstd_logic);endde2_sram_controller;architecturedpofde2_sram_controllerisbeginSRAM_DQ<=writedatawhenwrite='1'else(others=>'Z');readdata<=SRAM_DQ;SRAM_ADDR<=address;SRAM_UB_N<=notbyteenable(1);SRAM_LB_N<=notbyteenable(0);SRAM_WE_N<=notwrite;SRAM_CE_N<=notchipselect;SRAM_OE_N<=notread;enddp;libraryieee;useieee.std_logic_1164.all;useieee.numeric_std.all;entityde2_led_flasherisport(clk:instd_logic;reset_n:instd_logic;read:instd_logic;write:instd_logic;chipselect:instd_logic;address:instd_logic_vector(4downto0);readdata:outstd_logic_vector(15downto0);writedata:instd_logic_vector(15downto0);leds:outstd_logic_vector(15downto0));endde2_led_flasher;architecturertlofde2_led_flasheristyperam_typeisarray(15downto0)ofstd_logic_vector(15downto0);signalRAM:ram_type;signalram_address,display_address:unsigned(3downto0);signalcounter_delay:unsigned(15downto0);signalcounter:unsigned(31downto0);beginram_address<=unsigned(address(3downto0));process(clk)beginifrising_edge(clk)thenifreset_n='0'thenreaddata<=(others=>'0');display_address<=(others=>'0');counter<=(others=>'0');counter_delay<=(others=>'1');elseifchipselect='1'thenifaddress(4)='0'thenifread='1'thenreaddata<=RAM(to_integer(ram_address));elsifwrite='1'thenRAM(to_integer(ram_address))<=writedata;endif;elseifwrite='1'thencounter_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

Intenté hacer todos los cambios a partir de 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

Actualización2

Ahoratratodeasignarlospinesdelreloj/reinicioalsramperonohayopcionesparaeso:

    

1 respuesta

3

Al menos lo siguiente necesita solución:

  • Rompa el enlace entre clk_0\clk_in_reset y jtag_uart_0\reset . ¿Ha realizado una conexión incorrecta (al azar?) aquí para intentar corregir las advertencias.
  • En System Contents en el bloque nios2
    • Dejar custom_instruction_master debe estar desconectado
    • Jtag MM esclavo jtag_debug_module debería estar desconectado por ahora - todavía tendrá una depuración externa a través. las líneas FPGA JTAG sin conectar esto.
  • La señal clk_in_reset en el clk0 Clock Source debe exportarse. Nada está impulsando toda la línea de reinicio del sistema en este momento, así que nada funcionará. Más tarde, puede vincular la señal exportada de forma adecuada a un reinicio a 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 de LED leds tiene 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 fuera de QSYS, también debe 'exportarla' como antes: haga doble clic en la columna de exportación, escriba un nombre como "led_pins" y luego este aviso desaparecerá: %código%
  • Usted agregó un puerto esclavo MM de Avalon en el componente Warning: System.leds: leds.conduit_end must be exported, or connected to a matching conduit. sin especificar completamente los detalles de la interfaz. Al menos debe decir qué otros puertos de leds controlan el reloj y reinicio para esos accesos de memoria. Así es como arreglas esta advertencia: leds

    • Abra el editor de componentes para Error: System.leds.avalon_slave_0: leds.avalon_slave_0 must declare an associated reset haciendo clic con el botón derecho en la biblioteca (NO en el diseño), luego seleccione leds .
    • Vaya a la pestaña Edit...
    • Busque la sección llamada Interfaces y elija los valores para los cuadros desplegables avalon_slave0 (Avalon Memory Mapped Slave) y Associated Clock .
    • Haga clic en Associated Reset desde el Editor de componentes.
    • Regresa a QSYS y pulsa Finish
  • También debe editar el componente File -> Refresh System y en la pestaña leds , haga clic en el botón Interfaces para eliminar las interfaces vacías (informadas como Remove Interfaces with No Signals ). A menudo, QSYS las crea automáticamente cuando detecta mal la configuración de la interfaz (deducida de los nombres de los puertos). Necesitas recordar limpiarlos. Guarde el componente y luego vuelva a cargar QSYS para que desaparezca este.

  

Punto general de orden: intente no salir del administrador de componentes mientras tenga advertencias. Debería solucionarlos antes de pasar a la integración.

  • Su System.leds.reset: Interface has no signals definitivamente debería tener una señal sram y clock agregada en el lado interno para ir con la interfaz Avalon-MM, y la interfaz debe configurarse para usarlas como con reset .
  • Si se supone que el bloque leds debe conducir un chip de memoria externa a través del puerto del conducto, en lugar de usar ramales de bloques internos, será muy divertido hacer que eso funcione.
    • Considere reemplazar el módulo sram con partes en inventario por ahora. Mire debajo de sram . Usará bloques de bloque para implementar su Nios RAM sin tener que usar memoria externa, suficiente para ver el arranque de la CPU a través de JTAG.
  • conecte Library -> Memories and Memory Controllers -> On-Chip -> On-Chip Memory (RAM or ROM) a jtag_uat_0\reset , para que el periférico uart de JTAG se reinicie con el resto de su sistema.

No es difícil compilar esto en QSYS una vez que lo entiendes, si aún no lo has hecho, sigue con los tutoriales de video de Altera en altera.com para familiarizarte con la herramienta.

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

    
respondido por el shuckc

Lea otras preguntas en las etiquetas