微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 问题:如何有效减小某个模块的wire delay以提高主频。

问题:如何有效减小某个模块的wire delay以提高主频。

时间:10-02 整理:3721RD 点击:


情况:使用Quartus综合此project。单独综合A模块的主时钟可以跑到35M,但A+B放在一块综合时,A的主时钟只能跑到20M左右,根据compilation report发现,A模块内的延迟wire dealy占据的比例比cell delay大50%左右。感觉布局布线的时候由于加入模块B后对A的布线也产生了影响。
问题:在QuartusII下,如何在保证功能不变的情况下,提高A模块的主时钟的频率。

我觉得是你的B模块中的延迟过大,导致整个A+B的频率上不去,换句话说就时关键路径由原来由A决定变为由B觉得,你可以把设计修改下,将B模块中添加一些提高B模块的流水,在A和B的接口处也施加一些流水寄存器,虽然会增加资源的消耗,但是可以在一定程度上提高速度,另外你也可以通过在综合时写约束来实现你的设计要求,

但问题是寄存器到寄存器之间的cell delay延迟很小啊,加流水线寄存器是不能解决问题的。
关键就在于怎么减小wire delay,这个项目里critical path的延迟大部分是由于连线延迟产生的。

FPGA设计关键路径中路径延迟占主要很正常,这是由FPGA的结构决定的,减少FPGA连线延迟的方法没有像减少单元延迟的方法那么“成熟”,一般设计做了一些小的改动都可能会改变FPGA的布线,我想到的一些解决方法:
(1)使用物理综合的方法,物理综合在综合时候考虑了布线延迟,综合出来的时序结果比较好,但一般要消耗更多的资源;可以使用Symplfy物理综合工具或者在Quartus中开启物理综合的选项。
(2)规划模块的布局,在Altera FPGA中可以使用LogicLock功能。
(3)使用常规的解决单元延迟的办法。
可能第一种办法是最好的。

其实对于FPGA而言,最大的延迟不是逻辑资源内部的延迟,而是逻辑资源之间互联所造成的延迟,FPGA之所以可以实现可重复编程就是因为其内部有大量的可以重复编程重复配置,根据需要进行选择的互联资源,所以在使用FPGA设计时使用不同的综合约束条件或者是算法,都会导致你所设计的电路的互联延时是不同的,在目前我接触的这款XILINX的FPGA设计中,整个芯片能够提供最小互联延迟的路径是全局时钟网络,所以你可以根据你的设计要求在ISE中手工进行布线,选择使用全局时钟网络作为你关键信号的传输路径,看能否对你的设计有一定的帮助,当然我指的是XILINX的FPGA,如果你使用的是ALTERA,你也可以使用楼上那个猪同学的建议,嘿嘿!因为ALTERA的片子我没有用过,他用的多些!
另外,你也可以自己去网上找些FPGA的内部结构介绍来看下就会发现,FPGA内部由于存在多条可选择的传输路径,但是总还是有一条最符合你要求的,虽然这条可能不是延迟最短的,但是有时最短反而可能不是系统最需要的,但是软件在作综合的时候如果不使用约束条件的话是不会完全按照你的设计意图去进行综合的,毕竟每个FPGA厂商都有自己特殊的布线算法,所以多看些关于你所使用的FPGA的内部结构方面的资料,对于更好更充分的利用FPGA的逻辑与互联资源是很有帮助的。

ding
3xs

To improve the performance of your FPGA, you have to take the path-delay into account.
My suggestion is as below.
1: Change your synthesize software, as KARNIZHU says, use synplify premier.
2: Insert registers for all ports of A & B modules.
3: Add constraints for clock and critical path, refer to synplify help-doc for constraint-performance curve.
4: If you implement arithmetic operation with codes, replace it with IPcores or add multicyle and falsepath constraints.
5: If possile, do not utilize LogicLock and manually place clock-routing. For beginner, it is so puzzling.
I wish it is helpful for you.

是不是A模块对B模块的输出需要很大的驱动能力啊。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top