翻译_Clock Domain Crossing Design

news2024/11/23 0:41:49

翻译_Clock Domain Crossing Design

原文标题及连接:Clock Domain Crossing (CDC) Design & Verification Techniques Using SystemVerilog.

作者:Clifford E. Cummings

Sunburst Design, Inc.

cliffc@sunburst-design.com

摘要

在多时钟设计中,需要在时钟域交叉(Clock Domain Crossing,CDC)边界处仔细构造重要的设计考虑因素。本文详细介绍了一些最新的策略和众所周知的最佳方法,以解决跨CDC边界传递一个或多个信号的问题。

文中包括了与CDC验证相关的技术,以及一个有趣的2深FIFO设计,用于在时钟域之间传递多个控制信号。

尽管本文描述的设计方法通常可以使用任何硬件描述语言(HDL)实现,但示例使用的是高效的SystemVerilog技术。

1.0 引言

在2001年,我提交了我的第一篇关于多异步时钟设计的论文。那时,我没有找到任何好的资源来描述进行适当的多时钟设计所需的设计和综合技术。

2001年的论文是我多年ASIC和FPGA设计经验中收集的技术的集合。在2001年会议演讲结束时,数十位工程师和同事向我分享了足够多的有趣想法和技术,以至于我可以为这个主题写一个续集。在过去的八年里,我在高级和专家级的Verilog和SystemVerilog培训课程中包括了多时钟设计技术的指导,同时在这段时间里,更多的同事和学生与我分享了额外的有趣的多时钟设计技术。

自2001年发布第一篇多时钟论文以来,业界普遍将这些设计方法归类为时钟域交叉(CDC)技术。我将在本文中使用这个通用术语。

本文包括了2001年论文中描述的最佳技术,以及在过去十年中与我分享的更新的有趣和高效的多时钟设计技术的集合。实际的会议演讲幻灯片将主要是自2001年原始演讲以来纳入的新技术的集合,只保留足够的原始幻灯片来介绍基本的CDC设计概念和问题。

2.0 亚稳态

亚稳态指的是在设计的正常操作期间,信号在一段时间内不假定稳定的0或1状态。在多时钟设计中,亚稳态无法避免,但可以中和亚稳态的有害影响。

figure1

引用Dally和Poulton的书[9]中关于亚稳态的内容:

当用时钟采样一个变化的数据信号时…事件的顺序决定了结果。事件之间的时间差异越小,确定哪个事件先发生所需的时间就越长。当两个事件发生得非常接近时,决策过程可能需要的时间超过了分配的时间,这时就会发生同步失败。

图1显示了当一个在第一个时钟域产生的信号在第二个时钟域的时钟信号的上升沿太近时发生的同步失败。同步失败是由输出进入亚稳态并且在必须再次采样输出之前没有收敛到合法稳定状态引起的。

2.1 为什么亚稳态是个问题?

那么,为什么亚稳态是个问题呢?图2显示了一个在接收时钟域中穿越额外逻辑的亚稳态输出,可能会导致整个设计中传播非法信号值。由于CDC信号可能会在一段时间内波动,接收时钟域中的输入逻辑可能会识别波动信号的逻辑电平为不同的值,从而将错误的信号传播到接收时钟域。

figure2

每个在设计中使用的触发器都有一个指定的建立时间和保持时间,或者在上升时钟边沿之前和之后数据输入不允许变化的时间。这个时间窗口被精确地指定为设计参数,以防止数据信号在太靠近可能使输出进入亚稳态的另一个同步信号时发生变化。

3.0 同步器

在时钟域之间传递信号时,一个重要的问题是,我是否需要采样从一个时钟域传递到另一个时钟域的信号的每个值?

3.1 两种同步场景

在跨CDC边界传递信号时,有两种可能的场景,确定哪种场景适用于您的设计非常重要:

  1. 允许在时钟域之间传递的样本被错过。
  2. 必须采样传递至时钟域之间的每个信号。

**第一种场景:**有时不必采样每个值,但采样的值必须准确。一个例子是标准异步FIFO设计中使用的一组格雷码计数器。在正确设计的异步FIFO模型中,同步的格雷码计数器不需要捕获来自相反时钟域的每个合法值,但关键是采样的值必须准确,以识别何时发生了满和空条件。

**第二种场景:**CDC信号必须在CDC信号上发生变更之前被正确识别或确认。

在这两种场景中,CDC信号将需要某种形式的同步进入接收时钟域。

3.2 双触发器同步器

再次引用Dally和Poulton[9]关于同步器的话:

同步器是一个设备,它采样一个异步信号,并输出一个信号版本,该信号的转换与本地或采样时钟同步。

数字设计师使用最简单和最常见的同步器是双触发器同步器,如图3所示。

figure

第一个触发器将异步输入信号采样到新的时钟域,并等待一个完整的时钟周期,以允许任何在第一阶段输出信号上的亚稳态衰减,然后第一阶段信号被相同的时钟采样到第二阶段触发器,预期的目标是,第二阶段信号现在是稳定且有效的信号,已同步并准备好在新的时钟域内分发。

3.3 MTBF - 故障前平均时间

对于大多数同步应用,计算任何穿过CDC边界的信号的故障前平均时间(MTBF)是很重要的。

在这里,故障意味着传递到同步触发器的信号,在第一阶段同步器触发器上变为亚稳态,并在下一个时钟周期后继续是亚稳态,当它被采样到第二阶段同步器触发器时。由于信号在经过一个时钟周期后没有稳定到已知值,信号在被采样并传递到接收时钟域时可能仍然是亚稳态,从而导致相应逻辑中的潜在故障。

当计算MTBF数字时,较大的数字优于较小的数字。较大的MTBF数字表示潜在故障之间的时间较长,而较小的MTBF数字表示亚稳态可能频繁发生,类似地在设计中引起故障。

Dally和Poulton[9]给出了一个非常好的方程式和非常彻底的分析,可以执行计算同步器电路的MTBF。不重复方程式和分析,应该指出,直接影响同步器电路MTBF的两个最重要因素是:

  • 采样时钟频率(信号被采样进入接收时钟域的速度有多快);

  • 数据变化频率(跨CDC边界的数据变化速度有多快)。

figure4

从上述部分方程式可以看出,在更高速度的设计中,或者当采样数据变化更频繁时,故障发生的频率更高(MTBF更短)。

3.4 三触发器同步器

对于一些非常高速度的设计,双触发器同步器的MTBF太短,增加了第三个触发器以增加MTBF到一个令人满意的时间段。当然,令人满意是由设计的架构师决定的。

figure5

3.5 从发送时钟域同步信号

**关于CDC设计的一个常见问题是:**在将信号传递到接收时钟域之前,是否有必要对来自发送时钟域的信号进行寄存?

这个问题中隐含的假设是,既然CDC信号将被同步到接收时钟域,因此它们在发送时钟域中不需要同步。这种理论是错误的,通常应该要求在发送时钟域中对信号进行寄存。

考虑一个示例,其中发送时钟域中的信号在被传递到接收时钟域之前没有进行寄存,如图6所示。

figure6

在这个示例中,来自发送时钟域的组合逻辑输出可能在CDC边界处经历组合逻辑稳定过程。

这种组合逻辑稳定实际上增加了数据变化频率,可能会产生短时间的数据振荡,从而增加了在变化时被采样的边缘数量,相应地增加了采样变化数据并产生亚稳态信号的可能性。

3.6 同步信号到接收时钟域

应该在发送时钟域中同步信号,然后再将其传递到CDC边界。

从发送时钟域同步信号可以减少在接收时钟域中可能采样的边缘数量,有效地降低了MTBF方程中的数据变化频率,从而增加了计算出的故障时间(见第3.3节,了解数据变化频率对MTBF的影响)。

figure7

在图7中,aclk逻辑在传递到bclk域之前在adat触发器上稳定并设置。adat触发器过滤了触发器输入上的组合逻辑稳定(a),并向bclk逻辑传递了一个干净的信号。

4.0 将快速信号同步到慢速时钟域

如第3.1节所讨论的,如果允许在时钟域之间传递的CDC信号被跳过,则在考虑信号宽度或同步技术时,它们在时钟域之间传递时的重要性就显现出来了。

与同步器相关联的一个问题是,来自发送时钟域的信号可能在被采样之前改变两次值,或者可能太接近慢速时钟域的采样边沿。每当信号从一个时钟域发送到另一个时钟域时,都必须考虑这种可能性,并且必须确定是否遗漏信号对于所讨论的设计来说是否是一个问题。

当不允许遗漏采样时,有两个通用的解决问题的方法:

  1. 开环解决方案,确保信号被捕捉而无需确认。
  2. 闭环解决方案,需要确认接收到跨越CDC边界的信号。

本节讨论了这两种解决方案。

4.1 在时钟域之间可靠传递信号的要求

同步较慢的控制信号到较快的时钟域通常不是问题,如果较快的时钟域的频率至少是较慢时钟域的1.5倍,因为较快的时钟信号将至少一次或多次采样较慢的CDC信号。

设计者可能会利用这一事实,通过使用简单的双触发器同步器在时钟域之间传递单个CDC信号。

认识到在较快的时钟域中采样较慢信号比在较慢的时钟域中采样较快信号潜在的问题要少,这有助于简化设计。

4.1.1 “三边沿”要求

Mark Litterick[4]指出,当通过双触发器同步器在时钟域之间传递一个CDC信号时,CDC信号必须比接收域时钟周期的宽度长1.5倍

Litterick将此要求描述为输入数据值必须在三个目标时钟边沿上保持稳定

对于源时钟和目的时钟频率异常长的情况,这一要求可能可以安全地放宽到接收时钟域周期时间的1/4倍或更短,但“三边沿”准则是最安全的初始设计条件。相比于在仿真期间动态测量CDC信号的部分宽度,使用SystemVerilog断言来证明这一点更为容易和可靠。

“三边沿”要求实际上适用于开放环和闭环解决方案,但实现闭环解决方案自动确保至少三个边沿被检测到所有CDC信号。

4.2 问题-传递一个快速CDC脉冲

考虑一个严重的问题情况,即发送时钟域的频率高于接收时钟域,且一个CDC脉冲在发送时钟域中只持续一个周期。

如果CDC信号仅在一个快速时钟周期内被激活,那么这个信号可能在慢速时钟的两个上升沿之间变化,从而没有被慢速时钟域捕获,如图8所示。

figure8

4.3 问题-采样一个不够长的长CDC脉冲-但是依然不够长

考虑一个有些违反直觉的情况,即发送时钟域向接收时钟域发送一个脉冲,这个脉冲宽度略宽于接收时钟的周期。

在大多数情况下,信号将被采样并通过,但存在一个小但真实的可能性,即CDC脉冲变化得太接近接收时钟域的两个上升时钟边沿,从而违反了第一个时钟边沿的建立时间,并违反了第二个时钟边沿的保持时间,没有形成预期的脉冲。

这种可能的故障情况如图9所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2082694.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot——请求响应(简单参数、实体参数、数组集合参数、日期参数、JSON参数、路径参数、统一响应结果)

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

(经验)SVN降版本,保留版本信息和用户信息。

背景:由于开始公司人数规模小,没有关心SVN最新版本免费对于用户数量限制要求不敏感,随着人数越来越多,公司来了新员工已经添加不了SVN需要注册码了,不利于SVN文件管理的在公司内部的推广。看了好多资料,都没…

Java:jdk8之后新增的时间API

文章目录 为什么要使用新增的API新增了哪些?Local常用方法代码一样的用法 黑马学习笔记 使用新增的 为什么要使用新增的API 新增了哪些? Local 常用方法 代码 package NewTime;import java.time.LocalDate;/*** Author: ggdpzhk* CreateTime: 2024-08-…

【Python入门思维概括图】

📖入门思维概括图 ✅第1节 基础语法 ✅第2节 判断语句 ✅第3节 循环语句 ✅第4节 函数 ✅第5节 数据容器 ✅第6节 函数进阶 ✅第7节 文件操作 ✅第8节 异常模块和包 拓展:学了python能干什么,可以参考下面的Python使用场景思维导图介绍

慈云寺北里社区新时代文明实践站联手鼓动青春丰富青少年暑期生活

炎炎夏日的暑期,慈云寺北里社区新时代文明实践站携手鼓动青春,为社区青少年精心策划并成功举办了两场丰富多彩的暑期活动,不仅为孩子们的假期生活增添了浓厚的文化色彩,更激发了他们对中华传统文化与现代艺术的浓厚兴趣。 首场&am…

《JavaEE进阶》----4.<SpringMVC①简介、基本操作>

本篇博客讲解 MVC思想、及Spring MVC(是对MVC思想的一种实现)。 Spring MVC的基本操作、学习了六个注解 RestController注解 RequestMappering注解 RequestParam注解 RequestBody注解 PathVariable注解 RequestPart注解 MVC View(视图) 指在应⽤程序中…

IO复用技术

一、I/O复用的介绍 I/O复用是一种能够同时处理多个I/O操作的技术,适用于高并发场景。 使用场景 select/poll:适用于连接数较少的场景。epoll:适用于大规模的网络服务,如Web服务器。 二、实现方式 1.select select 是一种系统调…

iPhone突然黑屏?别慌,这里有你的自救指南

在日常使用iPhone的过程中,不少用户可能会遇到手机突然黑屏的情况,这往往让人措手不及。别担心,今天我们就来详细探讨一下iPhone突然黑屏的可能原因及解决方法,帮助你快速恢复手机的正常使用。 一、iPhone突然黑屏的可能原因 1. …

在做结果集封装时,若结果集表头与成员变量名不一致该如何解决?

目录 1. 通过别名映射为一致:as子句 2. 使用resultMap 3. 在配置文件中开启适配规则 在Score实体类中,我们定义了studentId、courseId、score、status,而在数据库中,我们设置如下: 1. 通过别名映射为一致&#xff1…

GAMES202——作业1 实时阴影(ShadowMap,PCF,PCSS)

目录 任务 ShadowMap PCF PCSS 实现 ShadowMap useShadowMap PCF findBlocker PCSS 结果 任务 ShadowMap 1.在 ShadowMaterial.js 中需要向 Shader 传递正确的 uLightMVP 矩阵,该矩阵参与了第一步从光源处渲染场景从而构造ShadowMap 的过程。 你需要完成 D…

4 - ZYNQ 信号、接口与引脚

文章目录 1 ZYNQ信号、接口与引脚1.1 电源引脚1.2 PS信号引脚1.3 PL信号引脚1.4 PS和PL交互接口 1 ZYNQ信号、接口与引脚 ZYNQ的信号、接口与引脚如下图所示,主要分为: PS部分PL部分PS和PL交互部分PS和PL共用部分(如JTAG) 1.…

Disassembly窗口信息解读

如上图程序所示,程序运行流程为: 1.跳转至main所在地址 2.加载全局变量counter地址??main_2到R0 3.将变量值存入R0 4.R0自增指令载入 5.加载counter地址到R1 6.通过R1的地址,R0取到counter的值 ??main_1最终结果R0存值&#xff0c…

常用工具网站之Emoji

https://www.emojiall.com/zh-hans/all-emojis 这个网站是一个收集和展示所有表情符号的网站。用户可以在这里找到各种不同类型的表情符号,并了解它们的含义和用法。 举例说明:在这个网站上,可以找到不同类型的奖牌表情符号,例如…

谈到这个痛点,写C的和不写C的码农都沉默了

声明:此篇为 ai123.cn 原创文章,转载请标明出处链接:https://ai123.cn/2246.html 作为一名在计算机软件行业工作的C工程师,我深知在高要求的内存管理环境中工作有多么艰难。内存分配与优化、避免内存泄漏,都是日常挑战…

Scrapy入门学习

文章目录 Scrapy一. Scrapy简介二. Scrapy的安装1. 进入项目所在目录2. 安装软件包Scrapy3. 验证是否安装成功 三. Scrapy的基础使用1. 创建项目2. 在tutorial/spiders目录下创建保存爬虫代码的项目文件3.运行爬虫4.利用css选择器Scrapy Shell提取数据例如: Scrapy 一. Scrapy…

2024谷歌开发者大会分享

前言: google一般会在每年的5月份在美国举行开发者大会,然后8-9月份会在中国也举办一次开发者大会,内容主题纲要是一致的,但是由于中国剧本的时间稍微晚一些,所以其内容会更新一些。 每年的开发者大会,会隐…

跟着B站前端面试总结回顾前端基础知识(二)

深拷贝与浅拷贝 在JavaScript中,深拷贝是一个常见的需求,特别是在处理复杂数据结构(如对象、数组等)时,需要确保原始数据不被修改。下面通过表格形式列出几种常见的深拷贝方法,并简要说明其优缺点。 方法…

【AI模型:追求全能还是专精?】

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《热点时事》 期待您的关注 目录 引言 ​编辑 一:AI模型的全面评估和比较 二:AI模型的专精化和可扩展性…

宝塔安装yasd 远程调试 swoole

一、服务器安装yasd 1.安装yasd 按照官方文档,Yasd调试器官方文档 yum install boost boost-develgit clone https://github.com/swoole/yasd.gitcd yasdphpize --clean && phpize && ./configure --with-php-config/www/server/php/74/bin/php…

筛质数(线性筛法)

线性筛法: 假设有一个非质数 x,那么这个数可以被表示为一个最小质因数和一个因子相乘的形式 如 x 12 ,那么 x 2*6 其中:2 就是 12 的最小质因数, 6 就是另一个因子 线性筛法就是利用每个数的最小质因数筛掉这个非…