Attribuer un binaire en VHDL

Ross W

Attribuer un binaire en VHDL


Je reçois une erreur de syntaxe près de data0_sim dans le code suivant – Nouveau sur vhdl et confus car je pense que cela devrait fonctionner:

 library  ieee ; 
 use  ieee . std_logic_1164 . all ; 
 use  ieee . numeric_std . all ; 

 library  unisim ; 
 use  unisim . vcomponents . all ; 


 signal  data0_sim :   std_logic_vector ( 8 - 1   downto   0 ); data0_sim <=   "00001111" ; 

user8352

Je soupçonne que révéler un peu plus pourrait être utile. La construction d’un cas de test simple avec un élément déclaratif d’architecture pour data0_sim et une instruction d’affectation de signal simultanée, comme indiqué, ne génère aucune erreur évidente, ce qui signifie qu’un contexte plus important semble nécessaire. Le message d’erreur réel peut aider, notant qu’il peut y avoir des erreurs qui ne pointent pas vers la position du caractère ou de la ligne où se trouve le problème de syntaxe réel.

Réponses


 Brian Drummond

Nous ne pouvons que deviner puisque vous ne nous avez pas dit l’erreur de syntaxe, mais d’après le code affiché, il POURRAIT être:

 signal  data0_sim :   std_logic_vector ( 8 - 1   downto   0 ); data0_sim <=   "00001111" ; 

Il y a maintenant deux choses que vous pourriez essayer de faire ici:

1) déclarer un signal et lui donner une valeur initiale. La syntaxe correcte pour cela est:

 signal  data0_sim :   std_logic_vector ( 8 - 1   downto   0 )   :=   "00001111" ; 

Notez que l’initialiseur utilise la syntaxe d’affectation de variable pour indiquer que la sémantique d’affectation de signal (affectation différée, génération d’événement) ne s’applique pas.

2) déclarer un signal et plus tard, lui attribuer une valeur.

La syntaxe correcte pour cela nécessite plus de contexte: les déclarations et les instructions occupent deux espaces différents dans une unité VHDL. Cela suit les langages de programmation tels que Ada, mais il est assez différent de C.

En VHDL, le contexte peut être une entité / architecture telle que:

 entity  demo is 
 end  demo ; 

 architecture  test of  demo is 
    -- declaration region : your signals, constants, types etc here 
    signal  data0_sim :   std_logic_vector ( 8 - 1   downto   0 ); 
 begin 
    -- statement region : your code here data0_sim <=   "00001111" ; 
 end  test ; 

user8352

Notez que vous ne pouvez pas toujours distinguer une déclaration d’objet d’une déclaration d’interface – « Si aucun mode n’est explicitement donné dans une déclaration d’interface autre qu’une déclaration de fichier d’interface, le mode in est supposé. » L’erreur de syntaxe peut être aussi simple que d’essayer d’assigner quelque chose à un port formel avec un mode manquant. En outre, une dernière déclaration formelle dans la clause port avec une parenthèse fermante manquante sur disons une plage std_logic_vector avec un élément déclaratif d’entité suivant (par exemple data0_sim) pourrait provoquer des plaintes intéressantes. Il n’y a pas encore assez de contexte pour corriger une erreur de syntaxe.

Brian Drummond

Bon point: ma réponse ne couvre que quelques causes les plus susceptibles de faire trébucher un débutant, pas une liste exhaustive.


 MiljanNC

Pourquoi ne définissez-vous pas un composant, c’est-à-dire

 entity  example_ent is 
     port   ( data0_sim :   out   std_logic_vector ( 7   downto   0 )); 
 end  example_ent architecture  example_arch of  example_ent is 
 begin data0_sim <=   "00001111" ; 
 end  example_arch 

 

«Attribuer, #en, binaire, un, VHDL

 

google

Laisser un commentaire

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