We can describe hardware at 3 levels:
We can mix verilog levels within a design, so we can start off the design with a set of high-level, external behavioural modules, and gradually replace them with more detailed modells as design progresses, and can run the same simulation programs on the evolving design.
One example th this is the STUMP test bench. These top-level components are connected by a schematicL - memory (external model in verilog. This has verilog system calls to load and dump memory.) - datapath (schematic generates verilog) - Control (internal behavioural verilog)