RTL designer面临的重大挑战之一是预先识别完整的timing exceptions。这成为复杂设计中的一个迭代过程,传统是基于时序报告中的关键路径或故障路径分析来识别额外的timing exceptions。这种方法会留下大量可能不是真实的时序路径,但这些路径永远不会被识别,因为它们可能不会出现在关键路径报告中。然而,综合和时序工具将在不需要时继续消耗资源来优化这些路径。同时,它也会影响chip的面积和功耗。
什么是false path
false path是设计中的那些时序弧,其中源寄存器的变化预计不会在特定时间间隔内被目标寄存器捕获。false path可以归类为以下类型。
Static False Path
Static False Path是在设计中源寄存器的激励不会对目标寄存器产生任何影响或改变的时序弧。即使源触发器和目标触发器都在相同的时钟域上运行,这些时序路径也不会被任何输入向量改变状态。
例1
下图描述了Static False Path的示例。这里 D1.Q 的变化永远不会导致 D4.D 的任何变化。D4 flop 的值将始终由 D2 的值决定。因此,对于这个特定的电路,D1->D4 可以被视为False Path。
图1 Static timing path
例2
在系统中定义了一个控制位,如果该位被设置,进入 DMA 控制器的时钟将在低功耗 (STOP) 模式下保持启用,否则时钟将在 STOP 模式下被gated。
图2 DMA Clock gating
在上述电路中,当系统处于 RUN 模式时,时钟门控单元将始终保持启用,并且 dma_en 控制寄存器的任何变化都不会影响时钟门控使能生成逻辑。在进入低功耗 STOP 模式之前,用户应该在 RUN 模式下写入/更改此控制寄存器。一旦系统进入停止模式,dma_en 寄存器的预编程值将控制时钟门控单元的状态。单周期时序路径是从“stop_mode_reg -> CG_cell”生成的路径。路径“dma_en_reg -> CG_cell”是false path。即使触发器 dma_en_reg->CG 单元之间的组合延迟非常小,这种拓扑中的时钟偏移和单元布局也可能导致时序问题。为时序分析工具提供正确的exceptions将有助于在第一次迭代中优化单元布局。
例3
IO 输出时序弧通常很关键,是决定同步协议接口的最大波特率支持的限制因素。识别正确的 REG->OUT 时序弧并通过将无效的 REG->OUT 路径限制为false path来隔离它们变得很重要。它可以节省大量的迭代时间和时间和布局工具为满足同步接口的 IO-Spec 而付出的努力。
通常,在开始任何数据传输之前,需要正确配置协议模块。这些配置寄存器在任何数据传输都被认为是静态的。然而,从这些配置寄存器到output pad可能存在时序弧。这是另一个示例,其中前期设计约束有助于简化时序工具的任务以满足目标频率。
在下面给出的拓扑中,配置寄存器(config1、config2 和 config3)应该在进行任何数据传输之前使用特定值进行编程。当数据传输开始时,有效的时序弧为移位寄存器->combo3->IO 缓冲区->PAD。然而,源自 config1/2/3 并在 PAD 处终止的时序弧可以很容易地通过设置false path exceptions来禁用。
图3 与configuration registers寄存器相关的3 I/O path
但是,需要正确审查上述exceptions情况,以避免任何未发现的极端情况。例如:在半双工通信或存储器接口中,数据方向可以即时改变。所以可能需要满足“数据方向寄存器->PAD”的时序,不能认为是false path。
False Reset Timing Arc
在设备启动期间,不需要设备的所有应用程序模块都保持启用状态。因此,默认情况下,这些模块的时钟是门控的。在系统复位无效序列期间,这些模块的复位无效发生在没有时钟的情况下。由于没有时钟,因此不会由于复位取消断言时序违规而导致亚稳态。因此,这些模块的异步复位恢复/取消断言路径可以被视为false path。
Asynchronous False Path (CDC path)
如果源寄存器的时钟域与目标寄存器的时钟域异步,则该路径被视为异步或Clock Domain Crossing path(CDC)路径。在这些路径中不可能有任何时序相关性,因为在启动域和捕获域的时钟沿之间没有定义的关系。这些路径可以被视为时序分析的false path。在这种情况下,设计人员有责任避免在捕获域寄存器时发生任何建立/保持冲突。有一些流行的同步技术,这些技术有助于避免异步时钟设计中出现亚稳态。设计人员应在综合之前将这些异常提供给时序工具。有时可能会在 SOC 集成中将异步设计与同步时钟一起使用。在这种情况下,这些exceptions特别有用,因为时序工具实际上并不需要优化这些使用同步拓扑的时序路径。
双触发器同步技术(Two Flop Synchronizer )
当信号从一个时钟域跨越到另一个时钟域时,需要先同步,然后才能在目标域中使用。目标寄存器可能会遇到建立/保持冲突,因为启动和捕获时钟域边沿之间没有关系。使用第二个触发器阻止同步器第一个触发器中的亚稳态问题,假设第一个触发器将在下一个时钟沿到达第二个触发器之前稳定到一个值。两个触发器上出现亚稳态的概率直接取决于时钟源的频率。违规情况下的建立时间取决于特定技术库的触发器特性,并且必须小于设计中支持的最快时钟。
图4 Two Flop Synchronizer
请注意,在亚稳态期过后,DB1 信号没有必要稳定到一个高值。设计必须保证 DA 信号在目标时钟一个以上周期内的稳定性。如果设计不能保证稳定性,那么同样会导致目标域中非预期的寄存器的信号发生变化。
Two Flop Synchronizer通常用于跨域同步控制信号。
多路同步器(Mux Synchronizer)
当设计人员必须跨任何时钟域传输多位数据总线时,通常使用基于多路复用器同步器的设计拓扑。在此拓扑中,数据总线的时钟域交叉由多路复用器选择信号控制,当输入数据在多路复用器输入处变为有效时,该信号将被启用。这确保了目标触发器永远不会由于数据输入的变化而处于亚稳定状态。
设计人员必须确保在多路复用器启用其输入路径时输入数据应保持稳定,并且仅在多路复用器选择反馈路径时才应更改。
图6 Mux Synchronizer
FIFO(First In, First Out)
FIFO 通常用于将数据从一个时钟域安全地传递到另一个异步时钟域。使用 FIFO 将数据从一个时钟域传递到另一个时钟域需要多异步时钟设计技术。
图7 Asynchronous Fifo
写指针指向数据写入的下一个内存位置。读取指针指向要读取的当前 FIFO 位置。写指针值随写时钟变化,读指针值随读时钟变化,但是两个指针都跨时钟域来确定 fifo 满/空逻辑。因此,在使用 FIFO 满/空逻辑之前,在目标时钟域中同步它们很重要。对于多位信号,在跨时钟域之前首选格雷编码。
握手(Handshaking)
将数据从一个时钟域发送到另一个时钟域的流行方法之一是使用握手协议,其中发送方通过请求发送数据,接收方通过发送确认来确认数据。在目标域状态机内部使用之前,请求和确认信号都在目标时钟域中同步。
图8 Handshaking scheme
伪异步false path(Pseudo Asynchronous False Path)
伪异步false path是指源寄存器和目标寄存器都由相同时钟或源自同一源的时钟提供时钟,但它们的设计方式仍然无法满足时序规范,可以忽略不计。源寄存器和目标寄存器之间的时钟和数据偏差差异使得几乎不可能满足时序要求。在这种情况下,设计人员需要确保这些路径不应有任何严格的时序要求。
图9 Pseudo Async False Path
在上述设计中,PLL 时钟与其他片上/片外时钟源一起用于生成 system_clk。尽管 system_clk 源自 PLL,但由于功能和测试时钟多路复用器、后分频器和时钟门控单元存在于时钟路径中,因此 PLL 输出和系统时钟之间存在一条巨大的非普通路径。
工作在 PLL 输出上的电路可以与系统时钟中存在的逻辑通信。由于系统时钟来自 PLL,因此两个时钟都被视为同步。工具将尝试满足相同的时间要求。然而,巨大的非普通时钟路径有时会成为计时工具遇到的噩梦。这种伪异步路径可以被视为False Path。然而,处理False Path并不能阻止“capture_intc_reg”变得亚稳定,因为没有确保可能导致任何功能故障的时序。
在上述设计中,放置了一个 2 触发器同步器,它阻止亚稳态传播到整个系统。现在,只需将“D1_reg->Sync1_reg”路径视为False Path。
在上述电路中,设计人员应确保延迟,因为双触发器同步器不会导致设计中的任何协议或功能问题。