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" } }