A UVM Scoreboard: Does it really have to be that hard?
UVM Scoreboards don’t have to be hard
But I’m getting ahead of myself. This week I gave up on my laptop keyboard. The 4, 5, 6, 7 and 8 keys had become unreliable. Pressing them got nothing. Pressing them again got two or three characters. Forget about the F keys on the top row. They were non-responsive. And I’m too set in my ways to change my password – it has lots of 4, 5, 6, 7 and 8s. Guessing your own password is no fun.
Try ssh when you can’t see what you type and you can’t even see how many characters you typed.
Sort of like the UVM. Sometimes it’s sweetness and peaches and sometimes the other end of the stick.
A Solution?
So my dear friend and co-worker says – “Rich, have you ever changed a keyboard?” I say – “How hard can it be?” $26 to Amazon and two days later, I have a new keyboard to install and a silly screwdriver.
58 screws later I had the motherboard off, the SSD off, the CMOS battery off, a display cable off, the battery out and the keyboard assembly in my hands. How hard? This thing could go sideways at any minute. I was starting to sweat. Could I put it back together again?
Sort of like the UVM.
An Easy UVM Scoreboard
A UVM Scoreboard doesn’t have to be that hard. Check out my paper at DVCON India, December 14, 15, 16, 2021. https://dvcon-india.org/
Here’s a preview. There’s a couple of simple, but confusing macros. Just use them and don’t ask questions.
`uvm_analysis_imp_decl(_expected)
`uvm_analysis_imp_decl(_actual)
There’s the scoreboard definition.
class scoreboard extends uvm_component;
`uvm_component_utils(scoreboard)
There’s the analysis_exports. Don’t ask.
uvm_analysis_imp_expected#(transaction, scoreboard) expected_analysis_export;
uvm_analysis_imp_actual #(transaction, scoreboard) actual_analysis_export;
There’s the constructor, the build_phase and the write routines.
A monitor or other producer of transactions is connected to the analysis_exports. That monitor does an ‘ap.write(t)
‘ where t
is the class/object representing this transaction.
The write routines can do a few different things, but eventually you get to the point where two transactions have arrived at the scoreboard – the ‘expected’ and the ‘actual’.
A compare happens and we’re done.
if (run_actual_tr.compare(run_expected_tr))
`uvm_info("SCOREBOARD RESULTS","MATCH!",UVM_MEDIUM)
else
`uvm_fatal( "SCOREBOARD RESULTS","MISMATCH!")
Happy?
Usually this is where we say, “Yes, but the devil’s in the details”. Except this time we’re going to ignore the details, and go with it. An in-order scoreboard in 153 words. An out-of-order scoreboard is a few more words. If you want to dig into the UVM details, please do. There are so many other things you could do. Enjoy.
DVCON India is virtual this year. Hope to “see you there”. I’ll go into more detail, and the full source code will be available.
And by the way, despite having two screws leftover when I put the laptop back together (I did eventually figure out where they went), there was no smoke, no dead laptop. Rebooted with a little help from Setup. Hibernate came back just fine. And 4, 5, 6, 7 and 8 anytime I want.
Sort of like the UVM. Don’t make it too hard. Keep it simple. Don’t ask too many questions. Stay focused. And enjoy the productivity gain from a working keyboard and a UVM library. Happy.
Thanks for reading. What’s your scoreboard look like?
rich