一种基于FPGA的DMA控制器边界对齐方法及其电路与流程

文档序号:31072627发布日期:2022-08-09 21:17阅读:215来源:国知局
一种基于FPGA的DMA控制器边界对齐方法及其电路与流程
一种基于fpga的dma控制器边界对齐方法及其电路
技术领域
1.本发明属于嵌入式数据交换技术领域,具体为一种基于fpga的dma控制器边界对齐方法及其电路。


背景技术:

2.dma技术,全称为direct memory access,即直接存储器访问。在嵌入式系统中,dma有着非常广泛的应用。它可将数据从一个地址空间复制到另一个地址空间,从而实现数据在多个设备中的传输和共享。dma传输本身是由dma控制器实现的,在实现传输的过程中,cpu将总线控制权交给dma控制器,而在dma传输完成后,dma控制器将总线控制权交还给cpu。因此在dma传输的过程中,cpu仍然可以被重新排程,去处理其他的工作,数据交换完全由dma控制器完成,提高了嵌入式系统的处理效率。
3.目前在数据交换中,特别是高速大数据量的数据交换中,有时会用到基于fpga的dma控制器,即由fpga电路实现基于总线的dma控制器。
4.fpga,全称为field programmable gate array,即现场可编程门阵列,是目前数字系统设计的主要硬件基础,适用于处理高速数据传输、计算和各类算法的实现。它具备效率高、灵活性强等优势。使用fpga实现的dma控制器可以将高速数据流直接搬移到嵌入式处理器的内存空间,节省了大量计算资源,提高了计算效能。
5.在实现基于fpga的dma控制器时,需要将fpga中的高速数据流,映射到嵌入式处理器的内存地址段中。由于芯片特性,嵌入式处理器中内存是存在边界的(典型如4kb边界),但fpga设计中没有边界的概念,因此需要设计一种边界对齐电路,使基于fpga的dma控制器可以正确访问处理器内存。
6.传统的处理方式主要有,在开辟dma地址访问区时,预先分配好对齐的地址空间,避开内存边界,缺点是如果数据发生在非分配空间时,需要使用内存复制等手段,将数据拷贝到预先分配好的地址空间,增加了额外的计算量。


技术实现要素:

7.本发明的目的在于提供一种基于fpga的dma控制器边界对齐方法及其电路,以解决背景技术中提出的现有技术中,当数据发生在非分配空间时,需要使用内存复制等手段,将数据拷贝到预先分配好的地址空间,增加了额外的计算量,导致数据拷贝效率低下的问题。
8.为解决上述技术问题,本发明所采用的技术方案是:一种基于fpga的dma控制器边界对齐方法,包括以下步骤:步骤s1,fpga接收需要搬移的原始数据并存储;步骤s2,fpga获取原始数据的数据长度和数据地址信息;步骤s3,fpga计算dma控制器的后级传输协议支持的数据最大长度;步骤s4,通过步骤s3,计算得到新的搬移数据包地址和长度;
步骤s5,将步骤s4中得到的新的搬移数据包地址和长度存入到命令缓存队列中保存为新的搬移命令;步骤s6,dma控制器从命令缓存队列中取出新的搬移命令,并根据搬移命令将原始数据取出,开始搬移。
9.根据上述技术方案,步骤s4中,计算的具体步骤为:fpga获取需要搬移至嵌入式处理器的原始数据的数据长度和数据地址信息;fpga计算当前dma控制器的后级传输协议支持的数据最大长度;判断数据最大长度是否小于嵌入式处理器内存数据边界;如果是,则进入stepa;如果不是,则进入stepb;stepa的具体步骤包括:a1:地址边界距离为数据最大长度减去原始数据的数据地址;a2:判断原始数据的数据长度是否大于地址边界距离,如果不是,则代表数据搬移不会超过地址边界距离,则第一次切割长度就为原始数据的数据长度,而第一次切割的首地址即为原始数据的数据地址,并结束传输;如果是,则代表数据搬移会超过地址边界距离,并设原始数据的数据长度为n1,地址边界距离为l1;则n1/l1=ni/l1,其中n表示原始数据的数据长度n1的前部数据是地址边界距离l1的整数倍,原始数据的数据长度n1的前部数据按照地址边界距离l1切割n次;i是原始数据的数据长度n1的剩余数据,该数据的长度比地址边界距离l1短,因此,原始数据的数据长度n1最后一次切割的长度为原始数据的数据长度n1的剩余数据i;其中,第一次切割的原始数据的数据长度n1为地址边界距离l1;第一次切割的首地址为原始数据的数据地址;stepb的具体步骤为:b1:地址边界距离为嵌入式处理器内存数据边界减去原始数据的数据地址;b2:判断原始数据的数据长度是否大于地址边界距离;如果不是,则代表数据搬移不会超过地址边界距离,则第一次切割长度就为原始数据的数据长度,而第一次切割的首地址即为原始数据的数据地址,并结束传输;如果是,则代表数据搬移会超过地址边界距离,则并设原始数据的数据长度为n2,地址边界距离为l2;则n2/l2=xa/l2,其中x表示原始数据的数据长度n2的前部数据是地址边界距离l2的整数倍,数据长度原始数据的数据长度n2的前部数据按照地址边界距离l2切割x次;a是数据长度原始数据的数据长度n2的剩余数据,该数据的长度比地址边界距离l2短,因此,数据长度原始数据的数据长度n2最后一次切割的长度为数据长度原始数据的数据长度n2的剩余数据a;其中,第一次切割长度为地址边界距离的长度,而第一次切割的首地址即为原始数据的数据地址。
10.根据上述技术方案,数据最大长度的具体计算方法为:首先确定当前dma控制器的后级传输协议,根据确定的后级传输协议确定所支持的最大突发长度和最大数据宽度,数据最大长度为最大突发长度和最大数据宽度之积。
11.根据上述技术方案,后级传输协议为axi3、axi4或pcie中的其中一种。
12.根据上述技术方案,fpga将接收到的原始数据存储在数据缓存器中。
13.一种基于fpga的dma控制器边界对齐电路,包括嵌入式处理器、dma控制器、数据缓存器、边界计算流程fpga电路、lut_fifo和外部时钟分频电路;lut_fifo包括第一lut_fifo和第二lut_fifo;第一lut_fifo与边界计算流程fpga电路的一端连接,边界计算流程fpga电路的另一端与第二lut_fifo连接,第二lut_fifo与dma控制器连接,dma控制器通过控制总线与嵌入式处理器连接;数据缓存器用于存储需要搬移的原始数据;数据缓存器与dma控制器连接;外部时钟分频电路与分别与第一lut_fifo、第二lut_fifo、边界计算流程fpga电路和数据缓存器连接;外部时钟分频电路用于提供参考时钟信号,使得dma控制器和其他元件工作于同一个时钟域。
14.根据上述技术方案,边界计算流程fpga电路具体包括第一级地址比较器、第一级寄存器、第二级地址比较器、第二级寄存器和仲裁器;第二级地址比较器包括第二级地址比较器a和第二级比较器b,第二级寄存器包括第二级寄存器a和第二级寄存器b;仲裁器包括第一仲裁器和第二仲裁器。
15.根据上述技术方案,第一级地址比较器的一端与第一lut_fifo连接,第一级地址比较器的另一端与第一级寄存器连接,第一级寄存器分别与第二级地址比较器a和第二级地址比较器b连接;第二级地址比较器a与第二级寄存器a连接,第二级寄存器a连接分别与第一仲裁器和第二仲裁器连接,第一仲裁器与第二lut_fifo连接;第二级地址比较器b与第二级寄存器b连接,第二级寄存器b分别与第一仲裁器和第二仲裁器连接,第二仲裁器与第二lut_fifo连接。
16.根据上述技术方案,对齐电路还包括第一fifo控制器和第二fifo控制器;其中,第一fifo控制器用于控制第一lut_fifo,第二fifo控制器用于控制第二lut_fifo。
17.根据上述技术方案,对齐电路还包括地址发生器,地址发生器的一端与第二lut_fifo连接,地址发生器的另一端与数据缓存器连接。
18.与现有技术相比,本发明具有以下有益效果:通过本发明中提出的方法和电路,仅占用fpga芯片中的极小数字电路资源,能够实现不同长度、不同起始地址的dma传输命令的自动切分,使其符合嵌入式处理器的内存分段访问需求。使用所述的一种基于fpga的dma控制器边界对齐方法,避免了使用嵌入式处理器对地址进行重复搬移,也节约了大量运行时间,提高了计算效能。
附图说明
19.图1为本发明原始数据切割流程图;图2为本发明算法框图;图3为本发明电路框图;图4为本发明具体电路图。
具体实施方式
20.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他
实施例,都属于本发明保护的范围。
21.实施例一如图1和图2所示,一种基于fpga的dma控制器边界对齐方法,包括以下步骤:步骤s1,fpga接收需要搬移的原始数据并存储;步骤s2,fpga获取原始数据的数据长度和数据地址信息;步骤s3,fpga计算dma控制器的后级传输协议支持的数据最大长度;步骤s4,通过步骤s3,计算得到新的搬移数据包地址和长度;步骤s5,将步骤s4中得到的新的搬移数据包地址和长度存入到命令缓存队列中保存为新的搬移命令;步骤s6,dma控制器从命令缓存队列中取出新的搬移命令,并根据搬移命令将原始数据取出,开始搬移。
22.步骤s4中,计算的具体步骤为:fpga获取需要搬移至嵌入式处理器的原始数据的数据长度和数据地址信息;fpga计算当前dma控制器的后级传输协议支持的数据最大长度;判断数据最大长度是否小于嵌入式处理器内存数据边界;如果是,则进入stepa;如果不是,则进入stepb;stepa的具体步骤包括:a1:地址边界距离为数据最大长度减去原始数据的数据地址;a2:判断原始数据的数据长度是否大于地址边界距离,如果不是,则代表数据搬移不会超过地址边界距离,则第一次切割长度就为原始数据的数据长度,而第一次切割的首地址即为原始数据的数据地址,并结束传输;如果是,则代表数据搬移会超过地址边界距离,并设原始数据的数据长度为n1,地址边界距离为l1;则n1/l1=ni/l1,其中n表示原始数据的数据长度n1的前部数据是地址边界距离l1的整数倍,原始数据的数据长度n1的前部数据按照地址边界距离l1切割n次;i是原始数据的数据长度n1的剩余数据,该数据的长度比地址边界距离l1短,因此,原始数据的数据长度n1最后一次切割的长度为原始数据的数据长度n1的剩余数据i;其中,第一次切割的原始数据的数据长度n1为地址边界距离l1;第一次切割的首地址为原始数据的数据地址;stepb的具体步骤为:b1:地址边界距离为嵌入式处理器内存数据边界减去原始数据的数据地址;b2:判断原始数据的数据长度是否大于地址边界距离;如果不是,则代表数据搬移不会超过地址边界距离,则第一次切割长度就为原始数据的数据长度,而第一次切割的首地址即为原始数据的数据地址,并结束传输;如果是,则代表数据搬移会超过地址边界距离,则并设原始数据的数据长度为n2,地址边界距离为l2;则n2/l2=xa/l2,其中x表示原始数据的数据长度n2的前部数据是地址边界距离l2的整数倍,数据长度原始数据的数据长度n2的前部数据按照地址边界距离l2切割x次;a是数据长度原始数据的数据长度n2的剩余数据,该数据的长度比地址边界距离l2短,因此,数据长度原始数据的数据长度n2最后一次切割的长度为数据长度原始数据的数据长度n2的剩余数据a;
其中,第一次切割长度为地址边界距离的长度,而第一次切割的首地址即为原始数据的数据地址。
23.数据最大长度的具体计算方法为:首先确定当前dma控制器的后级传输协议,根据确定的后级传输协议确定所支持的最大突发长度和最大数据宽度,数据最大长度为最大突发长度和最大数据宽度之积。
24.进一步的,fpga将接收到的原始数据存储在数据缓存器中。
25.进一步的,数据最大长度的具体计算方法为:首先确定当前dma控制器的后级传输协议,根据确定的后级传输协议确定所支持的最大突发长度和最大数据宽度,数据最大长度为最大突发长度和最大数据宽度之积。
26.实施例二本实施例提供一种具体的搬移实施方式。假设当前dma控制器通过axi4协议向嵌入式处理器进行数据搬移,那么此长度为axi4协议所支持的最大突发长度(256)和最大数据宽度(64bit)之积,即2048byte。fpga计算当前突发起始地址和数据最大长度的边界距离。并根据边界距离和4k边界(嵌入式处理器内存的限制通常为4kb)进行合并计算,切割需要搬移的数据,计算新的搬移数据包,并将计算后的突发长度、数据地址信心存入命令缓存队列。
27.搬移的具体过程为:步骤1,fpga接收需要搬移的数据,存入数据缓存,并主动获取到需要搬移至嵌入式处理器原始数据的数据长度和数据地址信息;步骤2,fpga计算当前dma控制器后级传输协议支持的数据最大长度。举例而言,假设当前dma控制器通过axi4协议向嵌入式处理器进行数据搬移,那么此长度为axi4协议所支持的最大突发长度(256)和最大数据宽度(64bit)之积,即数据最大长度为2048byte;步骤3,fpga计算当前突发起始地址和步骤2中计算得到的最大长度的边界距离;步骤4,根据步骤3中计算的边界距离和4k边界进行合并计算,切割s1中需要搬移的数据,计算新的搬移数据包,并将计算后的突发长度、数据地址信号存入命令缓存队列。举例而言,若dma传输协议为axi4,由步骤2中计算可知,数据最大长度(max_len)为2kb。如果用户层发起dma请求从地址0x500到0x2345搬移数据,由于跨越了嵌入式处理器的内存限制(4kb),使用如图1和图2所示的切割流程,则原始数据的数据地址(addr)为0x500,原始数据的数据长度(len)为(0x2345-0x500+0x1=0x1e46)0x1e46,而4kb边界为0x1000、0x2000。首先max_len小于4kb,则计算地址边界距离(boundary_left)为0x300,首包的dma地址即为0x500-0x7ff。继续对比剩余长度与max_len的大小,得出第二包地址计算从0x800-0xfff。如此重复计算直到剩余长度小于max_len,则末包长度即为剩余长度,末包尾地址即为0x2345。
28.步骤5,dma控制器从命令缓存队列中取出新建立的命令,并且从s1中的数据缓存中取出数据,开始搬移。
29.进一步的,后级传输协议为axi3、axi4或pcie中的其中一种。
30.实施例三如图3和图4所示,一种基于fpga的dma控制器边界对齐电路,包括嵌入式处理器、dma控制器、数据缓存器、边界计算流程fpga电路、lut_fifo和外部时钟分频电路;
lut_fifo包括第一lut_fifo和第二lut_fifo;第一lut_fifo与边界计算流程fpga电路的一端连接,边界计算流程fpga电路的另一端与第二lut_fifo连接,第二lut_fifo与dma控制器连接,dma控制器通过控制总线与嵌入式处理器连接;数据缓存器用于存储需要搬移的原始数据;数据缓存器与dma控制器连接;外部时钟分频电路与分别与第一lut_fifo、第二lut_fifo、边界计算流程fpga电路和数据缓存器连接;外部时钟分频电路用于提供参考时钟信号,使得dma控制器和其他元件工作于同一个时钟域。
31.边界计算流程fpga电路具体包括第一级地址比较器、第一级寄存器、第二级地址比较器、第二级寄存器和仲裁器;第二级地址比较器包括第二级地址比较器a和第二级比较器b,第二级寄存器包括第二级寄存器a和第二级寄存器b;仲裁器包括第一仲裁器和第二仲裁器。
32.第一级地址比较器的一端与第一lut_fifo连接,第一级地址比较器的另一端与第一级寄存器连接,第一级寄存器分别与第二级地址比较器a和第二级地址比较器b连接;第二级地址比较器a与第二级寄存器a连接,第二级寄存器a连接分别与第一仲裁器和第二仲裁器连接,第一仲裁器与第二lut_fifo连接;第二级地址比较器b与第二级寄存器b连接,第二级寄存器b分别与第一仲裁器和第二仲裁器连接,第二仲裁器与第二lut_fifo连接。
33.对齐电路还包括第一fifo控制器和第二fifo控制器;其中,第一fifo控制器用于控制第一lut_fifo,第二fifo控制器用于控制第二lut_fifo。
34.对齐电路还包括地址发生器,地址发生器的一端与第二lut_fifo连接,地址发生器的另一端与数据缓存器连接。
35.实施例四本实施例为实施例二的进一步细化。通过参数定义,计算当前原始命令是否需要进行合并或拆分。电路计算dma控制器接口的最大负载值,与嵌入式处理器内存的限制(通常为4kb)进行对比计算,并根据当前内存段中可容纳的地址长度、当前dma控制器内部缓冲单元的水线值参数,计算出当前需要合并或拆分的地址大小,存储到命令存储电路中。dma控制器通过读取命令存储电路中的命令,即可以直接执行,新的命令已经自动保证不会超越内存段的限制。
36.长度切割命令和地址信息都存储于lut_fifo中,作为链表的命令队列。lut_fifo指在fpga芯片中slice资源的寄存器所搭建的fifo存储器。而原始数据则存放于fpga芯片中数据缓存器(bram)资源中,仅被读取一次。通过这种存储设计,即节约了fpga芯片中宝贵的数据缓存器(bram)资源,也能通过数据缓存器(bram)和lut_fifo,使得整体设计可以适应多种协议和多种时钟域,与外部接口实现时钟域的完全分离。
37.实施例五本实施例提供本发明的发明构思:如图1和图2所示,具体地,命令获取模块具体指图4中的lut_fifo电路和任务仲裁令牌环电路,命令获取模块支持不同长度、任意地址的dma传输命令;通过多路令牌环的形式,获取上层应用发给dma控制器的原始数据搬移命令和数据;具体地,边界计算模块可参数化定制,实现各类地址对齐,自动实现命令的分割与
对齐;具体地,数据缓存器用于提供原始命令和切割命令后的存储;使用bram和lut_fifo硬件电路,存储来自命令获取电路的原始命令和来自边界对齐电路计算合并或分拆的计算命令。并处理发往dma控制器的计算后dma数据搬移命令;具体地,所述外部时钟分频模块提供任意频率的参考时钟信号,使得dma控制器和本设计所述的对齐方法,工作于同一个时钟域。
38.一种基于fpga的dma控制器边界对齐方法,包括以下步骤:s1、fpga接收需要搬移的数据,存入数据缓存,并主动获取到需要搬移至嵌入式处理器原始数据的数据长度和数据地址信息;s2、fpga计算当前dma控制器后级传输协议支持的数据最大长度。举例而言,假设当前dma控制器通过axi4协议向嵌入式处理器进行数据搬移,那么此长度为axi4协议所支持的最大突发长度(256)和最大数据宽度(64bit)之积,即2048byte;s3、fpga计算当前突发起始地址,和s2中所计算的最大长度的边界的距离;s4、根据s3中计算的边界和4k边界进行合并计算,切割s1中需要搬移的数据,计算新的搬移数据包,并将计算后的突发长度、数据地址信心存入命令缓存队列;s5、dma控制器从命令缓存队列中取出新建立的命令,并且从s1中的数据缓存中取出数据,开始搬移。
39.本发明中的名词具体解释为:boundary_left:地址边界距离;即需要搬移至嵌入式处理器的原始数据地址与当前dma控制器的后级传输协议支持的数据最大长度之差;此地址边界距离信息代表原始数据传输时,原始数据是否会跨越此边界,如果原始原始数据的数据长度超过了此边界距离,也就是说,原始数据在搬移的过程中,需要进行拆包操作。首先计算此地址边界距离信息,并存储到寄存器中;remain len:剩余数据长度;addr:数据地址;max_len:数据最大长度;len:原始数据的数据长度。
40.需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
41.最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1