UVM.io | Frequently Asked Questions

Frequently Asked Questions

Yet another verification language?

Embedded UVM is coded in the D Programming Language, a mainstream systems programming language.

Embedded UVM was created to solve problems that contemporary verification languages like SystemVerilog, have not been able to handle. Embedded UVM is yet the only port of UVM that is multicore enabled. Embedded UVM is natively compiled and enables you to run hardware tests directly on embedded systems, thus enabling HW/SW coverification like never before. It is intended to provide a handy verification solution for hardware accelerators and other SoCFPGA designs.

Embedded UVM is completely opensource. It binds seamlessly with opensource HDL simulators like Icarus Verilog, thus making it possible to code highly portable testbenches.

Multicore UVM? Isn't my EDA vendor's simulator multicore enabled?

Recently some EDA vendor's have released multicore enabled HDL simulators. But these tools parallelize only RTL simulations. Testbenches being highly behavioral, need a completely different paradigm for parallelism. Unfortunately, SystemVerilog does not even provide programming constructs and semantics for behavioral parallelism. Multicore UVM testbenches are possible only if the base language supports behavioral parallelism constructs like synchronization locks. Embedded UVM takes advantage of concurrency mechanisms provided by the D programming language to enable you to code parallel testbenches.

And yes, with increasing number of simulators supporting parallel HDL simulations, SystemVerilog/UVM testbenches are fast becoming a runtime bottleneck. Faster (parallel) testbenches are also required for testbenching emulation platforms.

How do I get started?

You can download testbenches for some Golden Hardware Reference Designs (GHRD) and start playing with them. You can also ask questions on the Embedded UVM Forum.

Why D? Why not C++, Python etc?

One of the pre-requisites of HW/SW coverification is a Systems Programming Language. Only a few programming languages meet this criteria. Mainstream systems programming languages include C, C++, D, Rust and Go. Of these we found D most appropriate for implementing Embedded UVM. The following considerations were made:

  • Unlike C++, D supports automatic garbage collection. The UVM base class library is architected in a fashion that necessitates using a automatic GC.
  • Compared to Rust and Go, D language is much more compatible with C. From D, a user can call any C function and vice versa. D also boasts of a good level of compatibility with C++.
  • D programming language has a remarkable support for reflections and metapgramming, a feature that proved very useful for coding a constraint solver for Embedded UVM.
  • D has an awesome java like support for concurrency.