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

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

3天内不再提示

记录一次时序收敛的过程

FPGA开源工坊 来源:FPGA开源工坊 2023-11-18 16:38 次阅读

在之前的文章里面介绍了Canny算法的原理和基于Python的参考模型,之后呢在FPGA上完成了Canny算法的实现,可是遇到了时序不收敛的问题,记录一下。

e279ebd0-85e9-11ee-939d-92fbcf53809c.png

可以看到时序的建立时间不满足。

我们在约束的主时钟频率是200MHz,也就是5ns,但是建立时间是-2.12ns,也就是说这个工程只能跑到7.12ns也就是140.45MHz,远远不能满足我们预先的设计。

在之前文章里面介绍过怎么在SpinalHDL里面估计一个模块可以跑到的最大频率,可以参见:SpinalHDL--快速评估代码性能

怎么根据时序约束和建立保持时间裕量来分析工程能跑到的最大频率可以参考下面:

e29259cc-85e9-11ee-939d-92fbcf53809c.png

首先来看一下PR之后是哪条路径不收敛,究竟是同一时钟域下的还是跨时钟域的路径,两者的处理方式不一样。

e29994e4-85e9-11ee-939d-92fbcf53809c.png

可以看到是Intra-clock paths爆红了,也就是同一时钟域下的路径时序不收敛。

接下来看具体的时序路径:

e2b32f58-85e9-11ee-939d-92fbcf53809c.png

可以看到logic delay远远比net delay大,那么我们就需要去降低logic delay,也就是要把我们的组合逻辑搞简单一点。如果是net delay比较大就要考虑是不是布线拥塞的问题了,两者的处理方式不太一样。

e2ce0314-85e9-11ee-939d-92fbcf53809c.png

再来看一下它的电路图,可以看到在左边的寄存器输出之后经过LUT,Carry等组合逻辑之后,给到DSP的输入端。一般来说DSP的几级pipline最好的都用上,这样DSP可以跑到更高的频率。

再来看一下具体的路径报告:

e2e53124-85e9-11ee-939d-92fbcf53809c.png

可以看到logic的延时占到了82%,因此如果要解决这个时序为例,就必须要把logic delay给降低。

两者的比例可以参考,七系列的FPGA和UltraScale系列的FPGA不太一样:

e2fd2874-85e9-11ee-939d-92fbcf53809c.png

e312292c-85e9-11ee-939d-92fbcf53809c.png

来看一下这一个时序为例对应的代码:

e3326a7a-85e9-11ee-939d-92fbcf53809c.png

可以看到其实挺复杂的,有减法,有乘法。其中减法是被vivado用LUT+Carry搭了起来,乘法用的DSP。

要解决这个问题,就是把这一大段代码进行流水拆开嘛,把减法拆一级流水,乘法器拆为三级流水。

将代码修改为以下的样子,再来综合一下

e3880b4c-85e9-11ee-939d-92fbcf53809c.png

e399fe6a-85e9-11ee-939d-92fbcf53809c.png

可以看到时序就收敛了。

再来看一下生成电路结构:

e3a3e664-85e9-11ee-939d-92fbcf53809c.png

可以看到FDCE之后仍然是LUT+Carry的形式,用于做减法运算,然后再接入DSP的输入,在源码里面做完减法之后还有这两级寄存器,但是在电路图里面看不到他们了,这是因为这两级寄存器被DSP给吸收掉了,用于提高DSP的时钟频率,这两级寄存器会利用DSP单元内部的寄存器来实现,并不会增加我们的资源占用,DSP核里面的资源不用也是浪费。

e3b7a4c4-85e9-11ee-939d-92fbcf53809c.png

e3ca2086-85e9-11ee-939d-92fbcf53809c.png

上图为DSP单元里面的寄存器排布,可以看到有六级。

本篇介绍了一次时序调优的过程,就是重新计算流水线,看看哪里是时序瓶颈。这种重新计算流水线的方式代价还是比较大的,需要重新修改代码,所以在设计初期就应该考虑到这个问题,比如DSP的流水线寄存器,BRAM的输出寄存器这些在设计初期就考虑使用到它们,来获取更好的时序。

审核编辑:汤梓红

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

    关注

    1602

    文章

    21320

    浏览量

    593201
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117723
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130306
  • 时序收敛
    +关注

    关注

    0

    文章

    14

    浏览量

    7570
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83467

原文标题:记录一次时序收敛的过程

文章出处:【微信号:FPGA开源工坊,微信公众号:FPGA开源工坊】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    进行RTL代码设计需要考虑时序收敛的问题

    更快,而一个坏的代码风格则给后续时序收敛造成很大负担。你可能要花费很长时间去优化时序,保证时序收敛。拆解你的代码,添加寄存器,修改走线,最后
    的头像 发表于 11-20 15:51 3437次阅读
    进行RTL代码设计需要考虑<b class='flag-5'>时序</b><b class='flag-5'>收敛</b>的问题

    UltraFast设计方法时序收敛快捷参考指南

    《UltraFast 设计方法时序收敛快捷参考指南》提供了以下分步骤流程, 用于根据《UltraFast设计方法指南》( UG949 )中的建议快速完成时序收敛: 1初始设计检查:在实
    的头像 发表于 11-05 15:10 4662次阅读
    UltraFast设计方法<b class='flag-5'>时序</b><b class='flag-5'>收敛</b>快捷参考指南

    FPGA时序收敛学习报告

    经过两天的恶补,特别是学习了《第五章_FPGA时 序收敛》及其相关的视频后,我基本上明白了时序分析的概念和用法。之后的几天,我会根据些官方的文件对时序分析进行更系统、深入的学习。先
    发表于 09-23 10:26

    FPGA时序约束的几种方法

    +时序例外约束+I/O约束+Post-fit Netlist 引入Post-fit Netlist的过程是从一次成功的时序收敛结果开始,把特
    发表于 06-02 15:54

    FPGA时序约束的几种方法

    过程是从一次成功的时序收敛结果开始,把特定的组逻辑(Design Partition)在FPGA上实现的布局位置和布线结果(Netlis
    发表于 12-27 09:15

    请问如何收敛高速ADC时序

    如何收敛高速ADC时序?有哪种办法可以最大化ADC的建立和保持时间?
    发表于 04-14 06:06

    有哪些方法可以解决时序收敛的问题?

    什么是时序收敛?如何去解决物理设计中时序收敛的问题?
    发表于 04-26 06:38

    请问如何在开始码代码的时候就考虑时序收敛的问题?

    如何在开始码代码的时候就考虑时序收敛的问题?
    发表于 06-18 06:29

    记录一次STM32H743 CANFD调试过程中的一次BUG

    记录一次STM32H743 CANFD调试过程中的一次BUG
    发表于 08-13 06:30

    记录一次Si5394时钟芯片的配置

    Si539x芯片配置步骤第一次写博客(学习笔记),同时记录一次Si5394时钟芯片的配置,写这个教程的原因也是因为自己在网上搜资料的时候,用的人少之又少,让后面用到的人少走些弯路吧。前3点为芯片
    发表于 12-08 07:54

    fpga时序收敛

    fpga时序收敛
    发表于 03-01 13:13 23次下载

    基于MCMM技术IC时序收敛的快速实现

    如今的集成电路(Integrated Circuit,IC)设计往往要求芯片包含多个工作模式,并且在不同工艺角(corner)下能正常工作。工艺角和工作模式的增加,无疑使时序收敛面临极大挑战。本文
    发表于 10-20 15:21 3次下载
    基于MCMM技术IC<b class='flag-5'>时序</b><b class='flag-5'>收敛</b>的快速实现

    FPGA时序收敛让你的产品达到最佳性能!

    FPGA时序收敛让你的产品达到最佳性能!
    发表于 04-10 11:38 18次下载
    FPGA<b class='flag-5'>时序</b><b class='flag-5'>收敛</b>让你的产品达到最佳性能!

    从已布线设计中提取模块用于评估时序收敛就绪状态

    本文旨在提供一种方法,以帮助设计师判断给定模块是否能够在空裸片上达成时序收敛。 如果目标模块无法在空裸片上达成非关联 (OOC) 时序收敛,则恐难以与设计其余部分达成关联性
    发表于 08-02 11:37 350次阅读
    从已布线设计中提取模块用于评估<b class='flag-5'>时序</b><b class='flag-5'>收敛</b>就绪状态

    唠一唠解决FPGA约束中时序收敛的问题

    FPGA时序收敛,会出现很多随机性问题,上板测试大概率各种跑飞,而且不好调试定位原因,所以在上板测试前,先优化时序,再上板。
    发表于 06-26 15:41 1325次阅读
    唠一唠解决FPGA约束中<b class='flag-5'>时序</b>不<b class='flag-5'>收敛</b>的问题