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

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

3天内不再提示

修改寄存器默认值的方法

我快闭嘴 来源:ExASIC 作者:ExASIC 2022-09-28 14:13 次阅读

一、DFF的类型介绍

寄存器默认值,也叫复位值,是当reset或者set有效时寄存器输出的值。对于一个DFF来说,如下图,当reset为0时,Q输出0;当set为0时,Q输出为1(外部使用时保证reset与set不同时为0)。

65302b4e-3ef0-11ed-9e49-dac502259ad0.png

(图一)

也就是说,当需要复位值为1时,把set拉低;当需要复位值为0时,把reset拉低,如下图。一般来说寄存器的默认值不是1就是0,所以接死掉的reset和set pin就可以省掉。

6546d1b4-3ef0-11ed-9e49-dac502259ad0.png

(图二)

因此,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。

65532176-3ef0-11ed-9e49-dac502259ad0.png

(图三)

656ca272-3ef0-11ed-9e49-dac502259ad0.png

(图四)

这种替换方法操作简单,易实现,不会带来连线拥挤,利于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。

审核编辑:汤梓红

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

    关注

    30

    文章

    5042

    浏览量

    117768
  • dff
    dff
    +关注

    关注

    0

    文章

    26

    浏览量

    3290

原文标题:谈谈修改寄存器默认值的几种方法和实现

文章出处:【微信号:ExASIC,微信公众号:ExASIC】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

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

    启动完成(在 HSM 内核中运行),它会跳转到引导加载程序软件(在 Tricore 中运行),然后我们找到了 SMU 寄存器默认值(SUMAG0/1/2 等.,) 已更改,如下所示。 但是 HSM
    发表于 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指令修改PRIMASKCPSIEI;/
    发表于 08-13 07:20

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

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

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

    )。 很快:看起来设备在从 mmc 启动数据后进入 USB 下载模式。看上面的题目。它有很多有趣的图片。))现在我尝试用 uuu 读取不同的寄存器。并且发现有些寄存器没有默认值,并且
    发表于 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)。
    的头像 发表于 01-30 16:30 1768次阅读
    <b class='flag-5'>修改寄存器</b><b class='flag-5'>默认值</b>的<b class='flag-5'>方法</b>有哪些

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

    寄存器默认值,也叫复位值,是当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>