Este procedimiento de ejemplo genera un archivo De verilog con un valor de 1000.000 de legrado almacenado en un banco de registros. Puede utilizar este procedimiento para automatizar la escritura de pequeñas cantidades de datos (como un número de revisión) en un banco de registro en su diseño.
El archivo Verilog generado tiene el nombre version_reg.v. Llame al procedimiento con el número que desea almacenar en el banco de registro. Hay un ejemplo de cómo llamar al procedimiento en la parte inferior de esta página.
Cuando se llama al procedimiento en un script de Tcl, debe envolver la llamada al procedimiento en una instrucción catch porque el procedimiento devuelve un error si hay problemas para crear el archivo Verilog. Puede detectar el error y mostrarlo.
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
}
}
Uso de una declaración Catch
El siguiente es un ejemplo de cómo llamar al procedimiento anterior y detectar cualquier error:
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.