Cette procédure par exemple génère un fichier VHDL avec une valeur hexculcicule stockée dans une banque de registres. Vous pouvez utiliser cette procédure pour automatiser l’écriture de petites quantités de données (comme un numéro de révision) à une banque de registre dans votre conception.
Le fichier VHDL généré est nommé version_reg.vhd. Appelez la procédure avec le numéro hex conservable dans la banque de registre. Il y a un exemple de comment appeler la procédure en bas de cette page.
Lorsque vous appelez la procédure dans un script Tcl, vous devez envelopper l’appel de la procédure dans un relevé de captures, car la procédure renvoie une erreur en cas de problèmes pour créer le fichier VHDL. Vous pouvez détecter l’erreur et l’afficher.
proc generate_vhdl { hex_value } {set num_digits [longueur de chaîne $hex_value] défini bit_width [expr { 4 * $num_digits } ] réglé high_index [expr { $bit_width - 1 } ] a défini reset_value [répétition de la chaîne « 0 » $num_digits] si {[catch {set fh [open « version_reg.vhd » w ] met $fh « LIBRARY ieee;\nUSE ieee.std_logic_1164.ALL ; » met $fh « ENTITÉ VERSION_REG IS » met $fh « PORT » ( » met $fh « horloge : IN STD_LOGIC ; » met $fh « réinitialisation : IN STD_LOGIC ; » met $fh « data_out : OUT STD_LOGIC_VECTOR (${high_index} \ downto 0) » met $fh « ; » met $fh « VERSION_REG FIN » ; met $fh « ARCHITECTURE rtl OF version_reg IS » met $fh « BEGIN » met $fh « PROCESS (clock,reset) » met $fh « BEGIN » met $fh « IF (reset='0') then » met $fh » data_out <=X\"${reset_value}\ » met $fh « ELSIF rising_edge (horloge) » met $fh « data_out <= X\"${hex_value}\ » met $fh « END IF ; » met $fh « PROCESSUS FINAL » met $fh « END rtl ; » fermez $fh } res ] } { erreur de retour de code $res } d’autre {retour 1 }
À l’aide d’une déclaration de capture
Voici un exemple montrant comment appeler la procédure ci-dessus et détecter les erreurs éventuelles.
définissez my_hex_number « A5 » si {[capture { generate_vhdl $my_hex_number } res] } { erreur de type post_message « Impossible de générer un fichier VHDL\n$res » } } # Si le script arrive, il n’y a pas eu d’erreurs.