购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.11 关于本书描述方法的约定

在进入本书的正题之前,先要与读者建立一些描述上的约定,或者说是对平时工作中混用的一些概念进行详细界定,以保证书中的内容不被误解。

本书对寄存器和触发器的概念并不做严格区分。一般而言,用寄存器一词重点指它的功能,即具有寄存数据功能的元器件,至于它内部如何实现则并不关心。寄存器一般用reg表示,即register的缩写。寄存数据的物理实体很多,例如触发器(Flip-Flop,FF)和锁存器(Latch)等。在数字设计中,主要提倡用触发器。寄存器是受控于时钟沿的元器件,Foundry会在标准单元库中提供多种寄存器,例如图1—5中展示的3种。触发器是由边沿信号而非电平导致数据存储的,在图中,画三角号的CP就是触发源,一般CP接的是时钟信号。虽然触发器有多种,但工程师在设计时,头脑中闪现的只有图1—5(a)的结构,因为这是最基本结构,其他结构,如(b)和(c),都由此衍生而来,最后由综合器根据RTL描述的情况,自行决定选用哪种结构。对于触发器,数字工具链的内部有严格的时钟时序控制机制及保证它正常运行的流程方法,能够确保流片前的仿真与流片后的芯片在效果上一致。

图1—5 触发器的3种类型举例

锁存器较少使用,它一般以非时钟信号作为存储控制,如图1—6所示,D是数据输入端,Q是数据输出端,SDN和EN是控制信号,只有当SDN为1且EN为0时,Q端会存储D输入的数据,当SDN为1且EN为1时,Q忽略D的输入,保持不变,当SDN为0时,忽略其他输入信息,Q值被复位为1。与触发器的边沿控制不同,EN是一个电平信号,一般它不连接时钟,而是连一根普通的信号线。这种锁存器很难被纳入时序计算中,因为它既不属于组合逻辑,又无法像触发器一样作为时序路径的起终点,所以时序上无法通过工具保证,只能由工程师自己来保证。

图1—6 一种锁存器的原理图

综上,本书中说的寄存器,基本也可以替换为触发器。在数字芯片EDA工具链中,两个概念也是混用的,一个reg既可以指寄存器,又可以指触发器。另外,所谓时序逻辑门电路,也基本等同于触发器。

另外一个重要的概念是设计的边界。综合的对象是设计(Design),而不是芯片。因本书只讲解数字电路,所讲的设计指的是数字电路设计。芯片中的模拟电路部分会特别称为模拟电路。芯片是由数字和模拟两部分构成的,所以设计不能指代芯片本身,甚至设计都不能指代全部的数字电路,因为有些综合是分块的,例如将数字电路分为两块,分别综合并布局布线后,以硬IP方式被模拟版图工程师拼装到整体版图上。本书所描述的对象,除特别说明外,均指一个综合对象,在书中称其为本设计或直接称为设计。

是设计就有输入/输出线。在数字设计中,需要严格区分不同类型的输入/输出线,特别是在综合时,直接与所用的命令相关。具体的称谓如图1—7所示。图中包含两块数字设计,分别进行综合与PR,因此它们在本书中界定为两个独立的设计。设计有总的输入/输出线,称为端口(Port),在综合时选取Port用命令get_ports。在本书中,Port和端口是混用的,输入的Port称为输入端,输出的Port称为输出端。

图1—7 数字设计边界和输入/输出线的称谓

设计之间、设计与模拟电路间都使用Port相连。也有一些Port是直接伸向芯片外界的,这些Port习惯上称为引脚、管脚、Pad、I/O。本书使用引脚和Pad的称呼。

在设计内部,有例化的元器件,也有很多子模块,它们也都有输入/输出线,称为Pin,在本书中称为Pin脚,在综合时选取Pin脚用命令get_pins,需要注意它与Port的区别。另外,Pin一词也容易与通信中的Ping相混淆,后者是发送测试报文证明网络畅通的意思。

端口、引脚等称谓偏向于物理概念,在设计阶段和验证阶段,不需要特别区分,在本书中,它们被统称为接口。只有特别强调其物理属性时,才用不同的名称加以区分。

SPI、I 2 C、UART、USB、SerDes等通用接口的称呼,本书仍称其为接口。对于AHB、APB等总线上的信号,也统称为总线接口。

另外,本书在讨论中还涉及设计内部和设计外部的描述,称为设计之内和设计之外。虽然这样用词准确,但用多了就难免啰唆,所以本书中也常用片内/片外的称谓来代替。虽然片内实际指芯片之内,片外指芯片之外,但对于以设计为中心的本书来讲,设计以外其实都可以看作片外。

设计内部用RTL表示的抽象逻辑,除时钟外,均称为信号或数据。本书用时钟或时钟信号称谓来指代时钟,单独出现的信号一词表示非时钟的其他信号。

本书所讲的元器件,指的是芯片中的组合逻辑门电路及时序逻辑门电路,而标准单元库或工艺库指的是囊括了这些可选元器件的集合。数字设计只能在已有的选项中挑选元器件,不能创造元器件,类似自助餐而非开小灶点菜,Foundry提供什么,数字设计就用什么,因此,这些备选的元器件也称为标准单元(Standard Cell)。

图1—3已经说明了I/O与Pad(引脚)之间的区别。I/O是一种标准单元,但它比较特殊,与其他的标准单元可能不放在同一个标准单元库中,驱动电平也可能不同。为了简化表述,本书将包含I/O的标准单元库称为引脚单元库,不再称其为标准单元库,以示区别。以元器件库作为两个库的统称。标准单元库中的元器件,本书称为标准单元。引脚单元库中的元器件,本书称为I/O或I/O器件。两者统称为元器件。

若不涉及I/O内部结构的讨论,则I/O一般用引脚一词来代替。

在综合时,有一个中间步骤是将RTL抽象逻辑先映射为通用单元(Generic Boolean),然后映射到标准单元。通用单元与工艺无关,也不包含物理特性,只有功能属性,与RTL描述类似,而标准单元既有功能属性,又有延迟、电压等工艺属性,与工艺和Foundry有关,因此,读者需要区分通用单元和标准单元。通用单元的集合称为通用单元库,它与标准单元库是不同的。

芯片设计还需要Foundry提供的lef文件和lib文件,它们都描述了特定流片工艺下元器件的特性,其中,lef文件描述了元器件的物理属性,lib文件描述了元器件的功能属性。lib文件经常被编译为二进制的db文件才能在某些EDA工具中使用。在本书中,将lef和lib文件统称为技术库。设计文件除了RTL外,也可以带有物理信息,保存为def文件,它的基础内容是设计的形状和尺寸,扩展内容包括端口的分布位置、RAM和ROM等硬核的放置位置、内部元器件的放置和布线位置等。本书将RTL和def统称为设计。由于本书主要关注抽象的RTL设计方法,技术库的概念并不常用,而且,在使用设计一词时,默认指其中的RTL部分。

在设计者看来,不论是元器件还是自己写的模块,都是可供调用的零部件,它们可以拼凑成一颗芯片,但有时也需要区分自己写的模块和元器件。本书将自己写的模块称为设备(Device)或模块(Module),以示区别。用设备一词主要强调它具备相对独立的功能,在介绍SoC架构等上层逻辑时较为常用,设备也经常被替换为单元(Unit)一词,它指的是人为设计的单元,而非标准单元。用模块一词主要强调它在设计文件结构上的独立性,在介绍通用设计和底层逻辑时较为常用。需要注意,本书的设备不是指普通意义上的成套设备,而是比设计低一级的概念,一个设计中可以包含许多设备。当然,设备也可以在设计之外,例如仿真时,为了验证DUT的功能,需要在TB上编写一些虚拟设备与DUT相连,并和DUT协同工作。

在需要区分数字和模拟但不需要区分元器件和设备的语境下,本书使用数字器件和模拟器件的称呼。其他包含器件的名词还有时序逻辑器件、组合逻辑器件、存储器件、时钟门控器件、逻辑器件、延迟器件、I/O器件等。元器件也称为逻辑门,其中,时序逻辑器件也可称为时序逻辑门,组合逻辑器件可称为组合逻辑门。

在谈及时序分析时,本书将使用满足、收敛等词来表示符合时序要求,用不满足、不收敛或违例等词汇来表示不符合时序要求。

读者应认真熟悉上述规定,以便更加清晰地理解本书内容。 nldV8wxFxrCYlTSIvFExyKAZoTFxC6vUfRe/UI4NXrLj2keYexH2/+EoREYAeV7L

点击中间区域
呼出菜单
上一章
目录
下一章
×