一种可实现块状数据访问的循环FIFO的仿真方法与流程

文档序号:37155574发布日期:2024-02-26 17:16阅读:16来源:国知局
一种可实现块状数据访问的循环FIFO的仿真方法与流程

本发明涉及fifo结构,具体为一种可实现块状数据访问的循环fifo的仿真方法。


背景技术:

1、在ft的c6678型dsp研发过程中,需要大量的用到fifo结构,包括edma、rapidio、串行口和gmac,这些外设的操作在硬件环境中均由dmac控制,dmac两侧的外设其拷贝操作并不同步,对fifo的读写访问是随机的,因此必须对fifo结构进行仿真;

2、常见的fifo结构仿真均采用链表形式,采用循环链表的思路实现循环fifo结果,对于访问粒度为1字节的情况,上述方法已经解决了所有的问题,而实际情况下,fifo的操作粒度是可变的,在这种情况下,由于数组的首末元素的物理地址是不连续的的,当fifo头部指向数组的最后一个元素时,这时进行字长大于1的数据访问时就不能进行批量操作了,即不能采用客诉memcpy的函数了,该形式在搬运大数据量时,不得不考虑链表的寻址时间,且链表中的元素均为单字节,在进行多字节字长拷贝时需要进行数据拼接,且真实情况就是一次性拷贝多字节,也降低了仿真度,因此设计一种可实现块状数据访问的循环fifo的仿真方法是很有必要的。


技术实现思路

1、本发明的目的在于提供一种可实现块状数据访问的循环fifo的仿真方法,以解决上述背景技术中提出的问题。

2、为实现上述目的,本发明提供如下技术方案:一种可实现块状数据访问的循环fifo的仿真方法,包括以下步骤:步骤一,定义数组;步骤二,定义逻辑;步骤三,设定最大字节;步骤四,起始段定义;步骤五,首尾结构定义;

3、其中上述步骤一中,定义一个超过原始fifo深度的一维字节类型的数组作为仿真fifo结构的数据缓冲区;

4、其中上述步骤二中,将步骤一中定义的数组分为两个逻辑部分;

5、其中上述步骤三中,设定冗余段的长度为单次对fifo进行读写访问的最大字节数减1;

6、其中上述步骤四中,定义数组原始段中开始部分的与冗余段相等长度的部分称为起始段;

7、其中上述步骤五中,定义两个变量head和tail为fifo结构的头和尾,其内部记录的为数组的某个元素的角标。

8、优选的,所述步骤二中,两个逻辑部分分别为原始段和冗余段。

9、优选的,所述步骤三中,对fifo的写访问,是指将数据拷贝至数组中被tai l指向的元素及其后续一定数量元素。

10、优选的,所述步骤三中,对fifo的读访问,是指将数组中head指向的元素及其后续一定数量元素拷贝至目标位置。

11、优选的,所述步骤三中,对fifo进行写访问时,需判断写入范围是否包含冗余段和起始段的元素,如包含则起始段和冗余段内的对应元素也要被同步修改为对应值。

12、优选的,所述步骤三中,对fifo进行读访问时,可直接使用memcpy函数,将head位置作为源地址,或直接对head位置的地址进行强制类型转换后进行解引用作为右值使用。

13、优选的,所述步骤三中,使用memcpy函数进行仿真的过程为:首先进行memcpy(&array_fifo(head),ptr_src,size);的操作,实现数据赋值(其中的ptr_src为源段设备(内存或外设)中的地址空间,size为传输总字节数),或采用数据类型强制转换,强制array_fifo当前head位置角标元素的地址转换为源总线字长的如数类型,如传输位宽为32位,则采用(uint32_t*)p=(uint32_t*)(&array_fifo[head])的方式获取一个32位的指针指向数组元素,再采用*p=value;的方式进行赋值,其中第二种方式,无法应对超过仿真宿主机最大位宽的传输方式,如果操作方法使用了头部段,则要对对应的冗余段的数据进行同步;同理,如果使用了冗余段需要对对应的头部短进行同步。

14、优选的,所述步骤三中,冗余段的长度与fifo深度相同的数组长度l扩展为l+n-1,在fifo头或尾部指向数组末尾元素时,且读取访问的元素角标超过l-1的元素时,冗余段数组元素将全部参与数据读写访问动作;同理,当fifo结构的头、尾指向的为非最后一个元素时,冗余段将有部分或无元素参与操作,因此,在对fifo数据进行数据追加操作时,需要判断缓冲数组的起始段或冗余段是否参与,如果起始段的元素参与,则冗余段的相应元素做数值同步动作;如果有冗余段元素参与,则起始段的相应元素做数值同步动作,其同步逻辑的表达式为:

15、优选的,所述步骤三中,冗余段的补充,实现了对fifo缓冲区中字长大于1的连续性读取访问,向fifo结构尾部传入数据时,原本当fifo尾部变量指向位置至原始段末尾元素的区间无法容纳传入的所有数据,需要将传入数据的前半部分分部存入缓冲数组的后半段,再超出原始段范围的部分存入缓冲数组的起始段,而现在由于冗余段的加入,可将传入的数据一次性传入原始段的后半段以及冗余段,再将冗余段的数据同步到起始段即可。

16、优选的,所述步骤四中,起始段与冗余段的对应关系为“头部段元素角标”+“原始fifo深度”=“冗余段元素角标”。

17、与现有技术相比,本发明的有益效果是:该一种可实现块状数据访问的循环fifo的仿真方法,通过为fifo分配一个长度加长的数组作为缓冲区,当循环fifo头部或尾部指向数组原始段的末尾元素时,使其读取冗余段,通过对冗余段的补充,实现了对fifo缓冲区中字长大于1的连续性读取访问,使fifo缓冲区在运行过程中占用的内存更小、使得连续性内存拷贝成为了现实,缩短对与fifo结构进行数据交互中消耗的机器时间,可采用常规c函数或强制类型转换进行数据拷贝,能够简化应用时的程序结构,提高运行过效率,降低应用难度,大大提高了运行速度,在dma数据搬运中,省去了数据拼接的时间,增加了仿真度并提高仿真速度。



技术特征:

1.一种可实现块状数据访问的循环fifo的仿真方法,包括以下步骤:步骤一,定义数组;步骤二,定义逻辑;步骤三,设定最大字节;步骤四,起始段定义;步骤五,首尾结构定义;其特征在于:

2.根据权利要求1所述的一种可实现块状数据访问的循环fifo的仿真方法,其特征在于:所述步骤二中,两个逻辑部分分别为原始段和冗余段。

3.根据权利要求1所述的一种可实现块状数据访问的循环fifo的仿真方法,其特征在于:所述步骤三中,对fifo的写访问,是指将数据拷贝至数组中被tail指向的元素及其后续一定数量元素。

4.根据权利要求1所述的一种可实现块状数据访问的循环fifo的仿真方法,其特征在于:所述步骤三中,对fifo的读访问,是指将数组中head指向的元素及其后续一定数量元素拷贝至目标位置。

5.根据权利要求1所述的一种可实现块状数据访问的循环fifo的仿真方法,其特征在于:所述步骤三中,对fifo进行写访问时,需判断写入范围是否包含冗余段和起始段的元素,如包含则起始段和冗余段内的对应元素也要被同步修改为对应值。

6.根据权利要求1所述的一种可实现块状数据访问的循环fifo的仿真方法,其特征在于:所述步骤三中,对fifo进行读访问时,可直接使用memcpy函数,将head位置作为源地址,或直接对head位置的地址进行强制类型转换后进行解引用作为右值使用。

7.根据权利要求1所述的一种可实现块状数据访问的循环fifo的仿真方法,其特征在于:所述步骤三中,使用memcpy函数进行仿真的过程为:首先进行memcpy(&array_fifo(head),ptr_src,size);的操作,实现数据赋值(其中的ptr_src为源段设备(内存或外设)中的地址空间,size为传输总字节数),或采用数据类型强制转换,强制array_fifo当前head位置角标元素的地址转换为源总线字长的如数类型,如传输位宽为32位,则采用(uint32_t*)p=(uint32_t*)(&array_fifo[head])的方式获取一个32位的指针指向数组元素,再采用*p=value;的方式进行赋值,其中第二种方式,无法应对超过仿真宿主机最大位宽的传输方式,如果操作方法使用了头部段,则要对对应的冗余段的数据进行同步;同理,如果使用了冗余段需要对对应的头部短进行同步。

8.根据权利要求1所述的一种可实现块状数据访问的循环fifo的仿真方法,其特征在于:所述步骤三中,冗余段的长度与fifo深度相同的数组长度l扩展为l+n-1,在fifo头或尾部指向数组末尾元素时,且读取访问的元素角标超过l-1的元素时,冗余段数组元素将全部参与数据读写访问动作;同理,当fifo结构的头、尾指向的为非最后一个元素时,冗余段将有部分或无元素参与操作,因此,在对fifo数据进行数据追加操作时,需要判断缓冲数组的起始段或冗余段是否参与,如果起始段的元素参与,则冗余段的相应元素做数值同步动作;如果有冗余段元素参与,则起始段的相应元素做数值同步动作,其同步逻辑的表达式为:

9.根据权利要求1所述的一种可实现块状数据访问的循环fifo的仿真方法,其特征在于:所述步骤三中,冗余段的补充,实现了对fifo缓冲区中字长大于1的连续性读取访问,向fifo结构尾部传入数据时,原本当fifo尾部变量指向位置至原始段末尾元素的区间无法容纳传入的所有数据,需要将传入数据的前半部分分部存入缓冲数组的后半段,再超出原始段范围的部分存入缓冲数组的起始段,而现在由于冗余段的加入,可将传入的数据一次性传入原始段的后半段以及冗余段,再将冗余段的数据同步到起始段即可。

10.根据权利要求1所述的一种可实现块状数据访问的循环fifo的仿真方法,其特征在于:所述步骤四中,起始段与冗余段的对应关系为“头部段元素角标”+“原始fifo深度”=“冗余段元素角标”。


技术总结
本发明公开了一种可实现块状数据访问的循环FIFO的仿真方法,包括以下步骤:步骤一,定义数组;步骤二,定义逻辑;步骤三,设定最大字节;步骤四,起始段定义;步骤五,首尾结构定义;本发明,通过为FIFO分配一个长度加长的数组作为缓冲区,当循环FIFO头部或尾部指向数组原始段的末尾元素时,使其读取冗余段,通过对冗余段的补充,实现了对FIFO缓冲区中字长大于1的连续性读取访问,使FIFO缓冲区在运行过程中占用的内存更小、使得连续性内存拷贝成为了现实,缩短对与FIFO结构进行数据交互中消耗的机器时间,提高运行过效率,降低应用难度,大大提高了运行速度,在DMA数据搬运中,省去了数据拼接的时间,增加了仿真度并提高仿真速度。

技术研发人员:李根,吴瑾,郭向英
受保护的技术使用者:北京轩宇信息技术有限公司
技术研发日:
技术公布日:2024/2/25
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1