Hi,
For some hobbyist projects I would like to use UVM methodology for verification of my growing RTL design (and future designs hopefully).
Since this is hobbyst purpose (so purchasing highly expensive licenses (as Synopsys etc.) is out of scope, as of course using licences from my company for my hobbyist projects.
In mainly always used iverilog for my purpose because of having all in Verilog/System Verilog (without C, C++ etc.[1]). But now is becoming very limited for minimal serious verification since it still doesn't support classes neither randomization (not using $urandom_range) and coverage.
[1] It is true that commercial tools use C/C++ behind the scenes. Compiling with VCS generates a lot of C objects in obj dirs but this is hidden to the designer.
Vivado simulator seems really slow so initially I would like to avoid it if possible.. Also, even if has improved in the last few years, it still has many bugs due to its SW architecture IMO.
Possible solutions I came up with:
1) Use UVM SystemC Accellera libs with iverilog-vpi (which should be possible).
2) Use Accellera SystemC with SCV (not UVM but similar) and iverilog-vpi (example: https://github.com/Kenji-Ishimaru/scv_iv_sample).
3) As far as I know I could implement UVM monitors/drivers/scoreboards using Verilator, but I don't know much about UVM support so I have to test it before being sure of this. I successfully compiled Verilator so I will test during these days with SV UVM.
What's your experience with verification on these 3 environments tools (or others)? I would really appreciate to read them.
Thanks,
s.
For some hobbyist projects I would like to use UVM methodology for verification of my growing RTL design (and future designs hopefully).
Since this is hobbyst purpose (so purchasing highly expensive licenses (as Synopsys etc.) is out of scope, as of course using licences from my company for my hobbyist projects.
In mainly always used iverilog for my purpose because of having all in Verilog/System Verilog (without C, C++ etc.[1]). But now is becoming very limited for minimal serious verification since it still doesn't support classes neither randomization (not using $urandom_range) and coverage.
[1] It is true that commercial tools use C/C++ behind the scenes. Compiling with VCS generates a lot of C objects in obj dirs but this is hidden to the designer.
Vivado simulator seems really slow so initially I would like to avoid it if possible.. Also, even if has improved in the last few years, it still has many bugs due to its SW architecture IMO.
Possible solutions I came up with:
1) Use UVM SystemC Accellera libs with iverilog-vpi (which should be possible).
2) Use Accellera SystemC with SCV (not UVM but similar) and iverilog-vpi (example: https://github.com/Kenji-Ishimaru/scv_iv_sample).
3) As far as I know I could implement UVM monitors/drivers/scoreboards using Verilator, but I don't know much about UVM support so I have to test it before being sure of this. I successfully compiled Verilator so I will test during these days with SV UVM.
What's your experience with verification on these 3 environments tools (or others)? I would really appreciate to read them.
Thanks,
s.
Last edited: