Quartus® II Tcl Verilog レジスターバンク内のバージョンナンバー

このプロシージャー例では、16 進数値をレジスターのバンクに格納した Verilog ファイルを生成します。このプロシージャーでは、デザイン内のレジスターバンクに少量のデータ (リビジョンナンバーなど) を自動で書き込むことができます。

生成される Verilog ファイルの名前は version_reg.v です。レジスターバンクに格納する 16 進数を付けてプロシージャーを呼び出します。このページの下の方に、プロシージャーの呼び出し方法の例があります。

Verilog ファイルの作成に問題があった場合、プロシージャーはエラーを返すため、Tcl スクリプトでプロシージャーを呼び出す場合は、プロシージャーの呼び出しを 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.