Numéro de version Tcl Quartus® II dans la banque de registre Verilog

author-image

Par

Cette procédure d’exemple génère un fichier Verilog 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 Verilog généré est nommé version_reg.v. 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 Verilog. Vous pouvez détecter l’erreur et l’afficher.

proc generate_verilog { hex_value } {

    set num_digits [string length $hex_value]
    set bit_width [expr { 4 * $num_digits } ]
    set high_index [expr { $bit_width - 1 } ]
    set reset_value [string repeat "0" $num_digits]

    if { [catch {
        set fh [open "version_reg.v" w ]
        puts $fh "module version_reg (clock, reset, data_out);"
        puts $fh "    input clock;"
        puts $fh "    input reset;"
        puts $fh "    output \[$high_index:0\] data_out;"
        puts $fh "    reg \[$high_index:0\] data_out;"
        puts $fh "    always @ (posedge clock or negedge reset) begin"
        puts $fh "        if (!reset)"
        puts $fh "            data_out <= ${bit_width}'h${reset_value};"
        puts $fh "        else"
        puts $fh "            data_out <= ${bit_width}'h${hex_value};"
        puts $fh "    end"
        puts $fh "endmodule"
        close $fh
    } res ] } {
        return -code error $res
    } else {
        return 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 suivantes :

set my_hex_number "A5"
if { [catch { generate_verilog $my_hex_number } res] } {
    post_message -type error "Couldn't generate Verilog file\n$res"
}
# If the script gets here, there were no errors.

Le contenu de cette page est une combinaison de traduction humaine et informatique du contenu original en anglais. Ce contenu vous est fourni pour votre commodité et à titre informatif seulement et ne saurait être totalement exact ou complet. En cas de contradiction entre la version anglaise de cette page et la traduction, c'est la version anglaise qui prévaut. Afficher la version anglaise de cette page.