同步设计的最大频率由最长的时序路径的延迟决定。然而,在复杂的高频设计中,可能存在一些路径,其传播延迟大于最大工作时钟频率的周期。如果不要求信号在一个时钟周期内传播到下一个时序,则需要实施适当的设计技术以使其成为有效的多周期路径。时序电路中的多周期路径是一种组合路径,它不必在一个时钟周期内完成信号沿的传播。对于 N 的多周期路径,设计应确保信号转换在 N 个时钟周期内从源端传播到目的端。因此,如果系统的最长路径是多周期路径,则它不会限制系统的运行频率。下面描述了一些常见的多循环路径设计。
二倍多周期路径(2倍MCP)
如果在高频系统中,两个相互通信的子模块以 1:2 的时钟比运行,并且不需要在更快时钟的一个时钟周期内捕获源信号转换,则可以实现二倍多周期处理情况。
在上述电路中,数据从触发器 D1 启动并由运行速度比启动触发器的时钟快两倍的触发器捕获,是 clk 的半周期路径或 clk_2x 的单周期路径。如果两者之间的组合逻辑的传播延迟很大,那么可能无法满足这个半周期路径的时序。如果不要求输入数据在 2x 时钟的下一个正沿捕获,则需要引入适当的电路来放宽时序要求。
在上述电路中,F3 的输出用于启用捕获门复用器。捕获门使能 (F3.Q) 确保 F1_reg->F2_reg 作为与 clk_fast(clk_2x) 相关的两个多周期路径。当数据信号从 clk_2x -> clk 交叉时,可以实现类似的电路。
在上述电路中,假设 clk_fast 和 clock_slow 的第一个上升沿总是同时发生并保持对齐。比例大于2:1时可设计复杂高效的“capture_gate enable”电路
N倍多周期路径(N倍MCP)
上述电路是从 D1_reg->D2_reg 的 n-1 个周期的 Multi cycle 路径。当输入数据在 M1 多路复用器输入处变为有效时,状态机 (FSM) 会在一个时钟周期内生成一个脉冲。数据在下一个周期被 D1 触发器捕获。脉冲通过由“n”个触发器组成的移位寄存器传播,并且在“n-1”个时钟周期之后,M2 多路复用器将使输入数据到达 D2 触发器。下一个周期它将被 D2 触发器捕获。这样可以放宽时序以补偿 D1 和 D2 触发器之间存在的组合逻辑的巨大传播延迟。
在上面的时序图中,N 等于 3。因此从 D1_reg -> D2_reg 的路径可以限制为 MCP 为 2。
外设读/写接口的多周期路径
在一些低性能、低带宽的外设寄存器读/写接口中,数据传输发生在两个阶段。此传输的第一个周期称为设置阶段。在此阶段,ADDR、DATA(写入时)和其他控制信号在外设边界处变为有效。在下一个时钟沿,模块使能信号被置位,指示读/写传输的第二阶段。地址和数据信号在 ENABLE 周期结束时被外设锁存,因此为 ADDR 和 DATA 信号提供额外的一个周期余量以到达外设边界。
写周期
在数据写入周期地址线和写入数据总线在第 2 个时钟沿(T2 周期开始)生效,并且在第 4 个时钟沿(T4 周期开始)由外设写入。让我们考虑源寄存器的命名为 PERIPH_BUS_CONTROLLER_ADDR_reg , PERIPH_BUS_CONTROLLER_WDATA_reg 和目标寄存器是 PERIPH_WDATA_CAPT_reg。
写入周期为 2 的 MCP 可应用于以下路径:
PERIPH_BUS_CONTROLLER_ADDR_reg -> PERIPH_WDATA_CAPT_reg PERIPH_BUS_CONTROLLER_WDATA_reg -> PERIPH_WDATA_CAPT_reg
PERIPH_BUS_CONTROLLER_SEL_reg -> PERIPH_WDATA_CAPT_reg
读周期
类似地,对于读取传输,外设的地址在第 2 个时钟沿变为有效,并且外设在 T3 周期将有效数据放在读取数据总线上,因此读取数据在第 4 个时钟沿变为有效。这里源寄存器是PERIPH_BUS_CONTROLLER_ADDR_reg,目的寄存器是PERIPH_BUS_CONTROLLER_RDATA_CAPT_reg。
读取周期的 MCP 为 2:
PERIPH_BUS_CONTROLLER_ADDR_reg -> PERIPH_BUS_CONTROLLER_RDATA_CAPT_reg。
PERIPH_BUS_CONTROLLER_SEL_reg -> PERIPH_BUS_CONTROLLER_RDATA_CAPT_reg。
Amba 外设总线就是这样一种接口,它有两个周期访问外设。
多周期访问慢速外设
在高性能外围总线中,数据读/写访问发生在一个周期内。然而,在该系统中,如果某些外围设备不需要像整个系统那样运行得更快,它可以通过向外围总线控制器断言等待状态来创建每个读/写访问作为多周期访问。
在上面的示例中,外围设备以该系统时钟频率的一半运行。已放置一个垫片,以便为每个读/写访问为外围总线控制器生成一个循环等待状态。在没有任何等待状态(用于快速访问)的情况下,总线控制器将在 sys_clk 的一个周期内保持地址、控制和数据信号(用于写入)有效。在对慢速外设进行读/写访问期间,垫片生成一个周期的等待状态(图中的“transfer_wait”),该周期将 ADDR、DATA 和控制信号扩展为 sys_clk 的另一个周期。
地址和写入数据在外设边界处的 sys_clk 的第 3 个边沿变为有效。当 periph_module_en 被垫片断言时,外设在 sys_clk 的第 5 个边沿(periph clk 的第 3 个边沿)锁存地址和写入数据总线。因此,对该外设的写访问相对于系统时钟 (sys_clk) 的 MCP 为 2。
在读操作期间,外设将有效数据放在读数据总线上,在系统时钟的第 5 个有效时钟沿由主设备捕获。因此,从 bus_controller_address_reg 生成并终止于“bus_controller_read_data_capt_reg”的路径的 MCP 为 2。
路径源自 periph_module_en 生成寄存器并终止于外设。
写入数据捕捉寄存器或bus_controller_read_data捕捉寄存器仍然是periph_clk的半周期路径或sys_clk的单周期路径。同样从transfer_wait生成寄存器到bus_controller的路径也是periph_clk的半周期路径或sys_clk的单周期路径。
设计正确的错误或多周期路径并在时序分析期间使用约束有助于关闭高频系统的时序。同时,提供错误的约束可能导致设备的灾难性故障。设计人员在为综合或时序分析设计或提供约束时应该非常小心。