谈谈修改寄存器默认值的几种方法和实现
一、DFF的类型介绍
寄存器默认值,也叫复位值,是当reset或者set有效时寄存器输出的值。对于一个DFF来说,如下图,当reset为0时,Q输出0;当set为0时,Q输出为1(外部使用时保证reset与set不同时为0)。
图一
也就是说,当需要复位值为1时,把set拉低;当需要复位值为0时,把reset拉低,如下图。一般来说寄存器的默认值不是1就是0,所以接死掉的reset和set pin就可以省掉。
图二
因此,stdcell库里的dff可以分成以下几种:
- DFFSR,同时带set和reset pin
- DFFR,只带reset pin
- DFFS,只带set pin
另外,QN是Q的取反,很多时候只需要用到其中的一个,所以QN也不一定有。总结成下表:
带QN | 不带QN |
DFFSRN | DFFSR |
DFFRN | DFFR |
DFFSN | DFFS |
二、修改默认值的方法
方法一:如果DFF同时带RN和SN,交换RN和SN的连线
这种方法最简单,premask和postmask eco都适用。但一般自动综合工具是不会同时用同时带RN和SN的DFF的,因为这样面积不是最优。所以需要在综合阶段人为强制让综合工具只用同时带RN和SN的DFF,如果面积不是瓶颈的情况下。
方法二:如果只带RN或者SN,换DFF类型(Premask ECO)
在Premask ECO时,我们完全可以像重新综合的网表一样直接换DFF类型。这种方法对于premask eco非常友好,不需要增加逻辑单元,也不会恶化时序。
方法三:如果只带RN或者SN,互换DFF(Postmask ECO)
在Postmask ECO时,我们没办法随意替换DFF类型。因为DFF的个数和类型是固定的,这时只能修改金属层。
如果修改默认值的两个dff,一个需要“0变1”,另一个需要“1变0”,且这两个dff物理位置很近,那么可以互换这两个dff的连线。如果是同一个时钟域、复位域,那么就只需要交换D、RN(SN)、Q/QN这三组pin。
这个方法除了上面提到的限制,还有如果“0变1”和“1变0”的dff个数不相等,那么就无法完全交换成功。
方法四:如果只带RN或者SN,D和Q端插inverter(Postmask ECO)
这是一种普遍适用的方法,只需要在D和Q端各插一个inverter。如果带QN,又可以省一个inverter。如下图,通过反相器可以等价变换只带RN或SN的DFF。
图三
图四
这种替换方法操作简单,易实现,不会带来连线拥挤,利于DRC收敛。因为不需要修改时钟pin,不会动到时钟树,只需要数据通路插入一个inverter,所以对时序影响也非常小。
但这个方法也会带来一个问题,就是在做LEC(逻辑等价性检查)时,需要让工具开启phase inversion的检测,不然会报很多虚假non equal。
三、使用GOF来自动修改寄存器的默认值
方法二:换DFF类型(Premask ECO)
set_top("digital_top");
run_lec;
fix_design();
run_lec();
report_eco;
GOF默认就是用换DFF类型的方法,所以自动ECO脚本比较简洁,读进library和design后,先run_lec确认待eco的点是否正确,接下来做ECO,做完后再运行一次run_lec确认是否eco成功。
方法四:D和Q端插inverter(Postmask ECO)
set_top("digital_top");
set_flop_default_eco(1);
run_lec;
fix_design();
set_top("digital_top");
set_mapping_method("-phase");
run_lec();
report_eco;
与方法二相比,需要设置修改寄存器的方式后,再做ECO。做完ECO后需要设置phase inversion,让工具自动检测phase inversion的keypoint,以防虚假的non equal。
谈谈修改寄存器默认值的几种方法和实现相关推荐
- 修改mysql数据库默认字符集_MySQL数据库之修改mysql默认字符集的两种方法详细解析...
本文主要向大家介绍了MySQL数据库之修改mysql默认字符集的两种方法详细解析 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. (1) 最简单的修改方法,就是修改mysql的m ...
- UE4 C++入门之路4-PostInitProperties函数详解(设置属性默认值的四种方法)
PostInitProperties函数详解 前言 设置属性默认值的四种方法 一 声明时赋值 二 构造函数赋值 三 构造函数初始化列表 四 PostInitProperties 前言 也许在工作或者学 ...
- Elasticsearch 设置默认值的三种方式
1.实战问题 在使用 Elasticsearch 过程中,不免还会有 Mysql 等关系型数据库的使用痕迹,以下两个都是实战开发问到的问题: Elasticsearch 新增字段,能在 Mapping ...
- SqlServer 增加字段,修改字段名,删除字段,修改字段默认值
SqlServer 增加字段,修改字段名,删除字段,修改字段默认值 1:增加字段 语法:alter table 表名 add 新增字段名 字段类型 默认值- 2:修改字段名 语法:exec sp_re ...
- GDB 修改当前判断函数的返回值(即修改寄存器的值)的方法
工作中遇到的问题: 在GDB调试时要进入下边该判断后边的函数,而m_EtherDecode.Chk_MakeSure_IP_Pkt(pPacket,dwPacketLen)的返回值是false,所以需 ...
- Mysql 修改字段默认值问题
临下班前,测试测出所有的返回报文中有一个版本号的值没有上送,最后定位是由于数据库配置表里版本号是空. 这应该属于前辈们留下的bug了.... 首先试了下 ALTER TABLE newftp alte ...
- html编辑器增加超级链接,ueditor1.2.1修改超链接默认值,ueditor编辑器新窗口打开连接...
ueditor1.2.1修改超链接默认值 首先超链接的文件是在ueditor目录中的dialogs目录中的link目录的link.html 如图: 然后在链接地址或标题上加value属性和值,希望在新 ...
- SQL语句修改字段默认值
一.SQL语句修改字段默认值 alter table 表名 drop constraint 约束名字 说明:删除表的字段的原有约束 alter table 表名 add constraint 约束名字 ...
- mysql增加字段设默认值_mysql原表增加字段且设置默认值及修改字段默认值
-- 增加字段及注释 alter table sr_zjff_main add zjbzjxbj int(1) DEFAULT '0' COMMENT ''; alter table sr_main_ ...
最新文章
- 查询数据(使用聚合函数,还是单表)
- 【Redis系列】深入浅出Redis主从复制之哨兵模式【实践】
- 服务器升级中不能修改信息,服务器升级页面
- Java编程——服务器设计方案之应用限流
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]43 为AES 对抗侧信道攻击的防御
- mysql count里面能加条件吗_select count(1) 和 count(*),哪个性能更好?
- python中or是什么意思-Python 中 (,|)和(and,or)之间的区别
- C#通过COM组件调用IDL的pro程序
- OPPO推送:推送消息的字串,用于参数
- 是时候该开始读一读JDK源码了
- 箱形图(python画图)
- unity3d 取锚点位置_《王者荣耀》破晓之心碎片在哪 破晓之心碎片位置介绍
- 实践一 网络攻防环境的搭建
- 抖音实战~分享模块~短视频下载(保存到相册)
- AC敏捷控制器及准入控制技术对比
- 灰色关联分析——Excel实现
- word中插入图表改变数据系列产生在行或列
- 飞信Fetion 开发资料及下载
- HBuilderX 下载git
- JPA 菜鸟教程 18 自动把firstName+lastName合并为name字段