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

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

3天内不再提示

如何解决FPGA布局布线的拥塞问题呢?有哪些方法?

Hack电子 来源:Hack电子 2024-03-20 17:33 次阅读

解决布线拥塞问题

1.问题①的解决方法

14.2节提到的问题①,即设计中有很大的扇出,对于如何获知该扇出信号有多种途径。常见的途径是通过FPGAEditor(Xilinx)或者Fitter里Resource Section中的Control Signals 或者 Non Global Hign Fan-out Signal(Altera)查看扇出信号的大小排序。以Altera为例(下面的例子只是一个示范,并非说该例子是扇出过大导致布线问题),编译完成后,查看Fitter报告即可查看扇出,如图14-2所示。

51bbc498-e68c-11ee-a297-92fbcf53809c.png

可以看到,rst这个复位信号的扇出有33个,ena_dly有8个。该设计对应的RTL代码如下:

51cbe17a-e68c-11ee-a297-92fbcf53809c.png

51dc69f0-e68c-11ee-a297-92fbcf53809c.png

从代码中可以看到,控制信号enadly有效时才对输入信号inl和in2的寄存信号进行或操作,因此该控制信号直接控制着输出寄存器ut[7:0]的翻转,该控制信号的扇出量为8个寄存器。所以,通过对编译结果的查询可以知道扇出信号较大的为哪些,结合代码对其进行修改即可。注意,本段RTL代码只是举例说明如何查找和定位扇出信号,并不表明扇出信号为8就会导致时序问题。实际上非全局信号的扇出多少才是合理的要看具体的布线情况,且要视FPGA器件而定。在编写代码阶段要养成时刻警惕扇出过大的问题,一般而言,如果一个信号扇出到几百个寄存器或者逻辑单元,则

最好对该信号做逻辑复制。知道如何定位控制信号的扇出后,我们就要着手于如何修改。对于此类修改,一般有两种方法:第一种是让工具自己做扇出复制;第二种是设计者在代码中手动修改,让工具自己做扇出复制。以Altera为例,在settings中,单击Fitter Settings,然后单击More Settings,弹出如图 14-3的界面。

51e0016e-e68c-11ee-a297-92fbcf53809c.png

对图14-3 中 Auto Register Duplication 和 Logic Cell Insertion -Logic Duplication中的Auto全部改为On,则工具会对由扇出引起的布线时序问题做逻辑复制。而在手动做扇出寄存器/信号复制的情况下,则对该信号做复制。以上面的RTL为例子,假设要把enable信号的扇出控制到4,那么只须做如下调整:

51f22cfe-e68c-11ee-a297-92fbcf53809c.png

51f614ae-e68c-11ee-a297-92fbcf53809c.png

520a0d1a-e68c-11ee-a297-92fbcf53809c.png

可以看到,对ena_dly做了寄存器复制,多了一个ena_dly_dup,这样ena_dly的信号扇出就减少了一半,另外一半由ena_dly_dup代替。注意,声明该寄存器时有“/*synthesispreserve*/;"语句,这是为了告诉编译器不要对该信号做优化,因为在通常情况下,编译器会对多余或者等效的寄存器做优化,只保留一个。从图14-4可以看出,ena_dly的扇出减少了一半。

2.问题②的解决方法

关于第二个问题,即复位信号造成的布局布线问题,一般有如下解决方法:

521aa3dc-e68c-11ee-a297-92fbcf53809c.png

对于复位信号,如果是异步复位、同步释放,那么将会对removal路径做时序分析,该路径要求所有的复位信号在同一个节拍内撤离且满足removal的时序要求。对于这种情况,如果能够确定设计里所有的寄存器在复位不在同一个节拍内无效的情况下也能正常工作,那么可以对该路径做falsepath处理,即在时序约束里对复位信号到所有相关寄存器的路径做不分析处理。

另外一个方式是降低复位信号的扇出,没有必要对所有的寄存器都加上复位信号,作者推荐数据路径上的流水线寄存器可以不加复位信号,只对控制路径上的寄存器(如计数器、数据使能信号)等加上复位信号,从而大幅度降低复位信号的扇出。另外,在Xilinx器件中,不推荐对BIockRAMDSP48中的流水线寄存器等加入复位信号。

3.问题③解决方法

关于第三个问题的解决思路,一般来说设计者应该极力避免使用FPGA的BlockRAM IP来生成大容量的BlockRAM。比如说,用Block Memory Generator生成一个位宽为16,深度为1M的BIockRAM。因为在这种情况下,IP生成工具是把很多Block RAM单元(以AlteraCycloneIV为例,其BlockRAM基本单元为 M9K,即一个BlockRAM的存储容量为9kbit,其最大读写位宽和深度是确定的)拼接在一起形成-个大的BIocKRAM。这种情况下,IP生成工具生成的BlockRAM由于多片拼接在起,有可能造成各个BlockRAM基本单元间的距离过大,进而造成走线过长,从而产生拥塞和布线困难问题,如图14-5所示。

如图14-5所示,FPGA中每个BlockRAM单元(以M9K为例)在基底中都是列状分布,如果生成的BIocKRAM容量太大,那么将会使用一列甚至是两列M9K来拼接。而对于外部信号来说,就只有ADDR总线、DATA总线、WR信号等对其操作,这就要求ADDR、DATA、WR等信号的输出寄存器到各个M9K的时序路径都要满足而如果M9K过多,那么基本上这是不可能达到的,如此即会造成布线拥塞。

正确的解决方法是把一个大的BlockRAM手动拼接,假设要生成一个位宽为16bit、深度为1M的Block RAM,那么可以把其拆分成10个位宽为16bit、深度为100K的Block RAM,然后再由这些较小的BlockRAM来组成一个大的BIockRAM。读者可能会问,这跟上面的有何区别?区别就是设计者可以对ADDR、DATA、WR等信号进行逻辑复制,即一共有10个相同的ADDR,DATA,WR分别操作这10个BlockRAM,然后根据操

521e1f12-e68c-11ee-a297-92fbcf53809c.png

作结果进行选择输出,从而降低了ADDR、DATA、WR等信号到达各个M9K的扇出提高布线成功率,如图14-6所示。如图14-6所示,原来一个大的BIockRAM被拆分成了N个,每个都由一套等效的ADDR、DATA和WR进行控制,从而降低了ADDR、DATA和WR在操作大的BlockRAM时的扇出,增加了可布线和时序收敛性。另外,在各个BIockRAM的输出MUX里要多打几级pipeline,有助于时序收敛。同理,对于DSP硬CORE使用过多造成的布线时序问题,作者推荐对DSP硬CORE的输入输出进行多级pipeline。

4.问题④的解决方法

对于设计中的电路交叉线过多引起的布局布线问题的解决,有可能需要对电路/逻辑结构进行优化或者再设计。这跟PCB布局布线是一个道理,如果一个设计在PCB布线时发现,原理图设计者对IC之间引脚的连线比较随意,造成交叉线过多,比如说MCU的通用I/O跟外部芯片的连接,那么这时候可以选择调换MCU通用I/O引脚来降低连线之间的交叉,进而降低布局布线难度。比如说,一个逻辑设计的结构如图14-7所示。

这种结构的数据流很容易造成布线拥塞或者布线困难,因为输入数据流之间是交

52312184-e68c-11ee-a297-92fbcf53809c.png

叉的,而输出又有反馈环节。如果输入输出的位宽很大,那么将会导致布线困难的问题。对于此类问题,一般来说由于是逻辑电路架构/功能所导致,修改需要花费很大的力气。一般来说,在不修改整体架构的情况下,在数据的输入输出之间最好做多级流水线寄存器,目的并不是减少组合逻辑的层数,而是减少寄存器到寄存器之间的走线。图14-7的硬件结构存在大量交叉,因此很多内部互连需要绕很远,从而大大增加了走线延时。这样就只能增加寄存器的流水级数,降低寄存器到寄存器之间的走线延时。

5.问题⑤的解决方法

还有一种情况是FPGA引脚分配不合理导致数据流出现大量交叉进而导致时序收敛困难或者布线失败。在FPGA的基底里面,引脚的排布跟外面封装的引脚排布是不一样的,FPGA基底里面的引脚排布大部分位于芯片的左边、右边、上边和下边,如图14-8所示。

对于很多BGA封装的FPGA,尽管从其封装图上看,引脚分布在芯片内部,如图14-9所示,但是实际上在芯片内部,引脚的排布却是跟图14-8类似。因此,当引脚分配不合理时,在FPGA内部的数据流有可能造成交叉,或者输入输出混在一起,如图14-10所示。

5242d30c-e68c-11ee-a297-92fbcf53809c.png

如果引脚分配不合理,输入和输出的I/O在FPGA的基底引脚中的距离都放得很近的话,那么当数据很多且内部逻辑处理占用资源较多时,将会带来很大的布线问题因此可酌情对引脚进行调整,力争做到数据流是顺着的,如图14-11所示。

5259d14c-e68c-11ee-a297-92fbcf53809c.png

其实这一步应该在FPGA原理图设计阶段的FPGAPinLocation时就要考虑到宁可在前期的方案设计方面多花一点功夫,也不要匆匆上马,欠缺考虑,只有在前期做足准备,到后面才会事半功倍。

小 结

本章讲述了常见的导致FPGA布局布线失败的典型情况,并给出了解决问题的思路和例子。随着设计规模越来越大,FPGA时序收敛的问题日益凸现。因此,在遇到此类问题时要心中有数,最好在方案规划和编码阶段就对此有准备和考虑,降低此类问题发生的概率。




审核编辑:刘清

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

    关注

    1602

    文章

    21320

    浏览量

    593194
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117719
  • RTL
    RTL
    +关注

    关注

    1

    文章

    377

    浏览量

    59064
  • PCB布线
    +关注

    关注

    19

    文章

    460

    浏览量

    41652

原文标题:FPGA布局布线失败怎么办(三)

文章出处:【微信号:Hack电子,微信公众号:Hack电子】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PADS Layout布局布线什么技巧

    PADS Layout布局布线什么技巧什么心得分享下吧,没找到感觉啊。。。。
    发表于 12-31 11:20

    FPGA去耦电容如何布局布线

    `各位大神,请问FPGA去耦电容如何布局布线?1.根据文档,一般去耦电容的数量都少于电源引脚,那么去耦电容要放到哪些管脚旁边?2.以下三种方案哪种好?2.1电容放在PCB top层
    发表于 08-22 14:57

    如何判断PCB布局布线合理?谢谢

    如何判断PCB布局布线合理?谢谢
    发表于 11-21 22:39

    如何应对FPGA拥塞问题

    的逻辑电路之间应该相互紧邻。拥塞问题十分常见,赛灵思,英特尔和 Plunify 的应对方法又是什么?赛灵思FPGA 中特定的资源会提供某些机制,使
    发表于 06-26 15:19

    PADS2004高速PCB布局布线解决方案

    本文探讨PADS在PCB布局布线中如何解决高速问题。点击下载
    发表于 04-29 17:24

    高速ADC设计中的PCB布局布线技巧哪些?

    影响高速信号链设计性能的机制是什么?高速ADC设计中的PCB布局布线技巧哪些?
    发表于 04-21 06:29

    PCB布局布线的设计技巧哪些?

    PCB布局布线的设计技巧哪些?
    发表于 04-25 07:30

    PCB的布局布线介绍

    目录:一、简介二、布局的方式三、布局的检查四、PCB布线经验1、PCB布线经验一1)要有合理的走向2)选择好接地点3)合理布置电源滤波/退耦电容4)线条
    发表于 07-01 07:56

    布局布线技术的发展

    布局布线技术的发展 摘要:随着微孔和单片高密度集成系统等新硬件技术的应用,自由角度布线、自动布局和3D布局
    发表于 03-25 11:26 643次阅读

    FPGA设计的塑封式布局布线介绍

    在一个环境中实施从合成到塑封式布局布线以及比特流生成的全套 FPGA 设计。界面中内置了用于运行布局布线的常用选项,并在与合成结果相同的
    的头像 发表于 05-17 06:06 2629次阅读
    <b class='flag-5'>FPGA</b>设计的塑封式<b class='flag-5'>布局</b>和<b class='flag-5'>布线</b>介绍

    FPGA布局布线

    布局布线 PlaceRoute 1 布局 我们前面做的那些设计流程得到的LUT门级网表就好比一个购物清单,即LUT门级网表。网表里提供的仅仅是从逻辑关系上一些LUT结构的连接。我们需要将这些LUT
    的头像 发表于 10-25 10:25 7761次阅读
    <b class='flag-5'>FPGA</b>的<b class='flag-5'>布局</b><b class='flag-5'>布线</b>

    MCM布局布线的软件实现

    本设计按照图1所示的MCM布局布线设计流程,以检测器电路为例,详细阐述了利用信号完整性分析工具进行MCM布局布线设计的方法。首先对封装零件库
    的头像 发表于 11-20 16:37 2918次阅读

    FPGA布线为什么会拥塞呢?如何解决呢

    此类问题是FPGA设计实现中比较棘手的问题,Xilinx针对7系列及以后的UltraScale/UltraScale+等,提出了UltraFast设计方法论,用于指导该系列器件的成功设计和实现,完成复杂系统设计。
    发表于 08-25 11:56 1210次阅读

    fpga布局布线算法加速

    任务是将逻辑元件与连接线路进行合理的布局布线,以实现性能优化和电路连接的可靠性。然而,FPGA布局布线的过程通常是一项繁琐且耗时的任务,因
    的头像 发表于 12-20 09:55 277次阅读

    FPGA布局布线的可行性 FPGA布局布线失败怎么办

    随着电子技术的进步.FPGA逻辑电路能完成的功能越来越多,同样也带来了一个很大的问题,即逻辑电路的规模越来越大,这意味着RTL代码到FPGA的映射、布局布线所花费的时间也越来越长。
    的头像 发表于 03-18 10:57 325次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>布局</b><b class='flag-5'>布线</b>的可行性 <b class='flag-5'>FPGA</b><b class='flag-5'>布局</b><b class='flag-5'>布线</b>失败怎么办