Quartus® II Tcl Beispiel: Versionsnummer in einer VHDL-Registerbank

author-image

Von

Dieses Beispielverfahren generiert eine VHDL-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 VHDL-Datei trägt den Namen version_reg.vhd. 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 VHDL-Datei Probleme auftreten. Sie können den Fehler erkennen und anzeigen.

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 } ]
    setzen sie reset_value [string repeat "0" $num_digits],

    wenn { [catch { set fh
        [open "version_reg.vhd" w ]
        $fh "LIBRARY ieee;\nUSE ieee.std_logic_1164.ALL;"
        setzt setzt $fh "ENTITY version_reg IS"
        setzt $fh " PORT (" setzt $fh "        Taktfrequenz: IN STD_LOGIC;"
        setzt $fh "        reset: IN STD_LOGIC;"
        setzt $fh "        data_out: OUT STD_LOGIC_VECTOR (${high_index} \
             downto 0)" setzt
        $fh    ";"
        setzt $fh "END version_reg".
        setzt $fh "ARCHITECTURE rtl OF version_reg IS"
        setzt $fh "BEGIN"
        setzt $fh "PROCESS (clock,reset)"
        setzt $fh "    BEGIN" setzt $fh " IF    (reset='0') THEN"
        setzt $fh "        data_out <=X\"${reset_value}\""
        setzt $fh "    ELSIF rising_edge (clock) THEN"
        setzt $fh "        data_out <= X\"${hex_value}\""
        setzt $fh "    END IF;"
        setzt $fh "ENDPROZESS".
        setzt $fh "END rtl;"
        schließen $fh
    } res ] } {
        return -code error $res } else {
    return
        1 }
}

Verwenden einer Catch-Anweisung

Die folgende Vorgehensweise ist ein Beispiel dafür, wie Sie das oben beschriebene Verfahren aufrufen und eventuelle Fehler erkennen können.

setzen Sie my_hex_number "A5",
wenn { [catch { generate_vhdl $my_hex_number } res] } {
    post_message -type error "Couldn't generate VHDL file\n$res"
} # Wenn das Skript hier
ankommt, gab es keine Fehler.

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.