How, What, UVM and Why

I have a usual go-to story for my most productive experience as a verification engineer. It happened a while ago, in the middle of my 10 year consulting stint. We were a 3-person team. I was the experienced one who knew about testbench infrastructure with a younger fella who knew about the product and a woman who was more of a firmware developer. We were verifying a medium-sized, complicated’ish subsystem that – as I remember it – included a faux processor that ran some custom instruction set.

The reason I’ve always considered this a good experience is because it’s an engagement where we took advantage of three, non-overlapping skill sets. From the very beginning, I was in charge of infrastructure (I think it was VMM at the time), young fella added most of the functionality (without knowing much VMM) and our dedicated firmware expert built out processing support. In lockstep, we’d roll out incremental additions to the infrastructure, fill in functional gaps, incorporate new FW support, run a test and repeat.

The level of teamwork was pretty cool; each having our own layer of responsibility and pulling those layers together as we moved along. I’ve never had another experience quite like it. Much more common is to have one DV person assigned to each block and that person is in charge of all of the above. No layered responsibility and minimal teamwork.

People who follow this blog know I get a little complain-y about UVM from time-to-time. To be clear, I see myself as a relatively happy UVM user who mainly thinks it’s OK. My complaining happens in times where I see UVM morph into things that are truly horrifying. The horror usually grows slowly and unintentionally. And it can get pretty bad to the point it becomes (a) very cumbersome to do simple things and (b) very difficult to undo.

Granted, it’s not the library’s fault that we DV engineers tend to push its boundaries into the realm of the intended. But… and feel free to disagree with this… UVM is still a software library full of software concepts being used by a hardware community that even after 15(?) years has yet to collectively develop the software skills required to avoid the horror it repeatedly inspires. Through UVM training and specialization usage has become more coherent, don’t get me wrong. But it does feel like our training-and-specialization approach plateaued years ago. As a group I’m not sure we’re improving anymore. Hence, I expect our mainly-OK-but-sometimes-horrifying UVM usage to continue.

What’s the deal with combining a years old verification story with more UVM complaining? Well, my complaining got me wondering if maybe there’s a better team-based model for using UVM. One that minimizes the need for understanding UVM and mitigates the accidental horror I 100% guarantee we’ve all seen.

Just throwing this out there…

What if there were a level of specialization that splits us into how DV engineers and what DV engineers engineers. A how engineer specializes in building out testbench infrastructure while a what engineer specializes in verifying product features. The what engineer leads because they know what requirements need to be tested; the how engineer is a supporting role serving the needs of those requirements. Importantly, the how engineer “knows” UVM and how everything fits together while the what engineer may not.

The closest thing we have to this now would be methodology engineers. I see methodology engineers as the folks who build strategy and IP with the intention of educating the broader team and guiding them through deployment at arm’s length. They are mainly hands-off; maybe hands-on but temporarily so. Their goal is building and promoting best practices such that they proliferate and flourish through the team. An example specific to UVM may be construction and maintenance of a customized base class library with a sprinkling of training and mentoring as part of roll out.

A methodology engineer is like a how engineer but different. A methodology engineer is promoting best practices with the hope the team uses those best practices while a how engineer is doing certain best practices for the team so the team doesn’t have to. Major difference. Again coming back to UVM, the how engineer would work at the testbench/environment level with responsibilities for stuff like skeleton environment creation and maintenance, DUT connectivity, run-flow maintenance, spawning and integrating skeleton components as required, configuration structures, customization hooks, test and sequence templates and so on. It’d be like the how engineer is responsible for everything NOT in a UVM component.

Inside the UVM component is where the what engineer lives. They would know product requirements, standards and all the characteristics of the DUT. They design the device models, checkers, BFMS and so on; probably the corresponding data types (though data types may be an area of overlap). Really, the what engineers do the critical 95% of the job that most of us should be focused on 100% of the time (instead of trying to figure out UVM).

The teamwork aspect is critical to how these two responsibilities blend successfully. Together, the how and what engineers continuously settle on the next feature to build and work out requirements for the environment (i.e. need packets from <here>, configuration of this that and the other, and the output goes <over there>). The how engineer then adds the required scaffolding after which the what engineer fills in the gaps. It’s already two different aspects of what we do. What I’m suggesting is we split those two aspects into two people.

As far as scaling, I think there’s probably an 1:N ratio of how-to-what because as the testbench matures, major infrastructure additions taper off. Exceptions would be orthogonal features that tend to break testbench molds and, coincidentally, carry the highest chance of horror. This is exactly when the how engineer is important, to focus on and maintain consistency across the testbench thereby mitigating the horror.

Splitting two jobs into two people would require more teamwork and cohesion than most of us are used to but I think it’d be doable. Best case scenario is the how engineer is always a step or two ahead of the what engineer so the infrastructure always supports the next feature on the list; that’d take some practice. Prioritization may be tricky for the how engineer if they’re serving more than one effort; but I see that settled with a bit of practice (and discipline) as well.

As for major benefits, I think there are many (maybe there’s a follow-up blog coming?). At minimum, it’s worth repeating the what engineer does not need to be a UVM expert. That’s the big one. The what engineer just needs to know where to put code as guided by the how engineer. Similarly, the how engineer doesn’t need to be a product expert – relieving another significant burden – they just need to make sure they’re serving the infrastructure needs of what engineers. Together, it means people are put in positions that leverage their strengths without trying to compensate for (UVM) weaknesses. That’s the punchline from the story I opened with: have people do what they do well. It’s productive and fun and satisfying.

What do you think? Doable? Useful? Stupid? I’m doubtful a path to a horror-free UVM future goes through the masses knowing more UVM because I haven’t seen that work yet. And UVM isn’t going anywhere anytime soon. So I figured knowing less UVM might be worth a try.

-neil

9 thoughts on “How, What, UVM and Why

  1. It seems the How engineer is a dead-end job. Only the What engineer who knows the product will get promoted to be the team lead. Then the brightest and smartest engineers who want career growth will stay away from being a How engineer.

    1. You and I would be a good how/what team bc I’m a how person who doesn’t want to be team lead 😉

    2. We have people who are project leads who are “how” engineers. They have a better idea of how to structure a TB into something with a more unified vision, that won’t cause major issues in the future. They know about what there is to verify (i.e. have product knowledge), but don’t do the detailed work themselves.

    3. The “how” team needs a team lead, too. And orthogonal to all this is that there are companies that have decoupled compensation from leadership roles. Leadership is rightly seen as another big set of skills, but does not always have to mean higher pay or better career advancement

  2. We also have sort of a split like this. We have libraries that are used in our projects, some UVM-based, some pure SV (by choice), which most people just use, but don’t have to develop themselves. Some want to people contribute to them, some people are just happy to use them.

    A big hurdle to overcome was to make people understand that they don’t have to be able to build something themselves in order to be able to use it. People always want to “see the code” with the implementations of whatever methods they are calling. This is because they’re used to everything being so coupled together, so flaky, so cryptic that they have to understand all of the details of the entire code base. They’re also worried that when they use other people’s code, it becomes their problem, because they’ll never get support, so they have to know all the details. Having “how” engineers helps with both these things. A good “how” engineer will think about how to deliver code with good abstractions that hides implementation details. They’ll also be available to help out others.

    1. This is such an important point. UVM provides standard base classes and hookups, but that alone isn’t enough to keep teams working cohesively. Reusing code requires a lot of trust. Trust that changes won’t break things unexpectedly, documentation being up-to-date, useful examples and tutorials being available, and of course support.

  3. Interesting idea. Working at the intersection of analog/RF and digital (presilicon) design verification, I’ve had to be both for my teams. I’ve always enjoyed exploring the complex designs more than the infrastructure. Since UVM wasn’t designed around verification of mixed-signal designs, I’ve had to be the one to see what elements are immediately useful and what is potential useful as methods mature.
    I think I’d really enjoy this sort of partnership as a part-time “how” engineer so that I can enjoy semi-retirement.

  4. Nice article. I would like to share my experience being a What engineer. I will accept that What engineer grows within the organization, getting more limelight but what happens when the What engineer wants to go out? Ah, the challenge begins. The reason is simple, the How things are standardized, and you are judged on those skills. The What skills are organization-specific at times and thus no way to judge them. Be a What engineer if you want to grow in one organization, be a How engineer if you want to jump when your current ship is not moving or worse sinking. Is it possible to be in the best of both worlds? Be hopeful and try for it.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.