vivado中移位寄存器的优化(二)

2024-04-08 10:44
文章标签 优化 移位 寄存器 vivado

本文主要是介绍vivado中移位寄存器的优化(二),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

移位寄存器优化用于改善移位寄存器单元(SRLs)与其他逻辑单元之间的负裕量路径的时序。如果存在对移位寄存器单元(SRL16E或SRLC32E)的时序违规,优化会从SRL寄存器链的开始或结束位置提取一个寄存器,并将其放置在逻辑结构中,以改善时序。这种优化缩短了原始关键路径的布线长度。
 下图1是由一个LUT构成的最高支持32位移位的移位寄存器SRLC32E结构。图1 32bit移位寄存器配置
 SRLC32E的引脚说明

  • CLK:时钟
  • CE:时钟使能,高电平有效
  • SHIFTIN(D):数据输入
  • A[4:0]:移位长度配置(支持1~32位),需要+1。如9位移位则A[4:0]需配置成1+8(01000)
  • SHIFTOUT:32个长度移位后的数据输出,可用来与其他SRLC32E级联,形成更大长度的移位寄存器
  • OUTPUT(Q):当移位长度被确定后,数据就会出现在Q端

一、移位寄存器优化的条件

移位寄存器的优化仅仅是将寄存器从移位寄存器移动到逻辑结构中,但永远不会将寄存器从逻辑结构移动到移位寄存器,因为后者不会改善时序。
要使此优化发生,必须满足以下条件:
• SRL地址(移位长度)必须为1或更大,以便有寄存器级可以从SRL中移出。
• SRL地址必须是一个常数值,由逻辑1或逻辑0驱动。
• 必须存在从SRL单元开始或结束的时序违规,该SRL单元位于最坏的关键路径中。
某些电路拓扑结构不会被优化:
• 通过链接在一起的SRLC32E形成的更大移位寄存器不会被优化。
• 使用Q31输出引脚的SRLC32E。
• 结合成一个LUT的SRL16E,并且同时使用了O5和O6输出引脚。

二、FDRE单元

从SRLs(Shift Register Lookup Tables)移至逻辑结构中的寄存器通常是FDRE(Flip-Flop D-type with Reset Enable)单元。在移动这些寄存器的同时,FDRE和SRL的INIT属性,以及SRL的地址都会相应地进行调整。
具体来说,当SRL中的寄存器级被提取并放置到逻辑结构中作为独立的FDRE单元时,FDRE的初始状态需要与原来SRL中对应寄存器级的初始状态保持一致。因此,FDRE的INIT属性会根据SRL的原始INIT属性进行设置,以确保数据的一致性和正确性。
同时,由于寄存器级的移除,SRL本身的长度发生了变化,因此SRL的地址也需要进行调整。这是为了确保剩余的寄存器级能够正确地对齐,并且任何依赖于SRL地址的逻辑操作都能够按照预期进行。
这些调整都是自动进行的,通常由FPGA开发工具(如Xilinx的Vivado)在优化过程中完成。工具会分析设计的时序性能,识别出可以进行优化的SRLs,并自动执行寄存器提取、FDRE放置和属性调整等操作,以改善设计的时序性能。
总的来说,从SRLs到逻辑结构的寄存器移动是FPGA优化中的一个关键步骤,它有助于减少信号传输的延迟、优化关键路径的性能,并最终提高整个系统的时序性能。

三、移位寄存器优化步骤

图2是一个从移位寄存器(SRL16E)srl_inst开始的关键路径示例。
图2 从移位寄存器(SRL16E)srl_inst开始的关键路径
当一条关键路径从移位寄存器(SRL16E)srl_inst开始,到逻辑单元logic_cell_out结束,并且存在时序违规时,会触发移位寄存器优化来改善这条路径的时序。假设SRL地址是一个常数值3,优化过程所采取的步骤如下:
1、识别关键路径和时序违规
Vivado工具首先会分析设计,并确定从srl_inst到logic_cell_out的路径为关键路径,且存在时序违规。
2、检查SRL地址和输出
优化器检查srl_inst的SRL地址,确认它是一个常数值3。
3、提取寄存器
根据SRL地址和时序违规的情况,优化器决定从srl_inst的开头或结尾提取一个寄存器。由于地址是3,说明至少有三个寄存器级在SRL内部。优化器会选择提取一个或多个寄存器级,以最短化关键路径的布线长度。
4、将寄存器放置到逻辑结构中
提取出来的寄存器(可能是FDRE单元)会被放置到逻辑结构中,通常是在srl_inst和logic_cell_out之间的某个位置,以改善时序性能。优化器会选择合适的插入点,使得寄存器的加入能够最大程度地减少关键路径上的延迟。
5、调整INIT属性和SRL地址
由于寄存器的移动,可能需要调整SRL的INIT属性,以确保在寄存器被移除后,SRL的初始状态仍然正确。同时,如果优化器移动了多个寄存器阶段,可能还需要调整SRL的地址值,以反映剩余的寄存器阶段数量。
6、重新评估时序
完成上述优化步骤后,Vivado会重新评估设计的时序,以确保时序违规已经被解决或至少得到了显著改善。
请注意,实际的优化步骤和结果可能会根据具体的FPGA架构、设计约束和时序要求而有所不同。因此,在进行此类优化时,建议仔细评估其对整体设计的影响,并确保最终设计满足所有的性能、时序和资源要求。
经过移位寄存器优化后的关键路径示例,如图3所示。
图3移位寄存器优化后的关键路径

四、移位寄存器优化的优点

在进行了移位寄存器优化后,srl_inst SRL16E的地址被递减,以反映内部寄存器阶段减少了一个。原来的关键路径现在变得更短了,因为srlopt寄存器被放置得更靠近下游的单元,并且FDRE单元具有相对更快的时钟到输出延迟。
这个优化过程中,由于将SRL16E的最后一个寄存器级移出并作为一个独立的FDRE单元放置在逻辑结构中,SRL16E的内部寄存器级数量减少了一个。因此,SRL16E的地址需要相应地递减,以确保后续的读取或写入操作能够正确地定位到剩余寄存器级中的数据。
优化后的设计将FDRE单元放置在更靠近logic_cell_out的位置,从而减少了信号从SRL16E到逻辑输出单元所需经过的物理路径长度。这有助于减少信号传输的延迟,进而改善时序性能。
此外,FDRE单元通常具有比SRL16E内部寄存器阶段更快的时钟到输出延迟。这意味着当信号到达FDRE单元时,它能够更快地将其传递给下游的逻辑单元。这也是优化能够改善时序的一个重要因素。
综上所述,通过递减SRL16E的地址、将寄存器阶段移动到逻辑结构中,并利用FDRE单元较快的时钟到输出延迟,成功地缩短了关键路径的长度,从而改善了设计的时序性能。

这篇关于vivado中移位寄存器的优化(二)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885362

相关文章

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

[vivado][IP核]FFT

刘东华的IP核详解: 1、 2、

[vivado][IP核]DDS

刘东华的IP核详解: 1、 这里的是指IP核配置中的相位数据的宽度。 2、 实际使用此IP核时并没有“频率分辨率”可以配,是靠改变来变的。 3、 4、 5、 数据输出的ready在数据正式输出时才会有。 自己仿真: 使用SIN/COS LUT only的模式,使用一个累加器作为相位输入,不知怎么,输出为X。

[vivado]translate_off\on

答疑帖: 1)https://forums.xilinx.com/t5/Synthesis/Question-about-synthesis-translate-on-and-translate-off/td-p/658790

[vivado]例子中的glbl文件

答疑帖:https://www.xilinx.com/support/answers/6537.html

[ip核][vivado]aurora

Xapp1193:  discovered:1)并不是所有芯片都支持aurora.xc7z010就没有。                     2)XDC文件的指令-允许未约束的引脚的存在:                 set_property BITSTREAM.General.UnconstrainedPins {Allow} [current_design] PG046

[ip核][vivado]Block Menory Gennerator 学习

<刘东华的xilinx系列FPGA芯片IP核详解>读书摘录: 1. 2. 3.

[ip核][vivado]FIFO 学习

<xlinx FPGA应用进阶 通用IP核详解和设计开发>读书摘录: 1.        2.3.仿真模型 特点总结:1)复位后会有busy状态,需要等待wr_rst_busy信号低电平后才能正常写入                  2)prog_full信号的高电平长度可调                  3)仿真中的读状态很奇怪,并没有正常读取,都是XXX的状态。 所用的te

【汇总】vivado_zynq学习资料

DMA:https://www.xilinx.com/support/answers/57550.html

服务器雪崩的应对策略之----SQL优化

SQL语句的优化是数据库性能优化的重要方面,特别是在处理大规模数据或高频访问时。作为一个C++程序员,理解SQL优化不仅有助于编写高效的数据库操作代码,还能增强对系统性能瓶颈的整体把握。以下是详细的SQL语句优化技巧和策略: SQL优化 1. 选择合适的数据类型2. 使用索引3. 优化查询4. 范式化和反范式化5. 查询重写6. 使用缓存7. 优化数据库设计8. 分析和监控9. 调整配置1、