直接存储器访问传输装置及其方法
技术领域
本发明涉及一种数据传输装置及其方法,尤其涉及一种应用于集成电路系统芯片(SOC)设计中的直接存储器访问(DMA)装置及其方法。
背景技术
在现有技术中,当高速外设要与系统内存或者要在系统内存的不同区域之间,进行大量数据的快速传送时,通常采用直接存储器访问方式传送输据。
直接存储器访问(DMA)方式在外围设备和主存之间开辟直接的数据交换通路,正常工作时,所有工作周期均用于执行CPU的程序;当外围设备将要输入或输出的数据准备好后,窃取或挪用一个工作周期,供外围设备和主存直接交换数据。这个周期之后,CPU又继续执行原程序。这种方式是在输入输出子系统中增加专用处理部件DMA控制器来代替中央处理器工作,而使成批传送的数据直接和主存来往,由DMA部件对数据块的数据逐个计数并确定主存地址。除了在数据块的起始和结束时需要用中断分别进行前处理和后处理外,不需要CPU的干预。
DMA最明显的一个特点是它不是用软件而是采用一个专门的控制器来控制内存与外设之间的数据交流,无须CPU介入,大大提高CPU的工作效率。在进行DMA数据传送之前,DMA控制器会向CPU申请总线控制权,CPU如果允许,则将控制权交出,因此,在数据交换时,总线控制权由DMA控制器掌握,在传输结束后,DMA控制器将总线控制权交还给CPU。
在传统的DMA传送过程中,一般做总线周期窃取来完成,单次传送往往占用3~5个总线周期,对于高速总线来说,被频繁周期窃取,会影响总线带宽。
另一方面对高速总线,DMA请求方,也需要带宽要求,以提高DMA传送效率。在SOC设计中,总线传送速度与DMA装置的I/O访存速度存在很大差距(如外部DMA请求),不十分匹配,传统的DMA装置已经降低了高速总线的传输效率。
发明内容
本发明要解决的技术问题是提供一种直接存储器访问装置,提高高速总线与低速总线之间的数据传输效率,采用多个DMA装置时,对总线传送效率影响不明显,从总体上提高了SOC芯片性能。
为了解决上述技术问题,本发明提供一种直接存储器访问传输装置,包括一缓冲区、一门拴值控制模块、APB总线接口模块、WB总线接口模块和控制电路模块,所述控制电路模块中的寄存器控制所述门拴值控制模块中的门拴值的设置,通过设置门栓值来决定所述直接存储器访问传输装置传送数据的快慢适配,其中:
所述门拴值控制模块用于设定门拴值的大小;
所述APB总线接口模块用于所述直接存储器访问传输装置与高速总线的连接;
所述WB总线接口模块用于所述直接存储器访问传输装置与低速总线的连接;
所述控制电路模块用于上述模块、数据流向及传输速度匹配。
在上述方案中,所述控制电路模块包括面向低速总线的单次读/写处理模块、双时钟域的异步握手处理模块、DMA FIFO头尾指针管理模块和面向高速总线的Burst读/写操作处理模块。
在上述方案中,所述门拴值动态变化,控制总线周期窃取频度。
在上述方案中,所述直接存储器访问传输装置与高速总线之间的数据传输通过BURST操作完成。
一种直接存储器访问传输装置,包括一缓冲区、门拴值控制模块、APB总线接口模块和控制电路模块,所述控制电路模块中的寄存器控制所述门拴值控制模块中的门拴值的设置,通过设置门栓值来决定所述直接存储器访问传输装置传送数据的快慢适配,所述直接存储器访问传输装置与外设直接相连,其中:
所述门拴值控制模块用于设定门拴值的大小;
所述APB总线接口模块用于所述直接存储器访问传输装置与高速总线的连接;
所述控制电路模块用于上述模块、数据流向及传输速度匹配。
本发明提供一种直接存储器访问传输方法,包括以下步骤:
a)确定高速总线是否支持Burst操作,如果不支持,能否将其改造成支持Burst操作;
b)设置带门栓的行缓冲区;
c)建立缓冲头尾管理机制;
d)确定DMA控制电路,根据DMA控制方式译码相应控制信号,启动FIFO数据入/出管理,低速总线读/写传送操作,高速总线Burst操作,并回告各种状态;
e)确定跨时钟域握手机制;
f)面向高速总线的Burst操作设计,总线Burst操作往往有严格的时序要求,而FIFO入/出可能不太一致,需要进行间接转换,使双方能进行完整的Burst操作;
g)低速总线的传送操作设计。
由上可知,本发明所述的一种直接存储器访问装置及其方法,提高高速总线与低速总线之间的数据传输效率,采用多个DMA装置时,对总线传送效率影响不明显,从总体上提高了SOC芯片性能。
附图说明
图1为本发明直接存储器访问传送装置结构图;
图2为本发明实施例中直接存储器访问传送装置向存储器传输数据波形图;
图3为本发明实施例中直接存储器访问传送装置读取存储器数据波形图;
图4为本发明实施例中直接存储器访问传送装置的控制电路模块框图。
图5为本发明实施例中直接存储器访问传送装置的方法流程图。
具体实施方式
下面结合附图详细说明本发明的技术方案。
图1为本发明直接存储器访问传送装置结构图,如图所示,直接存储器访问(DMA)传送装置由门栓值控制模块1、APB总线接口2(面向高速处理器总线)、WB总线接口3(面向低速的外设总线)、FIFO缓冲区4和控制电路模块5组成。
DMA每一通道均配有方式控制寄存器、内存缓冲首址寄存器、DMA地址寄存器和传送字节数寄存器,其中方式寄存器提供了DMA通道配置的灵活性,通过设置门栓值来决定DMA传送快慢适配问题。
门栓值控制模块1用于设置门拴值,决定何时发起数据快速搬家;针对不同的DMA通道要求选用不同的门栓值,其通常由控制电路模块5中的DMA状态控制寄存器来实现,快速的门栓值小一点,反之选门栓值大一点;APB总线接口2主要做Burst操作,在APB高速总线和FIFO缓冲区4之间实现快速数据传送;WB总线接口3主要做单次读/写操作,面向DMA设备,可以占用WB总线,也可以不占用WB总线;FIFO缓冲区4是要传送的数据缓冲地带,保证数据可靠安全,配有行有效位(FIFOvalid[i])、字节使能位FIFOen[i][j];控制电路模块5工作于不同时钟域管理FIFO,并对DMA传送数据发起控制。
对于DMA读操作(从DMA设备到SDRAM的缓冲区),如图2所示,在DMA缓冲区可传送字节数达到门栓值时,开始进行APB_wrBurst传送,传送过程中,一旦发起,Burst大小是可变的(在APB总线传送期间,DMA设备仍可不断写入FIFO缓冲区),直至缓冲区数据空为止,每次传送不少于8*Criterion(门栓值)字节数,然后释放APB总线。DMA设备不断往FIFO缓冲区写数,等DMA缓冲区可传送字节数又达到门栓值时,重复前述数操作,不过最后要做“逼空”操作(DMA转送完毕,但FIFO内仍有少量字节),由单次写操作来完成。
对于DMA写操作(从SDRAM的缓冲区到DMA设备),如图3所示,从SDRAM往DMA缓冲区传数据,以门栓值为准,当可放置的缓冲个数不少于门栓值时,启动APB_rdBurst,传送过程中,Burst大小是可变的,以缓冲区数据满为止,每次传送不少于8*Criterion(门栓值)字节数。DMA设备不断从FIFO缓冲区读取数据,等可放置的缓冲个数又不少于门栓值时,重复前述操作,直至DMA传送结束。
实际上,DMA设备读操作时只要FIFO缓冲区内有数据,就能够不断读取数据;DMA设备写操作时只要缓冲区不满,就不断往缓冲区写数据。至于门栓值是为了高速总线传输效率而配置,门栓值通过DMA通道设置是可选的,为系统配置增加了灵活性,需要系统在初始化时进行适当配置。首先设置DMA_mode(寄存器),控制位包括中断使能、传送数据宽度、传送方向、门栓选值、通道启动、通道结束、通道清、通道故障等;其次,设置DMA设备地址;然后设置主存中缓冲区的首址;最后设置DMA传送的字节数。
图4是DMA控制电路模块框图,如图所示,置身于高速总线和低速总线之间的快速DMA通道。包括以下模块:面向低速总线的单次读/写处理模块51,主要根据FIFO状态,组织DMA传送操作(相当低速总线的主设备),WB_ack(在双时钟域分别对应WB_ack_h,WB_ack_l),是两者之间得握手信号,确保数据交互准确无误;双时钟域的异步握手处理模块52,主要面向FIFO(高速时钟域)和面向低速总线的单次读/写处理模块51(低速时钟域)间的信号同步问题,确保控制信号正确可靠;DMA FIFO头尾指针管理模块53,主要控制DMA数据进出FIFO时的首尾指针调整,并从中获取字节数和缓冲行的有效性;面向高速总线的Burst读/写操作处理模块54,主要根据FIFO状态,如果DMA写传送,则接受信号Burst_inreq(当可放置的缓冲个数不少于门栓值时,会置“1”),如果DMA读传送,则接受信号Burst_outreq(DMA缓冲区可传送字节数达到门栓值时,会置“1”),Burst_lastreq(如果传送的字节数不是完整的行且DMA传送结束,会置“1”),向APB总线发起Burst操作(相当APB总线的主设备)。
DMA工作流程如图4所示,当低速设备要求进行DMA读操作时,FIFO头尾指针处理部件根据缓冲器容纳数向低速总线发起读操作,直至缓冲区“近满”状态为止(仅空一行),在此期间处理部件根据门栓值向高速总线发起Burst写操作,直至缓冲区没有完整行可传送为止,一旦DMA计数器为“零”,就做缓冲区“逼空”操作,并做DMA传送结束处理;当低速设备要求进行DMA写读操作时,FIFO头尾指针处理部件根据缓冲器容纳数向高速总线发起Burst读操作,直至缓冲区已取的字节数超过计数器值或缓冲区“近满”状态为止(仅空一行),在此期间处理部件根据缓冲区状态向低高速总线发起写操作,直至缓冲区没有可传送字节为止,一旦DMA计数器为“零”,就做DMA传送结束处理。
图5是适于高速总线的高效灵活的快速DMA传送方法流程图,结合框图做具体说明:
步骤100:确定高速总线是否支持Burst操作,如果不支持,能否将其改造成支持Burst操作;
步骤110:设置带门栓的行缓冲区,行的宽度通常与高速总线的数据宽度相一致,并设对应行有效标志位FIFOvalid[n-1:0],其中n为缓冲区总行数,每行字节有效标志位FIFOen[n-1:0]][m-1:0],其中m为行的字节数;
步骤120:建立缓冲头尾管理机制,分别针对DMA读/写传送设行指针,如Head_wb(低速总线写入),Tail_apb(高速总线读取);Head_apb(高速总线写入),Tail_wb(低速总线读取)。并计算出可用缓冲行数和有效数据可传行数。
步骤130:确定DMA控制电路,根据DMA控制方式译码相应控制信号,启动FIFO数据入/出管理,低速总线读/写传送操作,高速总线Burst操作,并回告各种状态。
步骤140:确定跨时钟域握手机制,增加应答信号WB_ack等,低速总线处理模块确认FIFO操作完成(通过WB_ack),才能终止当前传送操作,不过WB_ack信号要进行跨时钟域操作。
步骤150:面向高速总线的Burst操作设计,总线Burst操作往往有严格的时序要求,而FIFO入/出可能不太一致,需要进行间接转换,使双方能进行完整的Burst操作,当然还要支持单次写操作,因DMA传送收尾时可能不够缓冲区行。
步骤160:低速总线的传送操作设计,该传送操作可能是单次的也可能是块传送的,这要区别对待,对单次传送操作比较简单,只要确认数据进/出FIFO就结束传送操作,对于块传送操作就比较复杂一点,需要监测FIFO溢出问题,随时有可能终止块传送操作。
本发明的DMA操作,必须有DMA通道初始化操作,并对FIFO缓冲区控制操作要做异步处理,因为控制资源是共享的,除了互锁处理,还要异步握手,确保控制操作安全进行。
此外,高效灵活的快速DMA传送装置可运用于片内(如LCD显示、UART快速传送、USB快速传送)和片外(如外部DMA传送)的DMA快速数据传送,DMA传输装置中的控制电路模块可以不通过WB总线结口直接于LCD连接,实现数据传输;可提供16个DMA通道,极大改善SOC数据传送的效能,大大提升了总线传输效率。
综上所述,本发明采用高级系统总线的Burst操作、DMA FIFO、DMA设备控制,APB_Burst操作、DMA FIFO、DMA读写三位一体,共同完成高效的DMA传送操作,高效灵活的快速DMA传送实施于DMA控制电路模块中,快速接口挂接APB_Bus,DMA接口挂接于WB_Bus,每一通道均配有方式控制寄存器、内存缓冲首址寄存器、DMA地址寄存器和传送字节数寄存器,其中方式寄存器提供了DMA通道配置的灵活性,通过设置门栓值来决定DMA传送快慢适配问题。从而系统开发者可利用更多的DMA传送设备,提高总线传送效率,从总体上提高芯片性能。