Protocols, configuration and utilities live in packages: named namespaces the compiler elaborates once and every file references. The lessons below build that discipline from declaration to scale.
Lesson | Path | What you build |
|---|---|---|
Required | One protocol package read three ways, plus an umbrella package. | |
Recommended | A filelist in dependency order and a fix for undefined-type errors. Recommended because every learner hits the undefined-type error sooner or later. | |
Required | One package of widths flowing into a DUT and a depth-overridden fifo. | |
Recommended | A guarded header included twice, and which mechanism shares what. | |
Optional | Later reading: two vendor protocols side by side without collisions. Optional until your bench imports more than one package. |
Path: Required is the core first pass for this part's goal, a self-checking testbench; Recommended is what most learners should read; Optional is reference, specialist or revision material to return to later.
Each module got its own copy of the struct, for example by including the same file in both, so there are two different types. Put one typedef in one package and import it on both sides.