Przykład Quartus® II Tcl: numer wersji w banku rejestrowym VHDL

author-image

Według

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.

Materiały zawarte na tej stronie są tłumaczeniem z języka angielskiego, wykonanym częściowo przez człowieka, a częściowo automatycznie. Materiały te są udostępnione dla Twojej wygody i należy je traktować jedynie jako ogólne źródło informacji. Nie ma jednak gwarancji, że są one kompletne bądź poprawne. Jeśli istnieje jakakolwiek rozbieżność między wersją angielską tej strony a jej tłumaczeniem, wersja angielska jest wersją obowiązującą i ma rozstrzygające znaczenie. Wyświetl anglojęzyczną wersję tej strony.