You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
1.**Why UVM?** — UVM provides a standardized, reusable verification architecture. The sequencer/driver/monitor split decouples stimulus generation from protocol driving and DUT observation, making it easy to add new tests without modifying infrastructure.
344
-
345
-
2.**How the scoreboard works** — The scoreboard maintains a `shadow_mem[0:7]` array as a golden reference. On every write observed by the monitor, it updates the shadow. On every read, it compares `dout` against the shadow and reports PASS or FAIL. This is the same reference-model approach used in production ASIC verification.
346
-
347
-
3.**How the bug demo proves the environment** — If a verification environment only ever sees passing tests, you can't be confident it would catch a real bug. The `memory_ctrl_buggy` DUT introduces a targeted data corruption at address 7. The scoreboard detects it, `regression.py` returns exit code 1, and the dashboard highlights the failing checks — end-to-end proof.
348
-
349
-
4.**How coverage closure is approached** — The directed sequence guarantees all 8 addresses, both operations, and boundary data values are hit. The sequential sub-sequence exercises address transitions. The random sequence (120 transactions) fills remaining cross-coverage bins. The `report_phase` prints per-coverpoint percentages so gaps are immediately visible.
350
-
351
-
5.**What I would add next** — SystemVerilog Assertions for protocol-level checks, code coverage merging from the simulator, parameterized DUT width/depth, an APB/AXI-Lite wrapper to verify a bus-accessible memory, and negative tests for invalid addresses or back-to-back resets.
352
-
353
-
---
354
-
355
-
## Future Improvements
356
-
357
-
-**SystemVerilog Assertions (SVA)** — add protocol-level assertions for write-to-read latency, reset-to-ready timing, and bus-hold conditions.
358
-
-**Code coverage integration** — merge functional coverage with line/toggle/FSM coverage from the simulator for a unified closure report.
359
-
-**GitHub Actions with self-hosted runner** — enable the `sv-simulation-self-hosted` CI job (already scaffolded in `regression.yml`) once a Questa-equipped runner is registered.
360
-
-**APB/AXI-Lite wrapper** — wrap the memory controller with a standard bus interface to demonstrate protocol-level verification.
361
-
-**Parameterized DUT** — make depth and width configurable, and scale the testbench coverage model accordingly.
-**Coverage report export** — generate UCDB or XML coverage databases for use with Questa's coverage tools.
364
-
-**Reusable verification package** — restructure into a reusable VIP-style package that can be dropped into other memory-controller projects.
365
-
366
-
---
367
-
368
-
## CV Bullets
369
-
370
-
> - Designed and implemented a **UVM verification environment** for an SRAM memory controller in SystemVerilog, including a constrained-random sequencer, shadow-memory scoreboard, and functional coverage model with address, data-class, cross, and transition coverpoints — achieving 100% coverage closure across directed and random stimulus.
371
-
> - Built a **regression automation framework** with TCL simulation scripts, a Python log parser with CI-compatible exit codes, and an HTML dashboard; demonstrated end-to-end bug detection through intentional fault injection, scoreboard mismatch reporting, and failure triage using waveform analysis.
372
-
373
-
---
374
323
375
-
<palign="center"><i>Built as a Design Verification portfolio project · SystemVerilog · UVM · Questa</i></p>
0 commit comments