Hierarchical design is used in modern digital hardware design to divide complex chips and systems into smaller logical units. This is effectively a divide-and-conquer strategy that breaks a larger complicated module into a simpler module.

We’re motivated to be able to have reusable modules. Hierarchy involves having modules instantiated within other modules to any depth we require. So by doing so, we can test modules individually and assemble into larger circuits. If there are problems with the circuit, they’re problems with the connections and not the individual modules. We also use them to manage complexity.

In Verilog, we can use the wire or logic keyword to specify interconnections between blocks.