3. UVM Environment and Assertion Build-Out Workflow
This workflow covers UVM environment scaffolding, signal interface connection, configuration database injection, implementation of the functional components, and non-intrusive generation and binding of the always-on SVA checker layer.
Architecture and Component Model
Within a UVM verification environment, the base framework and the assertion checker layer are built as follows:
Skills in Detail
1. uvm-env-create — Framework Creation and Smoke Test
- What it does: generates the UVM environment skeleton for a given IP (
tb/,env/,agents/) and runs a smoke test to confirm the framework compiles and starts. It does not verify DUT functionality. - Input: the IP name and interface description.
2. uvm-env-config-db — Configuration Objects and Virtual Interface Injection
- What it does: writes or modifies
*_config_db.sv, injecting the virtual interfaces and configuration objects instantiated in the simulation toptb_topinto the corresponding UVM components throughuvm_config_db::set. Supports AXI/AHB/APB/TileLink/SPI, in both IP-level and chip-level configuration modes.
3. uvm-env-inf-connect — Interface Connection File Generation
- What it does: generates
{ip}_inf_connect.svfrom the DUT RTL port list and the bus protocol type, wiring the VIP/UVC to the DUT physical signals. - Modes and protocols: IP level (active stimulus) and chip level (passive monitoring), covering AXI/AHB/APB/TileLink/SPI/I2C/UART and local interfaces.
4. uvm-env-impl — Environment Implementation
- What it does: builds on the skeleton produced by
uvm-env-create. Using the DUT RTL, the design spec and any existing VIP/UVC, it fills in interface signals, transaction fields, driver logic, monitor sampling, the scoreboard comparison model and coverage; it then patches theenv/tbench/top_envconnection layer so the environment compiles and runs, and finally invokesuvm-env-svato generate the SVA layer.
5. uvm-env-sva — SVA Checker Generation and Bind Attachment
- What it does: analyzes the SVA checking intent declared in
testplan.md, discovers the real signals from the RTL sources (emittingsignal_manifest.json), generates always-on SVA checker modules undersim/sva/*.svplus a non-intrusivesva_bind.sv, and appends the include totbench.v. - Boundaries: creates SVA only under
sim/sva/and attaches it through the SystemVerilogbindconstruct. It never modifies RTL sources or VIP. Real signal paths are resolved by parsing the RTL withdiscover_signals.py.
