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 "        restablecer: 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 (clock,reset)"
        pone $fh "    BEGIN" pone $fh "
        IF    (reset='0') THEN"
        pone $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" } } No hubo
errores.

El contenido de esta página es una combinación de traducción humana e informática del contenido original en inglés. Este contenido se ofrece únicamente para su conveniencia y como información general, y no debe considerarse como completo o preciso. Si existe alguna contradicción entre la versión en inglés de esta página y la traducción, la versión en inglés será la que sirva de referencia. Consulte la versión en inglés de esta página.