Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • How to Use This Course
  • Reading Paths
  • Concept Map
  • Meet DCRouter
  • Glossary
  • Part 0: What Verification Is8
  • Part 1: What Can Go Wrong11
  • Part 2: Specifications as Checkable Rules8
  • Part 3: Observability and Controllability7
  • Part 4: Stimulus11
  • Part 5: Checking11
  • Part 6: Coverage10
  • Part 7: Formal and Simulation10
  • Part 8: Verification Levels and Reuse8
    • Levels and What They See
    • What to Verify Where
    • Reuse up the Hierarchy
    • Standard Interfaces and VIP
    • SoC and Software-Driven Tests
    • Hardware-Software Co-Verification
    • Performance and Power Verification
    • Drills: Verification Levels and Reuse
  • Part 9: Planning and Risk9
  • Part 10: Emulation and Prototyping8
  • Part 11: Post-Silicon Validation8
  • Part 12: Bug Economics8
  • Part 13: Debug7
  • Part 14: Sign-Off7
  • Part 15: Verification in Context8
  • Part 16: Case Studies5
  • Part 17: Capstones5
  • Part 18: Interview Preparation6
Loading lesson

‹Part 8: Verification Levels and Reuse
  1. Topics
  2. First Principles of Verification Strategy
  3. Part 8: Verification Levels and Reuse
  4. SoC and Software-Driven Tests

Part 8 · Verification Levels and Reuse · Senior (S)

SoC and Software-Driven Tests

At chip level, tests are often programs running on the chip's own processor: they configure blocks through real registers, move real data and check results in memory. What software-driven tests check that block tests cannot (integration, configuration sequences, data flows across blocks), how they are structured, and why they should not repeat block-level work.

On this page

    Note

    Level: Senior (S) · Answers: At which level should each thing be verified?

    Before this: Standard Interfaces and VIP

    A chip-level test for DCRouter's SoC is a short C program. It writes DCRouter's CTRL register through the processor's bus, programs two DMA engines to copy buffers through the router to memory, waits for their completion interrupts, and compares the destination buffers with the sources. It finishes in a few seconds of simulated time after hours of wall-clock time. It found, in its first run, that the chip's address map put DCRouter's registers at the wrong base address.

    What do chip-level, software-driven tests check that block tests cannot?

    The obvious answer, and why it breaks

    The obvious chip-level test reuses block-level stimulus at the chip boundary: drive packets into the chip's pins and check what comes out. Much of the chip is not reachable that way; its blocks are configured and fed by the processor, and the bugs at this level are in the configuration sequences, the address maps, the interrupts and the data flows between blocks. The natural stimulus at chip level is software.

    The idea: the processor runs the test

    The test program configures the DMA engines and DCRouter over the bus, data flows through them into memory, interrupts report completion, and the program checks memory.

    Chip-level tests check

    Block tests cannot, because

    Address maps and register access from the processor

    Block tests drive registers directly, at the addresses they assume

    Configuration sequences across blocks (order, timing, dependencies)

    Each block test configures only its own block

    Data flows end to end (memory to DMA to router to memory)

    Neighbours were models

    Interrupts, their routing and their handling

    Interrupt controllers and handlers are absent

    Clock, reset and power sequencing across the chip

    Block tests have one clock and one reset

    Boot and the first software on the chip

    No processor, no firmware

    Writing software-driven tests well

    • Test integration, not block corners: one or two data flows per feature, with real configuration; corners stay at block level.

    • Self-checking in software, visible to the testbench: the program compares results and reports pass or fail through a mailbox or register the testbench reads.

    • Keep block checkers on: reused monitors and assertions localise failures inside long software runs (lesson 8.3).

    • Describe test intent once: the Portable Test and Stimulus Standard lets the same scenario target simulation, embedded software, emulation and silicon (fact V11).

    • Reuse the tests later: the same programs run in emulation (Part 10) and on the first silicon (Part 11).

    How real teams run chip-level tests

    Practice

    Purpose

    Bare-metal C tests for each integration feature

    Configuration, data flow and interrupts verified with real software

    A shared test library and hardware abstraction layer

    Tests portable from simulation to emulation to silicon

    Chip-level plans listing only cross-block features

    Slow cycles spent where only the chip can help (lesson 8.2)

    What breaks

    A team (illustrative) ported hundreds of block-level register tests to C and ran them at chip level, spending weeks of simulation re-checking reset values already proved at block level. The one integration bug that mattered, two blocks sharing an interrupt line that the interrupt controller treated as edge-triggered, was found late because the chip-level budget had gone on the ports. A short interrupt-routing test per block would have found it in the first week.

    Why this matters

    Senior lens. Make chip-level tests about what only the chip shows: address maps, configuration sequences across blocks, data flows, interrupts, power and boot. Write them as software, keep block checkers enabled inside them, and plan from the start to reuse them in emulation and on silicon.

    Interview

    Asked: "What does an SoC test check that block tests cannot?"

    Weak answer: The same features, but in the full chip.

    Strong answer: Integration: the address map and register access from the processor, configuration sequences across blocks, end-to-end data flows through real neighbours, interrupt routing and handling, clock, reset and power sequencing, and boot. Those are usually written as software on the chip's processor that configures blocks, moves data and checks memory, with block-level monitors and assertions still enabled to localise failures. Block corners stay at block level; repeating them at chip level wastes the slowest cycles in the project.

    Follow-ups: (1) How does a C test report pass or fail? (2) What is portable stimulus for?

    Check yourself Why could no DCRouter block test have found the wrong register base address in the SoC?

    Block tests write DCRouter's registers directly at the addresses they assume; the base address exists only in the chip's address map.

    Check yourself Why keep DCRouter's block-level assertions enabled during software-driven tests?

    A failure deep inside a long software run is reported at the router's pins with the broken rule named, instead of as a wrong buffer at the end.

    Key takeaways

    • Chip-level tests are often software on the chip's processor: configure, move data, check memory.

    • They check integration: address maps, configuration sequences, data flows, interrupts, power, boot.

    • Keep block checkers on, avoid repeating block corners, and reuse the tests in emulation and silicon.

    Keep going

    Next: Lesson 8.6, Hardware-Software Co-Verification. Drivers, firmware and hardware verified together.

    Related topics

    • Part 8 overview: Verification Levels and Reuse

    Previous

    86 / 160

    Next: Hardware-Software Co-Verification

    Up next

    Up nextHardware-Software Co-Verification

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Levels and What They See
    • What to Verify Where
    • Reuse up the Hierarchy