Comment mettre à niveau un projet Quartus II de SOPC vers QSys?

Niklas Rosencrantz

Comment mettre à niveau un projet Quartus II de SOPC vers QSys?


Je ne comprends pas mes erreurs dans QSys, pouvez-vous m’aider? J’essaie de faire cet exercice: http://www.cs.columbia.edu/~sedwards/classes/2013/4840/lab3.pdf

Dans Qsys lorsque je connecte les composants, j’obtiens l’erreur suivante se plaignant des connexions que les instructions ne disent pas comment câbler:

 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 ( 0 x0 .. 0 x3f )  overlaps jtag_uart_0 . avalon_jtag_slave ( 0 x0 .. 0 x7 ) Error :  System . nios2_qsys_0 . instruction_master :  leds . avalon_slave_0 ( 0 x0 .. 0 x3f )  overlaps jtag_uart_0 . avalon_jtag_slave ( 0 x0 .. 0 x7 ) 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 

Je peux réduire le nombre d’erreurs mais je ne peux pas les ramener à 0 et je ne sais pas vraiment ce que je fais car il n’y a pas d’instructions pour connecter les connexions. Pouvez-vous m’aider?

entrez la description de l'image ici

Il n’y a probablement rien de mal avec le 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 ; 

J’ai téléchargé mes fichiers ici .

Mettre à jour

J’ai essayé d’apporter toutes les modifications de la réponse ici et je reçois toujours des messages d’erreur:

 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 ( 0 x0 .. 0 x3f )  overlaps jtag_uart_0 . avalon_jtag_slave ( 0 x0 .. 0 x7 ) Error :  System . nios2 . instruction_master :  leds . avalon_slave_0 ( 0 x0 .. 0 x3f )  overlaps jtag_uart_0 . avalon_jtag_slave ( 0 x0 .. 0 x7 ) 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 

entrez la description de l'image ici

Update 2

Maintenant, j’essaie d’assigner les broches d’horloge / réinitialisation au sram mais il n’y a pas d’options pour cela:

entrez la description de l'image ici

trondd

J’ai jeté un rapide coup d’œil à l’affectation et, pour autant que je sache, vous êtes invité à utiliser SOCP builder – le prédécesseur de QSys. Il existe plusieurs différences entre ces deux outils, ce qui pourrait être à l’origine de vos problèmes. En plus de cela, il est presque impossible d’aider sans pouvoir reproduire le problème. Je vous suggère de partager vos fichiers de projet afin que les autres puissent voir par eux-mêmes au lieu de simplement regarder une capture d’écran.

Niklas Rosencrantz

@trondd Merci pour le commentaire. J’ai téléchargé les fichiers ici: bayfiles.net/file/UPWx/n3zhyB/lab3.zip Je pense que vous avez besoin de Quartus II pour m’aider mais c’est la version gratuite que j’utilise afin que vous puissiez la télécharger si vous ne l’avez pas et si Le constructeur SOCP peut le faire, alors QSys devrait être en mesure de le faire. J’utilise la version 13 de Quartus II.

shuckc

Bayfiles est trop douloureux à utiliser. Si vous lancez le projet sur Github, je vous aiderai à le faire fonctionner.

Réponses


 shuckc

Au moins les éléments suivants doivent être corrigés:

  • Brisez le lien entre clk_0clk_in_reset et jtag_uart_0reset – vous avez établi une mauvaise connexion (au hasard?) Ici pour tenter de corriger les avertissements.
  • Dans le System Contents sur le bloc nios2
    • Laisser custom_instruction_master doit être déconnecté
    • L’esclave Jtag MM jtag_debug_module doit être déconnecté pour l’instant – vous aurez toujours un débogage externe via. les lignes FPGA JTAG sans les connecter.
  • Le signal clk_in_reset dans la clk0 horloge clk0 doit être exporté. Rien ne conduit la totalité de votre ligne de réinitialisation du système pour le moment, donc rien ne fonctionnera. Plus tard, vous pouvez lier le signal exporté de manière appropriée à une réinitialisation du niveau de la carte. Pour ce faire: double-cliquez dans la colonne d’exportation et tapez « reset_in » ou similaire.
  • Les leds du pilote LED ont un port appelé conduit_end . Ce seront les fils que vous connecterez aux broches de la puce pour alimenter les LED. Pour obtenir ce signal de QSYS, vous devez également l’exporter comme avant – double-cliquez dans la colonne d’exportation, tapez un nom comme « led_pins » et cet avertissement disparaîtra: Warning: System.leds: leds.conduit_end must be exported, or connected to a matching conduit.
  • Vous avez ajouté un port esclave MM Avalon sur le composant leds sans spécifier complètement les détails de l’interface. Au moins, vous devez dire quels autres ports de leds contrôlent l’ horloge et réinitialiser pour ces accès à la mémoire. Voici comment résoudre cet avertissement: Error: System.leds.avalon_slave_0: leds.avalon_slave_0 must declare an associated reset

    • Ouvrez l’éditeur de composants pour les leds en cliquant dessus avec le bouton droit de la souris dans la bibliothèque (PAS la conception), puis choisissez Edit...
    • Accédez à l’onglet Interfaces
    • Recherchez la section intitulée avalon_slave0 (Avalon Memory Mapped Slave) et choisissez les valeurs des avalon_slave0 (Avalon Memory Mapped Slave) déroulantes Associated Clock et Associated Reset .
    • Cliquez sur Finish dans l’éditeur de composants.
    • Revenez à QSYS et appuyez sur File -> Refresh System
  • Vous devez également modifier le composant leds et sous l’onglet Interfaces , cliquez sur le bouton Remove Interfaces with No Signals afin de supprimer les interfaces vides (signalées comme System.leds.reset: Interface has no signals ). Ceux-ci sont souvent créés automatiquement par QSYS lorsqu’il détecte mal la configuration de votre interface (déduit des noms de port). Vous devez vous rappeler de les nettoyer. Enregistrez le composant, puis rechargez QSYS pour voir celui-ci disparaître.

Rappel d’ordre général: essayez de ne pas quitter le gestionnaire de composants pendant qu’il a des avertissements. Vous devez les corriger avant de passer à l’intégration.

  • Votre sram devrait définitivement avoir une clock et reset signal de reset ajoutés du côté interne pour aller avec l’interface Avalon-MM, et l’interface doit être configurée pour les utiliser comme avec les leds .
  • Si le bloc sram est censé entraîner une puce de mémoire externe à travers le port de conduit, plutôt que d’utiliser des béliers de bloc internes, vous aurez beaucoup de plaisir à le faire fonctionner.
    • Envisagez de remplacer le module sram par des pièces de stock pour l’instant – regardez sous Library -> Memories and Memory Controllers -> On-Chip -> On-Chip Memory (RAM or ROM) . Cela utilisera des béliers pour implémenter votre RAM Nios sans avoir à utiliser de mémoire externe – suffisant pour voir le démarrage du CPU sur JTAG.
  • connectez jtag_uat_0reset à clk0clk_reset , de sorte que le périphérique clk0clk_reset JTAG soit réinitialisé avec le reste de votre système.

Il n’est pas difficile de créer ce genre de choses dans QSYS une fois que vous aurez compris – si vous ne l’avez pas déjà fait, parcourez les didacticiels vidéo d’Altera sur altera.com pour vous familiariser avec l’outil.

La raison pour laquelle vous devez connecter l’horloge / réinitialiser pour chaque port Avalon-MM (et le déclarer comme tel à QSYS) est afin qu’il puisse vérifier les domaines d’horloge et insérer la logique de croisement d’horloge pour vous si nécessaire. QSYS peut traverser des domaines, des paramètres de rafale, des largeurs de mémoire et des adresses de base – c’est génial pour ce genre de choses.

Niklas Rosencrantz

Merci pour la réponse détaillée. J’ai apporté toutes les modifications que vous mentionnez et il me reste 9 erreurs. Votre réponse ci-dessus a été très informative, peut-être pouvez-vous consulter mes résultats en essayant de résoudre tous les problèmes? Je ne comprends pas 1) « Laisser custom_instruction_master doit être déconnecté » – cela signifie-t-il simplement « laisser custom_instruction_master déconnecté »? Je ne comprenais pas non plus « Si le bloc sram est censé entraîner une puce de mémoire externe via le port de conduit, plutôt que d’utiliser des béliers de bloc internes, vous aurez beaucoup de plaisir à le faire fonctionner. » mais va essayer d’apprendre.

shuckc

Si je corrige la conception et que je la colle sur Internet, je pense que je ne rendrai pas service aux futurs étudiants de «CSEE W4840 Embedded System Design Lab 3». Et je ne sais pas si les dérivés de cette conception peuvent être partagés – il n’y a pas de licence que je puisse voir.

shuckc

1) Vous n’avez toujours pas de broches d’horloge / réinitialisation affectées sur l’interface Avalon-MM du module sram

Niklas Rosencrantz

Je vous remercie. Mais je ne comprends pas comment attribuer des broches d’horloge / réinitialisation sur le sram? Pouvez-vous me donner un peu plus de détails? (Je ne suis pas en train de suivre le cours, j’apprends ce parce que ça m’intéresse.)

 

#à, #de, comment, II?, mettre, niveau, projet, Qsys, Quartus, SOPC, un, vers

 

google

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *