Esempio di Quartus® II Tcl: numero di versione in una banca del registro VHDL

author-image

di

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.

Il contenuto di questa pagina è il risultato della combinazione tra la traduzione umana e quella automatica del contenuto originale in lingua inglese. Questo contenuto è fornito soltanto a titolo di informazione generale e non ha pretese di completezza o accuratezza. In presenza di contraddizioni tra la versione in lingua inglese di questa pagina e la sua traduzione, fa fede la versione inglese. Visualizza la versione in lingua inglese di questa pagina.