跨时钟域电路设计——多bit信号FIFO
多个bit信号的跨时钟域仅仅通过简单的同步器同步时不安全的。
如下图:
虽然信号都同步到目的时钟域,可完成的功能却与设计的初衷不相符。
解决方案之一为对信号进行格雷码编码,但此方案只适用于连续变化的信号。另一种方案为增加新的控制信号en,确保传输信号稳定时采样。比如在传输信号稳定输出1、2个clk后再进行采样。
一、异步FIFO
上面说到的为多bit指示信号传输,而数据流的传输与指示信号不同在于:数据流大多具有连续性,及背靠背传输;数据流要求信号具有较快的传输速度。主要的方案是利用FIFO进行传输。
异步FIFO结构如下:
1、FIFO的参数
- 宽度:一次读写操作的数据位
- 深度:可以存储的N位数据的数目(宽度为N)
- 满标志:FIFO已满或将要满时,由FIFO的状态电路送出的信号,阻止FIFO写操作
- 空标志:FIFO已空或将要空时,由FIFO的状态电路送出的信号,阻止FIFO读操作
- 读时钟:读操作所遵循的时钟
- 写时钟:写操作所遵循的时钟
2、设计空满标志位电路
正确产生空满信号是任何FIFO设计的关键。其设计原则是:能写满而不溢出,能读空而不多读。
- 在写时钟域下,判断读写指针的关系,生成满标志
- 在读时钟域下,判断读写指针的关系,生成空标志
对于空满判断,可看下图
在判断空和满的情况下,都会有读写指针相等的情况,可采用以下方法进行区分:
在地址中额外添加一个位,当写指针增加并越过最后一个地址位时,就将这个额外的位(MSB)加一,其他位回0。读指针也进行同样的操作。额外的位作为折回标志位。如果两个指针的MSB不同,其余位相等,说明读指针比写指针少折回了一次,这种情况下,FIFO为满。而读写指针所有位都相等,说明折回次数相等,此时FIFO为空。
解决空满判断后,则是读写指针同步的问题。二进制的读写指针通常位宽超过了1bit,而多比特信号是不可以直接使用两级同步器的。这时,考虑到FIFO地址是连续变化的,我们使用格雷码来进行传输。格雷码相邻两个数值只有一位发生变化,0和最大数之间也只有一位不同。
而转换为格雷码进行传输后,如何进行空满判断?如下图:
至于为什么选择格雷码进行传输,我们来看格雷码传输失效的情况:
格雷码传输失效,只有一位同步出错,此时地址没有跳变。如果是写地址同步失效,用这个错误的写地址在读时钟域进行空判断时不会出错,最多是让空标志在FIFO不是真正空的时候产生,而不会产生空读的情况。格雷码保证的是同步后的读写地址即使在出错的情况下依然能够保证FIFO功能的正确性。
3、设计FIFO的深度
先从一个例题入手,
假设FIFO的写时钟为100MHZ,读时钟为80MHZ。在FIFO输入侧,每100个时钟,写入80个数据;FIFO读入测,每个时钟读取一个数据。设计合理的FIFO深度,使FIFO不会溢出。
我们需要考虑数据轻载和重载的情况,对缓存能力要求最高的情况为背靠背传输,则FIFO深度为160-(160/100)*80=32
我们将问题一般化:
- 写时钟频率WCLK
- 读时钟频率RCLK
- 写入测每B个时钟周期有A个数据写入
- 读取测每Y个时钟周期有X个数据读出
则FIFO的深度为,其中burst_length与写入测情况有关。
跨时钟域电路设计——多bit信号FIFO相关推荐
- 跨时钟域电路设计——单bit信号
前面提到了简单的双电平锁存器,下面是一些单bit同步电路. 一.慢时钟域向快时钟域 边沿检测同步器 将慢时钟域的脉冲搬移并缩小为快时钟域的脉冲. 既可以检测上升沿,也可以检测下降沿. 如上图,慢时钟下 ...
- 同步电路与跨时钟域电路设计1——单bit信号的跨时钟域传输(同步器)
同步电路与全局异步电路 同步电路 同步电路的定义 即电路中的所有受时钟控制的单元(如触发器Flip Flop.寄存器Register),全部由一个统一的全局时钟控制. 例子: 两个触发器都受同一个时钟 ...
- 跨时钟域电路设计方法
在数字电路设计过程中 ,难免会遇到某个信号需要跨越不同时钟域的情况. 如果对跨时钟域的信号不做妥善的处理,跨越时钟域后,信号可能发生亚稳态,传播亚稳态,导致电路工作异常.并且,由跨时钟域处理不当引发的 ...
- 异步时钟引起的亚稳态问题和跨时钟域电路设计
本文总结由数字电路设计的异步时钟引起的亚稳态问题,并针对亚稳态问题提出的处理方法和跨时钟域电路设计方法.重点是分析由异步时钟引起的跨时钟域CDC问题,后续将会总结由复位引起的电路亚稳态问题. 一.亚稳 ...
- 异步fifo_数字IC校招基础知识点复习(五)——跨时钟域涉及part2(异步FIFO)
1.跨时钟域设计(CDC)-part 2 在上一篇中我们主要关注的是单比特的控制信号,而对于多比特信号的跨时钟域传输则需要一些其他的手段. 首先需要明确的是,一般不采用对多比特信号中的每个比特单独使用 ...
- 基于FPGA的跨时钟域信号处理——专用握手信号
转自:http://bbs.ednchina.com/BLOG_ARTICLE_253787.HTM 在逻辑设计领域,只涉及单个时钟域的设计并不多.尤其对于一些复杂的应用,FPGA往往需要和多个时钟域 ...
- 跨时钟域信号处理——专用握手信号
下图是一个基本的握手通信方式.所谓握手,意即通信双方使用了专用控制信号进行状态指示.这个控制信号既有发送域给接收域的,也有接收域给发送域的,有别于前面的单向控制信号检测方式 使用握手协议方式处理跨时钟 ...
- 跨时钟域电路设计——结绳法
信号从快时钟域到慢时钟域过渡时,慢时钟可能无法对快时钟变化太快的信号进行采样. 之前的同步器法对两个时钟间的关系有要求,结绳法适用于任何时钟域之间的过渡. 结绳法的原理是将快时钟信号的脉冲周期延长,等 ...
- #Verilog HDL# 跨时钟域电路设计之结绳法(3)
信号从快时钟域到慢时钟域过渡时,慢时钟可能无法对快时钟变化太快的信号进行采样. 之前的同步器法对两个时钟间的关系有要求,结绳法适用于任何时钟域之间的过渡. 结绳法的原理是将快时钟信号的脉冲周期延长,等 ...
最新文章
- 返回一个整数数组中最大子数组的和
- getInvokeArg()和setParam配合使用
- java改变变量编码方式_Java 10将如何改变您的编码方式
- linux系统nginx启动不了,nginx启动不了,求大神帮助!
- Mysql 数据库默认值选 ‘‘“ 、Null和Empty String的区别
- java中bmi的制作_Axure教程:在线BMI计算器制作
- Luogu P2309 loidc,卖卖萌
- 史上最全Oracle数据泵常用命令
- 将unsigned char字符串以16进制的字符串显示
- No SOURCES given to target: mpeg
- qq空间显示手机型号android,任意修改QQ空间发表说说显示的手机型号
- libVLC 播放控制
- 由于压摆率引起的失真问题
- matlab整流仿真,基于MATLAB的整流电路的建模与仿真
- matlab识别中国象棋棋盘,c – 使用OpenCV在棋盘中检测中国象棋棋子
- 矩阵的特征值、特征向量、特征子空间
- 11-ES2015基础语法
- android自定义桌面(launcher)
- 公众号二维码怎么生成
- JAVA笔记- JAVA集合类之HashMap集合
热门文章
- BitSet之为什么用long保存信息
- [转]第一章 Windows Shell是什么 【来源:http://blog.csdn.net/wangqiulin123456/article/details/7987862】...
- 【2011-6】【奇数】
- IIS6.0,Apache低版本,PHP CGI 解析漏洞
- 数据结构 最长公共子序列问题
- Spring bean三种创建方式
- 3013-04-13 腾讯笔试
- Trust is the most important thing to the team!
- 砂.随笔.二十五.如果你是氧气
- 如何用distinct消除重复记录的同时又能选取多个字段值?