Contoh prosedur ini menghasilkan file Verilog dengan nilai heksadesimal yang disimpan di bank register. Anda dapat menggunakan prosedur ini untuk mengotomatiskan penulisan data dalam jumlah kecil (seperti nomor revisi) ke bank register dalam desain Anda.
Berkas Verilog yang dihasilkan diberi nama version_reg.v. Hubungi prosedur dengan nomor heksadesimal yang ingin Anda simpan di bank register. Ada contoh cara menghubungi prosedur di bagian bawah halaman ini.
Ketika Anda menghubungi prosedur dalam skrip Tcl, Anda harus membungkus panggilan prosedur dalam pernyataan tangkapan karena prosedur mengembalikan kesalahan jika ada masalah saat membuat file Verilog. Anda dapat menangkap kesalahan dan menampilkannya.
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
}
}
Menggunakan Pernyataan Penangkapan
Berikut adalah contoh cara menghubungi prosedur di atas dan menangkap kesalahan apa pun:
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.