一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种异步FIFO存储器读写控制方法、装置及设备与流程

2021-12-08 00:02:00 来源:中国专利 TAG:

一种异步fifo存储器读写控制方法、装置及设备
技术领域
1.本发明涉及数据处理技术领域,更具体地说,涉及一种异步fifo存储器读写控制方法、装置、设备及存储介质。


背景技术:

2.随着集成电路技术的发展,需要越来越多地考虑到多时钟域的情况;多时钟域的电子系统中,各模块之间的接口部分的数据无法直接传输,否则会导致亚稳态产生数据传输错误。采用异步fifo(first input first output,先进先出)存储器可以方便地解决这一难题,它可以在时钟整体异步

局部同步的系统中解决在两个不同时钟域之间进行数据传输的难题,因而异步fifo存储器常被用来存储并缓冲两个异步模块之间的数据传输,作为它们之间的可靠接口,也因此异步fifo存储器在雷达、信号处理及多媒体技术等领域有着广泛的应用。
3.当前的异步fifo存储器在正常的读写功能基础上一般只提供空满指示信号、几乎空几乎满指示信号,这在一定程度上限制了异步fifo存储器的使用范围。例如,当使用一个异步fifo存储器(异步fifo存储器深度为128,数据位宽为8bit)缓存前级的ddr控制器或pcie的数据包时,因为前级数据是连续发送的,即当数据开始发送时,不管后级fifo是否还有空间可以存储数据,数据必须连续的从前级发送至后级;当前级数据包只发送了一部分数据时,如果此时后级fifo已经处于满状态,则后半部分的数据无法缓存至fifo中或者将之前的fifo中的数据覆盖,造成数据的丢失。
4.目前解决此问题的通用办法是判断异步fifo的空状态,当fifo为空时开始写入数据,因为此时可以写入的数据空间即为fifo本身的容量;在进行异步fifo存储器调用时会保证其数据空间不小于前级一次连续的写的数据大小。但这种方法存在很大效率浪费问题,还是以上例中的异步fifo存储器为例,当目前异步fifo存储器中缓存了64个数据位宽为8bit的数据,此时空满信号均为0,而前级想要发送一组32个8bit数据则只能等待fifo被读空,即空状态信号为1时才可读取,因为通过空满指示信号并不能判断此fifo中到底已经存储了多少数据;这样便降低了异步fifo存储器的使用效率。


技术实现要素:

5.本发明的目的是提供一种异步fifo存储器读写控制方法、装置、设备及存储介质,能够提高异步fifo存储器的使用效率。
6.为了实现上述目的,本发明提供如下技术方案:
7.一种异步fifo存储器读写控制方法,包括:
8.获取异步fifo存储器当前的读地址及写地址,并将所述读地址及所述写地址分别同步至相同的时钟域内,得到所述读地址对应的同步后读地址及所述写地址对应的同步后写地址;
9.基于所述异步fifo存储器的总容量、所述读地址、所述写地址、所述同步后读地址
及所述同步后写地址,确定所述异步fifo存储器的读信用积分及写信用积分;其中,所述读信用积分表示当前能基于所述异步fifo存储器读取的数据量,所述写信用积分表示当前能基于所述异步fifo存储器写入的数据量;
10.将所述读信用积分及所述写信用积分输出至相应的读写端,以供所述读写端基于所述读信用积分及所述写信用积分实现对所述异步fifo存储器的读写操作。
11.优选的,还包括:
12.接收所述读写端发送的读请求,确定当前的读独热码地址,将当前的读独热码地址转换为相应的读二进制编码地址,基于所述读二进制编码地址在所述异步fifo存储器中实现所述读请求对应的读操作,并在完成所述读操作后将当前的读独热码地址左移1位作为新的当前的读独热码地址;
13.接收所述写写端发送的写请求,确定当前的写独热码地址,将当前的写独热码地址转换为相应的写二进制编码地址,基于所述写二进制编码地址在所述异步fifo存储器中实现所述写请求对应的写操作,并在完成所述写操作后将当前的写独热码地址左移1位作为新的当前的写独热码地址;
14.相应的,获取异步fifo存储器当前的读地址及写地址,包括:
15.获取所述异步fifo存储器当前的读独热码地址及写独热码地址。
16.优选的,确定所述异步fifo存储器的读信用积分及写信用积分,包括:
17.若wr_addr_hot=>rd_addr_hot_wp,则按照下列公式计算单字节的写信用积分:
18.wr_credit_1=fifo_capa

log2wr_addr_hot log2rd_addr_hot_wp;
19.若wr_addr_hot<rd_addr_hot_wp,则按照下列公式计算单字节的写信用积分:
20.wr_credit_1=log2rd_addr_hot_wp

log2wr_addr_hot;
21.若wr_addr_hot_rp=>rd_addr_hot,则按照下列公式计算单字节的读信用积分:
22.rd_credit_1=wr_addr_hot_rp

rd_addr_hot;
23.若wr_addr_hot_rp<rd_addr_hot,则按照下列公式计算单字节的写读信用积分:
24.rd_credit_1=fifo_capa wr_addr_hot_rp

rd_addr_hot;
25.其中,单字节的写信用积分wr_credit_1表示当前能基于所述异步fifo存储器写入的单字节数量,单字节的读信用积分rd_credit_1表示当前能基于所述异步fifo存储器读取的单字节数量,fifo_capa表示所述异步fifo存储器的总容量,wr_addr_hot表示所述写地址,rd_addr_hot表示所述读地址,wr_addr_hot_rp表示所述同步后写地址,rd_addr_hot_wp表示所述同步后读地址。
26.优选的,计算单字节的写信用积分之后,还包括:
27.按照下列公式计算数据组的写信用分,并将所述写信用分向下取整得到所述数据组的写信用积分:
28.wr_credit_user=wr_credit_1/wr_credit_user_define;
29.按照下列公式计算数据组的读信用分,并将所述读信用分向下取整得到所述数据组的读信用积分:
30.rd_credit_user=rd_credit_1/rd_credit_user_define;
31.其中,数据组的写信用积分wr_credit_user表示当前能基于所述异步fifo存储器写入的数据组数量,数据组的读信用积分rd_credit_user表示当前能基于所述异步fifo存
储器读取的数据组数量,wr_credit_user_define及rd_credit_user_define分别为数据组与单字节之间的读换算单位及写换算单位。
32.优选的,还包括:
33.获取所述异步fifo存储器当前的读地址标志位及写地址标志位,并将所述读地址标志位及所述写地址标志位同步至与所述读地址及所述写地址相同的时钟域内,得到所述读地址标志位对应的同步后读地址标志位及所述写地址标志位对应的写同步后地址标志位;其中,所述读地址标志位及所述写地址标志位分别在所述读地址及所述写地址由最后一个地址跳转至第一个地址时取与当前的值相反的值;
34.基于所述异步fifo存储器的所述读地址、所述写地址、所述同步后读地址、所述同步后写地址、所述读地址标志位、所述写地址标志位、所述同步后读地址标志位及所述同步后写地址标志位,确定所述异步fifo存储器的空信号及满信号;其中,所述满信号表示所述异步fifo存储器的存储空间是否已满,所述空信号表示所述异步fifo存储器是否为空;
35.将所述空信号及所述满信号输出至相应的读写端,以供所述读写端基于所述空信号及所述满信号实现对所述异步fifo存储器的读写操作。
36.优选的,确定所述异步fifo存储器的空信号及满信号,包括:
37.若wr_addr_hot_rp=rd_addr_hot且wr_mark_rp=rd_mark,则空信号为1,若wr_addr_hot_rp=rd_addr_hot且wr_mark_rp!=rd_mark,则空信号为0,若wr_addr_hot_rp!=rd_addr_hot,则空信号为0;
38.若rd_addr_hot_wp=wr_addr_hot且rd_mark_wp=wr_mark,,则满信号为0,若rd_addr_hot_wp=wr_addr_hot且rd_mark_wp!=wr_mark,则满信号为1,若rd_addr_hot_wp!=wr_addr_hot时,则满信号为0。
39.优选的,将所述读地址、所述写地址、所述读地址标志位及所述写地址标志位同步至相同的时钟域中,包括:
40.将所述读地址、所述写地址、所述读地址标志位及所述写地址标志位分别通过两级触发器,同步至相同的时钟域中。
41.一种异步fifo存储器读写控制装置,包括:
42.获取模块,用于:获取异步fifo存储器当前的读地址及写地址,并将所述读地址及所述写地址分别同步至相同的时钟域内,得到所述读地址对应的同步后读地址及所述写地址对应的同步后写地址;
43.确定模块,用于:基于所述异步fifo存储器的总容量、所述读地址、所述写地址、所述同步后读地址及所述同步后写地址,确定所述异步fifo存储器的读信用积分及写信用积分;其中,所述读信用积分表示当前能基于所述异步fifo存储器读取的数据量,所述写信用积分表示当前能基于所述异步fifo存储器写入的数据量;
44.输出模块,用于:将所述读信用积分及所述写信用积分输出至相应的读写端,以供所述读写端基于所述读信用积分及所述写信用积分实现对所述异步fifo存储器的读写操作。
45.一种异步fifo存储器读写控制设备,包括:
46.存储器,用于存储计算机程序;
47.处理器,用于执行所述计算机程序时实现如上任一项所述异步fifo存储器读写控
制方法的步骤。
48.一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上任一项所述异步fifo存储器读写控制方法的步骤。
49.本发明提供了一种异步fifo存储器读写控制方法、装置、设备及存储介质,该方法包括:获取异步fifo存储器当前的读地址及写地址,并将所述读地址及所述写地址分别同步至相同的时钟域内,得到所述读地址对应的同步后读地址及所述写地址对应的同步后写地址;基于所述异步fifo存储器的总容量、所述读地址、所述写地址、所述同步后读地址及所述同步后写地址,确定所述异步fifo存储器的读信用积分及写信用积分;将所述读信用积分及所述写信用积分输出至相应的读写端,以供所述读写端基于所述读信用积分及所述写信用积分实现对所述异步fifo存储器的读写操作;其中,所述读信用积分表示当前能基于所述异步fifo存储器读取的数据量,所述写信用积分表示当前能基于所述异步fifo存储器写入的数据量。本技术获取到异步fifo存储器当前的读地址及写地址后,先将读地址及写地址同步到相同的时钟域中,然后基于同步前的读写地址、同步后的读写地址及异步fifo存储器的大小确定出读信用积分及写信用积分,并将读信用积分及写信用积分发送至读写端,以使得读写端能够基于读信用积分获知当前能够到异步fifo存储器中读取的数据量以实现相应数据读取,基于写信用积分获知当前能够写入到异步fifo存储器中的数据量以实现相应数据写入。可见,本技术通过信用积分实现异步fifo存储器的读写控制,也即为实现所属系统的流量控制,进而有效提高异步fifo存储器的使用效率。
附图说明
50.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
51.图1为本发明实施例提供的异步fifo存储器读写控制方案的系统架构图;
52.图2为本发明实施例提供的一种异步fifo存储器读写控制方法的流程图;
53.图3为本发明实施例提供的一种异步fifo存储器读写控制装置的结构图。
具体实施方式
54.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
55.本发明实施例公开了一种异步fifo存储器读写控制方法、装置、设备及介质,能够提高异步fifo存储器的使用效率。为了便于理解,下面对本技术的技术方案所适用的系统架构进行介绍,参见图1,其为本技术技术方案所使用的系统架构(本技术技术方案所使用的系统架构即为异步fifo存储器)的结构示意图。通过图1可以看出,异步fifo存储器在硬件实现时可包括以下模块:写独热码地址生成模块wr_addr_one_hot、写二进制编码地址生成模块wr_addr_binary、读独热码地址生成模块rd_addr_one_hot、读二进制编码地址生成
模块rd_addr_binary、存储模块memory、同步模块sync、信用积分生成模块credit、通过信用积分生成fifo空信号模块cr_empty、通过信用积分生成fifo满信号模块cr_full。其中,异步fifo存储器接口信号的说明具体可以如表1所示。
56.表1异步fifo存储器接口信号表
[0057][0058]
结合表1对图1中的各模块进行以下说明:
[0059]
1、写独热码地址生成模块wr_addr_one_hot:此模块是根据输入的写使能wr_en信号生成写memory模块的写独热码地址;并且生成一个写地址标志位wr_mark。
[0060]
2、写二进制编码地址生成模块wr_addr_binary:此模块是根据输入的写独热码地址生成相应的写二进制编码地址。
[0061]
3、读独热码地址生成模块rd_addr_one_hot:此模块是根据输入的读使能rd_en信号生成读memory模块的读独热码地址;并且生成一个读地址标志位rd_mark。
[0062]
4、读二进制编码地址生成模块rd_addr_binary:此模块是根据输入的读独热码地址生成相应的读二进制编码地址信号。
[0063]
5、存储模块memory:存储模块是调用或生成一个同步的双端口静态随机存储器。
[0064]
6、同步模块sync:实现独热码地址及地址标志位的同步。
[0065]
7、信用积分生成模块credit:生成写信用积分wr_credit及读信用积分rd_credit。
[0066]
8、通过独热码地址生成fifo空信号模块cr_empty:确定空信号的值。
[0067]
9、通过独热码地址生成fifo满信号模块cr_full:确定满信号的值。
[0068]
请参阅图2,其示出了本发明实施例提供的一种异步fifo存储器读写控制方法的流程图,可以包括:
[0069]
s11:获取异步fifo存储器当前的读地址及写地址,并将读地址及写地址分别同步至相同的时钟域内,得到读地址对应的同步后读地址及写地址对应的同步后写地址。
[0070]
其中,异步fifo存储器当前的读地址即为当前如果读异步fifo存储器应读取的地址,异步fifo存储器当前的写地址即为当前如果写异步fifo存储器应写入的地址;因为读地址和写地址产生于两个不同的时钟域,地址需要“安全”地传递到对方的时钟域中去,因此需要使用同步器处理,也即本技术使用同步模块sync将读地址及写地址同步至相同的时钟域内,以基于同步后的读地址及写地址实现相应的信用积分确定。
[0071]
s12:基于异步fifo存储器的总容量、读地址、写地址、同步后读地址及同步后写地址,确定异步fifo存储器的读信用积分及写信用积分;其中,读信用积分表示当前能基于异步fifo存储器读取的数据量,写信用积分表示当前能基于异步fifo存储器写入的数据量。
[0072]
信用机制是一种控制数据流量的方法,后级通过实时或定时的向上级反馈其可以接收或发送的数据个数,实现整个系统的流量控制,保证数据不溢出不阻塞;本技术实施例中信用积分即代表可以接收或发送的数据组数。其中,接收即为读取,发送即为写入,异步fifo存储器的总容量为异步fifo存储器的大小,单位可以为byte;本技术实施例基于异步fifo存储器的总容量、读地址、写地址、同步后读地址及同步后写地址,可以计算出异步fifo存储器的读信用积分及写信用积分;读信用积分表示当前能够读取到的异步fifo存储器中数据量,而写信用积分表示当前能够写入到异步fifo存储器中数据量。将读信用积分及写信用积分发送至读写端,读写端则可以基于读信用积分获知当前能够到异步fifo存储器中读取到的数据量,基于写信用积分获知当前能够写入到异步fifo存储器中的数据量,方便读写端基于此实现相应的数据读写。
[0073]
s13:将读信用积分及写信用积分输出至相应的读写端,以供读写端基于读信用积分及写信用积分实现对异步fifo存储器的读写操作。
[0074]
本技术获取到异步fifo存储器当前的读地址及写地址后,先将读地址及写地址同步到相同的时钟域中,然后基于同步前的读写地址、同步后的读写地址及异步fifo存储器的大小确定出读信用积分及写信用积分,并将读信用积分及写信用积分发送至读写端,以使得读写端能够基于读信用积分获知当前能够到异步fifo存储器中读取的数据量以实现相应数据读取,基于写信用积分获知当前能够写入到异步fifo存储器中的数据量以实现相应数据写入。可见,本技术通过信用积分实现异步fifo存储器的读写控制,也即为实现所属系统的流量控制,进而有效提高异步fifo存储器的使用效率。
[0075]
本发明实施例提供的一种异步fifo存储器读写控制方法,还可以包括:
[0076]
接收读写端发送的读请求,确定当前的读独热码地址,将当前的读独热码地址转换为相应的读二进制编码地址,基于读二进制编码地址在异步fifo存储器中实现读请求对应的读操作,并在完成读操作后将当前的读独热码地址左移1位作为新的当前的读独热码地址;
[0077]
接收写写端发送的写请求,确定当前的写独热码地址,将当前的写独热码地址转换为相应的写二进制编码地址,基于写二进制编码地址在异步fifo存储器中实现写请求对
应的写操作,并在完成写操作后将当前的写独热码地址左移1位作为新的当前的写独热码地址;
[0078]
相应的,获取异步fifo存储器当前的读地址及写地址,可以包括:
[0079]
获取异步fifo存储器当前的读独热码地址及写独热码地址。
[0080]
本技术实施例中写独热码地址生成模块wr_addr_one_hot,根据输入的写使能wr_en信号生成写存储模块memory的写独热码地址;本技术实施例中之所以使用独热码(one

hot码)是因为其组合逻辑最少,触发器最多,工作时钟频率可以做到最高。具体来说,在异步fifo存储器复位完成后,写独热码地址为1;当wr_en为高时,将数据写入当前的写独热码地址中,同时将当前的写独热码地址“循环左移一位”作为下一次写入的数据地址。对于一个数据位宽为n的数据,“循环左移一位”是指:a1[n

1:0]<={a1[n

2:1],a[n

1]};其中,<=代表verilog语法中的非阻塞赋值。写二进制编码地址生成模块wr_addr_binary,根据输入的写独热码地址生成写二进制编码地址,此过程由组合逻辑实现,即写独热码地址和写二进制编码地址处于同一个时钟周期,其转换公式如下:wr_addr_bin=log2(wr_addr_hot);其中,wr_addr_bin代表写二进制编码地址,wr_addr_hot代表写独热码地址。
[0081]
同理,读独热码地址生成模块rd_addr_one_hot,根据输入的读使能rd_en信号生成读存储模块memory的读独热码地址。具体来说,在异步fifo存储器复位完成后,读独热码地址为1;当rd_en为高时,将当前的读独热码地址给到后级存储模块的读地址中,同时将当前的读独热码地址“循环左移一位”作为下一次读取的数据地址。读二进制编码地址生成模块rd_addr_binary,根据输入的读独热码地址生成读二进制编码(binary)地址,此过程由组合逻辑实现,即读独热码地址和读二进制编码地址处于同一个时钟周期,其转换公式如下:rd_addr_bin=log2(rd_addr_hot);其中,rd_addr_bin代表读二进制编码地址,rd_addr_hot代表读独热码地址。
[0082]
本技术中获取当前异步fifo的读地址及写地址即为分别从读独热码地址生成模块rd_addr_one_hot及写独热码地址生成模块wr_addr_one_hot中获取当前的读独热码地址及写独热码地址。
[0083]
本发明实施例提供的一种异步fifo存储器读写控制方法,确定异步fifo存储器的读信用积分及写信用积分,可以包括:
[0084]
若wr_addr_hot=>rd_addr_hot_wp,则按照下列公式计算单字节的写信用积分:
[0085]
wr_credit_1=fifo_capa

log2wr_addr_hot log2rd_addr_hot_wp;
[0086]
若wr_addr_hot<rd_addr_hot_wp,则按照下列公式计算单字节的写信用积分:
[0087]
wr_credit_1=log2rd_addr_hot_wp

log2wr_addr_hot;
[0088]
若wr_addr_hot_rp=>rd_addr_hot,则按照下列公式计算单字节的读信用积分:
[0089]
rd_credit_1=wr_addr_hot_rp

rd_addr_hot;
[0090]
若wr_addr_hot_rp<rd_addr_hot,则按照下列公式计算单字节的写读信用积分:
[0091]
rd_credit_1=fifo_capa wr_addr_hot_rp

rd_addr_hot;
[0092]
其中,单字节的写信用积分wr_credit_1表示当前能基于异步fifo存储器写入的单字节数量,单字节的读信用积分rd_credit_1表示当前能基于异步fifo存储器读取的单字节数量,fifo_capa表示异步fifo存储器的总容量,wr_addr_hot表示写地址,rd_addr_hot表示读地址,wr_addr_hot_rp表示同步后写地址,rd_addr_hot_wp表示同步后读地址。
[0093]
计算单字节的写信用积分之后,还可以包括:
[0094]
按照下列公式计算数据组的写信用分,并将写信用分向下取整得到数据组的写信用积分:
[0095]
wr_credit_user=wr_credit_1/wr_credit_user_define;
[0096]
按照下列公式计算数据组的读信用分,并将读信用分向下取整得到数据组的读信用积分:
[0097]
rd_credit_user=rd_credit_1/rd_credit_user_define;
[0098]
其中,数据组的写信用积分wr_credit_user表示当前能基于异步fifo存储器写入的数据组数量,数据组的读信用积分rd_credit_user表示当前能基于异步fifo存储器读取的数据组数量,wr_credit_user_define及rd_credit_user_define分别为数据组与单字节之间的读换算单位及写换算单位。
[0099]
信用积分生成模块credit
[0100]
写信用积分wr_credit
[0101]
写信用积分可以分为单字节的写信用积分及数据组的写信用积分,单字节的写信用积分表示当前能够写入至异步fifo存储器的单字节数量,数据组的写信用积分表示当前能够写入至异步fifo存储器的数据组数量;同理,读信用积分可以分为单字节的读信用积分及数据组的读信用积分,单字节的读信用积分表示当前能够读取至异步fifo存储器的单字节数量,数据组的读信用积分表示当前能够读取至异步fifo存储器的数据组数量。具体来说,在使用异步fifo存储器前,一般都会定义好异步fifo存储器的大小,记为fifo_capa,单位为byte;在计算wr_credit时需要根据当前的读写独热码地址计算,计算过程如下:
[0102]
1、计算写单字节信用积分wr_credit_1:
[0103]
首先比较wr_addr_hot和rd_addr_hot_wp的地址大小,若wr_addr_hot=>rd_addr_hot_wp:
[0104]
wr_credit_1=fifo_capa

log2wr_addr_hot log2rd_addr_hot_wp
[0105]
若wr_addr_hot<rd_addr_hot_wp:
[0106]
wr_credit_1=log2rd_addr_hot_wp

log2wr_addr_hot;
[0107]
2、计算用户自定义写信用积分(数据组的写信用积分):
[0108]
wr_credit_user=wr_credit_1/wr_credit_user_define_define,向下取整。
[0109]
读信用积分代表此异步fifo存储器中可以正常读出的数据组数。在计算rd_credit时需要根据当前的读写独热码地址计算,计算过程如下:
[0110]
1、计算读单字节信用积分rd_credit_1:
[0111]
首先比较rd_addr_hot和wr_addr_hot_rp的地址大小,若wr_addr_hot_rp=>rd_addr_hot:
[0112]
rd_credit_1=wr_addr_hot_rp

rd_addr_hot
[0113]
若wr_addr_hot_rp<rd_addr_hot:
[0114]
rd_credit_1=fifo_capa wr_addr_hot_rp

rd_addr_hot;
[0115]
2、计算用户自定义读信用积分(数据组的读信用积分):
[0116]
rd_credit_user=rd_credit_1/rd_credit_user_define,向下取整。
[0117]
本技术实施例按照上述方式能够实现信用积分的有效准确的确定,并且由于读写
端和异步fifo存储器中数据的单位也是不同的,因此本技术实施例中使用上述方式实现不同单位之间的换算,方便读写端对数据的直接处理,提高了读写端实现数据读写的效率。
[0118]
本发明实施例提供的一种异步fifo存储器读写控制方法,还可以包括:
[0119]
获取异步fifo存储器当前的读地址标志位及写地址标志位,并将读地址标志位及写地址标志位同步至与读地址及写地址相同的时钟域内,得到读地址标志位对应的同步后读地址标志位及写地址标志位对应的写同步后地址标志位;其中,读地址标志位及写地址标志位分别在读地址及写地址由最后一个地址跳转至第一个地址时取与当前的值相反的值;
[0120]
基于异步fifo存储器的读地址、写地址、同步后读地址、同步后写地址、读地址标志位、写地址标志位、同步后读地址标志位及同步后写地址标志位,确定异步fifo存储器的空信号及满信号;其中,满信号表示异步fifo存储器的存储空间是否已满,空信号表示异步fifo存储器是否为空;
[0121]
将空信号及满信号输出至相应的读写端,以供读写端基于空信号及满信号实现对异步fifo存储器的读写操作。
[0122]
确定异步fifo存储器的空信号及满信号,可以包括:
[0123]
若wr_addr_hot_rp=rd_addr_hot且wr_mark_rp=rd_mark,则空信号为1,若wr_addr_hot_rp=rd_addr_hot且wr_mark_rp!=rd_mark,则空信号为0,若wr_addr_hot_rp!=rd_addr_hot,则空信号为0;
[0124]
若rd_addr_hot_wp=wr_addr_hot且rd_mark_wp=wr_mark,,则满信号为0,若rd_addr_hot_wp=wr_addr_hot且rd_mark_wp!=wr_mark,则满信号为1,若rd_addr_hot_wp!=wr_addr_hot时,则满信号为0。
[0125]
本技术实施例中写独热码地址生成模块wr_addr_hot在生成写独热码地址的同时,还会生成一个写地址标志位wr_mark;在异步fifo存储器复位后写地址标志位wr_mark默认值为0,当wr_addr_hot的最高bit位(wr_addr_hot[n

1])为1且写使能wr_en信号有效时,wr_mark信号取反。读独热码地址生成模块rd_addr_hot在生成读独热码地址的同时,还会生成一个读地址标志位rd_mark,在异步fifo存储器复位后读地址标志位rd_mark默认值为0,当rd_addr_hot的最高bit位(rd_addr_hot[n

1])为1且写使能rd_en信号有效时,rd_mark信号取反。
[0126]
通过同步模块已经将写地址转为读时钟域内的同步后写地址wr_addr_hot_rp,因此将此同步后写地址wr_addr_hot_rp与rd_addr_hot进行比较运算即是同一个时钟域内的处理;具体来说,当wr_addr_hot_rp=rd_addr_hot时进行如下判断:
[0127]
若wr_mark_rp=rd_mark,此时empty信号(空信号)为1;
[0128]
若wr_mark_rp!=rd_mark,此时empty信号为0;
[0129]
当wr_addr_hot_rp!=rd_addr_hot时,此时empty信号为0(!=代表不等于)。
[0130]
通过同步模块已经将读地址转为写时钟域内的同步后读地址rd_addr_hot_wp,因此将此同步后读地址rd_addr_hot_wp与wr_addr_hot进行比较运算即是同一个时钟域内的处理;具体来说,当rd_addr_hot_wp=wr_addr_hot时,进行如下判断:
[0131]
若rd_mark_wp=wr_mark,此时full信号为0;
[0132]
若rd_mark_wp!=wr_mark,此时full信号为1;
[0133]
当rd_addr_hot_wp!=wr_addr_hot时,此时full信号为0。
[0134]
另外,将读地址、写地址、读地址标志位及写地址标志位同步至相同的时钟域中,可以包括:将读地址、写地址、读地址标志位及写地址标志位分别通过两级触发器,同步至相同的时钟域中。具体来说,本技术实施例采用独热码地址同步到另一个时钟域可以确保每次只有两位位发生变化,且不会随着地址位宽的增加而改变;在这里使用两级触发器的方式完成信号同步,触发器可以根据实际需要进行选择,如d触发器、t触发器等;在实现同步后有如下信息:
[0135]
wr_addr_hot_rp为使用两级触发器同步后的写地址;
[0136]
rd_addr_hot_wp为使用两级触发器同步后的读地址;
[0137]
wr_mark_rp为使用两级触发器同步后的写地址标志位;
[0138]
rd_mark_wp为使用两级触发器同步后的读地址标志位。
[0139]
本技术使用独热码完成异步时钟域穿越,并生成读写端独立的信用积分和异步fifo存储器的空、满信号;且使用应用本发明申请方案的异步fifo存储器可简化外部接口信号的计算过程,直接与pcie等支持信用机制的系统相连,提高了异步fifo存储器的复用性和可靠性,进而提高整个soc的开发效率,进而提高产品竞争力。
[0140]
本发明实施例还提供了一种异步fifo存储器读写控制装置,如图3所示,具体可以包括:
[0141]
获取模块11,用于:获取异步fifo存储器当前的读地址及写地址,并将读地址及写地址分别同步至相同的时钟域内,得到读地址对应的同步后读地址及写地址对应的同步后写地址;
[0142]
确定模块12,用于:基于异步fifo存储器的总容量、读地址、写地址、同步后读地址及同步后写地址,确定异步fifo存储器的读信用积分及写信用积分;其中,读信用积分表示当前能基于异步fifo存储器读取的数据量,写信用积分表示当前能基于异步fifo存储器写入的数据量;
[0143]
输出模块13,用于:将读信用积分及写信用积分输出至相应的读写端,以供读写端基于读信用积分及写信用积分实现对异步fifo存储器读写操作。
[0144]
本发明实施例还提供了一种异步fifo存储器读写控制设备,可以包括:
[0145]
存储器,用于存储计算机程序;
[0146]
处理器,用于执行计算机程序时实现如上任一项异步fifo存储器读写控制方法的步骤。
[0147]
本发明实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现如上任一项异步fifo存储器读写控制方法的步骤。
[0148]
需要说明的是,本发明实施例提供的一种异步fifo存储器读写控制装置、设备及存储介质中相关部分的说明请参见本发明实施例提供的一种异步fifo存储器读写控制方法中对应部分的详细说明,在此不再赘述。另外本发明实施例提供的上述技术方案中与现有技术中对应技术方案实现原理一致的部分并未详细说明,以免过多赘述。
[0149]
对所公开的实施例的上述说明,使本领域技术人员能实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以
在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献