-
Notifications
You must be signed in to change notification settings - Fork 2
Open
Labels
enhancementNew feature or requestNew feature or request
Description
Problem
Simulation initialization takes 4+ seconds for medium designs and up to 160 seconds for large UVM AVIPs. For short simulations or regression runs with many tests, startup dominates total runtime.
Current init breakdown (500K-line AVIP design)
| Step | Time |
|---|---|
discoverOpsIteratively() |
~2s |
registerSignals() |
~1s |
registerFirRegs() |
~0.5s |
registerProcesses() |
~1-2s |
initializeChildInstances() |
~0.5s |
initializeGlobals() |
one-time |
executeModuleLevelLLVMOps() |
up to 160s |
createInterfaceFieldShadowSignals() |
~0.1s |
The main bottleneck is executeModuleLevelLLVMOps() which runs UVM global constructors.
Planned optimization phases
| Phase | Name | Status | Expected improvement |
|---|---|---|---|
| E4 | Edge fanout | In progress | Pre-partition sensitivity by edge type for batch wake-up |
| E5 | Inline cache | Planned | Cache call_indirect dispatch (vtable lookup) per call-site |
| E6 | Sensitivity caching | Planned | Avoid re-scanning sensitivity lists each delta cycle |
Current performance baseline (AHB AVIP, Feb 23)
- init: 4.67s, run: 0.92s/500ns (3.8x faster than pre-E1)
- Main loop iterations reduced from 25,102 → 148 (170x reduction from E0-E3)
Separate track: AOT compilation
The --compile (AOT) flag compiles the MLIR to native code before simulation, which would eliminate interpretation overhead entirely. Currently WIP — gracefully falls back to interpreted mode.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request