Vivado 全局重定时vs 局部重定定时

重定时(Retiming)介绍
重定时(Retiming)是一种时序优化技术,用在不影响电路输入/输出行为的情况下跨组合逻辑寄存器从而提高设计性能。图1所示的电路是六输入加法器,其中有一条关键路径,红色推出显示的路径是限制整个电路性能的关键路径。
Vivado 全局重定时vs 局部重定定时_第1张图片
通过对加法器输出路径上寄存器进行重定时设计,调整电路的组合逻辑,可以改变整个电路的性能。
整个电路的延迟是4,图2展示的是一种寄存器组合方法可以将逻辑最小化,将输出寄存器融合到逻辑寄存器中称为向后重定时设计,这一步完成后关键路径被压缩为二输入加法器。
Vivado 全局重定时vs 局部重定定时_第2张图片
关于上述 示例需要注意的另一点是寄存器数量的变化。
图1采用9个不同寄存器总线,图2使用了12个不同寄存器总线,产生这样结果的原因是当采用向后重定时设计时,当寄存器从输出移动到输入时,逻辑门的两个输入都必须增加一个寄存器。
有两种不同的重定时方法,向后重定时和向前重定时。向后重定时从门的输出中删除寄存器,并在同一逻辑门的输入出创建新的寄存器。向前重定时的作用正好相反,它从逻辑门的输入中删除寄存器,并在输出中创建新的寄存器。
若要向后重定时,组合逻辑必须仅用来驱动寄存器,而不能向其他逻辑寄存器展开,为了使前向重定时正常工作,逻辑门的每个输入必须有具有相同控制逻辑的寄存器来驱动。
Vivado 全局重定时vs 局部重定定时_第3张图片
全局重定时vs 局部重定时
在Vivado 综合操作中有两种方法实现自动重定时:全局重定时和局部重定时。
全局重定时是对整个设计而言的,基于设计时的时序要求优化大型组合逻辑结构中的寄存器设计。
这种方式需要分析设计中的所有逻辑,优化最坏路径情况下的寄存器从而使整体设计反应速度更快。为了实现这一点设计时必须在.xdc文件中规定准确的时间限制。在synth_design或Vivado GUI综合设置下通过-retiming命令启用全局重定时,此外该特性还可以与合成中的BLOCK_SYNTH特性一起用于设计中的特定模块。
局部重定时是指用户明确告诉工具使用retiming_forward、retiming_bbackward RTL属性时需要执行的重定时逻辑。
执行局部重定时操作是应该要小心,因为它不是计时器驱动的,而是工具将完全按照用户要求去执行。
有关重定时使用的更多信息,请参阅(UG901)Vivado设计工具用户指南:Synthesis(综合)。
分析日志文件中的信息
图4是通过重定时提升逻辑水平的一个例子,该电路结构中有一个关键的路径分为三个逻辑层,组成的是一个37位的逻辑与门(AND),源寄存器命名为din1_dly_reg,目标寄存器命名为tmp1_reg,在逻辑级别为0的tmp1_reg后面增加一个额外的寄存器。
这是一个理想的重定时逻辑路径设计,因为我们可以切换为三个逻辑级别的路径,由0、1、2三个局部逻辑电路模块组成。
Vivado 全局重定时vs 局部重定定时_第4张图片
图4:采用后向重定时设计的电路
综合操作日志文件包含的信息大致如下:
Vivado 全局重定时vs 局部重定定时_第5张图片
从这个日志文件中你可以看到重定时操作前后的逻辑门信息对比,以及创建的新寄存器名称,当synthesis通过重定时创建新寄存器时,它将对后向重定时的寄存器使用后缀“bret”,对前向重定时寄存器使用后缀“fret”。
图5展示的电路中一些不兼容的寄存器将无法进行重定时操作,这个结构中同样有一个名为din1_dly_reg的源寄存器,它经过37位逻辑与门生成三级逻辑电路结构,然后在din1_dly_reg寄存器前结束。此外逻辑与门还有一路连接到另外一个寄存器,如下图粉色高亮显示的部分。
Vivado 全局重定时vs 局部重定定时_第6张图片
Vivado 全局重定时vs 局部重定定时_第7张图片
这个日志文件包含的信息是关于 不兼容的FIFO寄存器的,前后的电路的逻辑层级不变。这是示例不能进行重定时操作是因为粉红色高亮显示的部分,这个寄存器需要一部重置,而tmp1_reg没有这个功能,因为这两个寄存器没有相同的控制集,所以它们不能向后重定时到新的逻辑与门电路中,本例的日志文件信息如下:
Vivado 全局重定时vs 局部重定定时_第8张图片
以下情况下不能进行重定时操作:

  1. 寄存器时序异常(多循环路径、错误的路径、最大延迟路径)
  2. 寄存器的类型属性不能改变(DONT_TOUCH, MARK_debug)
  3. 采用不同控制级的寄存器
    驱动输出的寄存器或者被输入驱动的寄存器(除非这部分是与前后电路不相关的)
    重定时无法改善反馈循环回路中关键路径的性能的一个例子:
    当路径中具有相同的源寄存器和目标寄存器时,重定时优化操作可能无法改进整个逻辑电路的结构。
    举个例子:
    寄存器“dout_reg”的关键路径如下图中红色所示,要经过一个逻辑与运算,然后连接到同一寄存器的复位管脚上才算结束。
    根据数位宽度(16比特)逻辑与门电路要占用两个逻辑操作。
    Vivado 全局重定时vs 局部重定定时_第9张图片
    下面的屏幕截图显示了综合操作如何描述关键路径的
    其中还提到了关键路径中一部分模块或寄存器的名字。
    Vivado 全局重定时vs 局部重定定时_第10张图片

你可能感兴趣的:(笔记)