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