Multi-bit的实现方法和应用 (下)

news2024/9/27 17:33:52

书接上回,Multi-bit的实现方法和应用 (上),闲言少叙,ICer GO!

image-20240203155601428

In-place MBFF实现

相较于仅基于逻辑连接的MBFF封装,如果考虑到布局的实际情况,那么就有physical aware的in-place的MBFF封装实现,这种思路可以应用在常见的DCT/DCG/genus_PLE 等综合流程。
和in-compilre相比,这种in-place的MBFF封装,最大的优势,就是physical aware。譬如如下示意图:

image-20240203160052620

可见,工具将距离较近的SBFF封装成了MBFF,简单而言,工具的在封装MBFF时候会更为谨慎(严苛),相应的MBFF的封装比率也自然会下降。

这里以DCT为例,它提供了一种in-place的MBFF实现方式:一种基于综合结果的MBFF封装方法。具体实现方法如下

set_multibit_options -mode none
compile_ultra -gate_clock -scan -spg
identify_register_banks
source MBFF_SCR
compile_ultra -gate_clock -scan -incremental -spg

和In-compile相比,这里需要注意两个地方

  • 在compile命令中,跳过MBFF封装步骤
  • 使用spg模式运行compile命令
  • 基于综合结果使用命令identify_register_banks,完成MBFF的in-place体交换。效果见下图:
    image-20240203160909456
    PS:封装后的MBFF的坐标,是在原始SBFF的中间位置
  • MBFF优化后,需要使用compile -incremental进行进一步增量优化,来平抑MBFF带来的QoR影响

这种in-place的MBFF替换有下列好处

  • 基于实际物理布局的情形进行MBFF有效替换:
    • 相较常规的MBFF有了物理布局影响的考量,可以有针对性地进行MBFF封装,这个对于最终的物理实现有很好的帮助
    • 传统的in-compilre的MBFF封装,先做封装,在做优化,这样很有可能导致优化受限
  • 可选择的基于WNS的封装方式,可以有效控制MBFF封装对WNS的影响

综上可以看出,如果是使用了in-place方式进行MBFF优化,那么这个布局的结果,一定是要传递给后端版图工具,所以需要SYN和APR联动起来,S家的流程如下:

# SYN flow:
dc_shell> set hdlin_infer_multibit never\|default_none
dc_shell> compile_ultra -gate_clock -scan -spg
dc_shell> identify_register_banks  
dc_shell> compile_ultra -gate_clock -scan -incremental -spg
dc_shell> write_file -format ddc -hierarchy top.ddc

#APR flow:
icc_shell> create_mw_lib ...
icc_shell> read_ddc
icc_shell> ......
icc_shell> place_opt_design -spg ......

可以看到。S家是通过SPG flow将此信息紧密联动的,所以说,如果用户使用了in-place的MBFF的流程,那么需要使用SPG流程完成这个信息的有效传递。相较传统的in-compile的MBFF流程,MBFF的对APR实现的挑战会变小。

APR阶段的MBFF封装

从上述的描述可以看到,综合里边可以有效地处理MBFF的封装实现。对应的,基于MBFF的封装原理,除过上述SPG的MBFF流程外,APR阶段也可以自己对MBFF进行封装,以实现PPA的优化。

市面上常见的APR工具是S家ICC/ICC2和C家的innovus,这两个工具都可以对MBFF进行封装,原理是类似的,具体描述见下:

  • ICC flow

基于对place 步骤的拆结,这里可以分为三个方法

  1. Flow1:SPG flow,参见上述综合的In-place MBFF封装方法
  2. Flow2:coarse placement MBFF flow
icc_shell> create_mw_lib ...
icc_shell> read_verilog
icc_shell> ......
icc_shell> set_banking_guidance_strategy \
			-input_map_file MBFF_map.file \
			-register_group_file MBFF_reg_grp.rpt \
			-output_file MBFF_assembly.tcl
icc_shell> create_placement ...... 
icc_shell> source ./MBFF_assembly.tcl
icc_shell> place_opt_design -skip_initial_placement ......

先配置MBFF的应用策略,再创建粗布局(coarse placement),工具这个时候会根据粗布局的结果,构建MBFF封装方式,这个和in-place的MBFF封装流程类似,然后用户将导出的文件MBFF_assembly.tcl读入,完成MBFF的封装动作。最后使用place_opt_desing进行增量式优化,完成MBFF的封装实现。上述的两个输入文件:MBFF_map.fileMBFF_reg_grp.rpt都是在DC工具通过命令write_multibit_guidance_files来导出,以便指导ICC的MBFF封装方方式。

  1. Flow3:place_opt MBFF flow
icc_shell> place_opt 
icc_shell> set_banking_guidance_strategy \
			-input_map_file MBFF_map.file \
			-output_file MBFF_assembly.tcl
icc_shell> create_banking_guidance
icc_shell> source MBFF_assembly.tcl
icc_shell> psynopt

基于SBFF的网表,完成正常的place_opt,然后基于物理布局结果,进行MBFF的封装实现,最后再做一次增量优化,即可完成MBFF的优化实现过程。如下图示例:

image-20240203162336857

  • INVS flow

相较于S家的多个流程的选择,C家的流程比较简单,这个也符合两家一贯的风格,S家细致贴心,C家直接高效。

C家除过对MBFF的封装(merge)以外,也会支持对MBFF打散(split),这些只需要在place阶段进行直接配置就好

invs_shell> setOptMode \
			-multiBitFlopOpt {true| false | mergeOnly | splitOnly} \
			-multiBitFlopOptIgnoreSDC {true | false}

其中:

multiBitFlopOpt==true:		timing_driven 下的MBFF封装和打散
multiBitFlopOpt==false:		禁止MBFF操作,数据库里边以有的MBFF不受影响
multiBitFlopOpt==mergeOnly:	timing_driven 下的做MBFF的封装操作
multiBitFlopOpt==splitOnly:	timing_driven 下的做MBFF的打散操作

任何阶段设置了setOptMode配置,任何阶段使用place_opt_design | optDesign等命令,都会根据这个设定进行相应的优化,这个选项也会被完整地保存在invs的数据库中。

在invs的任何优化后的数据库中,可以使用命令reportMultiBitFFs -statistics 对MBFF的替换结果进行统计报告:

在这里插入图片描述

这个评价系统和DC有一些相似之处,但是对于MBFF替换比率的表达,这里采用了Bit Per Flop:平均计算下,单个FF可以承担的FF bit数量。这个值越高,说明MBFF的替换比率就越高,反之亦然。

Invs还提供了一个pin map的报告文件,(PS:这个需要在invs的session里边导出),命令是:dumpMultiBitFlopMappingFile。这个可以生成

  • MBFF的封装(merge)和打散(splie)的动作细节;
  • 原先的SBFF(D/Q)和MBFF(D*/Q*)的pin mapping的对应关系

MBFF的命名

基于上述MBFF的实现方法和流程,MBFF的产生通常分为四种

  • DC的in-compile 封装MBFF
  • DC的in-place封装MBFF
  • ICC的in-place封装MBFF
  • Invs的in-place封装MBFF
  1. 手册给出的示范如下

在这里插入图片描述

但是经过测试,得到的是类似下列的封装方式:

在这里插入图片描述

这种命名方式可能会对formal的mapping有一定挑战,需要注意一下

  1. 第二种和第三种都是in-place的方式,也是使用工具导出的命令进行MBFF的封装,这样如果命名不是很友好,用户可以通过调整脚本进行命名维护,对用户后期的工作较为友好

在这里插入图片描述

​ 这个默认模式就是简单的将FF的名字使用”_”进行连接。

  1. 第四种是invs是在in-place步骤进行封装的,用户对命名不能干预,

在这里插入图片描述

​ Invs的方法比较友好,前边使用了CDN_MBIT作为MBFF的引示,中间每一个SBFF都用MB进行引示,这个命名规则比较好理解,formal也比较容易区分。常言道,简洁即简单,看来invs不让用户干预命名,还是对自己的处理很有自信的。

流程梳理和推荐

基于上述陈述,对于MBFF的优化方式已经有了比较全面的理解,这里提供一些具体的数据供各位参考:

  1. DCT采用in-place的MBFF封装流程:
stagewith_MBFFWO_MBFF
SYN_area10.95
SYN timingMeetMeet
  1. invs基于netlist,进行的MBFF封装流程
stagewith_MBFFWO_MBFF
invs_area10.975
timingMeetMeet
ShortCleanClean
  1. invs基于DCT in-place的netlist,进行的MBFF封装流程
stagewith_MBFFWO_MBFF
invs_area10.99
timingWNS; -0.4WNS: -0.3
ShortCleanClean

结合上述结果,和各个流程的特点,这里有一些建议和推荐

  • MBFF可以在三个步骤进行封装实现:RTL,SYN,APR
  • 综合阶段通常只作封装,不做打散,
  • APR阶段需要基于时序进行封装和打散,timing driven依赖
  • MBFF的封装对SBFF的布局有严重依赖:这点符合timing driven的目的

基于此,这里推荐两个flow供大家选择

  • SYN-APR MBFF flow
    • SYN 打开MBFF优化流程
    • APR需要加载SYN吐出的initial placement DEF或者ddc。
    • APR 使用skip_initial_placement 的place_opt命令,完成对MBFF的APR实现
  • APR MBFF flow
    • 基于SBFF的综合数据,在APR的place_opt阶段开始实现MBFF
    • 时序驱动模式下,工具可以自动实现后续步骤的MBFF的封装和打散操作

【敲黑板划重点】

在这里插入图片描述
MBFF的流程贯穿在整个设计实现,最终的服务对象还是APR和时序分析。通过理解其流程,可以很好的做出最适用于自身设计的方案选择,有效利用其优势,让MBFF助力设计实现,

参考资料

Synopsys Design Compiler® User Guide
Synopsys Multibit Register Synthesis and Physical Implementation Application Note
艾思考后端实现 芯片设计里的Multi-Bit FF探究
艾思考后端实现 Multi-bit的实现方法和应用 (上)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

导出pdf 加密、加水印、加页脚

1.依赖 <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId> <version>5.5.10</version> </dependency> <dependency> …

前端开发之deepmerge的使用和示例(对象的深度合并)

前端开发之deepmerge的使用和示例 前言使用场景链接效果图vue中简单案例1、安装插件2、示例结果前言 在平时的项目中经常会涉及到对象除了第一层以及下层进行深度合并,本问讲解的是深度合并的插件deepmerge,使用此插件避免通过递归实现一些深度合并所带来的问题 使用场景 …

Django的web框架Django Rest_Framework精讲(二)

文章目录 1.自定义校验功能&#xff08;1&#xff09;validators&#xff08;2&#xff09;局部钩子&#xff1a;单字段校验&#xff08;3&#xff09;全局钩子&#xff1a;多字段校验 2.raise_exception 参数3.context参数4.反序列化校验后保存&#xff0c;新增和更新数据&…

基于SpringBoot Vue超市管理系统

大家好✌&#xff01;我是Dwzun。很高兴你能来阅读我&#xff0c;我会陆续更新Java后端、前端、数据库、项目案例等相关知识点总结&#xff0c;还为大家分享优质的实战项目&#xff0c;本人在Java项目开发领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#x…

爱快安装和双宽带叠加

文章目录 一、爱快安装二、爱快使用1. 配置WAN12. 配置WAN23. 配置LAN14. 配置DHCP5. DNS设置6. 多线负载7. 基础设置 三、通过交换机拨号1. 交换机设置2. 配置WAN1 一、爱快安装 &#xff08;1&#xff09;下载爱快路由ISO版本 爱快路由系统下载 &#xff08;2&#xff09;IS…

MH-ET LIVE Boards(ATTiny88)实验一---点亮板载灯

MH-ET LIVE Boards(ATTiny88&#xff09;实验一点亮板载灯 在Arduino IDE中添加开发板资源包加入开发板json添加开发板 安装开发板驱动方法一&#xff1a;github下载2.0a4.rar方法二&#xff1a;开发板的package包中自带的2.0a4.rar安装驱动确认安装成功 blink.ino程序测试![在…

Vulnhub靶机:hacksudo1

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;10.0.2.15&#xff09; 靶机&#xff1a;hacksudo1&#xff08;10.0.2.43&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/hac…

Python武器库开发-武器库篇之zip文件暴力破解(五十一)

Python武器库开发-武器库篇之zip文件暴力破解(五十一) Zip文件是一种常用的存档文件格式&#xff0c;用于将多个文件和文件夹压缩成一个单独的文件。它是一种广泛接受和支持的文件格式&#xff0c;几乎所有操作系统和计算机都能够处理Zip文件。Zip文件使用一种压缩算法来减小文…

状态流支持的状态和转换操作类型

状态操作类型 States 可以有不同的操作类型&#xff0c;包含了entry, during, exit, bind, and, on event_name 操作。状态的操作使用以下通用格式的标签表示法分配给操作类型&#xff1a; name/ entry:进入操作 during:在操作期间 exit:退出操作 bind:数据名, 事件名 on even…

使用wda框架实现IOS自动化测试详解

目录 1、weditor元素定位工具 1.1、weditor的安装和使用 2、wda iOS自动化框架 2.1、wda概述 2.2、wda安装 2.3、wda的使用 2.3.1、全局配置 2.3.2、创建客户端 2.3.3、APP相关操作 1、启动APP 2、关闭APP 3、获取APP状态信息 4、获取当前APP的运行信息 2.3.4、设…

Java自救手册

目录 访问地址 访问地址&#xff0c;发现不通&#xff0c;无法访问&#xff1a; 网络不通一般有两种情况&#xff1a; Maven 拿Maven 拿到Maven以后 Maven单独的报红 Git git注意&#xff1a; 目录 访问地址 访问地址&#xff0c;发现不通&#xff0c;无法访问&…

Python中with管理上下文

上下文管理器 上下文管理器本质就是能够支持with操作。 任何实现了 __enter__() 和 __exit__() 方法的对象都可称之为上下文管理器&#xff0c;上下文管理器对象可以使用 with 关键字。显然&#xff0c;文件&#xff08;file&#xff09;对象也实现了上下文管理器协议。 实现…

Canal 结合 SpringBoot 源码梳理

1、canal是什么&#xff0c;可以用来作什么 canal是阿里开源的一个用于监听数据库binlog&#xff0c;从而实现数据同步的工具。 2、安装 我使用的是1.1.5版本&#xff0c;太高的版本需要的jdk版本和mysql的驱动版本会更高&#xff0c;可以根据自己的环境选择。 如果是自己玩的话…

24.云原生之ArgoCD钩子

云原生专栏大纲 文章目录 Argo CD钩子如何定义钩子钩子删除策略 Argo CD钩子 Argo CD 是一个用于部署和管理 Kubernetes 应用程序的工具&#xff0c;它提供了一种声明式的方式来定义和自动化应用程序的部署过程。Argo CD 钩子&#xff08;Hooks&#xff09;是一种机制&#x…

MySQL-- if()函数 简单明了

if 主要有&#xff1a;IF函数嵌套和IF聚合函数 两类&#xff0c;主要是用来根据条件返回不同值。 基本语法为; IF(条件表达式,值1,值2)如果条件表达式为True&#xff0c;返回值1&#xff0c;为False,返回值2.返回值可以是任何值&#xff0c;比如&#xff1a;数值&#xff0c;…

消息中间件之RocketMQ源码分析(五)

消费进度保存机制 消费者启动时会同时启动位点管理器&#xff0c;RocketMQ设计了远程位点管理和本地位点管理 两种位点管理方式. 集群消费时&#xff0c;位点由客户端提交给Broker保存. 广播消费时&#xff0c;位点保存在消费者本地磁盘上 OffsetStore接口核心方法 void load(…

重写Sylar基于协程的服务器(4、协程调度模块的设计)

重写Sylar基于协程的服务器&#xff08;4、协程调度模块的设计&#xff09; 重写Sylar基于协程的服务器系列&#xff1a; 重写Sylar基于协程的服务器&#xff08;0、搭建开发环境以及项目框架 || 下载编译简化版Sylar&#xff09; 重写Sylar基于协程的服务器&#xff08;1、日…

智慧文旅:驱动文化与旅游融合发展的新动力

随着科技的快速发展和人们生活水平的提高&#xff0c;文化和旅游的融合成为了时代发展的必然趋势。智慧文旅作为这一趋势的引领者&#xff0c;通过先进的信息技术手段&#xff0c;推动文化与旅游的深度融合&#xff0c;为产业的发展注入新的活力。本文将深入探讨智慧文旅如何成…

被人疯狂吐槽的预制菜,居然是资本看重的“万亿级”市场?

被人疯狂吐槽的预制菜&#xff0c;居然是资本看重的“万亿级”市场&#xff1f; 文丨微三云营销总监胡佳东&#xff0c;点击上方“关注”&#xff0c;为你分享市场商业模式电商干货。 - 大家是不是以为只有被天天吐槽难吃的外卖和小饭店&#xff0c;才会用预制菜&#xff0c;…

【LeetCode】17. 电话号码的字母组合(中等)——代码随想录算法训练营Day25

题目链接&#xff1a;17. 电话号码的字母组合 题目描述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff…