Dieses Beispielverfahren generiert eine Verilog-Datei mit einem hexadezimalen Wert, der in einer Registerbank gespeichert ist. Sie können dieses Verfahren verwenden, um das Schreiben kleiner Datenmengen (wie z. B. einer Revisionsnummer) bei einer Registerbank in Ihrem Design zu automatisieren.
Die generierte Verilog-Datei trägt den Namen version_reg.v. Rufen Sie das Verfahren mit der hexadezimalen Nummer an, die Sie in der Registerbank speichern möchten. Es gibt ein Beispiel dafür, wie Sie das Verfahren unten auf dieser Seite aufrufen können.
Wenn Sie das Verfahren in einem Tcl-Skript aufrufen, sollten Sie den Procedure Call in eine catch-Anweisung wickeln, da das Verfahren einen Fehler zurückgibt, wenn beim Erstellen der Verilog-Datei Probleme auftreten. Sie können den Fehler erkennen und anzeigen.
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
}
}
Verwenden einer Catch-Anweisung
Das Folgende ist ein Beispiel dafür, wie Sie das oben beschriebene Verfahren aufrufen und eventuelle Fehler erkennen können:
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.