W tym przykładzie procedura generuje plik VHDL z wartością szesnastką przechowywaną w banku rejestrów. Dzięki tej procedurze można zautomatyzować zapisywanie niewielkich ilości danych (takich jak numer wersji) do banku rejestrowego w Twoim projekcie.
Wygenerowany plik VHDL o nazwie version_reg.vhd. Zadzwoń do procedury z numerem szesnastkowym, który chcesz przechowywać w banku rejestrowym. Przykład metody wywoływania procedury znajduje się u dołu tej strony.
Kiedy wywołujesz procedurę w skrypcie Tcl, należy zbić połączenie procedury w catch statement, ponieważ procedura zwraca błąd, jeśli występują problemy z tworzeniem pliku VHDL. Możesz go wyłapać i wyświetlić.
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 } ] ustawić reset_value [ciąg powtórz "0" $num_digits], jeśli { [catch { set fh [open "version_reg.vhd" w ] stawia $fh "LIBRARY ieee;\nUSE ieee.std_logic_1164.ALL;" stawia $fh "ENTITY version_reg IS" stawia $fh " PORT (" stawia $fh " zegar: W STD_LOGIC;" stawia $fh " resetować: STD_LOGIC;" stawia $fh " data_out: OUT STD_LOGIC_VECTOR(${high_index} \ downto 0)" stawia $fh " );" stawia $fh "version_reg KOŃCOWE". stawia $fh "RTL ARCHITEKTURY version_reg IS" stawia $fh "BEGIN" stawia $fh "PROCES (zegar, reset)" stawia $fh " BEGIN" stawia $fh " IF (reset ='0') NASTĘPNIE" stawia $fh " $fh data_out <=X\"${reset_value}\"" stawia $fh " ELSIF rising_edge (zegar), A NASTĘPNIE" stawia $fh " data_out < = X\"${hex_value}\"" stawia $fh " END IF;" stawia $fh "PROCES KOŃCOWY;" stawia $fh "RTL END;" zamknij $fh } res ] } { błąd zwrotu -kod $res } jeszcze { zwrot 1 }
Korzystanie z instrukcji catch
Poniższa instrukcja jest przykładem wywoływania powyższej procedury i wyłapania wszelkich błędów.
ustaw my_hex_number "A5", jeśli { [catch { generate_vhdl $my_hex_number } res] } { post_message -błąd typu "Nie generuje pliku VHDL\n$res" } Jeśli skrypt zostanie tutaj wyświetlany, nie było żadnych błędów.