Ejemplo de Tcl de Quartus® II: número de versión en un banco de registro VHDL

author-image

Por

Este procedimiento de ejemplo genera un archivo VHDL con un valor de lejía almacenado en un banco de registros. Puede utilizar este procedimiento para automatizar la escritura de pequeñas cantidades de datos (como un número de revisión) en un banco de registro en su diseño.

El archivo VHDL generado tiene el nombre version_reg.vhd. Llame al procedimiento con el número que desea almacenar en el banco de registro. Hay un ejemplo de cómo llamar al procedimiento en la parte inferior de esta página.

Cuando se llama al procedimiento en un script de Tcl, debe envolver la llamada al procedimiento en una instrucción catch porque el procedimiento devuelve un error si hay problemas para crear el archivo VHDL. Puede detectar el error y mostrarlo.

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 } ]
    establezca reset_value [cadena de repetición "0" $num_digits]

    si { [catch { set fh
        [open "version_reg.vhd" w ]
        pone $fh "LIBRARY ieee;\nIEEE ieee.std_logic_1164.ALL;"
        pone $fh "ENTITY version_reg IS"
        pone $fh " PORT (" pone $fh "        reloj: EN STD_LOGIC;"
        pone $fh "        reset: IN STD_LOGIC;"
        pone $fh "        data_out: OUT STD_LOGIC_VECTOR(${high_index} \
             downto 0)"
        pone $fh "    );"
        pone $fh "version_reg final".
        pone $fh "ARCHITECTURE rtl OF version_reg IS"
        pone $fh "BEGIN"
        pone $fh "PROCESS (reloj, reset)"
        pone $fh "    BEGIN" pone $fh "
        IF    (reset='0') THEN"
        pone $fh " $fh        data_out <=X\"${reset_value}\""
        pone $fh "    ELSIF rising_edge (reloj) "
        pone $fh " data_out < =        X\"${hex_value}\""
        pone $fh " END    IF;"
        pone $fh "PROCESO FINAL".
        pone $fh "END rtl".
        cerrar $fh
    } res ] } {
        error de devolución -code $res } else {
    devolución
        1 }
}

Uso de una declaración Catch

El siguiente es un ejemplo de cómo llamar al procedimiento anterior y detectar cualquier error.

establezca my_hex_number "A5"
if { [catch { generate_vhdl $my_hex_number } res] } {
    post_message error de tipo -"No se pudo generar un archivo VHDL\n$res" } } Si el script llega
aquí, no hubo errores.

El contenido de esta página es una combinación de la traducción humana y automática del contenido original en inglés. Este contenido se ofrece únicamente para su comodidad como información general y no debe considerarse completa o precisa. Si hay alguna contradicción entre la versión en inglés de esta página y la traducción, prevalecerá la versión en inglés. Consulte la versión en inglés de esta página.