【芯片设计】DC综合retiming策略的学习与实践

对于DC综合中的retiming策略早有耳闻,但是一直没有比较系统的学习和实验过,正好借着这次交付过程的归纳总结机会,把一些零零散散的收获学习记录下。

记得刚出新手村时和某位大佬聊到过,他说你逻辑里写了在某级计算一个结果,但是这个值不一定是在这一级产生的,可能是上一级产生也可能是下一级产生。当时懵懂无知我就光“啊对对对”,实际上心里想的是“是不是跟我扯呢,怎么我写在这一级出的结果还能流窜到其他级去呢,那整个逻辑链不就乱了么?”当时啥也不懂,所以也没有多问,后来想想应该说的就是综合过程的retiming策略。

综合的Retiming策略通过重新分配组合逻辑路径中的时序,达到优化电路性能的目的。具体来说,它可以在组合逻辑和时序逻辑路径中插入或删除缓冲器、反相器甚至触发器等元素,从而调整信号的传播时间,使关键路径的延迟满足设计要求。我们平时总谈起的这个DC里的retiming优化更多好像是指涉及到时序调整的操作,用一个简化的例子来说明下。假设我们现在有一个操作是D = A+B+C,在第一级时三个数相加,然后空打了一拍最后输出:

那么如果此时我们打开了retiming的开关,并且DC工具综合判断进行retime的效果会更好,那么最后综合的结果可能就变成这样了(只是单纯的举例):

工具会把一部分逻辑放到下一级去处理,这样就减轻了这一级的时序压力能够确保能够match violation。而具体什么时候会retime以何种策略retime,网上的资料有很多我也没有查太深。而后就想直观地看一看retime处理的效果和电路图(有时我确实有点执着于眼见为实了),所以在本地虚拟机里进行了一下实验。测试的代码和上图很像,只不过为了加深逻辑级数我多加了很多逻辑,输入为3个48bit data1/2/3数据输出为96bit res:

在DC中先关闭retime,以compile_ultra -incremental进行综合,之后在dc_shell中打开互连start_gui:

这版图看着是真舒服,逻辑层级清晰,谁看到不得说一句好代码♪(^∇^*)。放大具体看一下互连结构,可以清晰的看到datax_p1级的寄存器区域、p1到p2的逻辑区域、res_p2的寄存器区域和res_p3的寄存器区域:

而后具体看一下res_p2和res_p3的直接打拍区,可以发现res_p2的Q端直连到res_p3的D端,完全没有组合逻辑,这也符合不开retime的预期:

最后是report,时钟频率设的比较高最差路径-280p逻辑深度22级,自然时序是没有match的:

之后以以compile_ultra -incremental -retime进行综合,综合之后的网表就能看出来乱了很多:

放大之后还是可以大概看出来三级寄存器的分布,同时还生成一个中间模块(下图最长的那个箭头)。从这个图就能很明显的看出来,p3寄存器和p2寄存器不是直连,中间加入了逻辑,加入的逻辑集中在中间模块里:

对于这个生成的中间模块简单分析下,他内部很乱:

但是从接口和互连可以大概看出,p1到p2的一部分逻辑被放到了p1前的输入侧(即p0级),一部分被放到了p2到p3之间:

中间模块作用在p3的D端:

中间模块的输入一部分直接来自于输入datax:

最后看一下report:

没有retiming时是22级逻辑,分散到p0~p1~p2~p3三级之后最长路径变成了8级,太合理了三八二十二嘛。而后看一下时序单元数量由336增加到了883,说明确实有多出来的中间变量需要进行缓存。而组合逻辑数量是下降了的,总的面积(我这里没截)也下降了,这也比较正常面积增加减小或者大体不变都是有道理的。甚至时序单元也不一定就增加,比如部分逻辑前移了可能会省去一些寄存单元。

最后由这里延伸,最近学习到的另外一点经验就是,我们不是经常会在设计中调用DW ip吗,当DW的ip时序不满足时就可以在其后面插入寄存器(比如我们手动加2拍寄存器),然后通过set_optimize_registers命令来优化这个DW使其逻辑分散于这几拍中完成。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

etl-查询错误log日志和oracle删除数据表空间

查看weblogic日志的目录 建立连接ssh root192.168.30.1xx 密码hygd123 找到下面路径中的文件 cd /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bapp-logs 查看log日志 tail -f -n 400 Adminservers.log oracle删除表空间(切换到dba用户…

【SoC】被忽略的reset结构设计

1024这天爆出来的设计失误,真的很应景啦! 先献上A72的reset结构图吧,虽然最终的解决方案不是按照这个来的,不过也给了一个相对较清晰的reset架构了。 异步复位树 当对整个电路进行复位的时候,使用异步复位&#xff0c…

K8s-pod控制器HPA、DS、Job、CJ

一、Horizontal Pod Autoscaler(HPA) 在上一节,我们已经可以实现通过手工执行kubectl scale命令实现Pod扩容或缩容,但是这显然不符合Kubernetes的定位目标——自动化、智能化。 Kubernetes期望可以实现通过监测Pod的使用情况,实现pod数量的自…

如何通过 CRM 系统实现医药企业的一体化、数字化管理

医药企业面临着复杂的市场环境和严格的监管要求。传统管理方式下,销售、市场、客户服务等部门之间信息流通不畅,数据分散,导致工作效率低下,客户体验差。例如,销售团队可能不了解市场部门最新的推广活动,无…

大龄离异单身女性网上找陪伴搭子一起搭伙过生活的自救经历分享

在繁忙的都市生活中,李梅是一个独立自主的大龄离异女性。经历了婚姻的失败后,她更加珍惜自己的生活空间与时间,同时也渴望能够找到一个可以相互扶持、共度余生的伴侣。网络成为了她的新尝试领域,在这里,她希望能够遇到…

php语法学习

启动php 进入软件 打开文件:编写代码 $php true; $java false; var_dump($php);//输出变量细节 var_dump($java) 字符串 注意可以使用双引号也可以使用单引号 测试 $php "最好学web语言"; $java 脱胎于c语言; var_dump($php);//输出变量细节 var…

spark统一内存模型 详解

Apache Spark 是一个用于大规模数据处理的分布式计算框架,它支持多种处理模型(如批处理、流处理、SQL、机器学习等)。为了高效地在分布式环境中处理这些多样化的工作负载,Spark 在 2.x 版本后引入了统一内存管理模型,以…

配置适合Gurobi的机器硬件环境需要考虑的因素

在使用 Gurobi 进行优化计算时,合适的机器配置能够显著提升其求解性能,如何选择合适的硬件配置,主要从以下三个关键因素进行考虑: 1. CPU 主频和内存通道数 CPU 主频(Clock Rate) 是指处理器每秒钟能够执…

400行程序写一个实时操作系统(十三):调度器对象的创建与启动第一个任务

前言 调度器是整个RTOS的核心,在前面我们得到了调度器对象的框架图,并且简单介绍了调度器的原理。 在本节中,我们将会初始化调度器并且启动第一个任务。 本节内容需要一定的arm架构功底才能完全看懂,但是ARM架构只是RTOS这片大…

基于AI识别数据的Vue.js图像框选标注

在数字化时代,图像识别技术的应用越来越广泛,尤其是在车牌识别、人脸识别等领域。本文将介绍如何使用Vue.js框架和JavaScript创建一个交互式组件,该组件不仅允许用户在图片上绘制多个区域,加载文字,还提供了清空功能。…

leetcode-71-简化路径

题解: 1、以"/"作为分隔符对字符串进行分割得到数组names; 2、初始化一个栈stack(python中的栈使用列表实现); 3、遍历数组names;如果当前元素为".."且栈不为空,则将弹出栈顶元素&a…

不考虑光影、背景、装饰,你的可视化大屏摆脱不了平淡。

如果在可视化大屏的设计中不考虑光影、背景和装饰,确实难以摆脱平淡。光影效果可以为大屏增添立体感和层次感,吸引观众的注意力。 合适的背景能营造出特定的氛围,使数据展示更具情境感。而装饰元素则可以起到点缀和美化的作用,提…

无人机悬停精度算法!

一、主要算法类型 PID控制算法: PID控制算法是一种常用的闭环控制算法,通过计算目标值与当前值的误差,并根据比例(P)、积分(I)、微分(D)三个参数来调整控制输出&#x…

049_python基于Python的热门微博数据可视化分析

目录 系统展示 开发背景 代码实现 项目案例 获取源码 博主介绍:CodeMentor毕业设计领航者、全网关注者30W群落,InfoQ特邀专栏作家、技术博客领航者、InfoQ新星培育计划导师、Web开发领域杰出贡献者,博客领航之星、开发者头条/腾讯云/AW…

Metasploit渗透测试之探索漏洞利用

概述 到目前为止,我们已经学习了如何利用漏洞,但不知道它们是如何工作的。尽管所有漏洞利用模块都经过了彻底验证,但了解它们的构建方式总是有好处的。作为渗透测试人员,知道如何编写自己的模块,或者简单地向现有模块…

【性能优化】安卓性能优化之CPU优化

【性能优化】安卓性能优化之CPU优化 CPU优化及常用工具原理与文章参考常用ADB常用原理、监控手段原理监控手段多线程并发解决耗时UI相关 常见场景排查CPU占用过高常用系统/开源分析工具AndroidStudio ProfilerSystraceBtracePerfettoTraceView和 Profile ANR相关ANR原理及常见场…

Android 图片相识度比较(pHash)

概述 在 Android 中,要比对两张 Bitmap 图片的相似度,常见的方法有基于像素差异、直方图比较、或者使用一些更高级的算法如 SSIM(结构相似性)和感知哈希(pHash)。 1. 基于像素的差异比较 可以逐像素比较…

Java基础-注解机制详解

文章目录 注解基础Java内置注解内置注解- Override内置注解 - Deprecated内置注解 - SuppressWarnings 元注解元注解 - Target元注解 - Retention & RetentionTarget元注解 - Documented元注解 - Inherited 注解与反射接口自定义注解 深入理解注解Java8提供了哪些新的注解&…

【React系列三】—React学习历程的分享

一、组件实例核心—Refs 通过定义 ref 属性可以给标签添加标识 字符串形式的Refs 这种形式已经不再推荐使用&#xff0c;官方不建议使用 https://zh-hans.legacy.reactjs.org/docs/refs-and-the-dom.html#legacy-api-string-refs 回调形式的Refs <script type"te…

nginx精讲

&#x1f939;‍♀️潜意识起点&#xff1a;个人主页 &#x1f399;座右铭&#xff1a;得之坦然&#xff0c;失之淡然。 &#x1f48e;擅长领域&#xff1a;前端 是的&#xff0c;我需要您的&#xff1a; &#x1f9e1;点赞❤️关注&#x1f499;收藏&#x1f49b; 是我持…