0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Vivado中的重定时概述和应用

Xilinx赛灵思官微 来源:djl 作者:赛灵思 2019-07-25 16:07 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

重定时概述

重定时是一种顺序优化技术,旨在不会影响电路的输入/输出行为的前提下在组合逻辑之间移动寄存器,以提高设计性能。图 1 所示电路的关键路径使用了一个 6 输入加法器。以红色突出显示的路径是对整个电路的性能起限制作用的路径。

Vivado中的重定时概述和应用

图 1:寄存器到寄存器路径设计示例:使用 6 个输入加法器逻辑

通过将加法器输出上的寄存器重定时到电路的组合逻辑,可以提升这里所示电路的性能。

电路的整体时延为 4。图 2 显示移动寄存器使逻辑最小化的一种方法。将输出寄存器移动到逻辑锥中被称为后向重定时。完成此操作后,关键路径将减少为只使用一个 2 输入加法器。

Vivado中的重定时概述和应用

图 2:寄存器到寄存器路径设计示例:通过应用反向重定时使用一个 2 输入加法器

注意:在上述示例中,寄存器的数量改变了。

图 1 使用了 9 条不同的寄存器总线。图 2 使用了 12 条不同的寄存器总线。这样做的原因是,当执行向后重定时时,即当它从输出移动到输入时,门的两个输入一定各有一个寄存器。

有两种不同类型的重定时:后向重定时和前向重定时。后向重定时从门的输出中移除寄存器,并在同一个门的输入处创建新的寄存器。前向重定时完全相反,它从门的输入端移除寄存器,并在输出端创建一个新的寄存器。

要执行后向重定时操作,组合逻辑必须仅驱动寄存器,而不是扇出到其他逻辑。要执行前向重定时操作,门的每个输入必须由具有相同控制逻辑的寄存器驱动。图 3 显示的是采用前向或后向重定时的同一个电路。

Vivado中的重定时概述和应用

图 3:前向重定时或后向后重定时的与门

全局重定时与局部后重定时

在 Vivado 综合中,有两种启用重定时的方式:“全局”和“局部”。

全局重定时对整个设计进行重定时,并根据设计时序在大型组合逻辑结构中移动寄存器。

它会对设计中的所有逻辑进行分析,并在最坏情况的路径中移动寄存器,以便设计能够跑得更快。为了完成此操作,设计必须在 .xdc 文件中含有准确的时序约束。使用 synth_design 命令行中或 Vivado GUI 中综合设置下的 -retiming 开关启用全局重定时。 此外,此功能还可以与综合中的 BLOCK_SYNTH 功能一起使用,作用于您设计中的特定模块。

局部重定时是指用户明确告诉工具使用 retiming_forward/retiming_backward RTL 属性执行重定时时的逻辑。

在执行局部重定时时应小心,由于这种重定向不是时序驱动的,工具会完全按照要求进行操作。

如需了解更多有关使用重定时的信息,请参阅《Vivado Design Suite 用户指南:综合》 (UG901)。

分析日志文件中的消息,图 4 显示的是可以改善逻辑层次的重定时示例。该结构的关键路径有 3 个来自 37 位的与门的逻辑层次。源寄存器被称为 din1_dly_reg,目标寄存器被称为 tmp1_reg,在 tmp1_reg 后面还有一个逻辑层次为 0 的额外寄存器。

这是重新定时的理想途径,因为我们可以把一个有 3 个逻辑层次的路径(后跟逻辑层次为 0 的路径)切换到有 2 个逻辑层次的路径(后跟一个有 1 或 2 个逻辑层次的路径)。

Vivado中的重定时概述和应用

图 4:可以向后重定时的电路

综合日志文件类似于以下内容:

INFO: [Synth 8-5816] Retiming module "test"

Effective logic levels on critical path before retiming is: 3

Total number of crtical paths = 30

Optimizing at the module level

Optimizing locally to improve critical paths (may not reduce worst delay)

Effective logic levels on critical path after retiming is: 2

Total number of crtical paths = 30

Numbers of forward move = 0, and backward move = 1

Retimed registers names:

tmp1_reg_bret

tmp1_reg_bret__0

INFO: [Synth 8-5816] Retiming module "test" done

从此日志文件中,您可以看到重新定时之前和之后报告的逻辑层次,以及创建的新寄存器的名称。当综合从重定时创建新寄存器时,它会对后向重新定时的寄存器使用后缀“bret”、对前向重定时的寄存器使用“fret”。

图 5 中显示的电路展示的是不兼容的寄存器元件会让重定时变为非法操作。该结构使用的仍是一个名为 din1_dly_reg 的启动寄存器,通过一个 37 位的与门,产生 3 个逻辑层次,然后最后是一个名为 din1_dly_reg 的寄存器。此外,与门还有另一个以粉红色突出显示的寄存器扇出。

Vivado中的重定时概述和应用

图 5:无法重定时的电路示例

由于以粉色突出显示的寄存器的存在,此示例无法重新定时。该寄存器采用了异步复位,而 tmp1_reg 没有采用异步复位。由于两个寄存器的控制集不相同,因此它们无法后向重定时到与门逻辑。此示例中的日志文件会显示以下内容:

INFO: [Synth 8-5816] Retiming module "test"

Effective logic levels on critical path before retiming is: 3

Total number of crtical paths = 60

Optimizing at the module level

Cannot find a feasible solution:

backward propagation for flip-flop tmp1_reg:FD along instance tmp1_i_1:LUT2 fails due to incompatible flip-flops

Optimizing locally to improve critical paths (may not reduce worst delay)

Effective logic levels on critical path after retiming is: 3

Total number of crtical paths = 60

Numbers of forward move = 0, and backward move = 0

Retimed registers names:

tmp1_reg_bret

tmp1_reg_bret__0

INFO: [Synth 8-5816] Retiming module "test" done

日志文件内含有关不兼容触发器的消息,并且之前和之后的逻辑层次不会改变。

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

寄存器上加有时序异常约束(多周期路径、可忽略路径、最大延迟)。

存器有保留类型的属性(DONT_TOUCH、MARK_DEBUG)。

带有不同控制集的寄存器。

寄存器驱动输出或由输入驱动(除非设计被标记为 out-of-context)。

重定时无法提升反馈循环中的关键路径的示例

当路径的源寄存器和目标寄存器相同时,重定时优化有可能无法改善逻辑层次。

例如:

寄存器“dout_reg”的关键路径以红色突出显示。它通过一个减位与运算符,并在同一寄存器的复位引脚处结束。减位与运算符将基于我们采用的宽度(即 16 位)占用 2 个逻辑层次。

Vivado中的重定时概述和应用

下面的屏幕截图显示综合对关键路径的性质的描述。

它还提到了作为关键路径一部分的单元名称。

INFO: [Synth 8-5816] Retiming module "test"

Effective logic levels on critical path before retiming is: 2

Total number of crtical paths = 192

Optimizing at the module level

Cannot find a feasible solution:

Worst path is a self-loop from dout_reg[14] to dout_reg[14]

Optimizing locally to improve critical paths (may not reduce worst delay)

Effective logic levels on critical path after retiming is: 2

Total number of crtical paths = 192

Numbers of forward move = 0, and backward move = 0

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电路
    +关注

    关注

    173

    文章

    6064

    浏览量

    177589
  • 寄存器
    +关注

    关注

    31

    文章

    5590

    浏览量

    129197
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CC2650无线连接三概述

    `CC2650无线连接三概述`
    发表于 02-25 10:13

    Vivado综合操作定时(Retiming)

    synth_design或Vivado GUI综合设置下通过-retiming命令启用全局定时,此外该特性还可以与合成的BLOCK_SYNTH特性一起用于设计
    发表于 03-14 12:32

    如何在Vivado 2016.1进行寄存器平衡/寄存器重定时

    vivado 2016.1可以选择重新定时。我有这种层次数据路径设计,其中触发器处于最顶层,我希望在重新定时完成后,应将触发器移动到较低层次以匹配时序。但重新
    发表于 05-01 06:33

    如何为管道设计插入寄存器并进行定时

    大家好,我需要为管道设计插入寄存器并进行定时以改善负面松弛。在vivado是否有内置的方法来执行此操作。我尝试了phys_opt_design -retime,但它没有改善松弛。此
    发表于 05-01 14:51

    Vivado 全局定时vs 局部定时

    限制。在synth_design或Vivado GUI综合设置下通过-retiming命令启用全局定时,此外该特性还可以与合成的BLOCK_SYNTH特性一起用于设计
    发表于 11-24 07:00

    基于vivado的fir ip核的采样设计与实现

    本文基于xilinx 的IP核设计,源于音频下采样这一需求。 创建vivado工程 1. 首先打开vivado,创建一个新的project(勾选create project subdirectory
    发表于 02-08 02:25 5855次阅读
    基于<b class='flag-5'>vivado</b>的fir ip核的<b class='flag-5'>重</b>采样设计与实现

    Vivado 2017.1和Vivado 2016.4性能对比分析

    。总体而言,Vivado 2017.1比Vivado2016.4给出了更好的效果。虽然在测试1的结果有些相似,但是Vivado2017.1从测试2和3
    的头像 发表于 07-04 11:23 1.1w次阅读
    <b class='flag-5'>Vivado</b> 2017.1和<b class='flag-5'>Vivado</b> 2016.4性能对比分析

    Tcl在Vivado的基础应用

    Vivado使用技巧的最大障碍,以至于两年多后的今天,仍有很多用户缺乏升级到Vivado的信心。本文介绍了Tcl在Vivado的基础应用,希望起到抛砖引玉的作用,指引使用者在短时间内
    发表于 11-18 03:52 5354次阅读
    Tcl在<b class='flag-5'>Vivado</b><b class='flag-5'>中</b>的基础应用

    如何在Vivado Design Suite 中进行IP加密

    此视频概述Vivado Design Suite的IP加密。 它涵盖了IP加密工具流程,如何准备加密IP以及如何在Vivado运行加
    的头像 发表于 11-20 06:34 7401次阅读

    在ISE和VivadoXADC的向导演示

    该视频快速概述了ISE和Vivado可用的XADC向导的界面,功能和功能。 对于希望实例化基本设计的数字设计人员来说,这是一个很好的工具。
    的头像 发表于 11-20 06:19 5299次阅读

    Vivado 2014.1的许可和激活概述

    了解如何使用2014.1引入的新激活许可为Vivado工具生成许可证。 另外,了解Vivado 2014.1的许可更改如何影响您,以及如何在激活客户端中使用新的
    的头像 发表于 11-22 07:10 3602次阅读

    Vivado综合操作定时(Retiming)

    有两种不同的定时方法,向后定时和向前定时。向后
    的头像 发表于 03-14 16:26 2w次阅读
    <b class='flag-5'>Vivado</b>综合操作<b class='flag-5'>中</b>的<b class='flag-5'>重</b><b class='flag-5'>定时</b>(Retiming)

    转接驱动器和定时器的比较

    六零年代,随着电信数字载波系统T1和E1的出现,数字定时器开始受到关注。这些系统在屏蔽双绞线上承载多条语音电路信道,每隔几千英尺需安装一个数字定时器。当时这些设备比较先进,它们采用
    发表于 02-12 10:05 2056次阅读

    Vivado设计约束功能概述

    XDC约束可以用一个或多个XDC文件,也可以用Tcl脚本实现;XDC文件或Tcl脚本都要加入到工程的某个约束集(set);虽然一个约束集可以同时添加两种类型约束,但是Tcl脚本不受Vivado工具管理,因此无法修改其中的约束;
    的头像 发表于 06-30 11:27 5367次阅读

    Vivado设计套件用户指南(设计流程概述)

    电子发烧友网站提供《Vivado设计套件用户指南(设计流程概述).pdf》资料免费下载
    发表于 09-15 09:55 2次下载
    <b class='flag-5'>Vivado</b>设计套件用户指南(设计流程<b class='flag-5'>概述</b>)