이 예 절차는 등록 은행에 16진수 값이 저장된 Verilog 파일을 생성합니다. 이 절차를 사용하여 디자인의 등록 은행에 소량의 데이터(예: 개정 번호)를 자동으로 작성할 수 있습니다.
생성된 Verilog 파일의 이름은 version_reg.v입니다. 등록 은행에 저장하려는 16진수 번호로 절차를 호출합니다. 이 페이지 하단에 프로시저를 호출하는 방법에 대한 예가 있습니다.
Tcl 스크립트에서 프로시저를 호출할 때 Verilog 파일을 만드는 데 문제가 있는 경우 프로시저가 오류를 반환하기 때문에 프로시저 호출을 catch 문으로 감싸야 합니다. 오류를 파악하여 표시할 수 있습니다.
proc generate_verilog { hex_value } {
set num_digits [string length $hex_value]
set bit_width [expr { 4 * $num_digits } ]
set high_index [expr { $bit_width - 1 } ]
set reset_value [string repeat "0" $num_digits]
if { [catch {
set fh [open "version_reg.v" w ]
puts $fh "module version_reg (clock, reset, data_out);"
puts $fh " input clock;"
puts $fh " input reset;"
puts $fh " output \[$high_index:0\] data_out;"
puts $fh " reg \[$high_index:0\] data_out;"
puts $fh " always @ (posedge clock or negedge reset) begin"
puts $fh " if (!reset)"
puts $fh " data_out <= ${bit_width}'h${reset_value};"
puts $fh " else"
puts $fh " data_out <= ${bit_width}'h${hex_value};"
puts $fh " end"
puts $fh "endmodule"
close $fh
} res ] } {
return -code error $res
} else {
return 1
}
}
Catch 문 사용
다음은 위의 절차를 호출하고 오류를 파악하는 방법의 예입니다.
set my_hex_number "A5"
if { [catch { generate_verilog $my_hex_number } res] } {
post_message -type error "Couldn't generate Verilog file\n$res"
}
# If the script gets here, there were no errors.