Ejemplo de Tcl de Quartus® II: Incremento del número de versión en el archivo

author-image

Por

Una forma de mantener un número de versión en el proyecto es incrementar un número en un archivo durante cada compilación. Para realizar esta tarea, una secuencia de comandos debe colocar el archivo en una secuencia de comandos para localizar el número, incrementarlo y, a continuación, volver a escribirlo con el nuevo número. Si el archivo es breve y contiene poco más además del número, el script puede simplemente escribir un archivo nuevo desde cero cada vez que se ejecuta. Sin embargo, si el archivo es un archivo de diseño largo, puede ser más práctico editar la línea con el número de versión en lugar de escribir un nuevo archivo desde cero.

Localice el número

El script utiliza una expresión regular para localizar el número en el archivo. La línea con el número debería tener un formato único, de lo contrario, varias líneas pueden coincidir con la expresión regular. Una forma de hacer un formato único es incluir un comentario único en la línea con el número. La expresión regular puede incluir ese comentario único. A continuación, se muestra un ejemplo de una línea en un archivo de diseño con una línea de número de versión que incluye un comentario especial y el comando Tcl de la expresión regular que coincide con él.

Línea de archivos de diseño

data_out <= 16'h41; Número de versión del diseño

Expresión regular

regexp {^\s+data_out <= \d+'h([[[:xdigit:]+); // Número de versión de diseño$} \ $line coincidencia version_number

El patrón ([[:xdigit:]]+) coincide con un número de version_number , que tiene al menos un dígito, y lo guarda en una variable de coincidencia denominada version_number.

Incremente el número

Puede aumentar los números de gpu en Tcl. En Tcl, los números de uu. de 2,5 pulgadas se indican con un 0x principal. Si el número de versión no comienza con 0x, puede ser más fácil convertir el número a la base 10 antes de que lo incremente. En el caso de un número de uu., los siguientes comandos muestran un ejemplo de conversión de una cadena de tipo r. 10 a la base 10, el incremento de la misma y la conversión de nuevamente a gpu.

configure hex_value análisis "AA"
$hex_value "%x" decimal_value
incr decimal_value establecido
new_hex_value [format "%X" $decimal_value]
# $new_hex_value ahora es "AB"

Reescriba el archivo

Si el archivo de diseño es breve y contiene información solo sobre el número de versión, puede utilizar una serie de comandos de configuración para escribir un nuevo archivo con el número incrementado.

Si el archivo de diseño es largo, por lo general es más fácil cambiar solo la línea con el número de versión, porque codificar el contenido del archivo en el script de Tcl sería poco práctico.

El siguiente procedimiento pasa por un archivo de diseño y actualiza la línea con la información de la versión. Las líneas que no coinciden con la expresión regular se escriben en un archivo nuevo, sin modificar. La línea que sí coincide con la expresión regular tiene el número de versión aumentado y, a continuación, se escribe en el nuevo archivo.

proc update_version_number { input_file output_file} { # Si no se puede abrir el archivo de

    entrada, devuelva un error.
    if { [catch {open $input_file} input] } {
        error de devolución -code $input } Cantidad Si no se puede abrir el archivo de

    salida, devuelva un error si {
    [catch {open $output_file w} output] } { error de código de devolución $output } Cantidad de lectura de una línea en el archivo de
        entrada a la
    vez, mientras {-1 != [obtiene $input línea] } { # Esta expresión regular es específica de la línea
        de archivos de diseño cerca de la parte superior de la página web. # Debe cambiarlo según corresponda para su archivo.
        if { [regexp {^\s+data_out <= \d+'h([[[:xdigit:]+); // Número de versión de diseño$} \ $line coincidencia version_number] } { # Convertir el número de versión de en la base 10 e incrementarlo. scan $version_number "%x" decimal_value incr decimal_value establecer new_version_number [format "%X" $decimal_value] # Sustituir el nuevo número de versión para el antiguo regsub h${version_number} $line línea h${new_version_number} } # Escriba la línea en el nuevo archivo pone $output $line } cierre $input cerrar $output   }</pre>

En un script de Tcl, puede llamar al procedimiento como se muestra en el siguiente ejemplo. El ejemplo está escrito suponiendo que ejecuta el script Tcl en un indicador de comandos del sistema y proporciona el nombre del archivo para actualizar como argumento para el script.

establezca file_name [lindex $quartus(pulg.) 0]
establezca output_file_name ${file_name}.updated_version_number

if { [catch { update_version_number $file_name $output_file_name } res] } { post_message -type critical_warning "No se pudo actualizar el número de
    versión: $res"
} else { si {

    [catch { renombre del archivo -force $output_file_name $file_name } res ] } {
        post_message -type critical_warning \
            "No se pudo actualizar el número de versión:  $res" }
}

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.