I’d like to share my impressions of the book, and a few sparks it lit up in my brain as I was reading it. First I think this book is very important. I’ve always wanted to learn how to get rid of proprietary languages for asic verification, and this book shows me how. IMHO, this book has the potential to change the landscape in asic verification from crippled proprietary languages to the flexibility and power of C++.

The book introduces not only the foundation for building a verification infrastructure using C++ (e.g. random stability, cooperative threading) but also the nuts and bolts of it (e.g. register data types, logging).

I really liked the first 2 chapters, but the real deal for me started in chapter 3 with the first example. I write code for a living, so examples are very important to me. I knew after chapter 3 that I would read the book from cover to cover.

I knew quite a bit of the stuff in chapter 4, so it was a quick read for me.

Chapters 5, 6, 7 and 8 are about teal and truss. I have read them with attention. These chapters confirm that C++ is suited for the kind of work we do in asic verification: environment structure, environment flows, run scripts, etc. The authors show a small example where Perl and make are used to implement run scripts. I have become a big fan of GNU Make after seeing Janick use it. Then I realized I could not only build environments with it, but run test cases as well. For me, it was bye bye duct-tape Perl. I think C++ and Make is a winning combination for asic verification infrastructure.

There is a bit of advocacy for OOP in the book. Since the proprietary solutions converted me to OOP years ago, I read those sections quickly.

I’m at chapter 13 now, so I can’t comment on the rest, but I see lots of code in the coming pages…

I really like when the authors apply common sense to solve annoying coding problems. The example on how to get rid of deeply nested if statements on page 238, although simple, is a very effective technique which I only recently discovered on my own. They do that a couple of times in the book, they’re little pearls of knowledge, and you don’t need to know OOP to smile as you read them!

My greatest hesitation with C++ used to be the lack of few “minor” things like a constraints solver, functional coverage, and data packing/unpacking. After many years of using a proprietary constraint solver, I think it is entirely possible to live without a constraint solver at all. For example, a recent posting on the verification guild web site explains how to select a value based on a weighted range:

http://verificationguild.com/modules.php?name=Forums&file=viewtopic&t=1368&postdays=0&postorder=asc&highlight=verilog+dist&start=15

I am convinced that I can use a similar technique to execute code based on a weigthed range of values in C++. This way I could write my own solutions instead of using a constraint solver. I have also solved other types of constraints using procedural code.

As for functional coverage, I never understood why the underlying database could not be MySQL. One only has to figure out the methodology and show it to the world. Nothing C++ cannot do.

Lastly, I don’t see why packing and unpacking could not be solved in C++ either, since many times I could not use the proprietary languages built-in and had to write my own pack and unpack routines.

But I digress, I still have a few chapters to read.

So far, this book really got me thinking about what language I should use for asic verification. Because of that, it’s a great book. I am pretty sure I will read it a second time, after I follow the authors’ advice and learn a bit of C++.

Thank you for writing this book!