Vivado综合操作中的重定时(Retiming)

来源:本站
导读:目前正在解读《Vivado综合操作中的重定时(Retiming)》的相关信息,《Vivado综合操作中的重定时(Retiming)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《Vivado综合操作中的重定时(Retiming)》的详细说明。

重定时(Retiming)介绍

重定时(Retiming)是一种时序优化技术,用在不影响电路输入/输出行为的情况下跨组合逻辑寄存器从而提高设计性能。图1所示的电路是六输入加法器,其中有一条关键路径,红色推出显示的路径是限制整个电路性能的关键路径。

Vivado综合操作中的重定时(Retiming)

通过对加法器输出路径上寄存器进行重定时设计,调整电路的组合逻辑,可以改变整个电路的性能。

整个电路的延迟是4,图2展示的是一种寄存器组合方法可以将逻辑最小化,将输出寄存器融合到逻辑寄存器中称为向后重定时设计,这一步完成后关键路径被压缩为二输入加法器。

Vivado综合操作中的重定时(Retiming)

关于上述 示例需要注意的另一点是寄存器数量的变化。

图1采用9个不同寄存器总线,图2使用了12个不同寄存器总线,产生这样结果的原因是当采用向后重定时设计时,当寄存器从输出移动到输入时,逻辑门的两个输入都必须增加一个寄存器。

有两种不同的重定时方法,向后重定时和向前重定时。向后重定时从门的输出中删除寄存器,并在同一逻辑门的输入出创建新的寄存器。向前重定时的作用正好相反,它从逻辑门的输入中删除寄存器,并在输出中创建新的寄存器。

若要向后重定时,组合逻辑必须仅用来驱动寄存器,而不能向其他逻辑寄存器展开,为了使前向重定时正常工作,逻辑门的每个输入必须有具有相同控制逻辑的寄存器来驱动。

Vivado综合操作中的重定时(Retiming)

全局重定时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综合操作中的重定时(Retiming)

图4:采用后向重定时设计的电路

综合操作日志文件包含的信息大致如下:

Vivado综合操作中的重定时(Retiming)

从这个日志文件中你可以看到重定时操作前后的逻辑门信息对比,以及创建的新寄存器名称,当synthesis通过重定时创建新寄存器时,它将对后向重定时的寄存器使用后缀“bret”,对前向重定时寄存器使用后缀“fret”。

图5展示的电路中一些不兼容的寄存器将无法进行重定时操作,这个结构中同样有一个名为din1_dly_reg的源寄存器,它经过37位逻辑与门生成三级逻辑电路结构,然后在din1_dly_reg寄存器前结束。此外逻辑与门还有一路连接到另外一个寄存器,如下图粉色高亮显示的部分。

Vivado综合操作中的重定时(Retiming)

Vivado综合操作中的重定时(Retiming)

这个日志文件包含的信息是关于 不兼容的FIFO寄存器的,前后的电路的逻辑层级不变。这是示例不能进行重定时操作是因为粉红色高亮显示的部分,这个寄存器需要一部重置,而tmp1_reg没有这个功能,因为这两个寄存器没有相同的控制集,所以它们不能向后重定时到新的逻辑与门电路中,本例的日志文件信息如下:

Vivado综合操作中的重定时(Retiming)

以下情况下不能进行重定时操作:

1. 寄存器时序异常(多循环路径、错误的路径、最大延迟路径)

2. 寄存器的类型属性不能改变(DONT_TOUCH, MARK_DEBUG)

3. 采用不同控制级的寄存器

驱动输出的寄存器或者被输入驱动的寄存器(除非这部分是与前后电路不相关的)

重定时无法改善反馈循环回路中关键路径的性能的一个例子:

当路径中具有相同的源寄存器和目标寄存器时,重定时优化操作可能无法改进整个逻辑电路的结构。

举个例子:

寄存器“dout_reg”的关键路径如下图中红色所示,要经过一个逻辑与运算,然后连接到同一寄存器的复位管脚上才算结束。

根据数位宽度(16比特)逻辑与门电路要占用两个逻辑操作。

Vivado综合操作中的重定时(Retiming)

下面的屏幕截图显示了综合操作如何描述关键路径的

其中还提到了关键路径中一部分模块或寄存器的名字。

Vivado综合操作中的重定时(Retiming)

提醒:《Vivado综合操作中的重定时(Retiming)》最后刷新时间 2024-03-14 00:50:19,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《Vivado综合操作中的重定时(Retiming)》该内容的真实性请自行鉴别。