跨时钟设计:异步FIFO设计

EETOP 2023-07-30 10:09
文章来源于IC的世界,作者IC小鸽

1、异步FIFO

在ASIC设计或者FPGA设计中,我们常常使用异步fifo(first in first out)(下文简称为afifo)进行数据流的跨时钟,可以说没使用过afifo的Designer,其设计经历是不完整的。废话不多说,直接上接口信号说明。

2、afifo接口信号说明  

如下表格为常见的afifo接口信号,非必须指的部分场景的afifo可能不存在此信号。不同公司对afifo接口的设计可能不一样,但是基本都包含了如下接口:wr表示write,写侧时钟域信号,rd表示read,读侧时钟域信号。

信号名称

位宽

必要性

含义

almost_full

1

非必须

将满信号,1表示afifo快满了,当afifo的有效数量大于配置时,置1

full       

1

非必须

afifo满信号,1表示afifo已满

empty      

1

非必须

1表示

rd_data    

[DATA_WIDTH-1:0]

必须

有效数据

ovf_int    

1

非必须

1表示上溢出,即afifo满了还有数据写入

udf_int    

1

非必须

1表示下溢出,即afifo空了外部逻辑还产生了读使能

data_count

[ADDR_WIDTH:0]  

非必须

afifo存储的数据量

cfg_almost_full_value

[ADDR_WIDTH:0] 

非必须

将满配置信号,一般由配置寄存器模块提供驱动

wr_rst_n            

1

必须

写侧复位

wr_clk              

1

必须

写侧时钟

wr_en               

1

必须

写使能,1表示有数据写入

wr_data             

[DATA_WIDTH-1:0]

必须

写数据

rd_rst_n            

1

必须

读时钟与复位

rd_clk              

1

必须

读时钟

rd_en               

1

必须

读使能

3、设计原理   

为了方便描述,本章节将以深度为8的afifo进行讲解,其中读写地址位宽为3,格雷码地址位宽为4。

         

图1 afifo结构图(来自eetop ThinkSpark


2:读写地址计算图

(1)存储模块:  

中间区域为memory存储模块,用于存储数据data,要么是1R1W的ram,要么是普通的寄存器。项目自研代码中,存储模块通常使用1R1W的ram,其需要memory生成器生成,需要与制造工艺匹配。而在soft IP中,针对小规格的afifo,为了方便,常常使用寄存器作为afifo的存储。

(2)写地址产生逻辑  

写地址waddr在wr_clk时钟域产生,有两个作用,作为存储模块的写地址并且产生格雷码waddr_gray。此种需要注意:waddr是递增的,且会翻转。如果afifo深度为8(n),则waddr位宽为3(log2(n) ),waddr计数到7后,再次写入则翻转为0。

(3)读地址产生逻辑  

读地址raddr在rd_clk时钟域产生,有两个作用,作为存储模块的读地址并且产生格雷码raddr_gray。此种需要注意:raddr是递增的,且会翻转。如果afifo深度为8(n),则raddr位宽为3(log2(n) ),raddr计数到7后,再次读出则翻转为0。

(4)读地址同步  

使用2级或者3级单bit同步器Synchronizer将读地址格雷码raddr_gray同步到wr_clk时钟域得到raddr_gray_sync,raddr_gray_sync进行格雷码逆转成二进制编码得到raddr_sync,用于产生将满信号和满信号。

在fpga设计中,2级单bit同步器Synchronizer就是2个串联的寄存器,在ASIC设计中,通常是定制的cell(会将两个/三个寄存器摆放靠得很近)。

(5)写地址同步器  

使用2级或者3级单bit同步器Synchronizer将写地址格雷码waddr_gray同步到rd_clk时钟域得到waddr_gray_sync,waddr_gray_sync进行格雷码逆转成二进制编码得到waddr_sync,用于产生将空信号和空信号。

(6)满信号产生逻辑  

此模块首先计算在wr_clk时钟域的剩余可写afifo深度,即wr_gap[3:0]=raddr_sync[2:0]+4d8(FIFO深度)-waddr[2:0],然后根据wr_gap[3:0]产生amost_full和full信号

always @(posedge wr_clk or negedge wr_rst_n)    if(~wr_rst_n)        full <= 1'b0;    else        full <= (!(|wr_gap)) || ((wr_gap==1)&wr_en);
always @(posedge wr_clk or negedge wr_rst_n)    if(~wr_rst_n)         begin            almost_full <= 1'b0;        end    else        begin            if( wr_data_cnt>=cfg_almost_full_value )                    almost_full <= 1'b1;            else                    almost_full <= almost_full;        end

         

(7)空信号产生逻辑  

此模块首先计算在rd_clk时钟域的可读afifo深度,即assign  {ovf_nc1,rd_gap} = waddr_sync - raddr,然后根据rd_gap[3:0]产生empty信号。

always @(posedge rd_clk or negedge rd_rst_n)    if(~rd_rst_n)        empty <= 1'b1;    else         empty <= (!(|rd_gap)) || ((rd_gap==1)&rd_en);         

4、重点说明  

(1)格雷码的优势  

格雷码的特点就是在递增,递减,或者翻转过程中,只会有1个bit位发生变化。因此单bit同步器Synchronizer同步后,只有存在变化的那一个bit可能会发生亚稳态。即使发生了亚稳态,体现的结果要么是0,要么是1,在格雷码上的同步效果就是当前clk周期没有同步(相当于delay了一个目的周期)到或者当前周期已采样到。

同时它也有自己的局限性,那就是循环计数深度必须是2的n次幂(也可以不是2的n次幂哦),否则就失去了每次只变化一位的特性。深度为16的二进制及格雷码递变表如下:

Binary                 Gray

0          0000                  0000

1          0001                  0001

2          0010                  0011

3          0011                  0010

4          0100                  0110

5          0101                  0111

6          0110                  0101

7          0111                  0100

8          1000                  1100

9          1001                  1101

10         1010                  1111

11         1011                  1110

12         1100                  1010

13         1101                  1011

14         1110                  1001

15         1111                  1000

         

0          0000                  0000  

(2)空信号计算方法的妙处  

在rd_clk时钟域计算可读数据量以及empty信号,看图2会发现,实际rd_gap永远小于等于真实可读数据量,能够保证empty为0时永远不会发生空读现象,即afifo没有数据,也进行了读操作。

(3)满信号计算方法的妙处  

在wd_clk时钟域计算可写数据量以及full信号,看图2会发现,实际wr_gap永远小于等于真实可写数据量,能够保证full为0时永远不会发生写溢出现象,即full为0时,afifo可能存在空闲位置。

(4)格雷码转二进制代码  

function       [ADDR_WIDTH:0]   gray2bin;    //to change the gray code to bin code
input [ADDR_WIDTH:0] gray_in; //input gray code reg [ADDR_WIDTH:0] gray_code; //reg gray reg [ADDR_WIDTH:0] bin_code; //bin code result integer i,j; //integer reg tmp; //tmp begin gray_code = gray_in; for(i=0;i<=ADDR_WIDTH;i=i+1) begin tmp=1'b0; for(j=i;j<=ADDR_WIDTH;j=j+1) tmp=gray_code[j]^tmp; bin_code[i]=tmp; end gray2bin= bin_code; endendfunction

         

5)二进制转格雷码  

always @(posedge rd_clk or negedge rd_rst_n)    if(~rd_rst_n)        raddr_gray  <= {(ADDR_WIDTH + 1){1'b0}};    else        raddr_gray  <= raddr ^ {1'b0,raddr[ADDR_WIDTH:1]};

         

         

5、结束语  

 Afifo代码写出来还不够,还需要设置约束条件,后期我们会再讲讲afifo的格雷码如何约束。


报名提醒

8月24日上午,IC芯片设计技术峰会(深圳)

EETOP EETOP半导体社区-国内知名的半导体行业媒体、半导体论坛、IC论坛、集成电路论坛、电子工程师博客、工程师BBS。
评论
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-12 10:13 64浏览
  • 应用环境与极具挑战性的测试需求在服务器制造领域里,系统整合测试(System Integration Test;SIT)是确保产品质量和性能的关键步骤。随着服务器系统的复杂性不断提升,包括:多种硬件组件、操作系统、虚拟化平台以及各种应用程序和服务的整合,服务器制造商面临着更有挑战性的测试需求。这些挑战主要体现在以下五个方面:1. 硬件和软件的高度整合:现代服务器通常包括多个处理器、内存模块、储存设备和网络接口。这些硬件组件必须与操作系统及应用软件无缝整合。SIT测试可以帮助制造商确保这些不同组件
    百佳泰测试实验室 2024-12-12 17:45 90浏览
  • 天问Block和Mixly是两个不同的编程工具,分别在单片机开发和教育编程领域有各自的应用。以下是对它们的详细比较: 基本定义 天问Block:天问Block是一个基于区块链技术的数字身份验证和数据交换平台。它的目标是为用户提供一个安全、去中心化、可信任的数字身份验证和数据交换解决方案。 Mixly:Mixly是一款由北京师范大学教育学部创客教育实验室开发的图形化编程软件,旨在为初学者提供一个易于学习和使用的Arduino编程环境。 主要功能 天问Block:支持STC全系列8位单片机,32位
    丙丁先生 2024-12-11 13:15 73浏览
  • 本文介绍瑞芯微RK3588主板/开发板Android12系统下,APK签名文件生成方法。触觉智能EVB3588开发板演示,搭载了瑞芯微RK3588芯片,该开发板是核心板加底板设计,音视频接口、通信接口等各类接口一应俱全,可帮助企业提高产品开发效率,缩短上市时间,降低成本和设计风险。工具准备下载Keytool-ImportKeyPair工具在源码:build/target/product/security/系统初始签名文件目录中,将以下三个文件拷贝出来:platform.pem;platform.
    Industio_触觉智能 2024-12-12 10:27 93浏览
  • 全球智能电视时代来临这年头若是消费者想随意地从各个通路中选购电视时,不难发现目前市场上的产品都已是具有智能联网功能的智能电视了,可以宣告智能电视的普及时代已到临!Google从2021年开始大力推广Google TV(即原Android TV的升级版),其他各大品牌商也都跟进推出搭载Google TV操作系统的机种,除了Google TV外,LG、Samsung、Panasonic等大厂牌也开发出自家的智能电视平台,可以看出各家业者都一致地看好这块大饼。智能电视的Wi-Fi连线怎么消失了?智能电
    百佳泰测试实验室 2024-12-12 17:33 90浏览
  • RK3506 是瑞芯微推出的MPU产品,芯片制程为22nm,定位于轻量级、低成本解决方案。该MPU具有低功耗、外设接口丰富、实时性高的特点,适合用多种工商业场景。本文将基于RK3506的设计特点,为大家分析其应用场景。RK3506核心板主要分为三个型号,各型号间的区别如下图:​图 1  RK3506核心板处理器型号场景1:显示HMIRK3506核心板显示接口支持RGB、MIPI、QSPI输出,且支持2D图形加速,轻松运行QT、LVGL等GUI,最快3S内开
    万象奥科 2024-12-11 15:42 96浏览
  • 首先在gitee上打个广告:ad5d2f3b647444a88b6f7f9555fd681f.mp4 · 丙丁先生/香河英茂工作室中国 - Gitee.com丙丁先生 (mr-bingding) - Gitee.com2024年对我来说是充满挑战和机遇的一年。在这一年里,我不仅进行了多个开发板的测评,还尝试了多种不同的项目和技术。今天,我想分享一下这一年的故事,希望能给大家带来一些启发和乐趣。 年初的时候,我开始对各种开发板进行测评。从STM32WBA55CG到瑞萨、平头哥和平海的开发板,我都
    丙丁先生 2024-12-11 20:14 86浏览
  • 时源芯微——RE超标整机定位与解决详细流程一、 初步测量与问题确认使用专业的电磁辐射测量设备,对整机的辐射发射进行精确测量。确认是否存在RE超标问题,并记录超标频段和幅度。二、电缆检查与处理若存在信号电缆:步骤一:拔掉所有信号电缆,仅保留电源线,再次测量整机的辐射发射。若测量合格:判定问题出在信号电缆上,可能是电缆的共模电流导致。逐一连接信号电缆,每次连接后测量,定位具体哪根电缆或接口导致超标。对问题电缆进行处理,如加共模扼流圈、滤波器,或优化电缆布局和屏蔽。重新连接所有电缆,再次测量
    时源芯微 2024-12-11 17:11 123浏览
  • 我的一台很多年前人家不要了的九十年代SONY台式组合音响,接手时只有CD功能不行了,因为不需要,也就没修,只使用收音机、磁带机和外接信号功能就够了。最近五年在外地,就断电闲置,没使用了。今年9月回到家里,就一个劲儿地忙着收拾家当,忙了一个多月,太多事啦!修了电气,清理了闲置不用了的电器和电子,就是一个劲儿地扔扔扔!几十年的“工匠式”收留收藏,只能断舍离,拆解不过来的了。一天,忽然感觉室内有股臭味,用鼻子的嗅觉功能朝着臭味重的方向寻找,觉得应该就是这台组合音响?怎么会呢?这无机物的东西不会腐臭吧?
    自做自受 2024-12-10 16:34 192浏览
  • 近日,搭载紫光展锐W517芯片平台的INMO GO2由影目科技正式推出。作为全球首款专为商务场景设计的智能翻译眼镜,INMO GO2 以“快、准、稳”三大核心优势,突破传统翻译产品局限,为全球商务人士带来高效、自然、稳定的跨语言交流体验。 INMO GO2内置的W517芯片,是紫光展锐4G旗舰级智能穿戴平台,采用四核处理器,具有高性能、低功耗的优势,内置超微高集成技术,采用先进工艺,计算能力相比同档位竞品提升4倍,强大的性能提供更加多样化的应用场景。【视频见P盘链接】 依托“
    紫光展锐 2024-12-11 11:50 83浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-11 17:58 98浏览
  • 一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J
    北汇信息 2024-12-11 15:45 124浏览
  • 铁氧体芯片是一种基于铁氧体磁性材料制成的芯片,在通信、传感器、储能等领域有着广泛的应用。铁氧体磁性材料能够通过外加磁场调控其导电性质和反射性质,因此在信号处理和传感器技术方面有着独特的优势。以下是对半导体划片机在铁氧体划切领域应用的详细阐述: 一、半导体划片机的工作原理与特点半导体划片机是一种使用刀片或通过激光等方式高精度切割被加工物的装置,是半导体后道封测中晶圆切割和WLP切割环节的关键设备。它结合了水气电、空气静压高速主轴、精密机械传动、传感器及自动化控制等先进技术,具有高精度、高
    博捷芯划片机 2024-12-12 09:16 99浏览
  • 全球知名半导体制造商ROHM Co., Ltd.(以下简称“罗姆”)宣布与Taiwan Semiconductor Manufacturing Company Limited(以下简称“台积公司”)就车载氮化镓功率器件的开发和量产事宜建立战略合作伙伴关系。通过该合作关系,双方将致力于将罗姆的氮化镓器件开发技术与台积公司业界先进的GaN-on-Silicon工艺技术优势结合起来,满足市场对高耐压和高频特性优异的功率元器件日益增长的需求。氮化镓功率器件目前主要被用于AC适配器和服务器电源等消费电子和
    电子资讯报 2024-12-10 17:09 106浏览
  • 在智能化技术快速发展当下,图像数据的采集与处理逐渐成为自动驾驶、工业等领域的一项关键技术。高质量的图像数据采集与算法集成测试都是确保系统性能和可靠性的关键。随着技术的不断进步,对于图像数据的采集、处理和分析的需求日益增长,这不仅要求我们拥有高性能的相机硬件,还要求我们能够高效地集成和测试各种算法。我们探索了一种多源相机数据采集与算法集成测试方案,能够满足不同应用场景下对图像采集和算法测试的多样化需求,确保数据的准确性和算法的有效性。一、相机组成相机一般由镜头(Lens),图像传感器(Image
    康谋 2024-12-12 09:45 104浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦