Este script de amostra mostra como você pode acessar um número de versão do software de controle de versão para o seu projeto. Você pode escrever o número da versão em um arquivo de design compilado no seu FPGA design. Com lógica de projeto adicional, o número da versão pode ser relatado pelo FPGA. Essas informações podem ser muito úteis durante a depuração, especialmente se você alternar entre vários arquivos de programação. Você pode facilmente descobrir qual versão do design está sendo executado no FPGA, com base no número da versão no FPGA.
Este exemplo usa o número de revisão de subversão do seu projeto. Ele usa o comando svn info para obter informações sobre o arquivo especificado. O comando svn info imprime informações sobre itens da sua cópia de trabalho e inclui uma linha com o número de revisão, no seguinte formulário:
Revisão: <revisão>
Este exemplo usa dois procedimentos para executar o comando svn info e analisar a saída para obter o número de revisão. O get_subversion_revision inicia o comando svn info. Ligue para o procedimento com o nome do arquivo para usar com o comando svn info. O procedimento retornará com um erro se o comando não puder ser executado. Caso contrário, o procedimento não retorna nada, mas define certas variáveis globais. Se o comando svn info for temporização, o valor da variável global feita é -1. Se o número de revisão foi encontrado, o valor da variável global feita é 1 e o número de revisão está na revision_number variável global. Você pode exibir o número de revisão em uma mensagem, como neste exemplo, ou escrevê-lo em um arquivo de projeto.
O get_version_info é um procedimento de ajuda que faz a análise da saída de comando de uma linha por vez. Ele inclui uma expressão regular que corresponde à linha de número de revisão e extrai o número de revisão.
proc get_subversion_revision { file_name } { global feito # O número máximo de segundos para esperar pelo comando svn info # para concluir o conjunto timeout_seconds 30 # O comando svn info com nome de arquivo executado cmd "svn info ${file_name}" # Tente obter as informações da versão. # Se o comando não pode ser executado, devolva um erro. # De outra forma, configure um evento de arquivo para processar a saída do comando. se { [catch {open "|$cmd"} input] } { erro de código de devolução $input } outra { fileevent $input legível [list get_revision_info $input] ] # Configure um tempo limite para que o processo não possa ser suspenso se o repositório # estiver inoperante. set timeout [after [ expr { $timeout_seconds * 1000 } ] \ [list set done -1] ] # Não continue até que o número de revisão seja encontrado, # ou o tempo de operação seja apagado. Cancele o tempo de qualquer maneira. vwait feito após cancelar $timeout } } proc get_revision_info { inp } {global done revision_number if { [eof $inp] } { catch {close $inp} set feito 1 } elseif { $done } { recebe $inp linha } outra { recebe $inp linha # Use uma expressão regular para combinar a linha com o número de revisão #. se { [regexp {^Revision:\s+(\d+)\s*$} $line corresponder revision_number] } { definido feito 1 } } } conjunto feito 0 conjunto revision_number "" # O nome do arquivo geralmente é seu arquivo de projeto .. qpf set file_name [lindex $quartus(args) 0] se { [catch { get_subversion_revision $file_name } msg] } { post_message -type critical_warning "Não foi possível executar o comando para obter\ número de revisão. $msg" } se { -1 == $done } { post_message -tipo critical_warning "Timeout recebendo número de revisão." } elseif { [string igual a "" $revision_number] } { post_message -type critical_warning \ "Não foi possível encontrar o número de revisão na saída de informações svn $file_name." } outra { post_message "Revisão para $file_name é $revision_number" } }
Você pode executar o script em um prompt de comando do sistema com o seguinte comando (assumindo que o script está em um arquivo chamado svn_revision.tcl):
quartus_sh -t svn_revision.tcl myproject.qpf
O script produz uma mensagem como esta para mostrar a revisão:
Informações: a revisão para myproject.qpf é 417
Você pode exibir uma mensagem com o número de revisão na variável global revision_number,como neste exemplo, ou escrevê-la em um arquivo de design.