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

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

3天内不再提示

由于时钟域交汇处理不当所导致罕见的比特翻转

XILINX开发者社区 来源:XILINX开发者社区 作者:赛灵思开发者 2021-09-10 09:44 次阅读

本篇博文中的分析是根据真实客户问题撰写的,该客户发现在现场出现罕见的比特翻转, 本篇博文旨在演示用于缩小根本原因范围以及修复此问题的部分调试技巧。

最终发现,此问题是由于时钟域交汇 (CDC) 处理不当所导致的,在 report_methodology 和 report_cdc 报告中高亮显示了相关处理错误。

这是使用方法论报告系列博文的第 4 部分。如需阅读整个系列中的所有博文,请点击如下标题查看。

第1部分:时序以满足,但硬件功能出现错误

第2部分:方法违例对于QoR的影响

第3部分:时序已满足,但硬件中存在 DDR4 校准失败

问题说明:

此客户在现场部署了数万个基于 Zynq-7000 系列的产品,这些产品都是使用 Vivado 2013.4 开发的,其最终客户报告称大量卡上出现数据包损坏,调查显示在所有数据包损坏案例中,设计中的相同位置都发生了比特翻转。

根本原因分析:

为了缩小范围,我们首先要求客户提供网表中这些寄存器的位置:

我们要求客户提供 DCP 以便我们使用各项报告来审查设计。

虽然通常随机问题是由电源问题所导致的,但我们同时还要求客户提供操作期间的 VCCINT/VCCAUX/VCCIO 测量方法,以便测量电平和噪声,如(赛灵思答复记录 62181-点击阅读原文可查看)中的硬件调试最佳实践中所述。

我们还要求其提供板级原理图 (schematic) 以复查使用的去耦电容是否足够。

很快我们就把电源问题排除在原因之外。

收到 DCP 后,我们首先使用最新版本的 Vivado 运行

report_timing_summary、report_methodology、report_drc 和 report_cdc。

有多个问题马上显现了出来。

最重要的发现与可疑 FF 相关,report_methodology LUTAR-1 检查标记出了这些可疑 FF:LUT 驱动异步复位警告

FF 具有异步复位,由逻辑级数深度为 2 的路径驱动:

其危险性在于 LUT(红色箭头)可出现毛刺并触发意外复位。

第二项最严重的发现与时钟域交汇和约束有关。

Report_cdc 发现约有 40000 条路径采用非推荐 CDC 架构:

不安全的时钟域交汇可能导致翻转 FF 下游或上游出现问题,并且可能成为所观测到的行为的真正根源。

就约束而言,report_methodology 的“TIMING-24:仅最大延迟数据路径已被覆盖”检查发现多项严重违例。

在移除 set_clock_groups -asynchronous 约束并将其替换为 set_max_delay -datapath_only 和时钟对的最小时钟周期后,发现出现了非常严重的时序违例:-5.8ns,原因是异步时钟之间的逻辑级数达到 11。

第二轮审查发现设计中几乎所有复位上都存在伪路径约束,这些约束是为了帮助达成时序收敛而添加的,根据经验,我们知道这是非常危险的:如果状态机的各个位在不同时间脱离复位,则可能进入非法状态、无法恢复并且导致设计运行错误。

即使复位为异步,取消复位仍需达成时序收敛,因此永远不能忽略复位上的时序收敛,您应该尽可能明确自己实际是否需要复位,因为不使用复位可节省宝贵的布线资源,并且使 SR 管脚可用于控制置位的重映射,从而减小设计规模,因为逻辑函数可部分映射到这些 SR 管脚。

修复所报告的问题(LUT 驱动异步复位、CDC、CDC 约束)并在现场部署一些新固件后,这些罕见的比特翻转就没有再出现。

结论:

Vivado 报告功能(方法论、CDC)的进步使我们得以成功调试并解决罕见的比特翻转问题。

无论何时遇到任何疑问,都应该首先考虑使用最新版本的 Vivado 来重新审查设计,最新版本的 Vivado 中包含 CDC 分析和最新的方法论检查,这些都是进行原始设计所没有的。

责任编辑:haq

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

    关注

    9

    文章

    677

    浏览量

    64250
  • 硬件
    +关注

    关注

    11

    文章

    2922

    浏览量

    64795
  • Xinlix
    +关注

    关注

    0

    文章

    6

    浏览量

    7979

原文标题:开发者分享 | 使用方法论报告4: 罕见的比特翻转

文章出处:【微信号:gh_2d1c7e2d540e,微信公众号:XILINX开发者社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如果处理器的输入时钟频率超出了手册限定的范围,会导致什么样的结果?

    如果处理器的输入时钟频率超出了手册限定的范围,会导致什么样的结果?
    发表于 03-25 07:31

    请问STM32H743ZIT6使用GPIO输出翻转电平如何达到4Mhz?

    由于设计原因,所在引脚无法复用定时器PWM功能,只能用定时器在定时中断手动翻转引脚电平,但需要输出4MHz以上的时钟信号给其他芯片使用。听说GPIO能翻转50MHz,但实际1Mhz都不
    发表于 03-15 06:02

    求助,关于STM32F103翻转使用的疑问求解

    通用定时器输出比较TIM2,F103.根据参考手册输出比较是CNT与CRR比较。CNT=CRR翻转。程序设置:定时器时钟72M,预分频系数71,ARR=999.CRR为499.实际仿真波形和示波器输出波形1ms翻转一次。为什么不
    发表于 03-11 07:47

    百度健康携手中国罕见病联盟正式迭代上线了【罕见病中心】

    近日,百度健康携手中国罕见病联盟正式迭代上线了【罕见病中心】,提供罕见病查询、疾病知识科普、前沿动态了解等更全面的服务和功能,满足罕见病用户的多种需求。
    的头像 发表于 02-29 16:05 201次阅读

    instance是何时翻转的?每次有多少instance在翻转

    在run dynamic vectorless IR时,instance是何时翻转的?每次有多少instance在翻转
    的头像 发表于 01-26 09:31 230次阅读
    instance是何时<b class='flag-5'>翻转</b>的?每次有多少instance在<b class='flag-5'>翻转</b>?

    是什么导致RAM中的内存数据损坏?纠错码(ECC)如何修复位翻转

    是什么导致RAM中的内存数据损坏?纠错码(ECC)如何修复位翻转? RAM中的内存数据损坏可能由多种原因导致。其中一些原因包括电磁干扰、电压波动、温度变化等外部因素,还有由内部设计和制造缺陷
    的头像 发表于 12-15 09:58 1043次阅读

    clock gating基础知识介绍:基本逻辑门控/ICG

    芯片中大部分的动态功耗消耗在时钟网络中。这是由于时钟树上的单元(cells)有较高的翻转率、驱动能力较大且数量较多所导致的。
    的头像 发表于 12-01 14:50 4722次阅读
    clock gating基础知识介绍:基本逻辑门控/ICG

    代码中翻转RXDTS导致USB总线错误

    代码中翻转RXDTS导致USB总线错误DTOG_RX翻转之后导致主机发送的DATA PID与USB设备端不匹配
    发表于 10-19 07:47

    时钟与复位信号设计方案

    我们设计时要尽可能避免在内部产生时钟,如果操作不当,会导致设计功能和时序问题。总而言之,尽量在代码中避免操作时钟
    的头像 发表于 09-19 09:26 538次阅读
    <b class='flag-5'>时钟</b>与复位信号设计方案

    由于深澜导致的网络连接消失的修复工具

    可以解决由于校园网认证客户端深澜导致的电脑端网络连接突然消失的问题
    发表于 09-07 09:51 0次下载

    请问STM32H743ZIT6使用GPIO输出翻转电平如何达到4Mhz?

    由于设计原因,所在引脚无法复用定时器PWM功能,只能用定时器在定时中断手动翻转引脚电平,但需要输出4MHz以上的时钟信号给其他芯片使用。听说GPIO能翻转50MHz,但实际1Mhz都不
    发表于 08-05 06:01

    所有的单比特信号跨时钟域都可以用敲两级DFF的办法处理吗?

    用敲两级DFF的办法(两级DFF同步器)可以实现单比特信号跨时钟处理。但你或许会有疑问,是所有的单比特信号跨时钟域都可以这么
    的头像 发表于 06-28 11:39 739次阅读
    所有的单<b class='flag-5'>比特</b>信号跨<b class='flag-5'>时钟</b>域都可以用敲两级DFF的办法<b class='flag-5'>处理</b>吗?

    高级FPGA设计技巧!多时钟和异步信号处理解决方案

    : 打两拍处理,即寄存两拍 跨越两个异步时钟传输单比特信号时,可以使用打两拍技术。根据上一节的讨论,建立或保持时间违规会导致一个触发器内节
    发表于 06-02 14:26

    FPGA跨时钟处理方法(二)

    上一篇文章已经讲过了单bit跨时钟域的处理方法,这次解说一下多bit的跨时钟域方法。
    的头像 发表于 05-25 15:07 633次阅读
    FPGA跨<b class='flag-5'>时钟</b>域<b class='flag-5'>处理</b>方法(二)

    FPGA跨时钟处理的注意事项

    中的S_clr_flag_a_all信号,就是在扩展时不小心使用了组合逻辑,这种情况下由于竞争冒险,会导致时钟域后的b信号出现一个clk的异常电平。
    发表于 05-24 15:11 713次阅读
    FPGA跨<b class='flag-5'>时钟</b>域<b class='flag-5'>处理</b>的注意事项