微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 自动插入寄存器

自动插入寄存器

时间:10-02 整理:3721RD 点击:
有没有综合时,根据设定频率,保持逻辑功能等价前提下,对关键路径自动插入寄存器的工具或方法?包括fpga或asic的

应该没有,否则怎么保证功能正确?

工具插入寄存器,功能就不等价了,你说的是矛盾的

比如本身逻辑可以跑50MHz,功能正确,现在要提升到500Mhz,可能有许多地方时序不满足,难道要根据综合报告手动改代码吗? 而且如果不是同一个人设计的,容易把功能改错了,这该怎么办呢?

看看这个有没有帮助:"http://www.ednchina.com/ART_55173_18_20010_OA_51b07f08.HTM"

PIPELINING, RETIMING, REGISTER BALANCING是同一项技术的不同说法。可以手工操作,也可以交给EDA工具自动执行。
  在复杂的组合逻辑路径当中添加一级寄存器,通过增加一级流水线级别来割断关键路径,这是解决时序收敛问题和提高电路时序性能最常用的方法。在hustzq博友的LPM函数的LPM_PIPELINE参数研究一文中,针对这一问题有详尽的论述。在fpgasdr博友的cordic verilog 程序及仿真结果 8级流水线和cqcrr博友的pipiline加法器两篇文章中,还给出了具体的代码。这一方法是在RTL级别进行流水线负载均衡操作,是通过修改HDL代码半自动或完全手工实现的。
  在Quartus II的Synthesis Netlist Optimizations设置选项中,可以使能Perform gate-level register retiming;在Quartus II的Physical Synthesis Optimizations设置选项中,还可以使能Perform register duplication和Perform register retiming来进一步优化关键路径上组合逻辑路径的长度。这一方法是在gate级别进行流水线负载均衡操作,是通过Fitter的时序驱动布局算法自动实现的。
  在上述的两种方法中,手工设计多级流水线是应该优先考虑的。但是在实际操作中,往往有这样几种情况,导致手工优化变得很难操作。
  1. 没有从电路性能角度出发进行逻辑设计,导致忽略进行组合逻辑路径分割。
  2. 包含有优先级的组合逻辑,很难进行逻辑路径的分割。
  3. 包含复杂算法的组合逻辑,逻辑路径分割后,不能做到流水线各级负载均衡。
  4. 代码设计者并不了解器件底层结构,或者出于代码可移植性的考虑,不能顾及底层结构,而不能手工进行有效的逻辑路径分割。
  在这样的情况下,就需要依靠Fitter的自动化寄存器复制和调整功能,来实现流水线各级的负载均衡。
  所以,在实际操作中,需要结合手工插入寄存器与自动化的寄存器调整功能:手工添加充足的寄存器供Fitter进行流水线负载均衡。寄存器并不一定需要精确插入到组合逻辑路径的内部,只需要在组合逻辑路径的两端添加冗余寄存器,然后交给Fitter根据器件的底层结构进行精确的计算和权衡。一级冗余寄存器不够,就再增加一级。

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

网站地图

Top