网站开发计划表,企业营销策划咨询,wordpress添加页面,怎么做漫画网站在数字集成电路设计中#xff0c;时钟信号是数据传输的基准#xff0c;它对于同步数字系统的功能、性能和稳定性起决定性作用#xff0c;所以时钟信号的特性及其分配网络尤被人们关注。时钟信号通常是整个芯片中有最大扇出、通过最长距离、以最高速度运行的信号。时钟信号必… 在数字集成电路设计中时钟信号是数据传输的基准它对于同步数字系统的功能、性能和稳定性起决定性作用所以时钟信号的特性及其分配网络尤被人们关注。时钟信号通常是整个芯片中有最大扇出、通过最长距离、以最高速度运行的信号。时钟信号必须保证在最差的条件下关键的时序要求能得到满足否则对时钟信号任何不当的控制都可能导致紊乱情况将错误的数据信号锁存到寄存器从而导致系统功能的错误。 在现有基于标准单元的ASIC流程中通常将扇出较大的时钟网络在综合阶段设置为理想时钟在物理设计阶段进行时钟树综合因此它是后端物理设计的关键步骤之一。
一、时钟树综合方法 芯片设计中的时钟分为两类:真实时钟real clock和虚拟时钟virtual clock。真实时钟又有两种模式时钟树综合前没有延时的理想时钟ideal dock和时钟树综合后的传播时钟propagated clock。在设计中有时需要定义相对于系统的参考时钟例如对于某个不含PLL的设计模块其时钟信号来自顶层芯片时我们就定义它为虚拟时钟。虚拟时钟没有源头它在整个系统设计中存在在当前设计中不存在。时钟树综合时必须先定义虚拟时钟然后才能定义并约束端口的输入输出延迟。 简单的说设置virtual clock的好处就是可以在不影响real clock的情况下指定clock的clock network delay。 我们知道clock latency包括了clock source latency和clock network delay。当BLOCK中没有做clock tree 的时候clock network delay 等于0 这时候RegA到PORT这个path来说用virtual clock还是用real clock 效果都是一样的。 但是当BLOCK到了CTS阶段后因为有BLOCK内部有clock network delay的存在而RegB仅仅是个虚拟的寄存器他的clock tree是不存在的因此clock network delay也就是0这就会导致 RegA 到 PORT的timing path变得过于严格与之相反input 到 内部寄存器的path的setup check就会过于乐观。那么我们可以对RegB设source latency。然而不幸的是如果用的是real clock 那么必然会导致RegA的clock的source latency也相应的改变。这时候就体现出了virtual clock的作用。 虚拟时钟在设计中的实际应用是用于作为输入输出端口延时约束的时钟源。EDA工具会基于虚拟时钟根据芯片/模块内部时钟的实际 delay评估IO外部假定寄存器的propagation time这样时序分析就可以规避不必要的“假”违例。 理想时钟开始用于逻辑综合阶段通过设定一些参数模拟真实时钟。在芯片布局完成后需要对理想时钟进行延时计算从而建立时钟树这时便设定时钟的属性为传播时钟这样时序工具在分析时就会考虑时钟树的门延迟和线延迟。
1、设计约束 时钟树综合(CTS,clock tree synthesis)时需要对期望实现的参数做出定义这些参数通过“时钟树约束文件”来提供。时钟树所用的约束文件中首先是对时钟信号本身的定义它们直接来源于标准设计约束SDC文件。SDC文件为设计约束的标准它的主要内容包括时序约束timing constraints因此它也常常被称为时序约束文件。 标准设计约束SDC文件是规定到达同步寄存器的数据与时钟之间满足设计要求的一种时序关系。SDC文件主要有三部分组成:时钟定义、输入延迟、输出延迟。在顶层设计中还需要约束输入端口的驱动以及输出端口的负载等信息。对于多时钟的复杂SoC设计还需要根据设计的具体情况设定多周期检查路径、冗余的伪路径以及最大延迟时间和最小延迟时间等约束,如下表 与时钟信号延滞有关的延迟定义还有输入延迟、输出延迟、路径最大延迟和路径最小延迟。输入延迟指的是数据到达输入端口的延迟输出延迟是数据离开输出端口的延迟它们主要用于输入和输出端口的时序匹配。 在模块级设计中输入延迟与输出延迟是模块之间的时序接口输入延迟主要用于匹配另一接口模块的输出组合电路的路径延迟而输出延迟则为另一接口模块的输入组合电路的路径延迟预留一定的时间范围。在芯片设计的顶层输入输出延迟可作为芯片和板级设计之间的时序接口主要是预留给PCB上走线的延迟。 最大最小延迟一般是满足特殊时序所规定的要求可以是芯片的一个端口到达另一个端口的延迟要求也可以是芯片内部的某个寄存器到达另外一个寄存器的延迟。 在输入输出端口需要分别定义驱动能力和负载大小。定义输入端口的驱动能力可以是标准单元库中的一个缓冲器bufferBUF单元也可以是指定的电阻值。在芯片的顶层常指定特定的阻值也即定义输入电阻的大小由于在顶层驱动的是负载较大的I /O单元故需要的驱动能力较强典型的值是0. 05单位取工艺库中电阻的单位一般为kΩ在模块级设计中则用某个单元来定义常用中等驱动能力的BUFX2驱动能力太小(例如BUFX2)会导致优化时插人多余的BUF而驱动定义得太大(如BUFX16)会造成优化时插入的BUF不足从而造成两个模块拼接时时序的违例。 输出负载指的是与输出端口相连接的负载其值为电容一般单位为PF。在芯片的顶层设计中所需要定义的值与板级PCB上的负载相关。例如,某CPU设计常用的数据总线如CPU的输出数据总线、PCI总线、SDRAM总线、LCD控制和数据线等其经验负载一般取30pF一些特殊的端口如USB端口其负载较大取60pF较为合理。 对于时钟的定义、时钟延迟的定义、时钟不确定性定义是为了在布局、时钟树综合和布线时提供时序约束参考点。时钟的定义将通过时钟树综合来实现而时钟延迟和时钟抖动或不确定性jitter或uncertainty将在静态时序分析时进行检查。静态时序分析将根据时钟树综合和布线的实际结果通过提取整个电路中所有的时序路径通过计算信号在路径上的延迟传播找出违背时序约束的错误详见静态时序分析。
2、时钟树的结构 时钟信号在物理设计中的实现结果被形象地称之为时钟树时钟信号的起点叫做根节点root pin或root cell时钟信号经过一系列分布节点最终到达寄存器时钟输入端或其他时钟终点例如存储器时钟输入端被称为叶节点。根节点、分布节点和叶节点都依附于的逻辑单元则分别称作根单元、分布单元和叶单元。时钟网络从根节点逐级插人驱动器buffer、inverter ,从而到达其叶节点按照芯片时钟网络的约束要求产生时钟树的过程叫做时钟树综合。 今天在基于标准单元的ASIC芯片流程中通常扇出较大的时钟网络在综合阶段设置为“理想时钟”。在物理设计阶段即在布局布线的过程中进行综合而后定义为“传播时钟”进行静态时序分析时钟树综合的实现已被公认为物理设计的关键步骤。 时钟树根据其在芯片内的分布特征可分为多种结构主要有H 树H-tree、X 树X-tree、平衡树balanced tree以及梳状或脊椎状时钟网clock tree mesh comb or spine。 H-tree从中心点到达各个叶节点的距离是相等的因此信号到达叶节点的时间理论上相等时钟偏差理论值为0该结构的不足是布线比较困难扇出难以协调一致适用于较小的设计。 X-tree也是一种实现等长互连线的方法与H-tree相比X-tree采用了很多非90°的互连线与H-tree的扇出为2相比X-tree的扇出是4。 为了减小叶节点反射电流的影响将分支后的时钟网线的电阻提高到分支前的2倍也即分支后的线宽为分支前的1/2得到“裁剪状的’’taperedH-tree。 平衡树采用的是两个层次的驱动比较适用于分层次的时钟树设计以及较大的时钟树综合。在顶层上它采用一个层次的驱动插入以平衡时钟偏差到模块级再采用模块级的驱动插人平衡时钟偏差。从图中可以看出从时钟的根节点通过一级驱动到达模块的时间是不同的存在时钟偏差但是比较小。 对于很大的时钟树用时钟网络或时钟网格clock mesh,clock grid的方法是获取较小时钟偏差较好实用方案如图所示。尽管当代的EDA工具能自动生成时钟网络或网格等拓扑结构但它还是需要很丰富的经验和细致的手动方法去设计并作调整。
3、时钟树综合策略 在SoC芯片设计中它的时钟数目多时钟结构复杂有很多叶节点同时属于多个时钟域在时钟树综合时需要采取一些相关的策略。 自动时钟树综合对于自我交叉self-reconvergent和相互交叉crossover两种情况的处理方法如下
自我交叉是很常见的一种情况从PLL出来的时钟经过不同的处理(分频或控制等)然后又通过一个选择器mux汇集到一起在这种情况下工具在被设定为处理自我收敛状态时先综合平衡右侧tree部分的偏差skew然后再均衡circuit1和circuit2的偏差从而平衡整个时钟树偏差。相互交叉时钟如图所示tree3是wb_clk和lcd_clk经过一个选择器mux所重复的部分工具在时钟树综合时首先综合tree3平衡其内部偏差然后对tree1进行综合,同时平衡其内部偏差以及到达mux输入端的延迟最后对tree2进行综合平衡tree2自身的偏差以及tree2与tree1之间的偏差。如果两个时钟的频率相差很多对于其重复的区域应当选择对快速时钟的要求作为统一目标要求再进行时钟树综合。二、时钟树设计策略
1、综合优化
1有用偏差 在传统的或早期的时钟树综合时期望获得“零偏差”的时钟树。但是后来研究发现即使能够获得“零偏差”的时钟树它的性能也不见得就是最好有用偏差useful skew的概念随即被提出并应用。 从一些时钟树拓扑结构中发现有些组合逻辑电路(如datapath)延时较大而处于同一时钟树中的寄存器的时钟延时相对较小时这时如果迁就延时长的组合逻辑电路增加寄存器的时钟延时并不影响时钟树的功能。这种方法称作时钟树的有用偏差。如下图中针对组合逻辑的延时违例我们可以在CTS之前去加快到达第一个寄存器的源(source)时钟信号完成CTS后再去添加填塞单元(padding cell)去减慢到达第二个寄存器的靶(target)时钟信号。 显然有用偏差就是利用时钟偏差来满足时序要求。
2OCV与CPPR 在纳米工艺条件和12英寸硅片技术中片上误差OCV在时序检查时已经成为非常重要的一步工作。同时人们发现在考虑OCV时它会对时钟时序路径延时偏差skew和数据路径data path延时提出更严格的要求因此需要在时钟树综合阶段进行分析和处理。同一个芯片上的误OCVon-chip variation会对芯片的时序产生直接影响。如两个相同的缓冲器单元在输入信号变化和负载相同的条件下由于在芯片上所处位置不同它们的实际门延时却不同。 详见静态时序分析——On-chip Variation 3与布局结合的手动时钟树设计 在布局布线常用流程中EDA工具自动放置标准单元并在要插入时钟树的时序单元附近预留一定的空间设计者指定时钟的根节点和频率、整个时钟树最大的电容值、转换时间值以及所要达到的目标偏差值,CTS工具会根据设计者的要求将buffer单元自动地插入时钟树。当对具体的设计非常地了解时可以采用与布局相结合的手动时钟树设计具体实施如下:搜索所有的叶节点根据模块之间的关系按照一定的相对规则指导工具将其放置在芯片适当的位置。在时钟树综合阶段先在小范围内综合各个模块的时钟即手动设置插入buffer的级数每级buffer所驱动的具体的叶节点然后在顶层平衡全局时钟。
4多驱动buffer 对负载很大的时钟树也即叶节点数目较大的时钟树在根节点处采用多个buffer驱动STA不能对这种平行连接的buffer做出准确的时序计算而需要通过SPICE仿真从而提高驱动负载的能力如下图a所示从根节点出来的时钟其中cpu_clk的负载较大则在根节点处扩展多个驱动后再进行后面的时钟树综合。下图b展示了时钟树应用的综合实例它由三节结合组成第一节为buffer链驱动第二节为H-tree(也称为鱼骨状)和第三节局部时钟树(叶。 2、异步时钟树设计 虽然同步时钟设计及其时钟树的综合较为容易实现但由于信号传送在同一时间频率发生通常各模块间的时钟同属于同一个主时钟因此能量功耗也最大。如果将结构bus作成自我定时各个模块的时钟成为相互独立时钟的偏差与平衡也就容易实现了。在实际的SoC设计中它是以非同步时钟即异步时钟设计来实现从而降低功耗。
时钟树综合对同步电路实现的优点是:电路结构简单明朗具有较好的鲁棒性验证简单。同步电路的缺点是:较大的时钟在物理实施时具有一定的难度封装电感和电源电阻会在同步时钟跳变的瞬间产生很大的噪声。 异步电路与同步电路相反其电路不规则但是速度快,功耗低将全局时钟变为多个局部时钟成为目前人们关注的热点。如上图所示各级电路都有自己的局部自定时电路self-timed circuit各级之间通过异步握手信号完成电路的功能。异步电路的时钟控制信号一般都是异步应答信号在同一个异步电路中要求其涵盖的时序单元是在异步应答信号下同步工作故异步应答信号在一个异步模块中也是需要当作特殊的时钟信号来处理。故异步电路的应用将一个大的全局时钟抽象成各个独立的局部时钟给时钟树综合带来了极大的方便。
3、锁存器时钟树 在一些设计中人们发现同一时钟周期的时序不够用而引入了时间借用time borrowing的概念和方法。 详见静态时序分析——Timing borrow 与寄存器相比较锁存器的特点是数据在有效电平区间内传输而非在时钟的边沿传输。在寄存器电路中两个寄存器之间组合路径的延迟决定了时钟最小的周期值如果在一个周期内组合路径早早的完成了其功能则将处于闲置状态直到下个周期的到来。相对于寄存器电路锁存器半个时钟周期内直通故能在本周期内容忍一定的负的剩余时间或者借用下一级的时间time borrowing因此锁存器上的时序更容易满足。 锁存器可以实现较高频率的电路但是锁存器在半个周期内透明的特性增加了电路的灵活性同时也带来了一定的问题。由于噪声的影响数据上的毛刺信号很容易在锁存器电路中传递从而造成功能的错误因此锁存器的抗噪性比较差在应用中要非常地谨慎。一般不提倡使用锁存器但是在设计经验丰富对内部电路了解较透彻在物理设计中采用一定的抗噪方法的前提下是可以考虑采用锁存器的。