SV Waveterm shows you a short waveform directly in your log like this:
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +
clk + +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
+------------------------
reset_b -------+
+-----------+---+---+---+---+---+
counter |0 |1 |2 |3 |4 |5 |
+-----------+---+---+---+---+---+
This waveform is a fast way to get more context on a failure than from an error message alone. Seeing the waveform directly in your log may save you a debug session with your waveform viewer, so that you can go back to the fun work faster.
You display the waveform by defining what signals you want to track with macros:
`include "sv_waveterm.sv"
`sv_waveterm_begin(counter_waves, clk)
`sv_waveterm_int(reset_b)
`sv_waveterm_int(counter)
`sv_waveterm_end
And printing the the waves in your error messages:
$error("Counter is 5\n%s", counter_waves.sprint());
This could for example be an assertion:
a_not_5 : assert property(
@(posedge clk) disable iff (!reset_b)
counter != 5
) else $error("Counter is 5\n%s", counter_waves.sprint());
See a full example for assertions at examples/basic
This could also be additional information in SVUnit error messages:
`FAIL_IF_LOG(counter == 5, {"Unexpected 5 in counter:\n", counter_waves.sprint()})
See a full example for SVUnit at examples/svunit
Here is how sv_waveterm saves time from the authors own experience: Nightly regression failed for some tests. Investigation starts:
Action | time |
---|---|
search log for error message | 25 seconds |
realize that there is too little information to triage issue | (not timed) |
git fetch, checkout, etc. | 1 minute 5 seconds |
compile, elab and wait until waveform viewer is ready | 4 minutes and 20 seconds |
add waves, start sim and zoom in on the error | 1 minute and 12 seconds |
triage issue | (not timed) |
Total | 7 minutes 2 seconds |
Action | time |
---|---|
search log for error message | 25 seconds |
triage issue | (not timed) |
git fetch, checkout, etc. | 1 minute 5 seconds |
Total | 1 minute 30 seconds |
sv_waveterm saved 5 minutes of debugging time compared to the traditional workflow, by saving a compile, elaboration and simulation run with the waveform viewer open. This is just a single data-point, but it gives you an indication on what to expect for your own environment.
As the car ads say: Your mileage may vary.
Add <sv_waveterm>/src to your include directory list.
All example code is licensed under CC0 "No Rights Reserved" so that you can use the examples freely for anything.
sv_waveterm (c) by Peter Monsson
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
SV Waveterm is currently low maturity and thus not ready for commercial use. If this is something that you would like to see then please contact me directly:
Twitter: https://twitter.com/SVAssertions