一、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。

谈谈修改寄存器默认值的几种方法和实现相关推荐

  1. 修改mysql数据库默认字符集_MySQL数据库之修改mysql默认字符集的两种方法详细解析...

    本文主要向大家介绍了MySQL数据库之修改mysql默认字符集的两种方法详细解析 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. (1) 最简单的修改方法,就是修改mysql的m ...

  2. UE4 C++入门之路4-PostInitProperties函数详解(设置属性默认值的四种方法)

    PostInitProperties函数详解 前言 设置属性默认值的四种方法 一 声明时赋值 二 构造函数赋值 三 构造函数初始化列表 四 PostInitProperties 前言 也许在工作或者学 ...

  3. Elasticsearch 设置默认值的三种方式

    1.实战问题 在使用 Elasticsearch 过程中,不免还会有 Mysql 等关系型数据库的使用痕迹,以下两个都是实战开发问到的问题: Elasticsearch 新增字段,能在 Mapping ...

  4. SqlServer 增加字段,修改字段名,删除字段,修改字段默认值

    SqlServer 增加字段,修改字段名,删除字段,修改字段默认值 1:增加字段 语法:alter table 表名 add 新增字段名 字段类型 默认值- 2:修改字段名 语法:exec sp_re ...

  5. GDB 修改当前判断函数的返回值(即修改寄存器的值)的方法

    工作中遇到的问题: 在GDB调试时要进入下边该判断后边的函数,而m_EtherDecode.Chk_MakeSure_IP_Pkt(pPacket,dwPacketLen)的返回值是false,所以需 ...

  6. Mysql 修改字段默认值问题

    临下班前,测试测出所有的返回报文中有一个版本号的值没有上送,最后定位是由于数据库配置表里版本号是空. 这应该属于前辈们留下的bug了.... 首先试了下 ALTER TABLE newftp alte ...

  7. html编辑器增加超级链接,ueditor1.2.1修改超链接默认值,ueditor编辑器新窗口打开连接...

    ueditor1.2.1修改超链接默认值 首先超链接的文件是在ueditor目录中的dialogs目录中的link目录的link.html 如图: 然后在链接地址或标题上加value属性和值,希望在新 ...

  8. SQL语句修改字段默认值

    一.SQL语句修改字段默认值 alter table 表名 drop constraint 约束名字 说明:删除表的字段的原有约束 alter table 表名 add constraint 约束名字 ...

  9. mysql增加字段设默认值_mysql原表增加字段且设置默认值及修改字段默认值

    -- 增加字段及注释 alter table sr_zjff_main add zjbzjxbj int(1) DEFAULT '0' COMMENT ''; alter table sr_main_ ...

最新文章

  1. 查询数据(使用聚合函数,还是单表)
  2. 【Redis系列】深入浅出Redis主从复制之哨兵模式【实践】
  3. 服务器升级中不能修改信息,服务器升级页面
  4. Java编程——服务器设计方案之应用限流
  5. [密码学基础][每个信息安全博士生应该知道的52件事][Bristol52]43 为AES 对抗侧信道攻击的防御
  6. mysql count里面能加条件吗_select count(1) 和 count(*),哪个性能更好?
  7. python中or是什么意思-Python 中 (,|)和(and,or)之间的区别
  8. C#通过COM组件调用IDL的pro程序
  9. OPPO推送:推送消息的字串,用于参数
  10. 是时候该开始读一读JDK源码了
  11. 箱形图(python画图)
  12. unity3d 取锚点位置_《王者荣耀》破晓之心碎片在哪 破晓之心碎片位置介绍
  13. 实践一 网络攻防环境的搭建
  14. 抖音实战~分享模块~短视频下载(保存到相册)
  15. AC敏捷控制器及准入控制技术对比
  16. 灰色关联分析——Excel实现
  17. word中插入图表改变数据系列产生在行或列
  18. 飞信Fetion 开发资料及下载
  19. HBuilderX 下载git
  20. JPA 菜鸟教程 18 自动把firstName+lastName合并为name字段

热门文章

  1. 手机怎么把PDF转成Word?这个方法快收下
  2. 双十一已落幕,你是否总结过你的广告投放策略?
  3. 360安全,3Q大战一夜爆红
  4. leetcode 649Dota2参议院
  5. ceph学习(故障恢复)——mon全部故障,从osd中恢复集群
  6. 男朋友很大是怎样的体验?
  7. 一个简单的九宫格计算器
  8. Linux的历史----Linux内核剖析(一)
  9. NOIP2008全省提高组获奖名单
  10. 平板电脑html编程软件,HTML Kit Tools官方版