【芯片设计】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使其逻辑分散于这几拍中完成。

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

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

相关文章

UE5之5.4 第一人称示例代码阅读2 子弹发射逻辑

TP_WeaponComponent.h 看看头文件 暴露了attach weapon和fire给蓝图 这两个函数意义一看名字吧,就是捡起来枪的时候执行,一个就是发射子弹的时候执行 #pragma once#include "CoreMinimal.h" #include "Components/SkeletalMeshComponen…

Appium中的api(二)

目录 元素定位操作api 1--通过id定位api 2--通过class获取定位元素 3--通过xpath表达式定位元素 4.完整代码 解释 效果 元素定位操作api 1--通过id定位api 注:driver.find_element是获取单个元素 # 通过id获取 mySearchId "com.android.settings:id/search_acti…

如何对pdf文件进行加密?pdf文件加密全攻略与深度解析(5个方法)

如何对pdf文件进行加密? 只见,在深夜的情报局里,特工小李将一份绝密PDF文件放在保险箱内,以为这样就天衣无缝了。 细细推敲,漏洞百出: 如果钥匙被盗呢?如果被神匠破解出密码呢?如果…

Halcon基础-瓶盖带角度的OCR批量识别

Halcon基础-OCR识别 1、OCR识别素材2、创建路径文件3、Halcon代码实现4、运行效果5、资源获取 1、OCR识别素材 这里我准备了7张不同角度的OCR图片,如下所示: 2、创建路径文件 按照下图所示创建全部文件夹和文件: 01用来存放OCR识别原图 c…

Vue中使用el-upload实现文件上传时控制提交按钮状态的最佳实践

在Web应用开发中,文件上传是一个常见的需求。在使用Vue框架和Element UI库时,我们经常使用el-upload组件来处理文件上传。但是,如何在上传过程中控制提交按钮的可用状态,以避免在上传未完成时误触提交操作,是一个值得探…

解决:如何在opencv中得到与matlab立体标定一样的矫正图?(python版opencv)

目的:采用一样的标定参数,matlab中和opencv中的立体矫正图像是一样的吗?不一样的话怎么让它们一样? 结论:不一样。后文为解决方案。 原因:注意matlab的标定结果在matlab中的用法和在opencv中的用法不一样&a…

光伏电站折旧率的计算

折旧率的计算方法 直线法:直线法是最常用的折旧计算方法。它假设光伏设备在使用寿命内每年的折旧额保持不变。计算公式为: 折旧率(资产原值-净残值)预计使用寿命。 其中,资产原值是指光伏设备购置价值或建成投产时的价值;净残值…

chrome清除https状态

莫名其妙的http跳转到https的url了。 解决办法 浏览器地址栏输入:chrome://net-internals/#hsts 输入你需要删除的域名即可!!!

AMD平台,5600X+6650XT,虚拟机安装macOS 15 Sequoia 15.0.1 (2024.10)

macOS 15 Sequoia终于出正式版了,没有Mac,所以还是虚拟机玩玩,还是属于折腾,安装过程和之前差不多,这次我从外网获得了8核和16核openCore,分享一下。 提前发一下ISO镜像地址和openCore引导磁盘地址 ISO镜…

《人工智能往事》—— 简而言之,AI 已经包围了我们。AI 就是我们。

《人工智能往事》这本书我挺喜欢的(推荐给对计算机和AI史有考古兴趣的同学们)。我是几年前读的英文版《This Could Be Important: My Life and Times with the Artificial Intelligentsia Pamela McCorduck》很高兴发现国内推出了译本。 作者帕梅拉麦考…

一座数智工厂,看见汽车制造的诗与远方

今天的中国,已经是名副其实的汽车制造与出口大国。 根据国家统计局10月18日发布的数据,今年9月中国新能源汽车产量同比增长48.5%,增速为2023年5月以来新高。1月至9月汽车行业出口交货值同比增长17.1%。中国汽车产业的高速发展,离不…

学习docker第三弹------Docker镜像以及推送拉取镜像到阿里云公有仓库和私有仓库

docker目录 1 Docker镜像dockers镜像的进一步理解 2 Docker镜像commit操作实例案例内容是ubuntu安装vim 3 将本地镜像推送至阿里云4 将阿里云镜像下载到本地仓库5 后记 1 Docker镜像 镜像,是docker的三件套之一(镜像、容器、仓库)&#xff0…

uniapp微信小程序使用vant组件库

1. vant组件库(微信小程序版本)官网地址 地址: vant组件库(微信小程序版本) 2. uniapp微信小程序引入 <1>. 去到GitHub中将资源克隆到本地,地址: vant-weapp <2>. 到本地把文件拷贝到我们的uniapp微信小程序项目中 在项目的目录下新建一个文件wxcomponents&#…

iOS 18.2开发者预览版 Beta 1版本发布,欧盟允许卸载应用商店

苹果今天为开发人员推送了iOS 18.2开发者预览版 Beta 1版本 更新&#xff08;内部版本号&#xff1a;22C5109p&#xff09;&#xff0c;本次更新距离上次发布 Beta / RC 间隔 2 天。该版本仅适用于支持Apple Intelligence的设备&#xff0c;包括iPhone 15 Pro系列和iPhone 16系…

Spring Web MVC 入门

1. 什么是 Spring Web MVC Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架&#xff0c;从从⼀开始就包含在Spring框架中。它的 正式名称“SpringWebMVC”来⾃其源模块的名称(Spring-webmvc)&#xff0c;但它通常被称为"Spring MVC". 什么是Servlet呢? Ser…

开拓鸿蒙测试新境界,龙测科技引领自动化测试未来

在当今科技舞台上&#xff0c;鸿蒙 OS 以非凡先进性强势登场&#xff0c;打破传统操作系统格局&#xff0c;为软件测试领域带来全新机遇与艰巨挑战。 一、鸿蒙 OS 的辉煌崛起 &#xff08;一&#xff09;壮丽发展历程与卓越市场地位 鸿蒙 OS 的发展如波澜壮阔的史诗。2023 年…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十二)拓展图优化库g2o(一)框架

【转载】理解图优化&#xff0c;一步步带你看懂g2o框架 文章来源&#xff1a;理解图优化&#xff0c;一步步带你看懂g2o框架 小白&#xff1a;师兄师兄&#xff0c;最近我在看SLAM的优化算法&#xff0c;有种方法叫“图优化”&#xff0c;以前学习算法的时候还有一个优化方法…

Python量化交易(二):金融市场的基础概念

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月学习赛的Python量化交易学习总结文档&#xff1b;在现代社会中&#xff0c;投资已成为个人、机构和政府追求财富增长和资源配置的重要方式。…

sql-labs靶场第二十一关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、寻找注入点 2、注入数据库 ①寻找注入方法 ②爆库&#xff0c;查看数据库名称 ③爆表&#xff0c;查看security库的所有表 ④爆列&#xff0c;查看users表的所有列 ⑤成功获取用户名…

软件设计师:软件工程

文章目录 一、开发模型&#xff08;1&#xff09;瀑布模型&#xff08;需求明确&#xff09;&#xff08;2&#xff09;增量模型&#xff08;快速构建&#xff09;&#xff08;3&#xff09;演化模型&#xff08;迭代模型&#xff09;&#xff08;3.1&#xff09;原型模型&…