0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

修改寄存器默认值的方法有哪些

jf_78858299 来源:NanDigits 作者:NanDigits中国 2023-01-30 16:30 次阅读

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

近期文章:

NanDigits GOF 10.0 发布

都说PostMask ECO难,到底难在哪里

随着芯片设计规模越来越大,芯片功能ECO难度成指数上升,我们究竟该如何面对

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5042

    浏览量

    117768
  • SET
    SET
    +关注

    关注

    0

    文章

    17

    浏览量

    7828
  • dff
    dff
    +关注

    关注

    0

    文章

    26

    浏览量

    3290
收藏 人收藏

    评论

    相关推荐

    如果使用HSM更改SMU寄存器默认值

    功能被禁用,它会在重置触发后直接跳转到引导加载程序软件,Tricore 安全手册中预计会有 SUM 寄存器默认值,如下所示。 所以我怀疑 HSM 内核的使用是否会影响 SMU 模块或 SMU 寄存器? 任何建议都会对我
    发表于 01-29 06:31

    用FPGA配置AD9467寄存器能读出默认值但写不进去

    用FPGA配置AD9467寄存器,能够从寄存器中读出AD9467的相应寄存器默认值,但写不进去,为什么?既然能读出来,是不是说明我的时序没有问题?
    发表于 09-26 14:22

    AD7195配置寄存器默认值与实际不同

    急求:AD7195配置寄存器默认值0X000117 +-39.06mv,实际0X000116实际测量范围+-78.125。G0位修改后,还是0。
    发表于 01-15 06:37

    什么不能修改寄存器

    各位有没有用过ADS131E08,为什么不能修改寄存器,01h CONFIG1 ,03h CONFIG3,修改之后就停止工作了。下面是读出的各个寄存器0x01: 0x930x02:
    发表于 06-20 15:30

    修改PRIMASK寄存器方法

    除NMI和HardFalut外的所有异常和中断。修改PRIMASK寄存器方法两种汇编使用CPS指令
    发表于 08-13 07:20

    怎样将LIS3DH寄存器的内容重置为开机默认值呢?

    我正在使用 LIS3DH 加速度计。我想通过软件方法将所有寄存器内容重置为开机默认值。我知道重启电源会将寄存器的内容重置为默认值,但我正在寻
    发表于 12-22 06:04

    IMX6在启动时寄存器并不总是默认值的原因?

    的状态。例如:我将 SD4 的 DCD gpio 设置为0x0001D020,但是当设备掉到 USB 时我 0x000070F0。它不是默认值 ( 0x0001B0B0 )。 您可以看到两个
    发表于 03-31 06:31

    可以修改单片机寄存器默认值吗?

    可以修改单片机寄存器默认值
    发表于 10-23 07:20

    adas1000 CALxx寄存器未见到工厂设置的默认值,需要自己重新设置吗?

    CALxx寄存器未见到工厂设置的默认值,需要自己重新设置吗? 校准如何能准确得到呢,谢谢
    发表于 12-11 07:37

    使用FPGA通过SPI总线控制AD9266寄存器,可以回读寄存器默认值,但是无法改变寄存器怎么解决?

    使用FPGA通过SPI总线控制AD9266寄存器,可以回读寄存器默认值,但是无法改变寄存器。 不知道有没有人遇到过同样的问题。 程序是
    发表于 12-13 08:29

    AD2S1210修改寄存器中的阈值对位置码的准确性会有影响吗?

    AD2S1210中很多故障阈值设置的地方,比如DOS超量程、LOS上下限等等,这些阈值都可以在寄存器中设置。我们在使用时没有修改过这些阈值,但发现经常报故障,但位置码也能采回来。
    发表于 12-18 07:31

    修改寄存器默认值方法

    寄存器默认值,也叫复位值,是当reset或者set有效时寄存器输出的值。对于一个DFF来说,如下图,当reset为0时,Q输出0;当set为0时,Q输出为1(外部使用时保证reset与set不同时为0)。
    的头像 发表于 09-28 14:13 1053次阅读

    修改寄存器默认值有几种方法

    寄存器默认值,也叫复位值,是当reset或者set有效时寄存器输出的值。对于一个DFF来说,如下图,当reset为0时,Q输出0;当set为0时,Q输出为1(外部使用时保证reset与set不同时为0)。
    的头像 发表于 05-05 14:28 1709次阅读
    <b class='flag-5'>修改寄存器</b><b class='flag-5'>默认值</b>有几种<b class='flag-5'>方法</b>?

    应用笔记|直接修改寄存器来输出内部时钟的方法

    关键字:MCO,手动修改寄存器 目录预览 1 在特殊情况下使能 MCO 功能的方法 2 具体实现 3 总结 1. 在特殊情况下使能 MCO 功能的方法 在对某些不容易复现的问题进行代码调时,需要观察
    的头像 发表于 06-13 17:35 594次阅读
    应用笔记|直接<b class='flag-5'>修改寄存器</b>来输出内部时钟的<b class='flag-5'>方法</b>

    直接修改寄存器来输出内部时钟的方法

    电子发烧友网站提供《直接修改寄存器来输出内部时钟的方法.pdf》资料免费下载
    发表于 09-19 15:43 0次下载
    直接<b class='flag-5'>修改寄存器</b>来输出内部时钟的<b class='flag-5'>方法</b>