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.