发明内容
本发明的目的是提供了一种在一片块RAM中实现多个可并行写入和随机顺序读出的FIFO的方法,可充分利用现有的存储容量,大大提高存储器的利用率,显著降低产品成本,提升市场竞争力。
本发明所要解决的技术问题在于用单片块RAM设计多个可并行写入和随机顺序读出的FIFO。本发明采用以下技术方案解决上述技术问题:
基于单片块RAM的并行写入多FIFO实现方法,该方法包括5个步骤:
(1)将块RAM例化成DPRAM用于存储各通道FIFO数据,每通道FIFO在DPRAM中都有对应的存储空间,各存储空间互不重叠;
(2)写入控制逻辑能接受各通道FIFO并行数据写入要求,并将数据写入相应的相应输入缓冲区;
(3)写入控制逻辑在输入缓冲区接到数据后,产生内部写命令,将各FIFO数据从输入缓冲区取出,依次写入各FIFO在DPRAM对应的存储空间;
(4)在接到外部读出请求时,读出控制逻辑将根据要求,将数据从DPRAM对应的存储空间读出,并送往FIFO数据输出端口;
(5)标记设置逻辑用于设置各通道FIFO的空(full)、满(empty)、可编程空(prog_empty)和可编程满(prog_full)标志,以满足并行写入和随机顺序读出的访问需求。
所述步骤(1)中,通过调用FPGA开发平台的IP核例化工具将块RAM用例化成DPRAM;根据FIFO的通道数目在DPRAM中设置储存区,每通道FIFO在DPRAM中都有对应的存储空间,各存储空间互不重叠;DPRAM的高位地址用于选择各FIFO的存储空间,DPRAM的低位地址用于存储空间内部访问。
所述步骤(2)中,
输入缓冲区与写入控制逻辑接收到FIFO并行数据写入请求信号wr_en后:
1)检测到full信号为0且ready信号为1时,内部写控制将latch信号置1,将外部数据写入各通道FIFO相应输入缓冲区,输入缓冲区深度可根据并行要求设置;
2)将表示接收数据准备就绪标记ready置为0,在缓冲区数据写入DPRAM之前不再接收新的数据。
所述步骤(3)中,
输入缓冲区写入控制逻辑在输入缓冲区接到数据后,控制控制逻辑产生内部写DPRAM命令wr_en_inter,将各通道FIFO数据从相应输入缓冲区取出,依次写入各通道FIFO在DPRAM对应的存储空间:
1)内部写控制将通道编号ch_code_w设为0,确定是选择将通道0的FIFO的数据从缓冲区写入DPRAM;
2)根据当前通道号ch_code_w,地址选择器选择的当前地址指针write_p为write_p_0;
3)根据当前通道号ch_code_w,数据选择器选择通道0的数据缓冲输出作为DPRAM写入端数据输入;
4)ch_code_w与write_p_0组合,得到存储器的写入端访问地址wr_addr,其中ch_code_w为wr_addr高位,write_p_0为低位;
5)若full_0为0,则写入数据;
6)写入数据后,write_p加1;
7)以同样的步骤1)-步骤6)将其余各通道的FIFO的数据从缓冲区写入DPRAM
8)接收数据准备就绪ready信号置为1。
所述步骤(4)中,
读出控制逻辑主要由读出通道编码,读出端地址指针选择,DPRAM读出端地址合成和读出端各通道地址生成组成,在接到外部任意通道的FIFO读出请求时,读出控制逻辑将根据要求,将数据从该通道FIFO对应的DPRAM存储空间读出,并送往FIFO数据输出端口;
在接到0通道FIFO的读请求信号rd_en_0后:
1)对rd_en_0进行编码,作为当前通道编码即ch_code_r置为0,确定对通道0的FIFO进行操作;
2)根据当前通道编码ch_code_r,地址选择器选择的当前通道FIFO地址指针read_p为read_p_0;
3)由ch_code_r与read_p组合,得到存储器的写入端访问地址rd_addr,其中ch_code_r为rd_addr高位,read_p为低位;
4)若empty_0为0,则读出数据;
5)read_p_0加1;
其余各通道按步骤1)-步骤5)读出。
所述步骤(5)中,
标记设置逻辑用于设置各通道FIFO的空、满、可编程空和可编程满标志,以满足并行写入和随机顺序读出的访问需求,标记设置方法如下:
各标记信号设置如下:
1.full:写入端标记,full为0表示所有各通道都非满,只要任意通道为满,full置1;
2.其余为各通道相关标志信号;
1)empty_0:写入地址指针write_p_0与读出地址read_p_0相等,或写入地址指针write_p_0比读出地址指针read_p_0多1而正在读出时,设置empty_0为1,否则设置为0;
2)full_0:当FIFO写入地址指针write_p_0与读出地址指针read_p_0只有最高位不相同,或读出地址指针read_p_0比写入指针write_p_0地址多1而正在写入时,设置full_0为1,否则设置为0;
3)prog_ful1_0:当存入字数大于或等于预先设置的个数时,设置为1,否则设置为0;
4)prog_empty_0:当FIFO中空间大于或等于预先设置的字数时,设置为1,否则设置为0;
5)其余各通道标记位设置方法按步骤1)-步骤4)设置。
本发明的优点在于:提出了一种在一片块RAM中实现多个可并行写入和随机顺序读出的FIFO的方法,可充分利用现有的存储容量,大大提高存储器的利用率,显著降低产品成本,提升市场竞争力,对于FPGA设计开发有着重要意义。在低成本的FPGA应用项目中,由于FPGA中的块RAM数量有限,本发明可在块RAM数量不足但总体容量充足的情况,用单片块RAM实现多个要求并行写入和随机顺序读出的FIFO,可以更充分利用系统资源,降低对芯片要求,从而可以降低产品成本。
具体实施方式
下面参照附图结合实施例对本发明作进一步的描述。
本发明提出一种采用单片块RAM实现多个要求并行写入和随机顺序读出的FIFO的实现方法。在该方法中,首先利用FPGA开发平台的IP核例化工具将块RAM例化成DPRAM用于存储各通道FIFO数据;写入控制逻辑能接受并行的各通道FIFO数据写入要求,写入控制逻辑在接到外部写信号后,将数据存入各通道FIFO相应的缓冲区,然后产生内部写命令,依次将各缓冲区的数据写入DPRAM对应的存储空间;在接到外部读出请求时,读出控制逻辑将根据要求,将数据从DPRAM对应的存储空间读出,并送往FIFO数据输出端口;标记设置逻辑用于设置各通道FIFO的空、满、可编程空和可编程满标志,以满足并行写入和随机顺序读出的访问需求。
图1是本发明的系统框图,其中详细展示了基于单片块RAM的并行写入多FIFO实现方法的四个部分。
第一个部分进行的是存储空间分配,将块RAM例化成DPRAM用于存储各通道FIFO数据,每通道FIFO在DPRAM中都有对应的存储空间且互不重叠;第二部分是写入控制逻辑,写入控制逻辑能接受并行的各通道FIFO数据写入要求,写入控制逻辑在接到外部写信号后,将数据存入各通道FIFO相应的缓冲区,然后产生内部写命令,依次将各缓冲区的数据写入DPRAM对应的存储空间;第三部分是读出控制逻辑,在接到外部读出请求时,读出控制逻辑根据要求选择通道,将数据从DPRAM对应的存储空间读出,并送往FIFO数据输出端口;第四部分是标记设置逻辑,用于设置各通道FIFO的空、满、可编程空和可编程满标志,以满足并行写入和随机顺序读出的访问需求。
图2是本发明的FIFO存储空间分配框图,即将块RAM例化成DPRAM用于存储各通道FIFO数据,每通道FIFO在DPRAM中都有对应的存储空间,如在图2中所示的FIF00空间、FIF01空间、FIF02空间,……,各存储空间互不重叠。其中wr_addr和din为DPRAM的写入端信号,rd_addr和dout为DPRAM的读出端信号。
本发明通过调用FPGA开发平台的IP核例化工具将块RAM用例化成DPRAM(例如用ip核生成工具,选项中指定使用Block RAM(块RAM),DPRAM的两个端口一端用于写入,另一端用于读出);根据FIFO的通道数目在DPRAM中设置储存区,每通道FIFO在DPRAM中都有对应的存储空间,各存储空间互不重叠;DPRAM的高位地址(即通道号,其中写入端为ch_code_w,读出端为ch_code_r)用于选择各FIFO的存储空间,低位地址(即相应读写地址指针)用于存储空间内部访问。
图3是本发明的输入缓冲和写入控制逻辑框图。主要由各通道地址指针生成、内部写控制、DPRAM写入端地址合成、DPRAM写入端数据选择,写入数据缓冲等部分组成。
输入缓冲和写入控制逻辑能接受各通道FIFO并行数据写入要求,并将数据写入各通道FIFO相应输入缓冲区;检测到输入缓冲区接到数据后,写入控制逻辑产生内部写命令,将各通道FIFO数据从输入缓冲区依次取出,并写入各通道FIFO在DPRAM对应的存储空间。
信号说明
ready:表示各通道FIFO的数据已经全部存入DPRAM,可以接收新的数据;
full:表示所有各通道写入端状态,0表示所有FIFO都非满,可以并行写入;
write_p_n:通道n的地址指针,最高位为循环写入的轮次计数用,在设置标记位时,需要最高位,当地址使用时,不需最高位;
ch_code_w:当前FIFO通道号;
write_p:当前FIFO写入端地址指针,根据通道编码从write_p_n中选择一个,但不需最高位;
wr_addr:DPRAM写入端地址;
wr_en:并行写入信号,外部输入;
latch:锁存信号,将外部输入数据存入缓冲区;
wr_en_n:通道n的FIFO的写信号,用于控制n通道写地址指针增量;
din_n:通道n的FIFO外部数据输入;
wr_en_inter:DPRAM写入端写使能信号;
wr_addr:DPRAM写入端地址;
din:DPRAM写入端数据输入;
数据的并行写入分成两个步骤,第一步:数据先存入数据缓冲区;第二步:将数据从缓冲区读出,写入到DPRAM;具体实现如下:
1.写入控制逻辑接收各通道FIFO并行数据写入信号wr_en后:
1)检测到full信号为0且ready信号为1时,内部写控制将latch信号置1,将外部数据写入各通道FIFO相应输入缓冲区,缓冲区深度可根据并行要求设置;
2)将表示接收数据准备就绪标记ready置为0,在缓冲区数据写入DPRAM之前不再接收新的数据。
2.(详见本发明图3)输入缓冲区接到数据后,控制控制逻辑产生内部写DPRAM命令wr_en_inter,将各通道FIFO数据从相应输入缓冲区取出,依次写入各通道FIFO在DPRAM对应的存储空间。输入缓冲区接到数据后,写入DPRAM过程具体实现如下:
1)内部写控制将通道编号ch_code_w设为0,确定是选择将通道0的FIFO的数据从缓冲区写入DPRAM;
2)根据当前通道号ch_code_w,地址选择器选择的当前地址指针write_p为write_p_0;
3)根据当前通道号ch_code_w,数据选择器选择通道0的数据缓冲输出作为DPRAM写入端数据输入;
4)ch_code_w与write_p_0组合,得到存储器的写入端访问地址wr_addr,其中ch_code_w为wr_addr高位,write_p_0为低位;
5)若full_0为0,则写入数据;
6)写入数据后,fifo0写地址模块将write_p_0加1;
7)以同样的步骤将其余各通道的FIFO的数据从缓冲区写入DPRAM
8)接收数据准备就绪ready信号置为1;
图4是本发明的读出控制逻辑框图。读出控制逻辑主要由读出通道编码,读出端地址指针选择,DPRAM读出端地址合成,读出端各通道地址生成等部分组成。主要任务是在接到外部任意通道的FIFO读出请求时,读出控制逻辑将根据要求,将数据从该通道FIFO对应的DPRAM存储空间读出,并送往FIFO数据输出端口;
信号说明:
ch_code_r:读出端当前通道FIFO编码序号;
read_p:读出端当前通道FIFO地址指针;
read_p_n:读出端第n个通道FIFO地址指针,在设置标记位时,需要最高位,当地址使用时,不需最高位;
rd_en_n:第n个通道FIFO的读请求信号,外部输入;
dout_n:第n个通道FIFO的数据输出;
rd_addr:DPRAM存储器的读出端地址;
以通道0的FIFO为例,读出控制逻辑工作过程如下:
在接到0通道FIFO的读请求信号rd_en_0后:
1)对rd_en_0进行编码,作为当前通道编码即ch_code_r置为0,确定对通道0的FIFO进行操作;
2)根据当前通道编码ch_code_r,地址选择器选择的当前通道FIFO地址指针read_p为read_p_0;
3)由ch_code_r与read_p组合,得到存储器的写入端访问地址rd_addr,其中ch_code_r为rd_addr高位,read_p为低位;
4)若empty_0为0,则读出数据;
5)fifo0读地址加模块将read_p_0加1;
其余各通道读出步骤相同。
图5是本发明的标记设置逻辑框图。标记设置逻辑利用fifo满空信号产生模块来设置各通道FIFO的空、满、可编程空和可编程满标志,以满足并行写入和随机顺序读出的访问需求,标记设置方法如下:
信号说明:
full:写入端端标记,full为0表示所有各通道都非满;
empty_n:第n个通道空信号;
prog_mepty_n:第n个通道可编程空信号;
full_n:第n个通道满信号;
prog_full_n:第n个通道可编程满信号;
各标记信号设置如下:
1.full:写入端标记,full为0表示所有各通道都非满,只要任意通道为满,full置1;
2.其余为各通道相关标志信号,以0通道FIFO标记设置为例:
1)empty_0:写入地址指针write_p_0与读出地址read_p_0相等,或写入地址指针write_p_0比读出地址指针read_p_0多1而正在读出时,设置empty_0为1,否则设置为0;
2)full_0:当FIFO写入地址指针write_p_0与读出地址指针read_p_0只有最高位不相同,或读出地址指针read_p_0比写入指针write_p_0地址多1(两指针最高位不参与比较,且最高位应该不同)而正在写入时,设置full_0为1,否则设置为0;
3)prog_full_0:当存入字数大于或等于预先设置的个数时,设置为1,否则设置为0;
4)prog_empty_0:当FIFO中空间大于或等于预先设置的字数时,设置为1,否则设置为0;
5)其余各通道标记位设置相同,即也按步骤1)-步骤4)。