Created
February 11, 2023 14:51
-
-
Save carlosedp/be1832b07b234f56f4c50ae9c89946c7 to your computer and use it in GitHub Desktop.
GTKWave config
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fontname_signals Menlo 16 | |
fontname_waves Menlo 16 | |
fill_waveform 1 | |
use_roundcaps 1 | |
wave_scrolling 1 | |
disable_mouseover 0 | |
highlight_wavewindow 1 | |
use_scrollwheel_as_y on | |
initial_window_x 1200 | |
initial_window_y 600 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# GTKWave Grouping and colorizing script | |
# | |
# Load the trace with `gtkwave -S gtkwave.tcl yourtrace.vcd` | |
# | |
# Customize the inserted traces in the TOPlevel section below | |
# and at the bottom in the add_signals function calls | |
# | |
# Customize this section as needed | |
## Add TOPLevel clock, reset and stall signals | |
set top [list clock reset stall] | |
## This adds the signals based on a list of {"signal_name_filter" Color} | |
set signals_to_add {{"PC.io_pcPort" Green ""} {"instructionMemory.io_memPort" Red ""} {"decoder.io_DecoderPort" Violet ""} {"ALU.io_ALUPort" Orange ""} {"registerBank.io_regPort" Green ""} {"registerBank.regs_" Green "regs_0_"} {"memoryIOManager.io_MemoryIOPort_" Red ""} {"dataMemory.io_dualPort_" Yellow ""}} | |
## For mapping values, add the translate files and the signals to map file | |
# Format file as: "signal_value mapped_value" (one per line) | |
set instructions [ gtkwave::setCurrentTranslateFile ./GTKWave/instruction_map.txt ] | |
set insts [list "_inst"] | |
set registers [ gtkwave::setCurrentTranslateFile ./GTKWave/registers.txt ] | |
set regs [list "_rd" "_rs1" "_rs2"] | |
array set reg_names [list {0[31:0]} {x0(Zero)} \ | |
{1[31:0]} {x1(RA)} \ | |
{2[31:0]} {x2(SP)} \ | |
{3[31:0]} {x3(GP)} \ | |
{4[31:0]} {x4(TP)} \ | |
{5[31:0]} {x5(t0)} \ | |
{6[31:0]} {x6(t1)} \ | |
{7[31:0]} {x7(t2)} \ | |
{8[31:0]} {x8-(s0/fp)} \ | |
{9[31:0]} {x9(s1)} \ | |
{10[31:0]} {x10(a0)} \ | |
{11[31:0]} {x11(a1)} \ | |
{12[31:0]} {x12(a2)} \ | |
{13[31:0]} {x13(a3)} \ | |
{14[31:0]} {x14(a4)} \ | |
{15[31:0]} {x15(a5)} \ | |
{16[31:0]} {x16(a6)} \ | |
{17[31:0]} {x17(a7)} \ | |
{18[31:0]} {x18(s2)} \ | |
{19[31:0]} {x19(s3)} \ | |
{20[31:0]} {x20(s4)} \ | |
{21[31:0]} {x21(s5)} \ | |
{22[31:0]} {x22(s6)} \ | |
{23[31:0]} {x23(s7)} \ | |
{24[31:0]} {x24(s8)} \ | |
{25[31:0]} {x25(s9)} \ | |
{26[31:0]} {x26(s10)} \ | |
{27[31:0]} {x27(s11)} \ | |
{28[31:0]} {x28(t3)} \ | |
{29[31:0]} {x29(t4)} \ | |
{30[31:0]} {x30(t5)} \ | |
{31[31:0]} {x31(t6)} ] | |
################################################################################ | |
# Don't touch from here down | |
set tmpdir $::env(PATH) | |
puts $tmpdir | |
# Load all signals | |
set nsigs [ gtkwave::getNumFacs ] | |
set sigs [list] | |
# Customize view settings | |
gtkwave::nop | |
gtkwave::/Edit/Set_Trace_Max_Hier 1 | |
gtkwave::/View/Show_Filled_High_Values 1 | |
gtkwave::/View/Show_Wave_Highlight 1 | |
gtkwave::/View/Show_Mouseover 1 | |
gtkwave::/Edit/Insert_Comment "Clock & Reset" | |
gtkwave::addSignalsFromList $top | |
gtkwave::highlightSignalsFromList $top | |
gtkwave::/Edit/Color_Format/Indigo | |
gtkwave::/Edit/UnHighlight_All | |
gtkwave::/Edit/Insert_Blank | |
proc translate {element_list element mapping_file} { | |
set iselement 0 | |
foreach e $element_list { | |
if {[ string first $e $element ] != -1} { | |
set iselement 1 | |
} | |
} | |
if {$iselement == 1 } { | |
gtkwave::highlightSignalsFromList "$element" | |
gtkwave::installFileFilter $mapping_file | |
gtkwave::/Edit/UnHighlight_All | |
} | |
# return $iselement | |
} | |
proc add_signals { filter color filterOut} { | |
global nsigs | |
global instructions | |
global registers | |
global reg_names | |
global regs | |
global insts | |
set filterKeyword $filter | |
set monitorSignals [list] | |
for {set i 0} {$i < $nsigs } {incr i} { | |
set facname [ gtkwave::getFacName $i ] | |
set index [ string first $filterKeyword $facname ] | |
set index2 [ string first $filterOut $facname ] | |
if {$index != -1 && $index2 == -1} { | |
lappend monitorSignals "$facname" | |
} | |
} | |
gtkwave::/Edit/Insert_Comment $filter | |
gtkwave::addSignalsFromList $monitorSignals | |
gtkwave::/Edit/Insert_Blank | |
foreach v $monitorSignals { | |
set a [split $v .] | |
set a [lindex $a end] | |
gtkwave::highlightSignalsFromList $v | |
} | |
gtkwave::/Edit/Color_Format/$color | |
gtkwave::/Edit/UnHighlight_All | |
foreach v $monitorSignals { | |
if {[info exists regs]} { | |
translate $regs $v $registers | |
} | |
if {[info exists insts]} { | |
translate $insts $v $instructions | |
} | |
} | |
## This sets the register signal names to be aliased to the register name | |
foreach v $monitorSignals { | |
if {[string first regs_ $v] != -1} { | |
set name [string range [lsearch -inline [split $v .] {regs_*}] 5 end] | |
gtkwave::highlightSignalsFromList "$v" | |
gtkwave::/Edit/Alias_Highlighted_Trace $reg_names($name) | |
gtkwave::/Edit/UnHighlight_All | |
} | |
} | |
} | |
# Zoom all | |
gtkwave::/Time/Zoom/Zoom_Full | |
# Add signals thru filters | |
foreach s $signals_to_add { | |
add_signals [lindex $s 0] [lindex $s 1] [lindex $s 2] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment