Questa procedura di esempio genera un file VHDL con un valore esadecimale archiviato in una banca di registri. È possibile utilizzare questa procedura per automatizzare la scrittura di piccole quantità di dati (ad esempio un numero di revisione) in una banca del registro nella progettazione.
Il file VHDL generato è denominato version_reg.vhd. Chiamare la procedura con il numero esadecimale che si desidera archiviare nella banca del registro. C'è un esempio di come chiamare la procedura in fondo a questa pagina.
Quando si chiama la procedura in uno script Tcl, è necessario avvolgere la chiamata della procedura in un'istruzione catch perché la procedura restituisce un errore in caso di problemi nella creazione del file VHDL. È possibile rilevare l'errore e visualizzarlo.
proc generate_vhdl { hex_value } { set num_digits [string length $hex_value] set bit_width [expr { 4 * $num_digits } ] set high_index [expr { $bit_width - 1 } ] impostare reset_value [stringa ripetere "0" $num_digits] se { [catch { set fh [aprire "version_reg.vhd" w ] mette $fh "LIBRARY ieee;\nUSE ieee.std_logic_1164.ALL;" mette $fh "ENTITY version_reg IS" mette $fh " PORT (" mette $fh " clock: IN STD_LOGIC;" mette $fh " reset: IN STD_LOGIC;" mette $fh " data_out: OUT STD_LOGIC_VECTOR(${high_index} \ downto 0)" mette $fh ");" mette $fh "END version_reg;" mette $fh "ARCHITECTURE rtl OF version_reg IS" mette $fh "BEGIN" mette $fh "PROCESS (clock,reset)" mette $fh "BEGIN" mette $fh " IF (reset='0') THEN" mette $fh " $fh data_out <=X\"${reset_value}\"" mette $fh " ELSIF rising_edge (clock) THEN" mette $fh " data_out <= X\"${hex_value}\"" mette $fh " END IF;" mette $fh "END PROCESS"; mette $fh "END rtl;" chiudi $fh } res ] } { return -code error $res } else { return 1 } }
Utilizzo di un'istruzione Catch
Di seguito è riportato un esempio di come chiamare la procedura sopra e rilevare eventuali errori.
impostare my_hex_number "A5" se { [catch { generate_vhdl $my_hex_number } res] } { errore di tipo post_message "Impossibile generare file VHDL\n$res" } # Se lo script arriva, non ci sono stati errori.