1.3 层次化设计思想
在讨论了模块及其实例化的方法后,下面进一步了解层次化设计的概念。层次化设计是Verilog HDL设计描述的一种风格,而模块实例化则是其具体的实现方式。通过图1.1,可以理解模块实例化的实质是利用层次化关系来描述电路结构。
前面已经提到,模块是Verilog HDL设计中的一个基本功能单元。狭义来看,模块与模块之间的关系,也就体现了设计层次的概念。比如,若模块A与模块B是一个并行连接的关系,那么A与B处于设计中的同一层次。再如,若模块A与模块B是包含或被包含的关系,那么A与B则分别是设计中的上层或下层。
数字电路设计中,一种重要也最基本的设计方法是自顶向下(Top-down)的设计。所谓自顶向下,是指从整个系统设计的顶层开始,往下一层将系统划分为若干子模块,然后再将每一个子模块又向下一层划分为若干子模块。通过这种方式将整个系统逐次向下分解,一个顶层设计最后可以细分为若干较小的基本功能块,直到不能继续分解为止,如图1.4所示。自顶向下的设计可以允许多个设计者同时设计一个系统中的不同模块,而且在不同的层次上都可以对设计进行仿真验证。
以例1.1中的全加器设计为例来简单分析其设计层次。模块fadder_4是设计的顶层,4位全加器向下划分成为4个较小的1位全加器子模块。模块fadder_1是设计的底层,实现了1位全加器的功能。顶层模块通过实例化调用4个1位全加器,将其串联在一起构成最终的四位全加器电路。从图1.1中,可以清楚地看到全加器的层次化结构。
图1.4 自顶向下的设计
另一种常见的设计方法是自底向上(Bottom-up)的设计,它与自顶向下的设计相反,首先对现有的底层功能模块进行分析和设计,然后使用这些模块来搭建上一层的功能更丰富的模块,直至完成顶层模块的设计。
提示:Verilog HDL并行编程的思想
在Verilog HDL设计中,各个模块总是并行地出现的。由于Verilog HDL描述的是电路的结构,而各个模块最后也可以对应到实际电路图中不同位置的功能模块,因此在进行仿真运行时,Verilog HDL语言中的各个模块的运行是并行的,即在同一仿真时间各个模块同时完成计算。这种并行的运行方式是Verilog HDL与其他高级编程运行(如C语言)的最本质的区别。Verilog HDL初学者最容易犯的错误,就是在编写Verilog HDL代码时还抱有C语言顺序编程的思想,最后导致写出的Verilog HDL代码的仿真结果和预想的不同。因此,初学者需要在学习Verilog HDL时多参考各种电路模型的实例,并且亲自利用仿真工具对实例进行仿真,通过观察正确的仿真结果和波形图来慢慢体会并行编程的思想。