Quartus® II Tcl 예: 파일의 증분 버전 번호

author-image

기준

프로젝트에서 버전 번호를 유지하는 한 가지 방법은 모든 컴파일 중에 파일에서 숫자를 증분하는 것입니다. 이 작업을 수행하려면 스크립트가 파일을 구문 분석하여 번호를 찾고 증분한 다음 새 번호로 파일을 다시 작성해야 합니다. 파일이 짧고 숫자 외에 다른 파일이 거의 없는 경우 스크립트는 실행될 때마다 새 파일을 처음부터 작성하기만 하면 됩니다. 그러나 파일이 긴 디자인 파일인 경우 새 파일을 처음부터 작성하는 대신 버전 번호로 줄을 편집하는 것이 더 실용적일 수 있습니다.

번호 찾기

스크립트는 일반 표현식을 사용하여 파일의 번호를 찾습니다. 숫자가 있는 줄에는 고유한 형식이 있어야 하며, 그렇지 않으면 여러 줄이 일반 표현식과 일치할 수 있습니다. 고유한 형식을 만드는 한 가지 방법은 번호가 있는 줄에 고유한 주석을 포함하는 것입니다. 일반 표현식에는 해당 고유 주석이 포함될 수 있습니다. 다음은 특수 주석이 포함된 버전 번호 줄이 있는 설계 파일의 줄과 일치하는 일반 표현식 Tcl 명령의 예입니다.

디자인 파일 라인

data_out <= 16'h41; 설계 버전 번호

정규식

regexp {^\s+data_out <= \d+'h([[[:xdigit:]]]+); // 디자인 버전 번호$} \ $line 일치 version_number

([[:xdigit:]]]+패턴은 1자리 이상의 1자리 숫자와 일치하며 version_number라는 일치 변수에 저장합니다.

숫자 증분

Tcl에서 16진수 증분할 수 있습니다. Tcl에서 16진수는 선행 0배로 표시됩니다. 버전 번호가 0배로 시작되지 않으면 숫자를 증분하기 전에 숫자를 기본 10으로 변환하는 것이 더 쉬울 수 있습니다. 16진수의 경우, 다음 명령은 10 6진수 문자열을 베이스 10으로 변환하고, 증분하고, 다시 16진수로 변환하는 예를 보여줍니다.

설정 hex_value "AA"
스캔 $hex_value "%x" decimal_value
incr
decimal_value new_hex_value [포맷 "%X" $decimal_value]
# $new_hex_value는 이제 "AB"입니다.

파일 다시 작성

설계 파일이 짧고 버전 번호에 대한 정보만 포함되어 있는 경우 일련의 명령을 사용하여 증분 번호가 있는 새 파일을 작성할 수 있습니다.

설계 파일이 길면 Tcl 스크립트에서 파일 내용을 하드 코딩하는 것이 비실용적이기 때문에 일반적으로 버전 번호의 줄만 변경하는 것이 더 쉽습니다.

다음 절차는 설계 파일을 구문 분석하고 버전 정보로 라인을 업데이트합니다. 일반 표현식과 일치하지 않는 선은 수정되지 않은 새 파일에 기록됩니다. 일반 표현식과 일치하는 줄에는 버전 번호가 증분된 다음 새 파일에 기록됩니다.

proc update_version_number { input_file output_file} {

    # 입력 파일을 열 수 없는 경우 오류를 반환합니다.
    {[catch {open $input_file} 입력] } {
        반품 -코드 오류 $input
    } # 출력 파일을 열 수 없는

    경우,
    {[catch {open $output_file w} 출력] } {
        반품 -코드 오류 $output } # 입력 파일을 한 번에 한
    줄씩 읽으면서 {-1 != [$input 라인 을 가져옵니다] } {

        이 일반 표현식은
        웹 페이지 상단 부근의 디자인 # 파일 라인과 관련이 있습니다.
        # 파일에 적합한 대로 변경해야 합니다.
        {[regexp {^\s+data_out <= \d+'h([[[:xdigit:]]]+); // 디자인 버전 번호$} \ $line 일치 version_number] } { # 10을 기본으로 변환하고 증분합니다. 스캔 $version_번호 "%x" decimal_value 인크 decimal_value 세트 new_version_number [포맷 "%X" $decimal_value] # 이전 regsub h${version_number} $line h${new_version_number} 행에 새 버전 번호 대체 } # 새 파일에 줄 쓰기 $output $line } $input 닫기 $output   }</pre>

Tcl 스크립트에서 다음 예와 같이 절차를 호출할 수 있습니다. 이 예는 시스템 명령 프롬프트에서 Tcl 스크립트를 실행하고 스크립트에 대한 인수로 업데이트할 파일 이름을 제공한다고 가정하여 작성되었습니다.


{[catch { update_version_number $file_name $output_file_name } res] } {post_message -type .updated_version_number 경우 file_name [lindex $quartus(args) 0] 세트
    output_file_name ${file_name}critical_warning .updated_version_number 설정 "버전 번호를 업데이트할 수 없습니다: $res"
}

    {[catch { 파일 이름 바꾸기 -force $output_file_name $file_name} } }
        {post_message -type critical_warning \
            "버전 번호를 업데이트할 수 없습니다.  $res"
    }
}

이 페이지의 콘텐츠는 원본 영어 콘텐츠에 대한 사람 번역 및 컴퓨터 번역의 조합으로 완성되었습니다. 이 콘텐츠는 편의와 일반적인 정보 제공을 위해서만 제공되었으며, 완전하거나 정확한 것으로 간주되어선 안 됩니다. 이 페이지의 영어 버전과 번역 간 모순이 있는 경우, 영어 버전이 우선적으로 적용됩니다. 이 페이지의 영어 버전을 확인하십시오.