Je comprends que vous pouvez déclarer une chaîne dans un banc de test Verilog comme suit:
reg [8:1] char_value; always @(reset) begin char_value = "A"; if (char_value == 8'h41) // Do stuff!
6 Réponses :
Les chaînes semblent fonctionner dans un module pour moi: Qu'est-ce qui ne fonctionne pas pour vous? p> La chaîne code> type code> Type de données a été introduit dans la norme SystemVerilog en 2005 (voir IEEE 1800-2005 ou 1800-2009). P> P>
J'essaie d'attribuer la valeur ASCII à un bus 8 bits; Je n'ai pas $ Afficher code>.
Pour la simulation, vous pouvez utiliser une chaîne ou $ d'affichage. Mais si vous concevez du code pour FPGA. Je pense que l'outil de synthèse ne prend actuellement pas en charge le type de chaîne. De Xilinx, ils ne soutiennent même pas SystemVerilog maintenant.
SystemVerilog doit prendre en charge la cession de chaîne comme mentionné dans SPEC:
For example, to store the 12-character string "Hello world\n" requires a variable 8x12, or 96 bits wide. bit [8*12:1] stringvar = "Hello world\n";
Cette réponse est complètement et totalement incorrecte. Verilog supporte les constantes de caractères, et rien n'empêche aucun utilisateur d'attribuer des valeurs hexadécimales aux registres!
Vous pouvez affecter une chaîne à un type de registre. Toute personne qui dit autrement a tort. Vous voudrez peut-être rendre vos registres 0 'basés sur le fonctionnement correctement. Je l'ai fait dans de vrais FPGA et cela fonctionne. P>
Pour être clair. Le compilateur Verilog traduira "A" à 8'H41, "AB" à 16'H4142, "ABC" à 24'H434241. Ne vous rendez pas plus compliqué en essayant de penser que le FPGA doit «soutenir» cela quelque part comment. Tout ce qui se passe, c'est que le compilateur la convertit d'un beau format lisible humain en un nombre.
Oui Les valeurs de chaîne ne sont que des constantes. Bien que l'outil de synthèse puisse autoriser ou non permettre aux registres de disposer de valeurs d'initialisation / de réinitialisation non zéro, en fonction de la technologie utilisée. Les outils X / A récemment n'ont pas de problème Initialisation des registres de changement de constantes directement hors de réinitialisation / programmation.
Cela fonctionne pour moi: à la fois dans la simulation et sur un FPGA SPARTAN-3E P> P>
Juste testé sur Ise (virtex-6), fonctionne comme un charme.
output [8*14:1]string_value1; reg [8*14:1]string_value1; always @ (posedge BIWEn) if (BIWEn==1'b1 ||BIREn==1'b1) begin:START_STATE_WRITE psW=idleW; //psW is Present State Write string_value1= "IDLE"; end ![test bench] (c:\pictures)
Définissez un tableau d'octets, puis assignez ASCII à chaque élément de tableau:
reg [7:0] data_out; reg data_out_valid; reg [3:0] some_index; : // pushing data onto a bus data_out <= foo[some_index]; data_out_valid <= 1'd1; some_index <= some_index + 4'd1;
Essayez-vous de synthétiser cela?
@ Adam12 - Oui, j'essaie d'imprimer du texte sur un écran LCD connecté à mon tableau de développement FPGA. Depuis que cela n'était pas clair pour vous et tous les deux, je modifierai la question à être plus spécifique: je souhaite attribuer ces valeurs de caractères 8 bits à une sortie de mon module via un registre à décalage.
Qu'est-ce qui ne fonctionne pas exactement? Avez-vous une erreur de synthèse ou le texte n'est-il simplement pas indiqué sur l'écran LCD?