I’ve been a verification engineer for a little over 20 years. None of the people around me know what that means. If your friend or significant other is a verification engineer, you might not know what it means either.
I gave up trying to explain “verification engineer” to my parents long ago; they can barely remember companies I’ve worked for nevermind what I did there. Never really tried with my kids. They see me as a weird basement hacker… which is wrong but that’d at least be easier to explain. My wife says I “work with computers” but only to justify asking me all her computer related questions. I tell friends I work in semiconductors. When they look at me confused I tell them I help build computer chips. If that’s still confusing I change the subject.
I’m bad at explaining “verification engineer”. Unless it’s just me, I’d bet your significant other kind of sucks at it, too. It’s hard to give up on it though because verification is an interesting job; also frustrating; sometimes fun; usually satisfying; kind or love/hate… or maybe like/dislike. It’s a job I wish I didn’t have, but can’t think of anything I’d rather be doing.
Anyway, considering I enjoy being a verification engineer about 95% of the time, it’d be nice for my family to at least kind of get it. So I thought I’d take another shot at explaining it to them (and you, if you’re interested).
Hopefully this helps…
Let’s start by taking a look through the computer or phone or tablet you’re reading this on. A big team of people pitched in to design that computer or phone or tablet… probably several hundred… including a few verification engineers. But verification engineers are waaaaaay down at the bottom of the list working with tiny little details that you’ll never need to know about. I think that’s part of why it’s difficult to explain.
I’ll assume you’re reading on a laptop. You see a keyboard and monitor and mouse pad and a case and cords and whatnot. Verification engineers don’t work on any of that.
If you get a screw driver and open your laptop up, you’ll see a big green board with a bunch of bits and pieces on it and lots of skinny lines connecting them. That green board is a printed circuit board; we call them PCBs because we like acronyms.
PCBs aren’t just in computers, they’re in your furnace, car, TV, phone, fridge, gaming system, basically everything with a power cord. The bits and pieces on the PCB are electronic parts and the skinny lines are wires to connect them. PCBs are pretty complicated. There’s stuff on both sides and there’s several layers of those skinny wires that you can’t see from the outside. Designing PCBs is a cool job, but verification engineers don’t do that so let’s move on.
You see those bigger black square boxes on the PCB? You would call those “computer chips” but the real name is “integrated circuits”, IC for short (because acronyms). ICs are usually the most complicated pieces on the PCB. You might see a bunch of wires sticking out the sides that connect to other stuff on the PCB. Usually though there’s tons of wires on the back you can’t see.
ICs are kind of like another huge PCB… like, really huge. Like, imagine you have a hundred of the green PCBs I showed you already with millions of tiny little parts and wires. Then imagine they’re squished all together; that’s what’s in that little black box. Everything in there is so small you need a microscope to see any of it.
Sounds complicated, right? It is complicated. Most companies don’t build their own ICs because that’s a huge and very specialized job on its own, kind of like building a death star1“Death Star” is a Star Wars reference. Star Wars is a movie. The Death Star is a giant space station that destroys planets with a super laser. I thought Death Star construction would be an easy analogy for IC construction because they’re both hard. But my mom had to google Death Star while she proofread this so I guess not. Speaking of hard, try explaining verification to someone who doesn’t know what the Death Star is.. Not many people build death stars these days because it requires lots of specialized tools, machines, supplies, stormtroopers, etc. Most folks don’t have any of that so building your own death star is a non-starter. But! You might know what you want in your death star. So you could design a death star then send your design to an evil construction corporation to build it for you. Building ICs is the same except less evil. You design an IC then send it to another (kind of) construction company that builds it. That other company is called a fab (short for fabrication). Verification engineers don’t work in fabs2Or sometimes they do..
The plan you send away has several steps, too. Think of the original death star. The emperor didn’t plan that himself. He relied on architects and plumbers and electricians and interior designers and all kinds of people. Again, same goes for ICs; lots of people are involved in creating an IC plan.
I’ve helped plan a lot of death stars and I don’t even know what all the steps are. But I’ll show you some close-ups of what the different steps look like. Verification engineers don’t do any of them but it’ll help you understand more about where we do fit in.
An IC is scratched onto something called silicon, which maybe you’ve heard of. When they make ICs, they do a bunch at a time on a circular piece of silicon called a wafer. That’s the next picture.
You can see there’s lots of little squares on the wafer. Each of the little squares makes one IC. So all those ICs get cut out of the wafer and they each go into a black box like I showed you already. Here’s a zoomed in view of one of those little squares after it’s cut up. There’s lots of stuff in there.
But we’re still pretty far away from what verification engineers do. To get to us you have to jump to the very first step of building an IC. That’s called the design step.
Design is describing what your IC does. For example, if we were designing an IC that goes into your laptop, there would be parts dedicated to WIFI so you could connect to the internet. We’d also put memory in our design so you can download cat pictures. Other parts of the design would be for math so you can open the calculator app and add two plus two. Those are simple examples of what we design into ICs but there’s all kinds of other stuff.
When a design is done, it’ll look a little bit like the next picture (except way bigger). That’s called a circuit diagram. A circuit diagram is kind of like a blueprint for what goes on the IC. Each of the little symbols represents an electronic part on the silicon and the lines are all the different wires.
In the old days, drawing circuit diagrams like that was how you designed ICs. But that was decades ago. How we do it now is different.
If you see us at work you’ll notice we do lots of typing. That’s called coding. To you, our code will look like a bunch of nonsensical abbreviations with odd punctuation. But all that nonsense is a language we use to capture our design (instead of drawing pictures). It’s kind of like how an author writes a book except instead of using normal English or Spanish or whatever, we use languages called Verilog and VHDL. While those languages won’t make sense to you, we read and write them all the time. We also like to argue about which is better. Nerd fight!
If I were designing a death star using Verilog, part of my code would have to describe when to shoot the laser. That could look like this…
if (pull_lever && press_button) shoot_laser <= 1;
That code means whenever someone pulls the lever and presses a button at the same time, BOOOM! Simple.
If you’ve followed along so far, congratulations. But we’re not done yet. There’s one more step left and it’s a tough one. To really know what we do you have to understand verification engineers don’t actually code the design, we test the design.
Verification engineers use special computer programs to create a pretend version of our IC. The pretend version does everything the real thing will do. Then we write other code to test the pretend version to make sure it does what we want it to do. For example, we can pretend to connect to WIFI, store cat pictures or add two plus two. We can pretend to do all the things we would normally do to the real IC. When we verify the pretend version does everything right, we say it’s OK to build the real thing.
Test code is pretty similar to what I showed you already. For example, to test the laser on our death star we could write code like this…
First we pretend to pull the lever, then we pretend to press the button, then we make sure the pretend laser shoots. That’s a test. If the test passes, we know the real laser will work and we’ll be able to blow up real planets.
If you’re wondering why we go to the trouble of pretending, the reason is because it’s super expensive to build an IC. We want to be sure an IC is going to work before we build it, otherwise there’s a good chance we’ll lose a lot of money. (Fun fact: technically our job is called pre-silicon verification, which means it happens before the IC is put on silicon).
Other important things about being a verification engineer:
- The pretend laser never shoots properly the first time; that’s why verification is a frustrating job. We pull the pretend lever and press the pretend button 100 times but the pretend laser doesn’t shoot. Sometimes the pretend laser shoots without doing anything. What the hell is going on with this stupid laser?
- Verification is a fun job when we finally figure out why the pretend laser doesn’t shoot properly. We tell other engineers to fix it then find the next thing that doesn’t work. We do that over and over again until everything in the pretend death star passes all our tests.
- We’ll have 100’s or 1000’s of tests running for a pretend death star before we’re done. And tests come in all sizes. Some are super simple and just focus on one tiny part of a death star. Other tests are super complicated and focus on a big chunk.
- We try to test the important things first, then work our way down through the less important things until everything is tested.
- Our happiest days are when we get to write lots of code. The fancier, the better.
- Our worst days are when we sit in lots of meetings.
- For most of us, verification is something we learn on-the-job instead of in university. There’s some skills we learn at school, like coding and electronics, but generally we go to companies that teach us how to do verification. Often we have colleagues who mentor us. Sometimes we just wing it.
That’s a lot to take in so how about we stop there. If you’re a verification engineer, I guess you knew all this. If you’re not a verification engineer, hopefully you’re closer to understanding what your friend or significant other does when they leave for work or disappear into their home office.
Most importantly, if your spouse is a verification engineer, now you have a better answer than “works with computers”. Also, please don’t ask me to fix your computer anymore.