图解用registerbalancing方法解决时序收敛问题一例_第1页
图解用registerbalancing方法解决时序收敛问题一例_第2页
图解用registerbalancing方法解决时序收敛问题一例_第3页
图解用registerbalancing方法解决时序收敛问题一例_第4页
图解用registerbalancing方法解决时序收敛问题一例_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、PIPELINING, RETIMING, REGISTER BALANCING 是同一项技术的不同说法。可以手工操作,也可以交给 EDA工具自动执行。ripleriple在复杂的组合逻辑路径当中添加一级寄存器,通过增加一级流水线级别来割断关 键路径,这是解决时序收敛问题和提高电路时序性能最常用的方法。在hustzq博友的LPM函数的LPM_PIPELINE参数研究一文中,针对这一问题有详尽的 论述。在fpgasdr博友的cordic verilog程序及仿真结果 8级流水线和cqcrr博 友的pipiline加法器两篇文章中,还给出了具体的代码。这一方法是在RTL级别 进行流水线负载均衡操作

2、,是通过修改HDL代码半自动或完全手工实现的。riple在 Quartus II 的 Synthesis Netlist Optimizations 设置选项中,可以使能 Perfor m gate-level register retiming ; 在 Quartus II 的 Physical Synthesis Optimiz ati ons 设置选项中,还可以使能 Perform register duplicati on 和 Perform regist er retiming来进一步优化关键路径上组合逻辑路径的长度。这一方法是在gate级别进行流水线负载均衡操作,是通过Fitter

3、的时序驱动布局算法自动实现的。r iple在上述的两种方法中,手工设计多级流水线是应该优先考虑的。但是在实际操作中,往往有这样几种情况,导致手工优化变得很难操作。riple1. 没有从电路性能角度出发进行逻辑设计,导致忽略进行组合逻辑路径分割。2. 包含有优先级的组合逻辑,很难进行逻辑路径的分割。3. 包含复杂算法的组合逻辑,逻辑路径分割后,不能做到流水线各级负载均衡。4. 代码设计者并不了解器件底层结构,或者出于代码可移植性的考虑,不能顾 及底层结构,而不能手工进行有效的逻辑路径分割。在这样的情况下,就需要依靠Fitter的自动化寄存器复制和调整功能,来实现流 水线各级的负载均衡。riple

4、所以,在实际操作中,需要结合手工插入寄存器与自动化的寄存器调整功能:手工添加充足的寄存器供Fitter进行流水线负载均衡。寄存器并不一定需要精确插 入到组合逻辑路径的内部,只需要在组合逻辑路径的两端添加冗余寄存器,然后交给Fitter根据器件的底层结构进行精确的计算和权衡。一级冗余寄存器不够,就再增加一级。ripleriple在最近的一次分析和解决时序收敛问题的过程中,我就遇到了一个有趣的问题。 原有设计中手工添加了一个寄存器用以分隔DPRAM与后级模块内部的加法器。没有经过Fitter优化前,该组合逻辑路径过长;经过 Fitter优化后,关键路径仍 然存在于该寄存器附近。经过分析,由于该组合

5、逻辑比较复杂,仅一级寄存器并 不能提供给Fitter足够的资源进行有效的路径分割,通过手工添加了多一级的寄 存器,该问题得到解决。riple下面,就结合 Post-Mappi ng Tech no logy Map Viewer (布局前)和 Post-Fitti ng Tech no logy Map Viewer (布局后)对该问题及其解决过程进行图解:riple图1外部视图布局前,两个模块之间由一级寄存器unit_reg_str1O分隔riple外部视图布局后,寄存器unit_reg_str10被复制并移动到该模块内部,ram_block1a16 直接驱动该模块端口。riple图3内部视

6、图布局前,被驱动模块内部的两条组合逻辑路径:1. 从寄存器 unit_reg_str10到寄存器 unit_cycle_carryout (加法器逻辑);2. 从寄存器 unit_reg_str10到寄存器 unit_cycle_carryout (比较器逻辑)。 两条路径分享共同的起点和终点。riple 布局后,被驱动模块内部的三条组合逻辑路径:图4内部视图1. 从 ram_block1a16 的 read_en 输入寄存器到寄存器 Add1477_NEW_REG1210 (加法器逻辑);2. 从寄存器 Add1477_NEW_REG1210 到寄存器 unit_cycle_carryout

7、_NEW_REG1116 (简单组合逻辑);3. 从寄存器 unit_reg_str10到寄存器 unit_cycle_carryout_NEW_REG1120(比较器逻辑)。寄存器unit_reg_str10被复制为Add1477_NEW_REG1210 并移动到加法器 之后。寄存器 unit_cycle_carryout 被复制为 unit_cycle_carryout_NEW_REG1116 和 u nit_cycle_carryout_NEW_REG1120 。由于加法器被移动到了等价于寄存器unit_reg_str10的寄存器Add1477_NEW_REG1210之前,ram_blo

8、ck1a16 与adder的组合逻辑成为最长的组合逻辑 路径,该路径造成时序违规。ram_block1a16可以被认为是一个复杂的组合逻辑, 该逻辑引入延时1.728ns。adder逻辑虽然有近20级,但是引入的延时只有3. 2ns。riple图5外部视图布局前,添加一级寄存器unit_reg_str_d110,增加一级流水线级别图6外部视图布局后,新添加的寄存器unit_reg_str_d110被复制和移动到后级模块内部。riple图7内部视图布局前,所有的组合逻辑路径被限制在寄存器unit_reg_str_d110与寄存器unit_cycle_carryout 之间。riple图8内部视图

9、布局后,被驱动模块内部的三条组合逻辑路径:1. 从寄存器 unit_reg_str10到寄存器 Add1477_NEW_REG860 (加法器逻 辑);2. 从寄存器 Add1477_NEW_REG860 到寄存器 unit_cycle_carryout_NEW_REG2466 (简单组合逻辑);3. 从寄存器 unit_reg_str_d110到寄存器 unit_cycle_carryout_NEW_REG2464 (比较器逻辑)。寄存器 unit_reg_str_d110被复制为 Add1477_NEW_REG860寄存器 unit_cycle_carryout 被复制为 unit_cycle_carryout_NEW_REG2466 和 u nit_cycle_carryout_NEW_REG2464虽然加法器移动到了 unit_reg_str_d110之前,但是仍然在unit_reg_str10 寄存器之后,ram_block1a16与adder不再构成组合逻辑路径,最长的组合逻 辑路径被成功割断。riple从上面的图中可以看到,该组合逻辑的复杂之处在于:1. ram_block1a16的组合逻辑不能被进一步分割;2. Adder的组合逻辑虽然可以分割,但是由于同一个MLAB内部存在速度极快的进位链,多级加法器之间不用寄存器分割反而能够获得更快的电路。由于上面的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论