EDIT (12/30/2020) VLaDOS is now defunct and its (empty) repository was removed. It had a very short life after I learned about already-existing tools to do meet its goals, such as LLHD (and, to an extent, Verilator). It makes far more sense to contribute to this project than to start something from scratch. I researched tools like this earlier this year and couldn’t find anything, but I guess LLHD released their paper earlier this year and I missed it.
The Parable You’re writing a class to connect to your company’s application. You and your colleagues all agree that the feature this class is for is the coolest thing you’ve ever heard of – it’s the “bees knees,” one of your colleagues keeps jesting. Next thing you know, the driver of you mobbing session renames the class to the_bees_knees. Everyone giggles and moves on to working on other parts of the code base.
The SystemVerilog Direct Programming Interface (DPI), at a high level, provides remote procedure calls in SystemVerilog. The entirety of the DPI’s definition can be read in the SystemVerilog IEEE standard (requires an account to access). Since SystemVerilog is quite a limiting language compared to general-purpose programming languages, being able to do remote procedure calls is an insanely powerful feature. However, it is commonly misunderstood that the DPI only allows users to call C functions.
While software development tools are better than ever, hardware development tools are still stuck in the 90’s. How can this be fixed? I am a pre-silicon validation engineer. What that means is that I write software to test, analyze, and stress hardware designs to ensure that they adhere to their architectural specifications. Aside from a Linux environment, The common tools that I use for my job are: SystemVerilog: An IEEE-standard language designed for defining hardware at the Register Transfer Level (RTL), as well as the test benches to test that hardware.