Exemplo de Quartus® II Tcl: incrementar o número da versão no arquivo

author-image

Por

Uma maneira de manter um número de versão em seu projeto é incrementar um número em um arquivo durante cada compilação. Para executar esta tarefa, um script deve analisar o arquivo para localizar o número, incrementá-lo e, em seguida, reescrever o arquivo com o novo número. Se o arquivo for curto e contiver pouco mais além do número, o script pode simplesmente escrever um novo arquivo a partir do zero cada vez que ele for executado. No entanto, se o arquivo for um arquivo de design longo, pode ser mais prático editar a linha com o número da versão em vez de escrever um novo arquivo a partir do zero.

Localize o número

O script usa uma expressão regular para localizar o número no arquivo. A linha com o número deve ter um formato exclusivo, caso contrário, várias linhas podem corresponder à expressão regular. Uma maneira de fazer um formato exclusivo é incluir um comentário exclusivo na linha com o número. A expressão regular pode incluir esse comentário exclusivo. O seguinte é um exemplo de uma linha em um arquivo de design com uma linha de número de versão que inclui um comentário especial e o comando de expressão regular Tcl que corresponde a ele.

Linha de arquivos de projeto

data_out <= 16'h41; Número da versão do projeto

Expressão regular

regexp {^\s+data_out <= \d+'h([[:xdigit:]]+); // Número da versão de projeto$} \ $line corresponde version_number

O padrão([:xdigit:]] +corresponde a um número hexadecimal com pelo menos um dígito e o salva em uma variável de combinação chamada version_number.

Incremente o número

Você pode incrementar números hexadecimais em Tcl. Em Tcl, os números hexadecimais são indicados com um 0x líder. Se o número da sua versão não começar com 0x, pode ser mais fácil converter o número para a base 10 antes de incrementá-lo. Para um número hexadecimal, os comandos a seguir mostram um exemplo de conversão de uma string hexadecimal para a base 10, incrementando-a e convertendo-a de volta para hexadecimal.

definir hex_value varredura "AA"
$hex_value "%x" decimal_value incr decimal_value
set
new_hex_value [formato "%X" $decimal_value] #
$new_hex_value agora é "AB"

Reescreva o arquivo

Se o arquivo de projeto for curto e contiver informações apenas sobre o número da versão, você poderá usar uma série de comandos de colocação para escrever um novo arquivo com o número incrementado.

Se o arquivo de design for longo, geralmente é mais fácil alterar apenas a linha com o número da versão, porque codificar o conteúdo do arquivo no script Tcl seria impraticável.

O procedimento a seguir é feito em um arquivo de projeto e atualiza a linha com as informações da versão. As linhas que não correspondam à expressão regular são escritas para um novo arquivo, nãomodificado. A linha que corresponde à expressão regular tem o número da versão incrementado e, em seguida, é escrita no novo arquivo.

proc update_version_number { input_file output_file} { # Se o arquivo de entrada não pode

    ser aberto, devolva um erro.
    se { [catch {open $input_file} input] } { erro de código de devolução $input } # Se o arquivo de saída não pode ser aberto, devolva um erro se { [catch {open $output_file w} output] } { erro de código de devolução $output } # Leia através do arquivo de entrada uma linha de cada vez enquanto
    {-1 != [recebe $input linha] } {

        #
        Esta expressão regular é específica para a linha de arquivo design # perto da parte superior da página da web. # Você deve alterá-lo conforme apropriado para o seu arquivo.
        se { [regexp {^\s+data_out <= \d+'h([[:xdigit:]]+); // Design Version Number$} \ $line match version_number] } { # Converter o número da versão hexadecimal para a base 10 e incrementá-lo. scan $version_number "%x" decimal_value incr decimal_value set new_version_number [formato "%X" $decimal_value] # Substitua o novo número de versão para o antigo regsub h${version_number} $line h${new_version_number} line } # Escreva a linha para o novo arquivo coloca $output $line } fechar $input fechar $output   }</pré>

Em um script Tcl, você pode chamar o procedimento como mostrado no exemplo a seguir. O exemplo é escrito assumindo que você execute o script Tcl em um prompt de comando do sistema e forneça o nome do arquivo para atualizar como um argumento para o script.

definir file_name [lindex $quartus(args) 0] definir
output_file_name ${file_name}.updated_version_number se { [catch { update_version_number $file_name $output_file_name } res] } { tipo post_message -type post_message critical_warning "Não foi possível atualizar o número da versão: $res" } outra opção { se { [catch { renomear o nome do arquivo

    -force $output_file_name $file_name } res ] } {
        post_message -type critical_warning \ "Não
            foi possível atualizar o número da versão:  $res" }
}

O conteúdo desta página é uma combinação de tradução humana e por computador do conteúdo original em inglês. Este conteúdo é fornecido para sua conveniência e apenas para informação geral, e não deve ser considerado completo ou exato. Se houver alguma contradição entre a versão em inglês desta página e a tradução, a versão em inglês prevalecerá e será a determinante. Exibir a versão em inglês desta página.