Every transfer on the DMA bench starts life as a small object. apb_rw_seq creates an apb_item, randomizes it inside the rules the item allows, and hands it to the sequencer. The apb_driver pulls it, turns it into an APB transfer, writes the read data back into it, and says it is done. This topic follows that object from creation to the pins and back, and finishes with the question every DV engineer meets in the first month: why is nothing moving?
Decide what belongs in an item and what belongs in the driver, and defend control knobs such as idle in a review.
Write constraints that keep stimulus legal, override soft defaults per test, and explain local:: and := versus :/.
Narrow stimulus with derived items without touching the agent, and know who may change an item at each moment.
Draw the four-call handshake from memory, write a driver loop that calls item_done exactly once, and triage a stalled sequence in order.
Lesson | What you learn |
|---|---|
Intent in the item, mechanics in the driver: | |
Class, soft and in-line constraints from the bench, | |
Register-map and error items that extend | |
Who may write an item at each step, fresh items versus reuse, and cloning before a change, as | |
The sequence diagram of start_item, finish_item, get_next_item and item_done; the bench's two driver loops; | |
Where a stuck sequence can be waiting, the tools that tell you which, and the order to check them in. |