chapter3——处理多个时钟

news2025/1/24 17:39:39

目录

  • 1.多时钟域
  • 2.多时钟域设计的难题
  • 3.多时钟设计的处理技术
  • 时钟命名规则
  • 分模块设计
  • 跨时钟域
  • 4.跨时钟域
    • 同频零相位差时钟
    • 同频恒定相位差时钟
    • 非同频、可变相位差时钟
      • 整数倍频率的时钟
      • 非整数倍频率的时钟
  • 5.握手信号方法
  • 6.使用同步FIFO传输数据
  • 7.异步FIFO

1.多时钟域

常见的多时钟域如下:
在这里插入图片描述
这样的设计有以下类型的时钟关系:
1)时钟的频率不同。
2)时钟频率相同,但相位不同。

以上两种关系如下所示:
在这里插入图片描述

2.多时钟域设计的难题

多时钟设计将面临以下问题:

  • 建立时间和保持时间的违背。
  • 亚稳态。

建立时间要求数据必须在时钟上升沿到来之前保持稳定,保持时间要求在时钟上升沿到来后数据必须仍然保持稳定。对于单时钟域,这样的要求很容易满足。但是在多时钟域情况下,很容易出现一个时钟域的输出在另一个时钟域中的时钟上升沿到来时发生改变的现象。这将会引起第二个时钟域中触发器的输出处于亚稳态,由此导致一系列错误的结果。

3.多时钟设计的处理技术

在进行一个含多个时钟的设计时,在仿真和综合过程中遵循一定的准则将会带来很大的好处。一些通用的准则如下:

时钟命名规则

为了保证综合脚本可以更轻松地处理所有的时钟信号,有必要对整个设计使用一个确定的命名步骤。例如,系统时钟可以命名为sys_clk,发送时钟可以命名为tx_clk,接收时钟可以命名为rx_clk等。这样就可以在脚本中通过通配符来对所有时钟进行操作。

分模块设计

分块化设计是设计中含多时钟的模块时常用的另一种有效技术,如下所述:
1)每个模块只应当在单个时钟下工作。
2)在信号跨时钟域传输时,使用同步器模块,以使所有信号在进入某个时钟域内的模块时,与该模块的时钟保持同步。
3)同步器模块的规模应尽可能小。

将整个设计分割成模块的优点在于使得静态时序分析变得很简单,因为所有输出或输入某时钟域的信号都与使用该时钟的模块保持同步。

一个典型的分块化设计如下:
在这里插入图片描述

跨时钟域

  • 控制信号的传输(单bit信号)

在设计中,如果将一个异步信号直接送给若干个并行工作的触发器,将会大大增加亚稳态事件发生的概率,因为有可能有多个触发器进入亚稳态。为了避免形成这种情况下的亚稳态,我们可以使用同步触发器的输出信号来取代异步信号。

为了减少亚稳态影响,可以使用多级同步器,即将两个或多个触发器串联起来组成的同步电路。

这种方法的一个缺点,也可以看作同步器电路不可避免地开销,就是增加了电路的整体延时。

在大多数多时钟域设计中,使用两级同步电路就足以避免亚稳态的出现了。所以,只有在时钟频率非常高的设计中才要求使用三级同步器电路。

  • 数据信号的传输(多bit信号)

在多时钟域设计中,数据经常会从一个时钟域传输到另一个时钟域。以下是保证数据正常地在不同时钟域间传输的两种方法:
1)使用握手信号。
2)使用异步FIFO。

在第5节和第7节中将详细讲述。

4.跨时钟域

如果多个时钟都起源于同一时钟,并且它们的相位和频率关系是已知的,那么这些时钟可以看成是跨同步时钟域的时钟。按照相位和频率的关系,可以将这些时钟分成以下类型:

同频零相位差时钟

在这种情况中,两个完全相同的时钟clk1和clk2具有同样的频率和零相位差,他们是完全相同的。在这里的数据传输并不算是跨时钟域,这种情况下,只要静态时序分析能够通过,就不会出现亚稳态问题和数据丢失或不一致的问题。

同频恒定相位差时钟

这些时钟有相同的时钟周期,但是相位差恒定。典型的例子是某个时钟相对于其上级时钟发生了相位移动,如下所示:
在这里插入图片描述
clk1相对于clk2相位前移了3T/4个单位时间,每当数据从clk1传输到clk2时,由于更小的建立时间/保持时间裕量,对组合逻辑的延时约束都会变得更紧。如果组合逻辑的延时能保证满足采样沿处的建立时间和保持时间的要求,数据就可以正确地传输,并且不会有亚稳态产生。在这种情况下是不需要同步器的,只要设计的STA通过就可以了。

一般会在STA中创建这种情况以保证满足时序要求。如果组合逻辑有更多延时,通过在发射边沿和捕获边沿加入偏移,会有助于满足时序的要求。

非同频、可变相位差时钟

整数倍频率的时钟

在这种情况下,一个时钟的频率是另一个时钟的整数倍,并且它们有效边沿的相位差是可变的。这两个时钟的有效边沿之间可能的最小相位差始终等于其中较快的那个时钟的时间周期。

在这里插入图片描述

如图,clk1的频率是clk2的三倍,假定clk1周期为T,则clk2可以用来捕获数据的时间可能是T、2T、3T,这取决于数据在时钟clk1的哪个边沿发出。因此,任意路径的最差延迟都应在时钟边沿相位差为T时满足建立时间的要求。最差保持时间检查应当在时钟边沿相位差为零时进行。

在上述情况中,都有较快时钟的一个完整的周期用来传输数据,以使其能正确地捕捉,所以它通常都可以保证满足建立时间和保持时间的要求。

由于在这里数据由较快时钟发出,并由较慢时钟捕获,那么为了避免数据丢失,源数据应该保持至少一个目的时钟周期的稳定状态。可以使用一个简单的FSM来满足这一要求,如能使源数据每三个源时钟改变一次,就不会出现丢数据的问题了。

非整数倍频率的时钟

这种情况指一个时钟的频率是另一个时钟的非整数倍,而且它们有效边沿的相位差是可变的。与前面提到的各时钟之间保持整数倍关系不同,两时钟之间的最小相位差足以使亚稳态产生。至于亚稳态是否真的发生,取决于实际的频率倍数和设计工艺。下面介绍三种不同的情况。
1)在源时钟和目的时钟有效沿之间有足够大的相位差,所以不会有亚稳态产生。
2)源时钟和目的时钟有效沿非常接近,导致产生亚稳态问题。然而,在这里时钟频率倍数关系需要满足以下条件,即一旦有时钟边沿接近出现,下一个时钟周期就会留出足够大的时间冗余,,使得数据的捕获不会出现违背建立时间或保持时间的要求。
3)两个时钟的时钟沿在许多连续的周期中都非常接近。这与异步时钟的行为很相似,但由于这两个时钟的源头相同,所以它们之间的相位差是可以计算出来的。

在数据的传输时,应注意:
1)在数据从慢时钟域到快时钟域时,必须增加逻辑以保证数据在快时钟域中只取样一次,这时就不会出现数据丢失的现象。
2)在数据从快时钟域到慢时钟域时,可能出现数据丢失,为了解决这个问题,必须将源数据保持至少一个目标时钟周期,以保证在两个连续变换的源数据之间至少有一个目标时钟到达。
3)在时钟间相位差异很小的情况,数据需要保持至少两个目的时钟周期。这既适用于从快到慢的传输,也适用于从慢到快的传输。可以通过使用简单的FSM对源数据产生进行控制完成这一任务。但数据不连贯的问题仍然存在。此时,握手和FIFO对于传输数据更为有效,因为它们也解决了数据不连贯的问题。

5.握手信号方法

下图是由两个时钟域分割成的两个单独的系统:

在这里插入图片描述
使用握手信号xack和yreq,系统X将数据发送给系统Y,具体过程如下:
1)发送器系统X将数据放到数据总线上并发出xreq(请求)信号,表示有效数据已经发到接收器系统Y的数据总线上。
2)把xreq信号同步到接收器的时钟域yclk上。
3)接收器在识别xreq同步的信号yreq2后,锁存数据总线上的信号。
4)接收器发出确认信号yack,表示其已经接受了数据。
5)接收器发出的yack信号同步到发送时钟xclk上。
6)发送器在识别同步的xack2的信号后,将下一个数据放到数据总线上。

握手信号序列的时序如下所示:
在这里插入图片描述
从图中可以看出,安全地将一个数据从发送器传输到接收器需要5个时钟周期。

  • 握手信号的要求

数据应该在发送时钟域内稳定至少两个时钟上升沿。
请求信号xreq的宽度应该超过两个上升沿时钟,否则从高速时钟域向低速时钟域传递可能无法捕捉到该信号。

  • 握手信号的缺点

跨时钟域传输单个数据的延迟比使用FIFO传输相同的数据要大得多。

6.使用同步FIFO传输数据

下图是一个同步FIFO的通用架构。一个双端口RAM(DPRAM)用作FIFO的存储器以使读、写可以独立进行。

在这里插入图片描述

通过读、写指针产生各自的读、写地址,送到读、写端口。写指针指向下一个要写入的地址,读指针指向下一个要读取的地址。有效写使能使使得写指针递增,而有效的读使能使得读指针递增。

图中的DPRAM可以同步读取或异步读取。对于同步读操作,应该在数据在FIFO输出端有效前提供明确的读信号;对于异步读操作,DPRAM没有寄存的数据输出;有效数据在写入后即可用(先读数据然后递增指针值)。

同步FIFO判断空满可以使用两种方法:

  • 在写操作使两个指针在下个时钟保持相等时,FIFO满。在读操作使两个指针在下一个时钟保持相等时,FIFO变空。
fifo_full  = (read_pointer == (write_pointer + 1)) AND "write"
fifo_empty = (write_pointer == (read_pointer +1 )) AND "read"
  • 使用计数器来持续指示FIFO中空或满位置的个数。

计数器的宽度要与FIFO的深度相等以使其能记录FIFO中数据的最大个数。计数器在复位时初始化为0,随后的任何写操作会将其递增1,任何读操作会使其递减1。
这种方法虽然简单,但是由于要求增加额外的硬件(比较器),所以效率要低一些。

7.异步FIFO

异步FIFO用来在两个异步时钟域间传输数据。如下:

在这里插入图片描述
1)System X使用xclk将数据写入FIFO,并由System Y使用yclk读出。
2)fifo_full和fifo_empty信号负责对上溢和下溢情况的监控。在fifo_full置起时数据不应写入FIFO,否则会将FIFO内的数据覆盖掉;在fifo_empty置起时不应读取FIFO,否则会读出垃圾数据。
3)与握手信号不同,异步FIFO用于在对性能要求较高的设计中,尤其是时钟延迟比系统资源更为重要的环境中。
4)为了避免亚稳态的产生,应该避免用二进制计数器实现指针,应使用格雷码取代二进制计数。
5)对于FIFO空计算,把写指针同步到读时钟并与读指针进行比较;对于FIFO满计算,把读指针同步到写时钟并与写指针进行比较。
6)当最高有效位不同,而其余位相同时,FIFO为满;当所有位都相同时,FIFO为空。

典型的异步FIFO结构如下:
在这里插入图片描述

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

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

相关文章

linux环境验证c++程序库间调用

目录 0 背景 1 VMware、以及linux安装 2 安装QtCreator 2.1 下载速度慢,使用国内镜像 2.2 执行有问题,修改权限 2.3 验证是否可用 2.4 调试(待解决) 3 开发程序进行验证 4 其他问题 4.1 虚拟机与主机无法拷贝文件&#x…

python3-函数与参数以及空值

目录画星星空值None函数与Lambda一、函数定义二、引用变量查找三、传值调用函数四、函数对象五、函数文档旋转角度绘制函数图形画星星 程序2-7-7主要使用turtle.forward前进操作和turtle.left左转操作在屏幕上画星星。 #!/usr/bin/env python3 # -*- coding: utf-8 -*- #2-7-…

操作符详解(1)

目录 一、操作符分类 二、算术操作符 三、位移操作符 1、<< 左位移操作符号 2、>> 右位移操作符 四、位操作符 1、& --- 按位与 2、| --- 按位或 3、^ --- 按位异或 变态题 五、赋值操作符 符合赋值符 一、操作符分类 操作符也被称为运算符。 …

小程序注册安装以及新手快速入门教程

一、注册并安装微信小程序 1.打开 https&#xff1a;//mp.weixin.qq.com/ 网址&#xff0c;点击立即注册即可进入小程序开发账号的注册流程&#xff0c;注册的账号类型选择小程序。 2.根据注册要求注册&#xff0c;发送邮箱信息&#xff0c;接收到微信团队发送的邮箱信息后&am…

水泥行业工业互联网平台(CCPS)解决方案

水泥行业经过过去十年的发展和调整&#xff0c;基本实现了集团化。集团管控当前面临的主要问题是数字的分散化和碎片化&#xff0c;建设工业互联网是新时期加强集团管控的必经之路。 CCPS平台优势 1.融合SOA理念的架构平台和系统框架。具有跨平台、易维护、可集成、可扩展、分…

Spark - 介绍及使用 Scala、Java、Python 三种语言演示

一、Spark Apache Spark 是一个快速的&#xff0c;多用途的集群计算系统&#xff0c; 相对于 Hadoop MapReduce 将中间结果保存在磁盘中&#xff0c; Spark 使用了内存保存中间结果&#xff0c; 能在数据尚未写入硬盘时在内存中进行运算。 Spark 只是一个计算框架, 不像 Hadoo…

几率波量子雷达/反事实量子通信

物理学中有哪些不可思议&#xff08;违背直觉&#xff09;的事实&#xff1f; - 知乎 利用粒子的双缝干涉原理&#xff0c;可以在物体偏离的情况下&#xff0c;探测到物体。 我们不需要用光子照射物体&#xff0c;就能感知到是否有物体存在。 这是什么意思&#xff1f; 这就…

3516DV300 推流

3516DV300 推流 基于ffmpeg将编码后的264文件&#xff08;或者直接推流&#xff09;推流出去&#xff0c;使用ffplay进行播放和验证。 ffmpeg版本&#xff1a;N-109124-g63db6a02a7 RELEASE&#xff1a;5.1.git ffmpeg udp文件推流 命令行 这里用的是开发板编码出的码流&…

MIT 6.S081 Operating System Lecture5 (随意的笔记)

系列文章目录 文章目录系列文章目录TrapsA questionsyscallTraps 用户空间和内核空间的切换通常被称为 trap example: shwrite()ecall(); //write 通过 ecall() 指令执行系统调用之后跳转执行到 usertrap 如下图的执行过程。最终sys_write将要显示的数据输出到 console 上 …

【Java 设计模式】创建者模式 之原型模式

原型模式1 定义2 角色3 三好学生案例3.1 浅克隆实现3.1.1 浅克隆定义3.1.2 类图3.1.3 实现3.2 深克隆实现3.2.1 深克隆定义3.2.2 实现1 定义 将一个已经创建好的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象。 2 角色 抽象原型类&#xff1…

Chrome的使用技巧

1. 请求重发 F12 -> Network -> Replay XHR 2. 修改请求参数后重发 F12 -> Network -> Copy -> Copy as fetch 然后在 Console 控制台 ctrl + v ,而后就可以对请求的参数进行编辑,回车就会重更新请求 再在 Network 就可以看到这个请求了 3. 复制对象 (…

echarts入门到实战

官网地址&#xff1a;Apache ECharts 前言 我们应该经常看到或听到”数据可视化“这个词&#xff0c;他其实就是将数据通过各种图表更加直观的展现变化趋势&#xff0c;对比&#xff0c;峰值等等。数据可视化也是未来的趋势。 作为前端程序员&#xff0c;数据可视化也是我们必…

多任务全景感知YOLOPv2:目标检测、freespace、车道线

今年年初出了一片《端到端的多任务感知网络HybridNet&#xff0c;性能优于YOLOP》&#xff0c;论文 HybridNets: End2End Perception Network&#xff0c;代码已开源&#xff0c;在目标检测、车道线、freespace的多任务感知任务上性能优于YOLOP&#xff0c;取得了新SOTA。视频效…

大厂Java面试必备面试题:基础语法-数据类型-编码-注释-运算符-关键字-流程控制语句

基础语法 数据类型 Java有哪些数据类型 定义&#xff1a;Java语言是强类型语言&#xff0c;对于每一种数据都定义了明确的具体的数据类 型&#xff0c;在内存中分配了不同 大小的内存空间。 分类&#xff1a; 基本数据类型 Java源代码---->编译器---->jvm可执行的Java字…

如果Controller里有私有的方法,能成功访问吗?

背景 写代码的时候&#xff0c;复制粘贴的时候&#xff0c;没注意到方法的属性&#xff0c;就导致了Controller里有了一个私有的方法&#xff0c;然后访问这个接口的时候就报了空指针异常&#xff0c;找了好久才找到是这个原因。 来看一个例子 Service public class MyServi…

Netty面试经典问题

目录 Netty是怎么实现高性能设计的&#xff1f; 简单介绍一下对于Netty的了解 Netty的高性能表现在哪些方面 介绍一下Java中的几种IO模型 一个通俗例子读懂BIO、NIO、AIO BIO与NIO的区别 Netty的线程模型 什么是零拷贝 Netty中的模块组件&#xff1a; Netty 中有哪种…

Linux rpm方式安装 MYSQL8.0

1.卸载原有的mysql 数据库 1&#xff09;查找安装的mysql软件包和依赖包&#xff1a; rpm -pa | grep mysql 显示结果&#xff1a; mysql80-community-release-el7-1.noarch mysql-community-server-8.0.11-1.el7.x86_64 mysql-community-common-8.0.11-1.el7.x86_64 mysql…

ReLU,Sigmoid,Tanh,softmax【基础知识总结】

一、ReLU&#xff08;Rectified Linear Activation Function&#xff09;1、优点2、缺点补充二、Sigmoid1、优点2、缺点三、Tanh四、Sigmoid 和 Tanh 激活函数的局限性五、softmax&#xff08;待补充&#xff09;激活函数的引入是为了增加神经网络模型的非线性&#xff0c;没有…

【机器学习入门项目10例】(九):聚类算法用于降维,KMeans的矢量量化应用(图片压缩)

🌠 『精品学习专栏导航帖』 🐳最适合入门的100个深度学习实战项目🐳🐙【PyTorch深度学习项目实战100例目录】项目详解 + 数据集 + 完整源码🐙🐶【机器学习入门项目10例目录】项目详解 + 数据集 + 完整源码🐶🦜【机器学习项目实战10例目录】项目详解 + 数据集 +

万字长文!对比分析了多款存储方案,KeeWiDB最终选择自己来

大数据时代&#xff0c;无人不知Google的“三驾马车”。“三驾马车”指的是Google发布的三篇论文&#xff0c;介绍了Google在大规模数据存储与计算方向的工程实践&#xff0c;奠定了业界大规模分布式存储系统的理论基础&#xff0c;如今市场上流行的几款国产数据库都有参考这三…