南京观海微电子---如何减少时序报告中的逻辑延迟

1. 引言

在FPGA逻辑电路设计中,FPGA设计能达到的最高性能往往由以下因素决定:

▪ 工作时钟偏移和时钟不确定性;

▪ 逻辑延迟:在一个时钟周期内信号经过的逻辑量;

▪ 网络或路径延迟:Vivado布局布线后引入的延迟量。

Vivado软件完成布局布线后,我们可以打开时序分析报告,来查看时序没有过的路径是由哪些因素导致的时序违规。Vivado会通过列表形式展示每条时序违规路径的信息,如下图所示。

双击上面表中的其中一条路径,会展开关于该路径更详细的时序报告,如下图:

图片

上图这个时序违例的例子,可以看到,该路径逻辑延迟贡献了11.934%的延迟量、路径延迟贡献了88.066%延迟量。该路径逻辑级数为5,经过了2个CARRY4、1个LUT4和2个LUT6。

2. 降低逻辑延迟的方法

如果逻辑延迟大,我们需要查看该路径是不是只包含CLB器件,还是说该路径还经过了如DSP、RAMB、URAM、FIFO或GT等器件。

2.1 路径只包含CLB器件

常规布线路径是在寄存器(FD*)或移位寄存器(SRL*)之间的路径,它们经过一些 LUT、MUXF 和 CARRY 元件。通常会遇到以下几种情形导致逻辑延迟过大:

(1)较高逻辑层数(logic levels)的组合电路。用户在两个寄存器之间插入的组合逻辑过于复杂,级联了过多的LUT、CARRY等元件,导致逻辑延迟过高时序过不了。如下图中,两个寄存器之间有一个logic levels为5层的组合逻辑。

图片

建议的解决方案:在设计的早期阶段,通过TCL命令“report_qor_assessment”,早些识别出逻辑层数较高组合逻辑,通过代码优化手段来降低逻辑层次。或者,在综合的时候,将“-retiming”全局变量勾选上。

(2)路径上有很多小的级联LUT(LUT1-LUT4)。这些多个小的级联查找表是可以被合并成数量更少的LUT的。阻止这些级联LUT合并的原因可能如下:

  • 有些小的LUT表存在一些扇出(扇出为10,或者更高);

  • 用户使用了一些properties语法,比如:KEEP、KEEP_HIERARCHY、DON’T_TOUCH或MARK_DEBUG。

建议的解决方案:移除掉这些properties语法,重新编译综合工程。

(3)路径上有单个CARRY(非级联)限制了LUT的优化,导致vivado布局也不是最优。

建议的解决方案:在综合的时候,使用“FewerCarryChains”综合指令。或者对该CELL在opt_design阶段设置CARRY_REMAP属性。(具体使用方法可以查看UG904)

2.2 路径包含其他复杂器件(DSPRAM等)

如果时序路径上会经过宏原语元件(macro primitives)如DSP、RAM、URAM、FIFO或GT_CHANNEL等元件,布局布线的难度会加大,也会导致更高的布局布线延迟。降低这些路径的逻辑延迟方法如下:

(1)在进出宏原语元件电路周围,增加额外的流水结构。比如:

  • 原设计是用的一个大位宽RAM缓存数据,把这个大位宽RAM拆分成多个并行的小位宽RAM实现相同的功能。

  • 原设计乘法器为2级流水乘法器,把它改为2级以上的流水乘法器。

  • 数据进出宏原语元件时,都用寄存器打一拍等。

(2)在包含宏原语元件的路径上减少逻辑层数,这点对改善整个设计的性能提升很明显。

Tips: 在修改RTL之前,可以尝试把DSP、RAM、URAM的自带流水寄存器使能都打开,然后重新编译工程,看时序是否能有改善。比如将下面这条路径:

图片

设置如下属性:

set_property -dict {DOA_REG 1 DOB REG 1} [get_cells xx/ramb18_inst]

注意,由于使能这些寄存器后,逻辑时序会有变动,此时的RTL功能和你原先设计是有出入的,所以不用生成bitstream,这样操作的目的只是为了看时序能如何改善。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/249707.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多输入多输出 | Matlab实现PSO-LSTM粒子群优化长短期记忆神经网络多输入多输出预测

多输入多输出 | Matlab实现PSO-LSTM粒子群优化长短期记忆神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现PSO-LSTM粒子群优化长短期记忆神经网络多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现PSO-LSTM粒子群优化长短期记忆神经网络…

C++模板:非类型模板参数、特化以及分离编译

一、非类型模板参数 模板参数分类类型形参与非类型形参。 类型形参即:出现在模板参数列表中,跟在class或者typename之类的参数类型名称。 非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数当成…

Linux--Shell基础

学习笔记,记录以下课程中关于Linux的Shell基础知识。 黑马程序员linux入门到精通(下部分)_哔哩哔哩_bilibili 目录 1.编写规范 2.变量 2.1 变量的含义 2.2 变量的定义和使用 2.3 只读变量(了解) 2.4 接收用户输入…

Github 2024-02-02开源项目日报Top10

根据Github Trendings的统计,今日(2024-02-02统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6HTML项目2TypeScript项目2C#项目1JavaScript项目1 ChatGPT提示库 创建周期:424 天开…

用Python处理TDC激光测距数据并绘制为图片

用Python处理TDC激光测距数据并绘制为图片 说明一、定义全局变量变二、主函数入口三、处理原始文件数据四、将数据叠加统计生成图片五、额外的辅助函数六、将数据进行各种形式统计叠加七、原始数据形式八、 测试结果 说明 1. 主要是将TDC激光测距数据进行统计叠加并绘制为图片…

【数据结构(C语言)】树、二叉树详解

目录 文章目录 前言 一、树的概念及结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用 二、二叉树的概念及结构 2.1 二叉树的概念 2.2 二叉树的基本形态 ​编辑2.3 特殊的二叉树 2.4 二叉树的性质 2.5 二叉树的存储结构 三、二叉树的顺序结…

C语言实现12种排序算法

1.冒泡排序 思路:比较相邻的两个数字,如果前一个数字大,那么就交换两个数字,直到有序。 时间复杂度:O(n^2),稳定性:这是一种稳定的算法。 代码实现: void bubble_sort(int arr[],…

服务攻防-端口协议桌面应用QQWPS等RCEhydra口令猜解未授权检测

知识点: 1、端口协议-弱口令&未授权&攻击方式等 2、桌面应用-社交类&文档类&工具类等 章节点: 1、目标判断-端口扫描&组合判断&信息来源 2、安全问题-配置不当&CVE漏洞&弱口令爆破 3、复现对象-数据库&中间件&…

【Jenkins】配置及使用|参数化|邮件|源码|报表|乱码

目录 一、Jenkins 二、Jenkins环境搭建 1、下载所需的软件包 2、部署步骤 3、其他 三、Jenkins全局设置 (一)Manage Jenkins——Tools系统管理->全局工具配置分别配置JDK、Maven、Allure、Git,可以配置路径或者直接选择版本安装 1…

判断当前设备是不是安卓或者IOS?

代码(重要点): 当前文件要是 xxx.js文件,就需要写好代码后调用才会执行: // 判断是不是安卓 const isAndroid () > {return /android/.test(navigator.userAgent.toLowerCase()); }// 判断是不是ios const isIOS () > {return /iphone|ipad|ipod/.test(navigator.use…

JUC并发编程01——进程,线程(详解),并发和并行

目录 1.进程和线程的概念及对比1.进程概述 2.线程3.对比 2.并行与并发1.并发2.并行 3.线程详解3.1.创建和运行线程3.1.1.Thread3.1.2.Runnable结合Thread 创建线程3.1.3.Callable 3.2线程方法APIrun startsleep yieldjoininterrupt打断线程打断 park终止模式 daemon不推荐使用的…

Kotlin 协程:用源码来理解 ‘viewModelScope‘

Kotlin 协程:用源码来理解 ‘viewModelScope’ Kotlin 协程是 Kotlin 语言的一大特色,它让异步编程变得更简单。在 Android 开发中,我们经常需要在后台线程执行耗时操作,例如网络请求或数据库查询,然后在主线程更新 UI…

坚持刷题 | 完全二叉树的节点个数

Hello,大家好,我是阿月!坚持刷题,老年痴呆追不上我,今天刷:完全二叉树的节点个数 题目 222.完全二叉树的节点个数 代码实现 class TreeNode {int val;TreeNode left, right;public TreeNode(int val) …

Android进阶之路 - ViewPager2 比 ViewPager 强在哪?

我记得前年(2022)面试的时候有被问到 ViewPager 和 ViewPager2 有什么区别?当时因为之前工作一直在开发售货机相关的项目,使用的技术要求并不高,所以一直没去了解过 ViewPager2~ 去年的时候正好有相关的功能需求&#…

数学建模 - 线性规划入门:Gurobi + python

在工程管理、经济管理、科学研究、军事作战训练及日常生产生活等众多领域中,人们常常会遇到各种优化问题。例如,在生产经营中,我们总是希望制定最优的生产计划,充分利用已有的人力、物力资源,获得最大的经济效益&#…

pytorch_car_caring 排坑记录

pytorch_car_caring 排坑记录 任务踩坑回顾简单环境问题代码版本问题症状描述解决方法 cuda问题(异步问题)症状描述解决方法 任务 因为之前那个MPC代码跑出来的效果不理想,看了一天代码,大概看明白了,但要做改进还要有…

R-YOLO

Abstract 提出了一个框架,名为R-YOLO,不需要在恶劣天气下进行注释。考虑到正常天气图像和不利天气图像之间的分布差距,我们的框架由图像翻译网络(QTNet)和特征校准网络(FCNet)组成,…

【数睿】数睿常见问题处理

连接器请求地址修改 cat /home/sdata2/tomcat/bin/setenv.sh修改里面的 SYSTEM_URL 为数睿服务实际访问地址 如图所示 连接器执行 异常日志 2024-01-23 18:01:49,586 (conf-file-poller-0) [ERROR - org.apache.flume.node.PollingPropertiesFileConfigurationProvider$Fil…

全链路压测的关键点是什么?

全链路压测是一种重要的性能测试方法,用于评估应用程序或系统在真实生产环境下的性能表现。通过模拟真实用户行为和流量,全链路压测能够全面评估系统在不同负载下的稳定性和性能表现。本文将介绍全链路压测的关键点,以帮助企业更好地理解和应…

Redis核心技术与实战【学习笔记】 - 10.浅谈CPU架构对Redis性能的影响

概述 可能很多人都认为 Redis 和 CPU 的关系简单,Redis 的线程在 CPU 上运行,CPU 快 Reids 处理请求的速度也很快。 其实,这种认知是片面的,CPU 的多核架构及多 CPU 结构,也会影响到 Redis 的性能。如果不了解 CPU 对…