Quartus® II Tcl-Versionsnummer in der Verilog-Registerbank

author-image

Von

Dieses Beispielverfahren generiert eine Verilog-Datei mit einem hexadezimalen Wert, der in einer Registerbank gespeichert ist. Sie können dieses Verfahren verwenden, um das Schreiben kleiner Datenmengen (wie z. B. einer Revisionsnummer) bei einer Registerbank in Ihrem Design zu automatisieren.

Die generierte Verilog-Datei trägt den Namen version_reg.v. Rufen Sie das Verfahren mit der hexadezimalen Nummer an, die Sie in der Registerbank speichern möchten. Es gibt ein Beispiel dafür, wie Sie das Verfahren unten auf dieser Seite aufrufen können.

Wenn Sie das Verfahren in einem Tcl-Skript aufrufen, sollten Sie den Procedure Call in eine catch-Anweisung wickeln, da das Verfahren einen Fehler zurückgibt, wenn beim Erstellen der Verilog-Datei Probleme auftreten. Sie können den Fehler erkennen und anzeigen.

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
    }
}

 

Verwenden einer Catch-Anweisung

Das Folgende ist ein Beispiel dafür, wie Sie das oben beschriebene Verfahren aufrufen und eventuelle Fehler erkennen können:

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.

Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.