CN114328316B - Dma控制器、soc系统及基于dma控制器的数据搬运方法 - Google Patents
Dma控制器、soc系统及基于dma控制器的数据搬运方法 Download PDFInfo
- Publication number
- CN114328316B CN114328316B CN202111389257.7A CN202111389257A CN114328316B CN 114328316 B CN114328316 B CN 114328316B CN 202111389257 A CN202111389257 A CN 202111389257A CN 114328316 B CN114328316 B CN 114328316B
- Authority
- CN
- China
- Prior art keywords
- data
- linked list
- transmission
- dma controller
- sub
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims description 104
- 230000005540 biological transmission Effects 0.000 claims abstract description 228
- 238000012545 processing Methods 0.000 claims abstract description 11
- 238000012546 transfer Methods 0.000 claims description 61
- 230000015654 memory Effects 0.000 claims description 42
- 230000008569 process Effects 0.000 claims description 38
- 238000013524 data verification Methods 0.000 claims description 23
- 230000004044 response Effects 0.000 claims description 17
- 238000012937 correction Methods 0.000 claims description 15
- 238000012795 verification Methods 0.000 claims description 14
- 238000004364 calculation method Methods 0.000 claims description 5
- 125000004122 cyclic group Chemical group 0.000 claims description 5
- 238000002360 preparation method Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 27
- 238000013461 design Methods 0.000 description 11
- 230000006870 function Effects 0.000 description 11
- 238000003860 storage Methods 0.000 description 11
- 238000004590 computer program Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000008570 general process Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000004193 electrokinetic chromatography Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000008054 signal transmission Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Landscapes
- Bus Control (AREA)
Abstract
本发明实施例提供一种DMA控制器及SOC系统,属于数据处理及传输领域。所述DMA控制器包括:总线主机接口,用于提供从源端至目的端的数据搬运的接口;以及传输控制模块,用于控制DMA控制器执行基于传输链表的数据搬运。执行基于传输链表的数据搬运包括:配置链表指针寄存器的指针指向传输链表中的首地址;配置链表寄存器自动访问链表指针寄存器所指向的首地址,并将该首地址对应的待搬运数据自动加载到所述DMA控制器;以及配置链表寄存器按照传输链表中的地址顺序,依次自动访问自首地址的下一地址起的各地址,并自动加载相应地址对应的待搬运数据,直到加载完所有待搬运数据。本发明提高了DMA控制器的数据传输效率并且减小了CPU的工作负荷。
Description
技术领域
本发明涉及数据处理及传输领域,具体地涉及一种DMA(Direct Memory Access,直接内存存取)控制器、SOC系统(Syetem-on-a-Chip,片上系统)及基于DMA控制器的数据搬运方法。
背景技术
芯片处理数据和传送数据的效率高低,是衡量芯片性能高低的重要指标,由此推动芯片技术朝着SOC方向蓬勃发展。已知,SOC技术可以集成诸如微处理器、微控制器、存储器模块和通讯的接口模块等众多模块,而如何提高各模块之间的数据传送效率对工程项目来说是非常具有研究意义的。
对此,DMA类型的数据传送应运而生,其是能够直接访问存储器的技术,因而能够使系统达到极大的数据传送速率。其中,DMA控制器就相当于一个可配置的处理器,控制着存储器之间的数据传送或者外部设备与存储器之间的数据交换流程。
但是,对于传统采用分块数据传输的DMA控制器,对于一次DMA数据传输,如果源地址以及目的地址都是连续的,在完成这次连续地址的DMA传输之后,DMA控制器会产生中断信号,通知CPU(Central Processing Unit,中央处理单元)数据传输完成,CPU开始配置下一次DMA数据传输的地址。因此如果要把多个连续地址下的数据传送到某个目标地址,就需要进行多次传输,每传输完一个连续地址的数据就要产生一个中断,等待CPU配置下一个连续地址,因此造成传输效率较低。即,DMA控制器在数据传输过程中对CPU的依赖影响其传输效率。
发明内容
本发明实施例的目的是提供一种DMA控制器及SOC系统,用于至少部分地解决上述技术问题。
为了实现上述目的,本发明实施例提供一种DMA控制器,包括:总线主机接口,用于提供所述DMA控制器实现从源端至目的端的数据搬运的接口;以及传输控制模块,用于控制所述DMA控制器执行基于传输链表的数据搬运,其中所述传输链表被配置为连接多个从源端接收的连续或非连续的待搬运数据。其中,所述DMA控制器执行基于传输链表的数据搬运包括:配置链表指针寄存器的指针指向所述传输链表中的首地址;配置链表寄存器自动访问所述链表指针寄存器所指向的首地址,并将该首地址对应的待搬运数据自动加载到所述DMA控制器;以及在完成对所述首地址对应的待搬运数据的自动加载之后,配置所述链表寄存器按照所述传输链表中的地址顺序,依次自动访问自所述首地址的下一地址起的各地址,并自动加载相应地址对应的待搬运数据至所述DMA控制器,直到加载完所述传输链表中的所有待搬运数据。
优选地,所述传输控制模块还用于以下中任意一者或多者:基于主状态机控制所述DMA控制器执行数据搬运总过程;基于第一子状态机控制从源端接收所述待搬运数据的子过程;基于第二子状态机控制向目的端发送待搬运数据的子过程;以及基于第三子状态机控制所述DMA控制执行基于传输链表的数据搬运的子过程。
优选地,基于主状态机控制所述DMA控制器执行数据搬运总过程包括:在所述DMA控制器没有进行数据需要搬运时,控制所述主状态机进入空闲状态;当需要所述DMA控制器进行数据搬运时,控制所述主状态机进入准备状态,以等待向所述DMA控制器的内部寄存器写入待搬运数据;在全部待搬运数据写入完成之后,控制所述主状态机进入等待状态,以等待源端的传输请求信号;当识别到源端的传输请求信号之后,控制所述主状态机进入工作状态,以开始一次数据传输;在每次数据传输完成后,检测所述链表寄存器是否为零,若否,则重新加载所需的待搬运数据以开始下一次数据传输,直到所述链表寄存器为零,其中所述链表寄存器为零表明全部数据传输完毕;以及在全部数据传输完毕或者数据传输错误时,控制所述主状态机返回空闲状态。
优选地,基于第一子状态机控制从源端接收所述待搬运数据的子过程,包括:在没有数据搬运进行时,控制所述第一子状态机处于空闲状态;当所述主状态机进入工作状态之后,控制所述第一子状态机进入开始状态;在所述第一子状态机在开始状态停留第一预设时间后,控制第一子状态机进入工作状态,以从源端接收数据;在接收完指定数据宽度的数据之后,控制所述第一子状态机进入校验状态,以进行数据校验;若所述数据校验通过,则控制所述第一子状态机返回工作状态以接收下一数据,若所述数据校验未通过,则控制所述第一子状态机进入错误状态;以及在所有数据全部接收完毕之后或者所述第一子状态机在工作状态停留超过第二预设时间之后,控制所述第一子状态机返回空闲状态。
优选地,基于第二子状态机控制向目的端发送待搬运数据的子过程,包括:在没有向目的端搬运数据时,控制所述第二子状态机处于空闲状态;当出现目的端应答信号时,控制第二子状态机进入工作状态以发送数据;当指定的数据发送完成之后或所述第二子状态机停留在工作状态超过了第三预设时间之后,控制第二子状态机返回空闲状态。
优选地,基于第三子状态机控制所述DMA控制执行基于传输链表的数据搬运的子过程,包括:在没有链表传输进行时,控制所述第三子状态机处于空闲状态;当选择链表传输模式且检测到源端传输请求后,控制所述第三子状态机进入校验状态,以开始链表数据传输;当计数到当前传输链表的传输长度时,控制所述第三子状态机进入加载状态以加载下一个链表数据,加载完成后,控制所述第三子状态机返回校验状态以开始新一段链表数据传输;以及重复上述步骤,直到整个链表传输结束,并在整个链表传输结束时,控制所述第三子状态机进入完成状态,且在响应于完成状态而产生链表传输完成信号后,控制所述第三子状态机返回空闲状态。
优选地,所述DMA控制器还包括:数据校验模块,用于采用以下中的任意一种或多种校验方法来对待搬运数据进行校验:基于查表法的循环冗余校验CRC;以及错误检查和纠正ECC校验。
优选地,所述数据校验模块包括用于执行基于查表法的CRC的以下电路:累加器电路,用于将输入的待校验数据的字节与该累加器电路中预设的字节进行逻辑运算,并将所述逻辑运算的结果作为索引值;以及查找表电路,其预存了具有不同索引值的多个CRC码,用于输出与所述累加器电路得到的索引值相适配的CRC码以用于数据校验。
优选地,所述累加器电路被配置为16位的累加器,且其中预设的高8位字节被用于与所述待校验数据的字节进行异或运算以得到所述索引值。
优选地,所述数据校验模块包括用于执行基于ECC校验的以下单元:ECC计算单元,用于在所述待搬运数据写入和读出时分别计算出对应的ECC码;以及ECC校验纠错单元,将两次计算的ECC码相比较以进行数据的校验和纠错。
优选地,所述DMA控制器还包括以下模块中的任意一者或多者:总线从机接口,用于提供CPU向所述DMA控制器的内部寄存器写入或读取数据的接口;多个传输通道,其中每一传输通道被配置为实现所述DMA控制器内部的两个指定存储器之间的数据传输;FIFO存储器,用于进行所述DMA控制器内部的数据缓存;数据同步模块,用于实现来自总线的配置信息的同步;中断响应模块,用于产生中断信号,并通过总线传输该中断信号以通知中央处理单元CPU;以及请求同步模块,用于将来自源端的传输请求信号同步到所述DMA控制器的时钟域下。
另一方面,本发明还提供一种SOC系统,包括上述任意的DMA控制器。
另一方面,本发明还提供一种基于DMA控制器的数据搬运方法,包括:控制所述DMA控制器执行基于传输链表的数据搬运,其中所述数据搬运是指从源端至目的端的数据搬运,且所述传输链表被配置为连接多个从源端接收的连续或非连续的待搬运数据。其中,所述DMA控制器执行基于传输链表的数据搬运包括:配置链表指针寄存器的指针指向所述传输链表中的首地址;配置链表寄存器自动访问所述链表指针寄存器所指向的首地址,并将该首地址对应的待搬运数据自动加载到所述DMA控制器;以及在完成对所述首地址对应的待搬运数据的自动加载之后,配置所述链表寄存器按照所述传输链表中的地址顺序,依次自动访问自所述首地址的下一地址起的各地址,并自动加载相应地址对应的待搬运数据至所述DMA控制器,直到加载完所述传输链表中的所有待搬运数据。
优选地,所述数据搬运方法还包括以下任意一者或多者:基于主状态机控制所述DMA控制器执行数据搬运总过程;基于第一子状态机控制从源端接收所述待搬运数据的子过程;基于第二子状态机控制向目的端发送待搬运数据的子过程;以及基于第三子状态机控制所述DMA控制执行基于传输链表的数据搬运的子过程。
优选地,所述数据搬运方法还包括采用以下中的任意一种或多种校验方法来对待搬运数据进行校验:基于查表法的循环冗余校验CRC;以及错误检查和纠正ECC校验。
通过上述技术方案,本发明利用链表指针寄存器、链表寄存器及两者实现的基于传输链表的数据搬运方案,对于连续或非连续的数据,都可以省去向CPU发出中断的过程,从而提高了DMA控制器的数据传输效率并且减小了CPU的工作负荷。
本发明实施例的其它特征和优点将在随后的具体实施方式部分予以详细说明。
附图说明
附图是用来提供对本发明实施例的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本发明实施例,但并不构成对本发明实施例的限制。在附图中:
图1是常规DMA控制器进行数据搬运的过程的示意图;
图2是本发明实施例的DMA控制器的功能结构示意图;
图3是本发明实施例中的示例传输链表的示意图;
图4是承接于图3的传输链表的数据传送链结构的示意图;
图5是本发明实施例中针对DMA控制器执行数据搬运的总过程设计的总状态机的示意图;
图6是本发明实施例中针对DMA控制器执行从源端接收所述待搬运数据的子过程设计的第一子状态机的示意图;
图7是本发明实施例中针对DMA控制器执行向目的端发送待搬运数据的子过程设计的第二子状态机的示意图;
图8是本发明实施例中针对DMA控制器执行基于传输链表的数据传输子过程设计的第三子状态机的示意图;
图9是本发明实施例中的数据校验模块的示例实现电路图;
图10是本发明实施例中的ECC校验的示例实现结构图;
图11的本发明实施例的ECC校验状态机的示意图;
图12给出了基于本发明实施例方案实现的示例DMA控制器的结构示意图;以及
图13是利用本发明实施例的DMA控制器或数据搬运方法实现数据搬运的流程图。
附图标记说明
100、总线主机接口;200、传输控制模块;300、数据校验模块。
具体实施方式
以下结合附图对本发明实施例的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明实施例,并不用于限制本发明实施例。
在具体描述本发明实施例之前,为使描述清楚,在此先对本发明实施例中所涉及关于现有技术中的部分技术或方案进行简单说明。
1、DMA控制器进行数据搬运的过程。
图1是常规DMA控制器进行数据搬运的过程的示意图。其中,当需要将源端的数据搬运至目的端时,CPU向DMA控制器发送指令,由DMA控制器根据指令,通过总线从源端接收数据,并在将数据暂存及处理之后,再通过总线发送到目的端。需说明的是,在本发明实施例中,数据传输和数据搬运所表示的含义相同,可互换进行理解。
2、CRC校验原理。
CRC(Cyclic Redundancy Check,循环冗余校验)是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。CRC校验是一种数据传输检错功能,其对数据进行多项式计算,并将得到的结果附在传输帧的后面,以保证数据传输的正确性和完整性。CRC检验的具体过程为:发送端将需要发送的k位二进制序列看作是信息多项式的系数,除以生成多项式,将余数多项式的系数作为r位校验码(即CRC校验码)附在信息后面一起发送出去;接收端用同一生成多项式除以接收到的二进制序列,若结果为零,则表明数据传输正确,否则表明数据传输错误。
3、ECC校验原理。
ECC(Error Checking and Correcting,错误检查和纠正)校验是在数据位上额外的位处存储一个用数据加密的代码,其校验过程具体包括:当数据被写入内存,相应的ECC代码与此同时也被保存下来;当重新读回存储的数据时,保存下来的ECC代码就会和读数据时产生的ECC代码进行比较;如果两个代码不相同,则两个代码会被解码,以确定数据中的哪一位是不正确的;然后错误的位会被抛弃,内存控制器则会释放出正确的数据。需说明的是,被纠正的数据很少会被放回内存,而假如相同的错误数据再次被读出,则纠正过程将再次被执行。
下面具体介绍本发明实施例。
图2是本发明实施例的DMA控制器的功能结构示意图。如图2所示,该DMA控制器可以包括:总线主机接口100,用于提供所述DMA控制器实现从源端至目的端的数据搬运的接口;以及传输控制模块200,用于控制所述DMA控制器执行基于传输链表的数据搬运,其中所述传输链表被配置为连接多个从源端接收的连续或非连续的待搬运数据。其中,对于总线主机接口100,举例而言,当DMA控制器开始传输数据时,DMA控制器获得总线的使用权,根据配置好的信息选择需要用到的DMA控制器中的通道,之后通过总线主机接口100从源端接收需要搬运的数据,并把数据放入DMA控制器内部进行存储,完成数据接收;当需要搬运的数据接收完毕或者相应存储模块(例如FIFO)填满后,控制器把相应的地址和数据信息通过总线主机接口输出到总线上,以通过总线将数据以及配置信息发送给目的端,完成数据发送。
其中,所述DMA控制器执行基于传输链表的数据搬运包括:配置链表指针寄存器的指针指向所述传输链表中的首地址;配置链表寄存器自动访问所述链表指针寄存器所指向的首地址,并将该首地址对应的待搬运数据自动加载到所述DMA控制器;以及在完成对所述首地址对应的待搬运数据的自动加载之后,配置所述链表寄存器按照所述传输链表中的地址顺序,依次自动访问自所述首地址的下一地址起的各地址,并自动加载相应地址对应的待搬运数据至所述DMA控制器,直到加载完所述传输链表中的所有待搬运数据。
下面通过传输链表的示例来具体说明DMA控制器利用传输链表所进行的数据搬运。
举例而言,图3是示例的传输链表的示意图。该示例中,通过一系列传输链表定义了待搬运数据的起始地址(也称首地址)以及结束地址和下一段链表传输的地址。每一链表控制一段地址连续的数据存储区域,如链表1定义了地址0X01100到地址0X01800的数据段1。同时该链表还指向下一个链表,在当前链表数据传输完成后开始下一段链表数据的传输,直到所有链表指向的数据全部完成传输,如链表1指向链表2,链表2指向链表3,链表3指向链表4,数据传输完成。还需要说明的是,各链表对应的各数据段之间,如数据段1和数据段2,既可以是连续数据,也可以是非连续数据。
基于该链表,本发明实施例利用链表指针寄存器和链表寄存器形成了用于进行数据搬运数据传送链结构。图4是承接于图3的传输链表的数据传送链结构的示意图。
如图4所示,在数据传送链结构中,每一个链表都指向下一链表地址,且每一个链表对应存放待搬运数据的一段数据,各个链表相连接以存放连续或非连续的待搬运数据。据此,数据传输过程可描述为:当初始化DMA控制器时,将第一个链表地址参数(对应首地址)配置到链表指针寄存器中,开始第一段数据传输,链表寄存器会自动访问链表指针寄存器所指向的地址空间,将其中存放的数据段自动加载到DMA控制器的相应寄存器中,加载完毕后,更新地址空间,自动访问下一地址以进行第二段数据传输,搬运第二段链表所指向的数据段;之后依此类推进行数据搬运,当传输的链表是整个数据传送链结构的最后一段链表时,链表传输结束。在示例中,可设置链表有效标志位,在此段链表传输结束后,该链表有效标志位置0,表示当前链表失效,链表结构的全部数据传输完成。需说明的是,这一链表传输过程可基于状态机进行控制,这将在下文中具体描述,在此先不进行赘述。
如此,本发明实施例利用链表指针寄存器、链表寄存器及两者实现的基于传输链表的数据搬运方案,对于连续或非连续的数据,都可以省去向CPU发出中断的过程,从而提高了DMA控制器的数据传输效率并且减小了CPU的工作负荷。因此,本发明实施例通过降低数据搬运过程中DMA控制器对于CPU的依赖,提升了DMA控制器的运算速度。
再次返回图2,传输控制模块200对于DMA执行的数据搬运的控制可通过状态机来实现。基于这一思路,在优选的实施例中,所述传输控制模块200还可以用于执行以下任意一者或多者:
1)基于主状态机控制所述DMA控制器执行数据搬运总过程;
2)基于第一子状态机控制从源端接收所述待搬运数据的子过程;
3)基于第二子状态机控制向目的端发送待搬运数据的子过程;以及
4)基于第三子状态机控制所述DMA控制执行基于传输链表的数据搬运的子过程。
其中,可理解为所述总过程包括但不限于上述的子过程。
即,在优选的实施例中,可涉及四个状态机以控制不同的数据搬运阶段。下面对涉及的四个状态机及相应的控制过程进行具体介绍。
1)主状态机及其对应的数据搬运总过程。
图5是本发明实施例中针对DMA控制器执行数据搬运的总过程设计的总状态机的示意图,其包括要包含四个状态:IDLE(空闲)状态;READY(准备)状态,其是指CPU进行数据配置的状态;WAIT(等待)状态,其是指等待源端触发的状态;WORK(工作)状态,其是指DMA控制器进行数据传输的工作状态。
参考图5,总状态机下控制的数据搬运总过程可以包括以下步骤:在所述DMA控制器没有进行数据搬运时,控制主状态机进入IDLE状态;当需要所述DMA控制器进行数据搬运时,控制主状态机进入READY状态,以等待向所述DMA控制器的内部寄存器写入待搬运数据;在全部待搬运数据写入完成之后,控制主状态机进入WAIT状态,以等待源端的传输请求信号;当识别到源端的传输请求信号之后,控制主状态机进入WORK状态,以开始一次数据传输;在每次数据传输完成后,检测所述链表寄存器是否为零,若否,则重新加载所需信息以开始下一次数据传输,直到所述链表寄存器为零,其中所述链表寄存器为零表明全部数据传输完毕;以及在全部数据传输完毕或者数据传输错误时,控制主状态机返回IDLE状态。其中,关于链表寄存器为0的设计与上文为链表配置有效标志位是相一致的,即链表寄存器为0时,对应的有效标志位显示为0。
举例而言,在DMA控制器没有数据传输的时候,控制器处于IDLE状态,当需要DMA进行数据传送时,CPU会给出DMA控制器工作使能信号,随即主状态机进入READY状态,在READY状态,8051单片机(CPU)的E总线向DMA内部的特殊功能寄存器写入配置信息,包括控制寄存器以及通道控制寄存器相关的配置信息。写入的配置信息在经过数据同步后被写入DMA内部寄存器。全部配置信息写入完成之后,主状态机进入WAIT状态。在WAIT状态,DMA控制器等待源端的传输请求信号,信号经过跨时钟域同步(通过下文的请求同步模块实现同步)后进入DMA控制器,当识别到源端的数据传输请求信号之后,状态机进入WORK状态开始一次数据传输,当全部数据传输完毕或者数据传输错误,如数据校验错误,传输超时后,状态机返回IDLE状态,等待CPU的进一步指示,一次DMA类型的数据传输结束。进一步地,一次传输完成后检测到链表寄存器不为零,则重新加载传输所需信息,开始下一次传输,直到链表寄存器为0,所有传输完成,产生传输完成中断,结束工作(WORK状态),发出数据传输完成中断信号给CPU。
其中,关于数据校验,将在下文中有更为具体的描述,在此则不再进行赘述。
在SoC系统的大量运用中,DMA控制器担负着大量数据搬运的任务,并且这些数据搬运工作可能会有不同的数据格式和地址方式,这给CPU写入配置信息造成了负担。,而在本发明实施例中,CPU将需要传输的多个工作(WORK)用传输链表链接起来,并将链表的起始地址配置到DMA传输信道,那么DMA控制器能自动根据链表指定位置抓取传输任务,更新DMA传输工作;而且在每一次传输工作完成后,能够判断链表是否结束,如未结束,则自动启动下一次传输。另外,通过传输链表功能可以降低对DMA控制器内部硬件资源的需求,即多个DMA传输可以共享一个DMA通道,从而可以大大地节省DMA控制器中通道的可寻址寄存器。
2)第一子状态机及其对应的从源端接收待搬运数据的子过程。
图6是本发明实施例中针对DMA控制器执行从源端接收所述待搬运数据的子过程设计的第一子状态机的示意图,其包括五个状态:IDLE状态;START(开始)状态,其是指开始数据传输的状态;WORK状态;CHECK(校验)状态,其是指进行数据校验的状态;ERROR(错误)状态,其是指校验出错误的状态。
参考图6,第一子状态机下控制的过程可以包括以下步骤:在没有数据搬运进行时,控制第一子状态机处于IDLE状态;当所述主状态机进入WORK状态之后,控制所述第一子状态机进入START状态;在第一子状态机在START状态停留第一预设时间后,控制第一子状态机进入WORK状态,以从源端接收数据;在接收完指定数据宽度的数据之后,控制第一子状态机进入CHECK状态,以进行数据校验;若数据校验通过,则返回WORK状态以接收下一个数据,若数据校验未通过,则控制第一子状态机进入ERROR状态;以及在所有数据全部接收完毕之后或者第一子状态机在WORK状态停留超过第二预设时间之后,控制第一子状态机返回IDLE状态。
举例而言,首先在没有传输进行的情况下,第一子状态机处于IDLE状态,当主状态机进入WORK状态之后,产生信号,驱动第一子状态机进入START状态,该第一子状态机在START状态停留一个预设周期,随即进入WORK状态以从源端按照配置好的数据宽度接收数据,每当接收完指定数据宽度的数据之后,第一子状态机进入CHECK状态,在CHECK对接收到的数据进行CRC校验,若校验通过则返回WORK状态接收下一个数据,直到所有数据全部接收完毕之后返回IDLE状态,一次从源端接收数据的过程结束。若在数据接收过程中,第一子状态机在WORK状态长期停留,超过了控制寄存器配置好的最长传输时间,则第一子状态机会返回IDLE状态,同时触发看门狗中断,通知CPU从源端接收数据超时,等待CPU下一步配置安排。若在CHECK状态出现CRC校验错误,则第一子状态机进入ERROR状态,在ERROR状态产生数据校验错误中断信号,通知CPU数据接收错误。
3)第二子状态机以及其控制的向目的端发送待搬运数据的子过程。
图7是本发明实施例中针对DMA控制器执行向目的端发送待搬运数据的子过程设计的第二子状态机的示意图,其包括三个状态:IDLE状态;WAIT(等待)状态,其是指等待源端应答的状态;WORK状态,其是指向源端传输数据的工作状态。
参考图7,第二子状态机下控制的数据传输过程可以包括以下步骤:在没有向目的端搬运数据时,控制所述第二子状态机处于IDLE状态;当出现目的端应答信号时,控制第二子状态机进入WORK状态以发送数据;当指定的数据发送完成之后或所述第二子状态机停留在WORK状态超过了第三预设时间之后,控制第二子状态机返回IDLE状态。
举例而言,首先在没有向目的端传输数据时,第二子状态机处于IDLE状态,当出现目的端应答信号时,表示目的端可以正常接收数据,第二子状态机进入WORK状态发送数据,当存储数据的FIFO为空或者指定的数据发送完成之后,第二子状态机返回IDLE状态,一次向目的端发送数据的过程结束。若在数据发送过程中,第二子状态机长期停留在WORK状态,并且超过了控制寄存器配置好的最长传输时间,则第二子状态机会返回IDLE状态,并且会向CPU发送传输数据超时中断信号。
4)第三子状态机及其控制的执行基于传输链表的数据搬运的子过程。
图8是本发明实施例中针对DMA控制器执行基于传输链表的数据搬运子过程设计的第三子状态机的示意图,其包括四个状态:IDLE状态;CHECK状态,其是校验当前链表是否传输完成的状态;LOAD(加载)状态,其是指链表加载状态;FINISH(完成)状态,其是指整个链表传输完成状态。
参考图8,第三子状态机下控制的数据传输过程可以包括以下步骤:在没有链表传输进行时,控制第三子状态机处于IDLE状态;当选择链表传输模式且检测到源端传输请求后,控制第三子状态机进入CHECK状态,以开始链表数据传输;当计数到当前链表的传输长度时,控制第三子状态机进入LOAD状态以加载下一个链表数据,加载完成后,控制第三子状态机返回CHECK状态以开始新一段链表数据传输;重复前述步骤,直到整个链表传输结束,在整个链表传输结束时,控制第三子状态机进入完成FINISH状态,且在响应于完成状态而产生链表传输完成信号后,控制第三子状态机返回IDLE状态。
举例而言,首先在没有链表传输进行时第三子状态机处于IDLE状态,当传输模式选择链表传输模式,并且此时有源端传输请求后,第三子状态机进入CHECK状态,DMA控制器开始链表数据传输。当传输计数器计数到当前链表的传输长度时,第三子状态机进入LOAD状态加载下一个链表数据,加载完成后,第三子状态机返回CHECK状态开始新一段链表数据传输,传输完成后再次进入LOAD状态加载新的传输链表数据,之后再次返回CHECK状态进行数据传输,如此循环往复,直到某次链表寄存器加载的数据位全0。此时链表标志位LIN_REG也为零,表示整个链表传输结束,第三子状态机进入FINISH状态,产生链表传输完成信号,之后状态机返回IDLE状态,整个链表数据传输结束。
本发明实施例中,针对不对控制过程设计了不同的状态机,使得每一过程可被独立控制,避免过程之间出现竞争,易于维护;并且,各过程对应的状态机涉及的状态较少,易于编程。
上文提及数据校验,但是,现有技术对DMA控制器的验证存在不足:一方面定制的验证方法只能验证特定的功能,无法满足高的代码覆盖率;另一方面基于CRC校验方案中往往采用的是传统的逐位运算法,而该逐位运算法每次只新加入1位进行运算,运算效率较低。
因此,在优选的实施例中,所述DMA控制器还包括:数据校验模块300,用于采用以下中的任意一种或多种校验方法来对待搬运数据进行校验:基于查表法的CRC;以及ECC校验。
下面对基于查表法的CRC和ECC校验在本发明实施例的应用进行分别介绍。
(1)基于查表法的CRC。
针对基于查表法的CRC,所述数据校验模块300可以包括用于执行基于查表法的CRC的以下电路:累加器电路,用于将输入的待校验数据的字节与该累加器电路中预设的字节进行逻辑运算,并将所述逻辑运算的结果作为索引值;以及查找表电路,其预存了具有不同索引值的多个CRC码,用于输出与所述累加器电路得到的索引值相适配的CRC码以用于数据校验。
即,本发明实施例的DMA控制器采用基于查表法的CRC进行数据校验。优选地,所述累加器电路被配置为16位的累加器,且其中预设的高8位字节被用于与所述待校验数据的字节进行异或运算以得到所述索引值。
举例而言,图9是本发明实施例中的基于查表法的CRC的示例实现电路图。如图9所示,DIN为输入数据字节、DINVALID为数据有效信号、START为数据校验模块开始工作信号。DIN、DINVALID、START可由CPU通过总线访问DMA控制器的特殊功能寄存器提供。TAB_OUT是累加器电路和查找表电路之间的传输端口;DOUT是查找表电路的输出信号。当累加器电路检测到高电平的START脉冲信号后,将初值置入16位累加器,当DINVALID信号为有效电平高电平时,将输入数据加到累加器中,即将累加器的高8位与数据字节异或,异或的结果为查找表的索引值,查找表中存放了索引值的CRC校验码,得到索引值的CRC校验码后,将累加器左移8位与索引值的CRC校验码相加即得到输入数据的CRC校验码。若此时DINVALID信号仍为高电平,则继续将输入数据加到累加器中直到DINVALID为低电平,得到一串数据字节的CRC校验码,并通过DOUT端输出。
结合上文,CRC校验有多种生成多项式,而在本发明实施例的DMA控制器中,使用的生成多项式是X16+X12+X5+1,生成的校验码为16位,可记为CRC16。
该示例中,采用查表法实现CRC16的计算,使得每次参与运算的都是一个字节(8位),相比于传统的逐位运算法,可大大提高运算速度。
(2)ECC校验。
图10是本发明实施例中的ECC校验的示例实现结构图。如图10所示,所述数据校验模块300可以包括用于执行基于ECC校验的以下模块:ECC计算单元,用于在所述待搬运数据写入和读出时分别计算出对应的ECC码;以及ECC校验纠错单元,将两次计算的ECC码相比较以进行数据的校验和纠错。
结合图10,举例而言,端口信号包含输入信号Data_in[31:0]和来自存储器的数据Data_from_ip[37:0],以及输出信号Data_out[31:0]和输出至存储器的数据Data_to_ip[37:0]。图10中,ECC算法设计框架将要写入存储器的32位(bit)数据Data_in经过ECC计算单元生成6位ECC码,作为Data_to_ip的高6位与Data_in合并写入存储器;从存储器读取出的38位数据Data_from_ip包含了数据和ECC码,ECC计算单元就该数据位(即Data_from_ip[31:0])计算生成新的ECC码,与读取的ECC码(即Data_from_ip[37:32])通过ECC校验纠错单元进行数据的校验与纠错;最后得到32位输出数据Data_out。
进一步结合图11的ECC校验状态机来举例说明。该示例中,在待搬运数据中加入几位校验码,将数据的每个二进制位按照一定规则分配在几个奇偶校验组里,当某一位发生错误会引起几个校验位的值发生变化,进而可确定出错的比特位并进行纠错。本示例中,采用的ECC校验算法以1个word为单位计算ECC码,将一个32位数据划分为6组,相应地增加6位的校验位。参考图11,空闲(IDLE)状态下:数据D[31:0]写入时,计算生成ECC码Q[5:0];开始(START)状态下,将数据读出时在此生成ECC码Q’[5:0];工作(WORK)状态则是将生成的两次ECC进行位异或运算得到一个6位数据;数据校验状态(CHECK)则根据C[5:0]进行数据校验和纠错,最终根据实际数据得出结果。
该示例中,采用ECC校验改进了传统奇偶校验仅能对待搬运数据进行检错而无法纠错的局限性。
在更为优选的实施例中,所述DMA控制器还包括以下模块中的任意一者或多者:总线从机接口,用于提供CPU向所述DMA控制器的内部寄存器写入或读取数据的接口;多个传输通道,其中每一传输通道被配置为实现所述DMA控制器内部的两个指定存储器之间的数据传输;FIFO(First In First Out,先进先出)存储器,用于进行所述DMA控制器内部的数据缓存;数据同步模块,用于实现来自总线的配置信息的同步;中断响应模块,用于产生中断信号,并通过总线传输该中断信号以通知中央处理单元CPU;以及请求同步模块,用于将来自源端的传输请求信号同步到所述DMA控制器的时钟域下。
针对该更为优选的实施例并结合上文,图12给出了基于本发明实施例方案实现的示例DMA控制器的结构示意图。基于图12,现介绍各模块的功能如下:
1)总线从机接口
总线从机接口,用于负责CPU对DMA控制器的内部寄存器,包括控制/状态寄存器进行写入以及读取。举例而言,对于总线从机接口,DMA控制器可挂接在8051控制器的总线上,在每次数据传输之前,CPU通过地址总线对DMA控制器内部要写入的寄存器进行寻址,之后通过数据总线将要写入的数据写入相应的寄存器。
2)传输通道及FIFO。
该示例具有多条传输通道,如图中所示的通道#0、通道#1、通道#2、通道#3和通道#4,分别用于SD控制接口与数据缓存器(BUFFER)之间的数据传输,数据缓存器BUFFER到FLASH之间的数据传输以及BUFFER到补丁存储器的数据传输。FIFO模块也是用于暂存传输过程中的数据或缓存DMA控制器内部的数据缓存。当待搬运数据进入DMA控制器内部并需要进行暂存时,可根据需要选择相应通道或FIFO模块。在示例中,FIFO模块可以主要由FIFO控制逻辑以及一个128层FIFO组成,FIFO设计的大小为32bits(4*byte)×128,也就是128个word(字)。
2)数据同步模块。
由于DMA控制器采用的是异步时钟设计,所以需要有一个同步模块来实现跨时钟域的信号同步,该模块主要同步来自CPU通过数据总线配置的控制寄存器信息,简称配置信息,且该配置信息包括DMA模块的使能信号、数据传输起始信号、DMA控制模块的清除中断信号等等。
3)中断响应模块。
中断响应模块负责产生相应的中断信号来通知CPU传输状态,如在一次数据搬运结束后,控制器会产生传输完成中断信号通知CPU进行下一步操作。此外如果DMA控制器内部的数据校验模块300发现从源端接收到的数据出现错误,DMA控制器也会产生传输错误中断信号给CPU以防止将错误的数据传输到下一模块。但是,需说明的是,本发明实施例因为采用了链表传输的方式,已经极大地减少了传输中对CPU的依赖。
4)请求同步模块
请求同步模块用于同步外部模块的DMA传输请求信号。以源端设备为例,若源端设备的传输请求信号与DMA控制器不在同一时钟域下,需要先同步到DMA控制器所在时钟域下,然后才能开始接下来的请求传输数据工作,否则可能会因为亚稳态而造成信号传输错误。
5)关于总线主机接口、数据校验模块和传输控制模块则可参考上文,在此不再赘述。
如此,本发明优选实施例的DMA控制器的各个功能模块相互配合,在保证数据同步、请求同步及与CPU的正常中断的情况下,通过传输控制模块200执行基于链表的数据传输,降低了传输过程中对CPU的依赖,提升了DMA控制器的运算速度。
基于与上述DMA控制器的相同的发明思路,本发明另一实施例提出了一种基于DMA控制器的数据搬运方法,包括:控制所述DMA控制器执行基于传输链表的数据搬运,其中所述数据搬运是指从源端至目的端的数据搬运,且所述传输链表被配置为连接多个从源端接收的连续或非连续的待搬运数据。
其中,所述DMA控制器执行基于传输链表的数据搬运包括:配置链表指针寄存器的指针指向所述传输链表中的首地址;配置链表寄存器自动访问所述链表指针寄存器所指向的首地址,并将该首地址对应的待搬运数据自动加载到所述DMA控制器;以及在完成对所述首地址对应的待搬运数据的自动加载之后,配置所述链表寄存器按照所述传输链表中的地址顺序,依次自动访问自所述首地址的下一地址起的各地址,并自动加载相应地址对应的待搬运数据至所述DMA控制器,直到加载完所述传输链表中的所有待搬运数据。
在优选的实施例中,所述数据搬运方法还包括以下任意一者或多者:基于主状态机控制所述DMA控制器执行数据搬运总过程;基于第一子状态机控制从源端接收所述待搬运数据的子过程;基于第二子状态机控制向目的端发送待搬运数据的子过程;以及基于第三子状态机控制所述DMA控制执行基于传输链表的数据搬运的子过程。
在优选的实施例中,所述数据搬运方法还包括采用以下中的任意一种或多种校验方法来对待搬运数据进行校验:基于查表法的CRC;以及ECC校验。
关于该数据搬运方法的更多实施细节及效果可参考上述关于DMA控制器的实施例,在此则不再进行赘述。
图13是利用本发明实施例的DMA控制器或数据搬运方法实现数据搬运的流程图,该流程与图5所示出的DMA控制器执行数据搬运的总过程相一致。如图13所示,可以包括以下步骤:
步骤S1301,CPU开始配置DMA控制器。
举例而言,示例中的DMA控制器用于SD卡芯片内部的数据传输,在开始工作时,首先由8051单片机(CPU)通过E总线对DMA控制器的特殊功能寄存器进行配置,包括控制寄存器以及通道控制寄存器。
步骤S1302,响应于源端的传输请求而开始进行所述源端与目的端之间的一次数据传输。
举例而言,配置完并使能DMA控制器之后,该DMA控制器开始进入等待模式,等待源端发出的触发请求,如在初始化SD卡的过程中,SD接口收到数据会产生传输请求信号,表示SD接口接收到了数据,请求开始DMA类型数据传输,DMA控制器收到传输请求之后,开始源端SD接口到DMA控制器阶段的数据传输、开始针对目的端的数据传输以及开始由DMA控制器到数据缓存BUFFER阶段的数据传输。
步骤S1303,响应于所述数据传输的所述开始而进行传输校验,且在校验无误的情况下,继续所述数据传输。
举例而言,在数据传输期间,如果出现数据校验错误或者传输超时,可以产生传输错误中断,若校验无误,则继续数据传输。
步骤S1304,在一次数据传输完成后,检测链表寄存器是否为零,若否则重新加载所需信息以开始下一次数据传输,直到所述链表寄存器为零,其中所述链表寄存器为零表明全部传输完成。
步骤S1305,响应于全部传输完成,向CPU发送传输完成中断信号。
举例而言,若为链表数据传输的情况下,一次传输完成后检测到链表寄存器不为零,则重新加载传输所需信息,开始下一次传输,直到链表寄存器为0,所有传输完成,产生传输完成中断,结束工作,发出数据传输完成中断信号给CPU。
需说明的是,图13的该流程与图5所示出的DMA控制器执行数据搬运的总过程相一致,故更为详细的方案细节及效果可参考上述关于图5所描述的总过程进行理解,在此不再进行赘述。
本发明另一实施例还提供了一种SOC系统,所述SOC系统包括上述任意的DMA控制器。该SOC系统还可包括常规的处理器、微控制器、存储器、通讯的接口模块等,在需要进行各模块之间的数据传送时,利用本发明实施例的DMA控制器,对数据进行链表传输和校验,以实现不同模块间的数据搬运。
其中,存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (12)
1.一种直接内存存取DMA控制器,其特征在于,包括:
总线主机接口,用于提供所述DMA控制器实现从源端至目的端的数据搬运的接口;以及
传输控制模块,用于控制所述DMA控制器执行基于传输链表的数据搬运,其中所述传输链表被配置为连接多个从源端接收的连续或非连续的待搬运数据;
其中,所述传输控制模块还用于:
基于主状态机控制所述DMA控制器执行数据搬运总过程;
基于第一子状态机控制从源端接收所述待搬运数据的子过程;
基于第二子状态机控制向目的端发送待搬运数据的子过程;以及
基于第三子状态机控制所述DMA控制器执行基于传输链表的数据搬运的子过程,包括:
S31,在没有链表传输进行时,控制所述第三子状态机处于空闲状态;
S32,当选择链表传输模式且检测到源端传输请求后,控制所述第三子状态机进入校验状态,以开始链表数据传输;
S33,当计数到当前传输链表的传输长度时,控制所述第三子状态机进入加载状态以加载下一个链表数据,加载完成后,控制所述第三子状态机返回校验状态以开始新一段链表数据传输;以及
S34,重复上述步骤S31-S33,直到整个链表传输结束,并在整个链表传输结束时,控制所述第三子状态机进入完成状态,且在响应于完成状态而产生链表传输完成信号后,控制所述第三子状态机返回空闲状态;
其中,所述DMA控制器执行基于传输链表的数据搬运包括:
配置链表指针寄存器的指针指向所述传输链表中的首地址;
配置链表寄存器自动访问所述链表指针寄存器所指向的首地址,并将该首地址对应的待搬运数据自动加载到所述DMA控制器;以及
在完成对所述首地址对应的待搬运数据的自动加载之后,配置所述链表寄存器按照所述传输链表中的地址顺序,依次自动访问自所述首地址的下一地址起的各地址,并自动加载相应地址对应的待搬运数据至所述DMA控制器,直到加载完所述传输链表中的所有待搬运数据。
2.根据权利要求1所述的DMA控制器,其特征在于,所述基于主状态机控制所述DMA控制器执行数据搬运总过程包括:
在所述DMA控制器没有进行数据需要搬运时,控制所述主状态机进入空闲状态;
当需要所述DMA控制器进行数据搬运时,控制所述主状态机进入准备状态,以等待向所述DMA控制器的内部寄存器写入待搬运数据;
在全部待搬运数据写入完成之后,控制所述主状态机进入等待状态,以等待源端的传输请求信号;
当识别到源端的传输请求信号之后,控制所述主状态机进入工作状态,以开始一次数据传输;
在每次数据传输完成后,检测所述链表寄存器是否为零,若否,则重新加载所需的待搬运数据以开始下一次数据传输,直到所述链表寄存器为零,其中所述链表寄存器为零表明全部数据传输完毕;以及
在全部数据传输完毕或者数据传输错误时,控制所述主状态机返回空闲状态。
3.根据权利要求1所述的DMA控制器,其特征在于,所述基于第一子状态机控制从源端接收所述待搬运数据的子过程,包括:
在没有数据搬运进行时,控制所述第一子状态机处于空闲状态;
当所述主状态机进入工作状态之后,控制所述第一子状态机进入开始状态;
在所述第一子状态机在开始状态停留第一预设时间后,控制第一子状态机进入工作状态,以从源端接收数据;
在接收完指定数据宽度的数据之后,控制所述第一子状态机进入校验状态,以进行数据校验;
若所述数据校验通过,则控制所述第一子状态机返回工作状态以接收下一数据,若所述数据校验未通过,则控制所述第一子状态机进入错误状态;以及
在所有数据全部接收完毕之后或者所述第一子状态机在工作状态停留超过第二预设时间之后,控制所述第一子状态机返回空闲状态。
4.根据权利要求1所述的DMA控制器,其特征在于,所述基于第二子状态机控制向目的端发送待搬运数据的子过程,包括:
在没有向目的端搬运数据时,控制所述第二子状态机处于空闲状态;
当出现目的端应答信号时,控制所述第二子状态机进入工作状态以发送数据;以及
当指定的数据发送完成之后或所述第二子状态机停留在工作状态超过第三预设时间之后,控制所述第二子状态机返回空闲状态。
5.根据权利要求1至4中任意一项所述的DMA控制器,其特征在于,所述DMA控制器还包括:
数据校验模块,用于采用以下中的任意一种或多种校验方法来对待搬运数据进行校验:
基于查表法的循环冗余校验CRC;以及
错误检查和纠正ECC校验。
6.根据权利要求5所述的DMA控制器,其特征在于,所述数据校验模块包括用于执行基于查表法的CRC的以下电路:
累加器电路,用于将输入的待校验数据的字节与该累加器电路中预设的字节进行逻辑运算,并将所述逻辑运算的结果作为索引值;以及
查找表电路,其预存了具有不同索引值的多个CRC码,用于输出与所述累加器电路得到的索引值相适配的CRC码以用于数据校验。
7.根据权利要求6所述的DMA控制器,其特征在于,所述累加器电路被配置为16位的累加器,且其中预设的高8位字节被用于与所述待校验数据的字节进行异或运算以得到所述索引值。
8.根据权利要求5所述的DMA控制器,其特征在于,所述数据校验模块包括用于执行基于ECC校验的以下单元:
ECC计算单元,用于在所述待搬运数据写入和读出时分别计算出对应的ECC码;以及
ECC校验纠错单元,将两次计算的ECC码相比较以进行数据的校验和纠错。
9.根据权利要求1至4中任意一项所述的DMA控制器,其特征在于,所述DMA控制器还包括以下模块中的任意一者或多者:
总线从机接口,用于提供CPU向所述DMA控制器的内部寄存器写入或读取数据的接口;
多个传输通道,其中每一传输通道被配置为实现所述DMA控制器内部的两个指定存储器之间的数据传输;
先进先出FIFO存储器,用于进行所述DMA控制器内部的数据缓存;
数据同步模块,用于实现来自总线的配置信息的同步;
中断响应模块,用于产生中断信号,并通过总线传输该中断信号以通知中央处理单元CPU;以及
请求同步模块,用于将来自源端的传输请求信号同步到所述DMA控制器的时钟域下。
10.一种SOC系统,其特征在于,所述SOC系统包括权利要求1-9中任意一项所述的DMA控制器。
11.一种基于DMA控制器的数据搬运方法,其特征在于,该数据搬运方法包括:
传输控制模块控制所述DMA控制器执行基于传输链表的数据搬运,其中所述数据搬运是指从源端至目的端的数据搬运,且所述传输链表被配置为连接多个从源端接收的连续或非连续的待搬运数据;
其中,所述传输控制模块控制所述DMA控制器包括:
基于主状态机控制所述DMA控制器执行数据搬运总过程;
基于第一子状态机控制从源端接收所述待搬运数据的子过程;
基于第二子状态机控制向目的端发送待搬运数据的子过程;以及
基于第三子状态机控制所述DMA控制器执行基于传输链表的数据搬运的子过程,包括:
S31,在没有链表传输进行时,控制所述第三子状态机处于空闲状态;
S32,当选择链表传输模式且检测到源端传输请求后,控制所述第三子状态机进入校验状态,以开始链表数据传输;
S33,当计数到当前传输链表的传输长度时,控制所述第三子状态机进入加载状态以加载下一个链表数据,加载完成后,控制所述第三子状态机返回校验状态以开始新一段链表数据传输;以及
S34,重复上述步骤S31-S33,直到整个链表传输结束,并在整个链表传输结束时,控制所述第三子状态机进入完成状态,且在响应于完成状态而产生链表传输完成信号后,控制所述第三子状态机返回空闲状态;
其中,所述DMA控制器执行基于传输链表的数据搬运包括:
配置链表指针寄存器的指针指向所述传输链表中的首地址;
配置链表寄存器自动访问所述链表指针寄存器所指向的首地址,并将该首地址对应的待搬运数据自动加载到所述DMA控制器;以及
在完成对所述首地址对应的待搬运数据的自动加载之后,配置所述链表寄存器按照所述传输链表中的地址顺序,依次自动访问自所述首地址的下一地址起的各地址,并自动加载相应地址对应的待搬运数据至所述DMA控制器,直到加载完所述传输链表中的所有待搬运数据。
12.根据权利要求11所述的数据搬运方法,其特征在于,所述数据搬运方法还包括采用以下中的任意一种或多种校验方法来对待搬运数据进行校验:
基于查表法的循环冗余校验CRC;以及
错误检查和纠正ECC校验。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111389257.7A CN114328316B (zh) | 2021-11-22 | 2021-11-22 | Dma控制器、soc系统及基于dma控制器的数据搬运方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111389257.7A CN114328316B (zh) | 2021-11-22 | 2021-11-22 | Dma控制器、soc系统及基于dma控制器的数据搬运方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114328316A CN114328316A (zh) | 2022-04-12 |
CN114328316B true CN114328316B (zh) | 2024-01-26 |
Family
ID=81046687
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111389257.7A Active CN114328316B (zh) | 2021-11-22 | 2021-11-22 | Dma控制器、soc系统及基于dma控制器的数据搬运方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114328316B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114968863A (zh) * | 2022-05-26 | 2022-08-30 | 无锡华大国奇科技有限公司 | 一种基于dma控制器的数据传输方法 |
CN116720176B (zh) * | 2023-06-21 | 2024-02-02 | 韩山师范学院 | 一种含授权信息的密码计算方法及密码管理系统 |
CN116701264B (zh) * | 2023-08-02 | 2024-02-23 | 广东匠芯创科技有限公司 | Dma控制系统的控制方法及dma控制系统 |
CN116859296B (zh) * | 2023-09-04 | 2024-01-23 | 北京智芯微电子科技有限公司 | 相线识别方法及装置、芯片、电子设备和存储介质 |
CN117389731B (zh) * | 2023-10-20 | 2024-04-02 | 上海芯高峰微电子有限公司 | 数据处理方法和装置、芯片、设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6782465B1 (en) * | 1999-10-20 | 2004-08-24 | Infineon Technologies North America Corporation | Linked list DMA descriptor architecture |
CN101030183A (zh) * | 2007-04-03 | 2007-09-05 | 北京中星微电子有限公司 | 一种直接内存访问控制器及其实现内存批处理的方法 |
CN101149717A (zh) * | 2007-11-16 | 2008-03-26 | 威盛电子股份有限公司 | 计算机系统及直接内存访问传输方法 |
CN101334761A (zh) * | 2008-06-11 | 2008-12-31 | 南京磐能电力科技股份有限公司 | 一种点到多点数据分配dma控制器实现方法 |
CN112506827A (zh) * | 2020-11-12 | 2021-03-16 | 山东云海国创云计算装备产业创新中心有限公司 | 一种基于adma控制器的数据传输方法、装置及设备 |
CN112835828A (zh) * | 2019-11-25 | 2021-05-25 | 美光科技公司 | 用于非连续源及目的地存储器地址的直接存储器存取(dma)命令 |
CN113468084A (zh) * | 2021-05-28 | 2021-10-01 | 北京时代民芯科技有限公司 | 一种多模式dma数据传输系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10241946B2 (en) * | 2017-01-18 | 2019-03-26 | Nxp Usa, Inc. | Multi-channel DMA system with command queue structure supporting three DMA modes |
-
2021
- 2021-11-22 CN CN202111389257.7A patent/CN114328316B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6782465B1 (en) * | 1999-10-20 | 2004-08-24 | Infineon Technologies North America Corporation | Linked list DMA descriptor architecture |
CN101030183A (zh) * | 2007-04-03 | 2007-09-05 | 北京中星微电子有限公司 | 一种直接内存访问控制器及其实现内存批处理的方法 |
CN101149717A (zh) * | 2007-11-16 | 2008-03-26 | 威盛电子股份有限公司 | 计算机系统及直接内存访问传输方法 |
CN101334761A (zh) * | 2008-06-11 | 2008-12-31 | 南京磐能电力科技股份有限公司 | 一种点到多点数据分配dma控制器实现方法 |
CN112835828A (zh) * | 2019-11-25 | 2021-05-25 | 美光科技公司 | 用于非连续源及目的地存储器地址的直接存储器存取(dma)命令 |
CN112506827A (zh) * | 2020-11-12 | 2021-03-16 | 山东云海国创云计算装备产业创新中心有限公司 | 一种基于adma控制器的数据传输方法、装置及设备 |
CN113468084A (zh) * | 2021-05-28 | 2021-10-01 | 北京时代民芯科技有限公司 | 一种多模式dma数据传输系统 |
Also Published As
Publication number | Publication date |
---|---|
CN114328316A (zh) | 2022-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114328316B (zh) | Dma控制器、soc系统及基于dma控制器的数据搬运方法 | |
EP3566138B1 (en) | Transaction identification synchronization | |
US8042023B2 (en) | Memory system with cyclic redundancy check | |
US8132086B2 (en) | Semiconductor memory device for byte-based masking operation and method of generating parity data | |
US9003260B2 (en) | Partial-writes to ECC (error check code) enabled memories | |
US8880970B2 (en) | Error detection method and a system including one or more memory devices | |
US10841039B2 (en) | System and method for transferring data and a data check field | |
CN110442473B (zh) | 一种非易失性数据存储方法、装置、电子设备及介质 | |
EP2359372A1 (en) | Error detection method and a system including one or more memory devices | |
US20220180961A1 (en) | Memory device and read method thereof | |
US9891986B2 (en) | System and method for performing bus transactions | |
CN114051611A (zh) | 用于非连续存储器的dma分散和聚集操作 | |
CN110310693B (zh) | 具有缓存的In-Line ECC模块 | |
US9037950B2 (en) | Method for operating memory controller and devices having the same | |
US8484546B2 (en) | Information processing apparatus, information transmitting method, and information receiving method | |
US7665009B2 (en) | Device, data sector, method of processing data, and signal-bearing medium embodying program of device | |
CN116560902A (zh) | 处理系统、相关集成电路和方法 | |
CN110716823A (zh) | 用于连续验证器件状态完整性的系统和方法 | |
EP3955112A1 (en) | Method and apparatus for memory error detection | |
CN115129509A (zh) | 一种数据传输方法、装置、介质 | |
CN110299183B (zh) | In-LineECC模块及其实现方法 | |
CN108762975B (zh) | 一种ecc数据存储方法、系统及存储介质 | |
CN111984457B (zh) | 对存储信息更新的方法和装置 | |
US20230032989A1 (en) | Serial data communication with in-frame response | |
JP2010140132A (ja) | メモリシステム及びメモリコントローラ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |