10.1 理论学习
数字电路中,根据模块层次的不同,有两种基本的结构设计方法:自底向上(Bottom-Up)的设计方法和自顶向下(Top-Down)的设计方法。这两种方法有助于我们对整个项目的系统和结构有一个宏观的把控,这也是为什么我们会分析基础章节中每个简单实例的模块是如何设计的,虽然简单的系统不需要划分结构,但是要养成好的习惯,这会在大型多模块设计中发挥重要作用。
自底向上的设计是一种传统的设计方法,对设计进行逐次划分的过程是从存在的基本单元出发的,设计树最末枝上的单元要么是已经构造出的单元,要么是其他项目开发好的单元或者可外购得到的单元。在自底向上的设计方法中,我们首先对现有的功能模块进行分析,然后使用这些模块来搭建规模大一些的功能模块,如此循环直至顶层模块。图10-1显示了这种方法的设计过程。
图10-1 自底向上的设计方法
自顶向下的设计是从系统级开始,把系统分为基本单元,然后再把每个单元划分为下一层次的基本单元,一直这样做,直到可以直接用EDA元件库中的原件实现为止。在自顶向下的设计方法中,我们首先定义顶层功能模块,然后分析需要哪些构成顶层模块的必要子模块,再进一步对各个子模块进行分解,直到到达无法进一步分解的底层功能模块。图10-2显示了这种方法的设计过程。
图10-2 自顶向下的设计方法
在典型的设计中,这两种方法是混合使用的。设计人员首先根据电路的体系结构定义顶层模块,逻辑设计者确定如何根据功能将整个设计划分为子模块,与此同时,电路设计者对底层功能模块电路进行优化设计,并进一步使用这些底层模块来搭建其高层模块。两者的工作按相反的方向独立进行,直至在某一中间点会合。这时,电路设计者已经创建了一个底层功能模块库(具有独立完整的功能模块、IP核或逻辑门),而逻辑设计者也通过使用自顶向下的方法将整个设计分解为由库单元构成的结构描述。图10-3显示了这种方法的设计过程。
图10-3 典型的设计方法
上面介绍的是相对抽象的理论总结,理论往往是晦涩难懂的,但是作为一种概括性的总结还是很有用的。为了说明层次化设计的概念,下面我们以全加器的例子为载体,讲解一个简单的层次化设计在设计模块的思路和代码的编写上有何不同。