在了解Verilog语言的更多细节之前,我们最好先了解一下芯片设计中的不同抽象层。
最上层是系统级的架构,它定义了各种子块,并根据功能对它们进行分组,例如,一个处理器集群将有多个内核、缓存块和缓存一致性逻辑。所有这些都将被封装并表示为一个具有输入输出信号的单块。
如下图为顶层架构:
在下一阶段,每个子块都用硬件描述语言来准确描述每个独立块的功能。在这个阶段,低级别的实现细节,如电路原理图、技术库等被忽略。例如,一个控制器块最终会有多个Verilog文件,每个文件描述其功能的一个较小的部分。
然后将 HDL转换为门级原理图,其中还包括表征触发器等数字元素的技术库。例如,用于D 锁存器的数字电路包含以某种方式排列的与非门, 使得D和E 输入的所有组合都产生真值表给出的输出Q。
真值表基本上给出了所有输入信号电平以及由此产生的输出电平的列表,下面给出的是一个带使能引脚的D锁存器,硬件原理图也可以通过布尔逻辑和K map从真值表中得出。但是,对于处理器和控制器等比较复杂的数字块,按照这种方法是不实用的。
与非门的实现是通过连接特定格式的 CMOS 晶体管完成的。在此水平上, 在设计过程中要考虑晶体管的沟道宽度, Vdd 和驱动输出电容性负载的能力。
最后一步是使用 EDA 工具在硅中布局这些晶体管, 以便可以对其进行制造。在此级别上, 将需要一些设备和技术知识,因为不同的布局最终会具有不同的物理特性,例如电阻和电容等。
接下来,在数字模块的设计中主要遵循两种样式,即自上而下和自下而上的方法。
在这种样式中,首先定义一个顶层块,并标识构建顶层块所需的子模块。类似地,每个子块被进一步划分为较小的组件,并且该过程一直持续到我们到达叶单元或无法进一步划分的阶段为止。
在这种情况下,首先要确定可用的构件,然后将它们按照一定的方式组合和连接起来,以构建更大的单元,并用于拼凑顶层构件。
通常情况下,这两种流程的结合使用。
在系统级的设计中,设计人员将每个功能块的逻辑实现并合成为门,在这一点上遵循自上而下的风格。
然而,这些门是按照自下而上的流程建立起来的,即以尽可能小的块的物理布局来实现最好的面积、性能和功率。这些标准单元也有一个硬件原理图,可以用来获取各种信息,如上升和下降时间,功率和其他延迟。这些单元可以提供给合成工具,在需要的地方选择和实例化它们。
Design Abstraction Layers