您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 数字IC系统RTL实现
第三章数字IC系统的逻辑设计—RTL实现第三章数字IC系统的逻辑设计—RTL实现3.1RTL设计基础3.2RTL设计指南(Verilog)第三章数字IC系统的逻辑设计—RTL实现3.1RTL3.1.1同步电路设计要求RTL设计都采用同步电路设计方式。了解同步电路设计要求,是进行RTL设计的第一步。图3.1给出了一个同步电路的示例。第三章数字IC系统的逻辑设计—RTL实现图3.1同步电路示例第三章数字IC系统的逻辑设计—RTL实现组合逻辑实现设计所需的功能。例如,图中的组合逻辑可能是乘法、编码器等复杂的逻辑。寄存器用于暂存数据,它由时钟控制,只有当时钟进行有效跳变时,才将新的数据锁存起来,否则数据一直保持原值。时钟相当于同步电路中的“指挥”。对于图3.1所示的例子,假设该电路都采用时钟的上升沿进行锁存,时钟周期为8ns。从0时刻开始,时钟变为高电平。第三章数字IC系统的逻辑设计—RTL实现第一个寄存器中,经过很短的时间(例如0.2ns)到达Ri的Q端,再从Q端送到组合逻辑的输入,跟其他的信号一起进行逻辑操作。这种逻辑操作必须在规定的时间内完成(满足时钟周期的要求)。假设组合逻辑的结果在4ns后稳定下来,则在4.2ns这一时刻,Rf输入端的数据会稳定下来。这时候电路暂时“静止下来”。然后到8ns这一时刻,第二个时钟沿到来,组合逻辑的输出被第二个寄存器锁存,与此同时,新的数据会被送到第一个寄存器。这个过程会一直持续下去。第三章数字IC系统的逻辑设计—RTL实现由此可见,在图3.1所示的电路中,时钟保证了电路能按照需要动作,而不是杂乱无章地各行其是。下面先简单介绍一下时钟。时钟一般由晶振产生,或者由外部输入,如果需要,还需要用锁相环进行倍频、移相等操作。实际的时钟不可能是理想的,也就是说,时钟不可能一直保持同一频率,时钟边沿不可以“直上直下”。设计者要根据芯片的要求对时钟提出要求,并根据时钟规范进行设计。第三章数字IC系统的逻辑设计—RTL实现例如,假设需要将时钟域A中的数据传递到时钟域B。数据由clka生成,被clkb采样。clka与clkb是异步时钟,周期都是10ns,时钟频率最大为2×10-4。这时候我们需要设计一个异步FIFO。这个FIFO的写入时钟为clka,读出时钟为clkb。假设每次传送的最大包为10KB,FIFO宽度为8位,那么这个FIFO的深度应该考虑最坏情形,时钟clka与clkb最大相差为4×10-4。第三章数字IC系统的逻辑设计—RTL实现FIFO的读指针与写指针至少要相差:4×10-4×10K≈4。这样,FIFO的深度至少为8字节。接下来,我们对时序电路中最关键的组成部分——寄存器进行说明。一个寄存器的结构如图3.2所示。第三章数字IC系统的逻辑设计—RTL实现图3.2寄存器的结构第三章数字IC系统的逻辑设计—RTL实现图3.3寄存器的功能示意图寄存器的功能如图3.3所示。第三章数字IC系统的逻辑设计—RTL实现由图3.3可知,该寄存器在时钟的跳变沿锁存数据,然后数据会一直保持,直到下一个跳变沿。寄存器要正常工作,必须保证D端数据的变化与时钟的有效沿不能距离太近,否则可能会锁存错误的数据。在综合库中,规定了数据变化端跟时钟跳变沿最短的时间要求,称为建立时间约束与保持时间约束。建立时间与保持时间是时序电路设计中最重要的两个概念。建立时间规定,在时钟沿到达前的某段时间内,数据必须稳定;保持时间定义了在时钟沿之后的某段时间之后,数据才能发生变化。图3.4给出了建立时间与保持时间的示例。第三章数字IC系统的逻辑设计—RTL实现图3.4建立时间与保持时间第三章数字IC系统的逻辑设计—RTL实现一般来说,设计中路径的延时过大,超出设计要求,会引起建立时间的违例。如果设计中时钟树做得不够好,时钟偏移(skew)过大,则会引起保持时间违例。对于一个寄存器来说,除了数据端与时钟端有时序要求,异步复位端与时钟端之间也有时序要求。假设一个寄存器是异步复位的,复位信号低电平有效。当复位信号为低电平时,寄存器被初始化。第三章数字IC系统的逻辑设计—RTL实现当复位信号跳高时,寄存器在时钟跳变沿锁存新的数据。如果异步复位信号跳高的时刻距离时钟有效沿太近,那么寄存器可能继续保持复位状态,也可能会锁存新数据,这样,就可能发生锁存错误。因此,有必要定义时钟有效沿与异步复位无效沿之间的时序要求,这就是recovery/removal的时序要求,如图3.5所示。第三章数字IC系统的逻辑设计—RTL实现图3.5recovery/removal第三章数字IC系统的逻辑设计—RTL实现寄存器中建立时间/保持时间、recovery/removal的时序要求,对设计的最大组合逻辑延时、时钟树的构造、复位树的构造都提出了要求。复位树、时钟树一般由后端工具进行处理。对RTL设计者来说,最需关注的是建立时间的问题。设计中的时序违例通过静态时序分析工具可以检查出来。本书第7章对静态时序分析进行了说明,这里不再详述。第三章数字IC系统的逻辑设计—RTL实现3.1.2RTL设计步骤如何进行RTLRTL设计并非仅仅编写代码那么简单。在RTL设计前,要进行如下工作:(1)仔细阅读设计规范,了解设计的要求,例如芯片的I/O采用何种标准,有多少PIN脚,采用何种封装形式,时序要求是多少,是否需要与其他已有的产品兼容等,规范越清楚越好。第三章数字IC系统的逻辑设计—RTL实现(2)了解芯片中是否用到其他IP,这些IP是否满足功能与性能的要求,这些IP是否经过了验证,如何与这些IP进行接口,这些IP(3)了解芯片是否需要与其他产品进行兼容,包括与其他厂商的芯片进行兼容,是否与以前的产品兼容。兼容性会影响到芯片的功能、寄存器设置、PIN脚分配等。(4)了解流片所用的工艺及综合库。高水平的RTL设计者必然熟悉综合库,知道综合库中各单元能够提供怎样的性能,从而了解在设计中的一个路径上,最多可以放多少逻辑。第三章数字IC系统的逻辑设计—RTL实现例如,一个设计要求能运行在时钟频率100MHz,而所用的综合库中一个二输入与非门的延迟大约为0.2ns,则一条路径上差不多可以放50个与非门。有了这种知识,设计者可以写出更为合理的代码。特别是对于数据通路设计,对综合库的了解是很有必要的。(5)了解芯片的外部接口。例如,与模拟部分接口是怎么样的,接口信号的确切含义是什么,系统是否有PCI或AGP之类的高速接口,这些接口需要自己来实现还是由IP第三章数字IC系统的逻辑设计—RTL实现(6)了解芯片的时钟。要了解芯片中有多少个时钟,每个时钟的用途是什么,这些时钟来自锁相环还是由其他芯片提供,这些时钟有无相位关系,频率是多少以及时钟的偏差有多大,(7)了解芯片对功耗的要求,以决定是否采用低功耗设计技术,以及采用何种低功耗设计技术。低功耗设计技术的基本思想是尽量减少设计中的节点的翻转,例如可以采用并行计算来降低时钟频率、时钟门控(针对模块或寄存器阵列),等等。我们将在第9章对低功耗设计技术进行详述。第三章数字IC系统的逻辑设计—RTL实现(8)了解芯片对可测性的要求。设计者要了解芯片是采用全扫描还是部分扫描,是否采用内建自测试的方式,是否需要JTAG,这些对RTL设计都有影响。例如,扫描链的测试覆盖率受限于RTL设计风格。我们将在第6章讲述可测性设计的内容。在进行RTL设计时,要进行如下工作:(1)首先划分好设计的结构。通常来说,一个设计可以大致分为如下几个部分:I/OPad、时钟生成电路、复位电路、JTAG电路、内核,如图3.6所示。第三章数字IC系统的逻辑设计—RTL实现图3.6芯片的划分示意图第三章数字IC系统的逻辑设计—RTL实现当然,芯片划分跟具体设计有关,要根据实际情况选择合适的划分方法,不可一概而论。(2)要与项目组的其他成员进行有效的沟通。要与市场人员进行交流以确定产品的功能;要与其他设计者交流以确定设计的命名规则、模块划分、各模块的接口,等等。能否进行有效的沟通是一个项目能否成功的关键。(3)为项目建立统一的目录结构。项目的所有成员都在该目录下进行设计。(4)统一进行版本控制。相信每个完成过较大设计的人都能体会版本控制的重要性。第三章数字IC系统的逻辑设计—RTL实现在本书附录中对版本控制软件CVS进行了介绍。(5)进行合理的模块划分。要考虑到逻辑功能、设计目标、时序方面的要求,尽量将功能相关的模块放在一起,以减少各模块间的相关性,方便以后的综合及布局布线。按功能划分可以保证设计具有清晰的结构,并有利于分配给不同成员完成。(6)建立统一的验证平台。同一项目组的不同成员最好使用统一的测试验证框架,然后分别施加自己的激励。如果RTL设计开始前已完成了系统设计,则可以利用系统设计的模型作为RTL设计验证的基准。测试平台最好在项目初期就建立好。第三章数字IC系统的逻辑设计—RTL实现(7)考虑芯片的调试方案。在第一次流片回来后,需要对芯片进行调试。由于现在的IC系统规模较大,功能复杂,容易出错,因此调试方案的制定就非常关键。在设计初期就应该考虑好调试方案。为了便于定位错误,设计者应将主要的功能模块分开进行测试。例如,对于一个通信芯片,要能够分别调试模拟部分、数字信号处理部分和MAC部分。在大型的设计中,引脚总是非常宝贵的,设计者要精心设计引脚的复用方案,确定这些引脚在正常工作模块、调试、DFT时各有什么功能。引脚分配方案要以文档的形式给出。第三章数字IC系统的逻辑设计—RTL实现(8)给出设计文档。很遗憾,在许多项目中都没有做到这一点。人们往往等到项目结束后,才开始写设计文档。(9)在写每个模块时,最好能给出框图,一图胜千言。第三章数字IC系统的逻辑设计—RTL实现3.1.3在RTL设计中,是采用同步复位的方式还是异步复位的方式?这种争论由来已久,本节将对这个问题进行阐述。在IC系统中,复位的目的是为了将芯片强制到一个已知的状态。同步复位与异步复位都能达到这个目的。两者的差别在于:同步复位需要时钟有效沿到达时才能起作用,而异步复位不需要。第三章数字IC系统的逻辑设计—RTL实现图3.7同步复位示例第三章数字IC系统的逻辑设计—RTL实现在同步复步方式,复位信号与数据进行组合操作,作为寄存器的D端输入,如图3.7所示。实现同步复位寄存器的代码如下:modulereg-syn(q1,d,clk,rst-n);outputq1;inputd,clk,rst-n;regq1;always@(posedgeclk)if(!rst-n)q1=1′b0;elseq1=d;endmodule第三章数字IC系统的逻辑设计—RTL实现同步复位的优点在于:·在采用基于周期的仿真器的场合(利用开发算法时),采用同步复位要比采用异步复位简单许多。·寄存器可以滤掉复位上的毛刺。同步复位的缺点是:·需要时钟,在某些场合这会带来不便。例如,假如设计中包含三态总线,总线上接着许多寄存器。当上电后,晶振还未起振,或者锁相环还未稳定,这时候没有时钟,所以复位还没有起作用则总线上就可能发生冲突,产生短路。只有增加上电复位电路才能解决这个问题。第三章数字IC系统的逻辑设计—RTL实现·采用同步复位,复位成为路径中组合逻辑的一部分。由于复位的负载比较大(设计中寄存器数目较多),因此会使复位树的延迟比较大,从而导致在路说明:上电复位电路中包括一个门限比较电路。当电平超过某一电平时,会给出复位信号。实现异步复位寄存器的代码如下:moduleasync-resetFF(q,d,clk,rst-n);outputq;inputd,clk,rst-n;regq;第三章数字IC系统的逻辑设计—RTL实现always@(posedgeclkornegedgerst-n)if(!rst-n)q=1′b0;elseq=d;endmodule异步复位的优点是无需时钟,且复位延时不会影响到路径延时。异步复位的缺点是:·复位上的毛刺不能被由它复位的寄存器过滤,必须采用其他的方法来消除;·复位的无效沿与时钟之间存在时序要求(recover
本文标题:数字IC系统RTL实现
链接地址:https://www.777doc.com/doc-5460736 .html