一种基于fpga的跨时钟域深度自行配置fifo系统

文档序号:1544815 发布日期:2020-01-17 浏览:25次 >En<

阅读说明:本技术 一种基于fpga的跨时钟域深度自行配置fifo系统 (Cross-clock-domain depth self-configuration FIFO system based on FPGA ) 是由 张润曦 周洲 石春琦 刘元 李延中 翁冰 于 2019-09-16 设计创作,主要内容包括:本发明公开了一种基于FPGA的跨时钟域深度自行配置FIFO系统,提供了一种基于FPGA的能够综合的异步FIFO,FIFO的深度位宽能够自行配置,不需要通过增加一位的方式来判别FIFO的空满状态,也不需要再将已经转换好的格雷码地址再回复到之前的二进制地址码,直接通过二进制地址转换成的格雷码地址进行比较,相比传统异步FIFO而言,有效减少了芯片面积,提高了数据传输速率。(The invention discloses a cross-clock domain depth self-configuration FIFO system based on an FPGA, and provides an asynchronous FIFO which is based on the FPGA and can be synthesized, wherein the depth bit width of the FIFO can be self-configured, the empty and full state of the FIFO is not required to be judged by adding one bit, the converted Gray code address is not required to be returned to the previous binary address code, and the Gray code address converted by the binary address is directly compared.)

一种基于FPGA的跨时钟域深度自行配置FIFO系统

技术领域

本发明属于数字集成电路设计领域,主要涉及跨时钟域数据的传输交互问题。

背景技术

在芯片系统中,高速实时数据采集、不同时钟域中的高性能数据传输都离不开异步FI先入先出队列(FIFO)作为缓存。集成电路规模的不断扩展,在现在的集成电路芯片中,一个系统往往需要多个不同的时钟控制。但是由于数据的跨时钟域传输,使得数据之间的通信和交互受到了阻碍。与此同时,跨时钟域传输数据极易造成亚稳态现象。异步FIFO在解决数据的跨时钟域传输中有着独特的优势,能够顺序存储连续的数据,将数据按照先进先出的原则读取出来。由赛灵思Xilinx公司的Vivado软件自带异步FIFO的IP核,但是Vivado软件自身的IP核比较固定,应用场景比较有限,通用性差,特别是不能满足复杂情况下跨时钟域传输数据的设计要求。现有的一些技术,在对于跨时钟域传输数据的缓存电路设计,存在电路结构复杂,设计逻辑繁琐,通用性差,没有很好的普适性。FPGA,即现场可编程逻辑门阵列,它是作为专用集成电路领域中的一种半定制电路而出现的。由于FPGA强大的并行能力,近年来广泛应用于网络接口、图像处理、视频信号处理、数字通信等领域。利用FPGA的内部资源来构建可综合异步FIFO系统是很有效的途径。

发明内容

本发明的目的是解决不同时钟域下数据传输的缓存问题,提供一种基于FPGA的可综合跨时钟域深度可配置的FIFO。本发明占用FPGA内部资源较少,电路逻辑简单,通用性强,同时数据的深度以及位宽可自行配置,数据传输速率高。

实现本发明目的的具体技术方案是:

一种基于FPGA的跨时钟域深度自行配置FIFO系统,特点是该系统包括双端口RAM存储器模块、写地址模块、满标志逻辑判断模块、同步到写时钟域模块、读地址模块、空标志逻辑判断模块及同步到读时钟域模块;其中:

所述写地址模块和满标志逻辑判断模块在写时钟域中工作;所述读地址模块和空标志逻辑判断模块在读时钟域中工作;

所述写地址模块有三个输入端口:写时钟端口wclk、写复位端口wrst及写使能端口wr_en;两个输出端口:写地址端口waddr及格雷码写地址端口wptr;所述写地址端口waddr与双端口RAM存储器模块的写地址输入端连接,所述格雷码写地址端口wptr与满标志逻辑判断模块的输入端口连接;

所述满标志逻辑判断模块有四个输入端口:写时钟端口wclk、写复位端口wrst、格雷码写地址端口wptr及读地址同步写时钟域端口wq2_rptr,所述读地址同步写时钟域端口wq2_rptr与同步到写时钟模块连接,有一个输出端口:满标志端口wfull;所述满标志端口wfull与双端口RAM存储器模块连接;

所述读地址模块有三个输入端口:读时钟端口rclk、读复位端口rrst及读使能端口rd_en,由外部输入提供;两个输出端口:读地址端口raddr及格雷码读地址端口rptr;所述读地址端口raddr与双端口RAM存储器模块的读地址输入端连接,所述格雷码读地址端口rptr与空标志逻辑判断模块的输入端口连接;

所述空标志逻辑判断模块有四个输入端口:读时钟端口rclk、读复位端口rrst、格雷码读地址端口rptr及写地址同步读时钟域端口rq2_wptr;所述写地址同步读时钟域端口rq2_wptr与同步到读时钟域模块连接;一个输出端口:空标志端口rempty,所述空标志端口rempty与双端口RAM存储器模块连接;

所述同步到写时钟域模块在写时钟域下工作,其输入与格雷码读地址端口rptr连接;

所述同步到读时钟域模块在读时钟域下工作,其输入与格雷码写地址端口wptr连接;

所述双端口RAM存储器模块有十一个输入端口,分别为写数据端口wdata、写时钟端口wclk、写复位端口wrst、写使能端口wr_en、写地址端口waddr、满标志端口wfull、读时钟端口rclk、读复位端口rrst、读使能端口rd_en、读地址端口raddr及空标志端口rempty,一个输出端口:读数据端口rdata。

所述双端口RAM存储器模块的读数据端口rdata只在读时钟域下进行读取数据;所述写数据端口wdata只在写时钟域下写入数据;所述空标志端口为1时,不能读取数据;满标志端口为1时,不能写入数据;所述双端口RAM存储器模块的读写数据位宽自行设定,读写地址自行配置。

所述同步到写时钟域模块,在写时钟的控制下,将在读地址模块中已经在读时钟下同步过一次的格雷码读地址端口wptr通过两级D触发器进行同步成wq2_rptr。目的是为了进一步降低跨时钟域传输下出现数据亚稳态传输的概率。

所述同步到读时钟域模块,在读时钟的控制下,将在写地址模块中已经在写时钟下同步过一次的格雷码写地址端口rptr通过两级D触发器进行同步成rq2_wptr。目的是为了进一步降低跨时钟域传输下出现数据亚稳态传输的概率。

所述写入数据在写使能端口wr_en有效并且满标志端口wfull不为1的时候才能进行写入数据。

所述读取数据在读使能端口rd_en有效并且空标志端口rempty不为1的时候才能进行读取数据。

所述满标志逻辑判断模块,判断逻辑为格雷码写地址端口wptr数据和同步写时钟域端口wq2_rptr数据的最高位不同,并且次高位也不同。

所述空标志逻辑判断模块,判断逻辑为格雷码读地址端口rptr数据和同步读时钟域端口rq2_wptr数据相同。

本发明的优点是:

1、本发明的电路结构简单,通用性强。

2、本发明综合出来的电路占用资源少,面积小。

3、本发明直接通过格雷码地址进行比较,判断逻辑简单,使得数据传输速率较快。

4、本发明的数据位宽和存储深度可自行设定,灵活方便。

附图说明

图1为本发明系统框图;

图2为本发明的仿真图。

具体实施方式

以下结合附图及实施例对本发明进行详细描述。

实施例1

参阅图1,本实施例包括双端口RAM存储器模块、写地址模块、满标志逻辑判断模块、同步到写时钟域模块、读地址模块、空标志逻辑判断模块及同步到读时钟域模块组成。

本发明的具体工作情况如下:

1、首先确定写时钟wclk和读时钟rclk的大小以及外部所写的数据内容。

2、确定写复位wrst的状态是否为0,若为0,则系统处于复位状态,写地址、满标志处于初始值为0状态,此时不能进行写数据的操作。

3、确定读复位rrst的状态是否为0,若为0,则系统处于复位状态,读地址、空标志处于初始值状态,此时不能进行写数据的操作。

4、若写复位wrst无效,即为1时,此时若写使能wr_en有效并且满标志为0的时候,写地址自动加一,外部写入的数据就会被存储到双端口RAM存储器的低地址中。若写使能wr_en无效时候,则外部的数据无法写入到双端口RAM存储器中。

5、若读复位rrst无效,即为1时,此时若读使能rd_en有效并且空标志为0的时候,读地址自动加一,双端口RAM存储器的存储内容就会被读出。若写使能wr_en无效时候,则外部的数据无法写入到双端口RAM存储器中。

6、写地址每次进行加1的更新操作时候,都会被转换为对应格雷码,与此同时对应的格雷码都会被同步到写时钟域,以便后续进行同步到读时钟域的操作。

7、读地址每次进行加1的更新操作时候,都会被转换为对应格雷码,与此同时对应的格雷码都会被同步到读时钟域,以便后续进行同步到写时钟域的操作。

8、步骤6中同步在写时钟域中的格雷码在读时钟的上升沿被同步到读时钟域,并且经过两级D触发器,在时序上相当于延时两拍,成为wq2_rptr,送入满标志逻辑判断模块。

9、步骤7中同步在读时钟域中的格雷码在写时钟的上升沿被同步到写时钟域,并且经过两级D触发器,在时序上相当于延时两拍,成为rq2_wptr,送入空标志逻辑判断模块。

10、步骤8中的wq2_rptr与步骤6中的格雷码在写时钟域进行比较,若两组地址数据的最高位不同并且次高位也不同,则满标志wfull的值为1,否则满标志的值为0。满标志为1时,不能再进行任何写数据的操作。

11、步骤9中的rq2_wptr与步骤7中的格雷码在读时钟域进行比较,若两组地址数据完全相同,则空标志rempty的值1,否则空标志的值为0。空标志为1时,不能再进行任何读数据的操作。

12、如此循环上述过程。

实施例2

在Vivado2018.3版本的软件下,选用Xilinx公司的Artix系列的XC7A35T芯片,对本发明进行综合以及仿真。对双端口RAM存储器依次写入0x0d,0xe5,0x65,0x13数据,并从RAM读取这些数据。

外部给写时钟周期为20ns,给读时钟周期为40ns,同时读写使能信号由外部的随机函数随机产生。

读写复位信号的初始值为0,随后都拉高为1。

设置FIFO的深度为16,数据位宽为8。

参阅图2,可以看出RAM中的数据依次被读取,分别为0x0d,0xe5,0x65,0x13。说明本发明功能正确。

8页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种基于随机计算的无误差加法器

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类