一种直接内存存取dma控制器及数据传输的方法
【专利摘要】本发明实施例公开了一种DMA控制器及数据传输的方法,DMA控制器包括:被动传输单元、主动传输单元、DMA调度单元和PCIe单元,其中,被动传输单元,用于根据CPU配置的传输参数完成由CPU发起的外部芯片与CPU之间的数据上送和下发操作;主动传输单元,用于通过CPU在内存中设置的包括至少一个缓存描述BD项的BD表及数据缓存空间完成由外部芯片发起的外部芯片与CPU之间的数据上送和下发操作;DMA调度单元,用于通过仲裁的方式避免外部芯片与CPU之间的数据上送和下发操作所引起的竞争;PCIe单元,用于为CPU和所述DMA控制器之间的信息交互提供PCIe接口。
【专利说明】
一种直接内存存取DMA控制器及数据传输的方法
技术领域
[0001]本发明涉及直接内存存取(DMA,Direct Memory Access)技术,尤其涉及一种DMA控制器及数据传输的方法。
【背景技术】
[0002]目前,直接内存存取(DMA,Direct Memory Access)技术被广泛应用于芯片设计中,是一种不经过CPU而直接从内存存取数据的数据交换模式,是解决内存和外部芯片之间数据交互的重要技术。
[0003]DMA控制器可以将数据从一个地址空间搬移到另外一个地址空间,传输动作本身是由DMA控制器来实行和完成的,这样节省了 CPU的数据总线带宽。而在具体的实现过程中,通常是针对不同应用场景来实现相应的DMA控制器,从而使得实现的DMA控制器的模式固定,不够灵活,导致多种数据传输模式无法共用DMA控制器,不利于节省芯片面积。
【发明内容】
[0004]为解决上述技术问题,本发明实施例期望提供一种DMA控制器及数据传输的方法,通过一种适用于不同应用场景的DMA控制器来使得多种数据传输模式均能够共用该DMA控制器,通用性强,从而能够节省芯片面积。
[0005]本发明的技术方案是这样实现的:
[0006]第一方面,本发明实施例提供了一种DMA控制器,所述DMA控制器包括:被动传输单元、主动传输单元、DMA调度单元和快捷外部设备互连PCIe单元,其中,
[0007]所述被动传输单元,用于根据中央处理器CPU配置的传输参数完成由所述CPU发起的所述外部芯片与所述CPU之间的数据上送和下发操作;
[0008]所述主动传输单元,用于通过所述CPU在内存中设置的包括至少一个缓存描述BD项的BD表及数据缓存空间完成由外部芯片发起的所述外部芯片与所述CPU之间的数据上送和下发操作;
[0009]所述DMA调度单元,用于通过仲裁的方式避免所述外部芯片与所述CPU之间的数据上送和下发操作所引起的竞争;
[0010]所述PCIe单元,用于为所述CPU和所述DMA控制器之间的信息交互提供PCIe接
□ O
[0011]进一步地,所述被动传输单元,具体用于:
[0012]接收所述CPU配置的上送启动指令后,从所述CPU预置的外部芯片源地址按照所述CPU预置的上送数据长度将外部芯片存储器中的待上送数据读取至被动上送缓存;以及,
[0013]将所述被动上送缓存中的待上送数据写入所述CPU预置的内存目的地址中;以及,
[0014]当所述待上送数据完全写入所述CPU预置的内存目的地址后,通知所述CPU写入完成。
[0015]进一步地,所述被动传输单元,具体用于:
[0016]接收所述CPU配置的下发启动指令后,从所述CPU预置的内存源地址按照所述CPU预置的下发数据长度将所述内存中的待下发数据读取至被动下发缓存;以及,
[0017]将所述被动下发缓存中的待下发数据写入所述CPU预置的外部芯片存储器的目的地址中;以及,
[0018]当所述待下发数据完全写入所述CPU预置的外部芯片存储器的目的地址后,通知所述CPU下发完成。
[0019]进一步地,所述主动传输单元,具体用于:
[0020]接收所述CPU在初始化完成主动上送BD表后发送的所述主动上送BD表的特征信息;其中,所述主动上送BD表的特征信息包括:所述主动上送BD表中BD项的个数阈值,所述主动上送BD表存放的首地址和结束地址;所述主动上送BD表中BD项的内容包括:所述BD项的有效指示,所述BD项对应的内存中数据块大小及所述BD项对应的内存中数据起始地址;
[0021]以及,接收外部芯片发送的待上送数据,并将所述待上送数据存入所述DMA控制器中的主动上送缓存;
[0022]以及,当所述主动上送缓存满足预设条件时且所述主动传输单元自身保存的有效BD项数小于所述BD项的个数阈值时,根据所述主动上送BD表存放的首地址和结束地址读取所述BD项;
[0023]以及,当所述BD项的有效指示为O时,将所述主动上送缓存中的待上送数据传输至所述BD项对应的内存中数据起始地址,并将所述BD项的有效指示更改为1,且将所述主动传输单元自身保存的有效BD项数加一;
[0024]以及,根据所述主动上送BD表存放的首地址和结束地址读取所述BD项在所述BD表中的下一个BD项。
[0025]进一步地,所述主动传输单元还用于:接收所述CPU在读取完所述BD项对应的内存中数据起始地址中的待上送数据后发送的读取完毕信息,并将所述主动传输单元自身保存的有效BD项数减一。
[0026]进一步地,所述主动传输单元,具体用于:
[0027]接收所述CPU在初始化完成主动下发BD项后发送的所述主动下发BD项的首地址和结束地址;以及,
[0028]接收所述CPU发送的主动下发起始指令后,根据所述主动下发BD项的首地址和结束地址读取所述主动下发BD项;以及,
[0029]根据所述主动下发BD项指示的内存空间中的待下发数据传输至主动下发缓存,并将所述主动下发缓存中的数据传输至所述外部芯片的存储器;以及,
[0030]向所述CPU发送主动下发完成响应。
[0031]第二方面,本发明实施例提供了一种数据传输的方法,所述方法应用于一 DMA控制器,所述方法包括:
[0032]所述DMA控制器根据中央处理器CPU配置的传输参数完成由所述CPU发起的所述外部芯片与所述CPU之间的数据上送和下发操作;
[0033]所述DMA控制器通过所述CPU在内存中设置的包括至少一个缓存描述BD项的BD表及数据缓存空间完成由外部芯片发起的所述外部芯片与所述CPU之间的数据上送和下发操作;
[0034]所述DMA控制器通过仲裁的方式避免所述外部芯片与所述CPU之间的数据上送和下发操作所引起的竞争,其中,所述CPU和所述DMA控制器之间的信息交互通过PCIe接口进行。
[0035]进一步地,所述DMA控制器根据CPU配置的传输参数完成由所述CPU发起的所述外部芯片与所述CPU之间的数据上送操作,包括:
[0036]所述DMA控制器接收所述CPU配置的上送启动指令后,从所述CPU预置的外部芯片源地址按照所述CPU预置的上送数据长度将外部芯片存储器中的待上送数据读取至被动上送缓存;
[0037]所述DMA控制器将所述被动上送缓存中的待上送数据写入所述CPU预置的内存目的地址中;
[0038]所述DMA控制器当所述待上送数据完全写入所述CPU预置的内存目的地址后,通知所述CPU写入完成。
[0039]进一步地,所述DMA控制器根据CPU配置的传输参数完成由所述CPU发起的所述外部芯片与所述CPU之间的数据下发操作,包括:
[0040]所述DMA控制器接收所述CPU配置的下发启动指令后,从所述CPU预置的内存源地址按照所述CPU预置的下发数据长度将所述内存中的待下发数据读取至被动下发缓存;[0041 ] 所述DMA控制器将所述被动下发缓存中的待下发数据写入所述CPU预置的外部芯片存储器的目的地址中;
[0042]所述DMA控制器当所述待下发数据完全写入所述CPU预置的外部芯片存储器的目的地址后,通知所述CPU下发完成。
[0043]进一步地,所述DMA控制器通过所述CPU在内存中设置的包括至少一个缓存描述BD项的BD表及数据缓存空间完成由外部芯片发起的所述外部芯片与所述CPU之间的数据上送操作,包括:
[0044]所述DMA控制器接收所述CPU在初始化完成主动上送BD表后发送的所述主动上送BD表的特征信息;其中,所述主动上送BD表的特征信息包括:所述主动上送BD表中BD项的个数阈值,所述主动上送BD表存放的首地址和结束地址;所述主动上送BD表中BD项的内容包括:所述BD项的有效指示,所述BD项对应的内存中数据块大小,所述BD项对应的内存中数据起始地址;
[0045]所述DMA控制器接收外部芯片发送的待上送数据,并将所述待上送数据存入所述DMA控制器中的主动上送缓存;
[0046]当所述主动上送缓存满足预设条件时且所述主动传输单元自身保存的有效BD项数小于所述BD项的个数阈值时,所述DMA控制器根据所述主动上送BD表存放的首地址和结束地址读取所述BD项;
[0047]当所述BD项的有效指示为O时,所述DMA控制器将所述主动上送缓存中的待上送数据传输至所述BD项对应的内存中数据起始地址,并将所述BD项的有效指示更改为1,且将所述主动传输单元自身保存的有效BD项数加一;
[0048]所述DMA控制器根据所述主动上送BD表存放的首地址和结束地址读取所述BD项在所述BD表中的下一个BD项。
[0049]进一步地,所述方法还包括:
[0050]所述DMA控制器接收所述CPU在读取完所述BD项对应的内存中数据起始地址中的待上送数据后发送的读取完毕信息,并将所述主动传输单元自身保存的有效BD项数减
O
[0051]进一步地,所述DMA控制器通过所述CPU在内存中设置的包括至少一个缓存描述BD项的BD表及数据缓存空间完成由外部芯片发起的所述外部芯片与所述CPU之间的数据下发操作,包括:
[0052]所述DMA控制器接收所述CPU在初始化完成主动下发BD项后发送的所述主动下发BD项的首地址和结束地址;
[0053]所述DMA控制器接收所述CPU发送的主动下发起始指令后,根据所述主动下发BD项的首地址和结束地址读取所述主动下发BD项;
[0054]所述DMA控制器根据所述主动下发BD项指示的内存空间中的待下发数据传输至主动下发缓存,并将所述主动下发缓存中的数据传输至所述外部芯片的存储器;
[0055]所述DMA控制器向所述CPU发送主动下发完成响应。
[0056]本发明实施例提供了一种DMA控制器及数据传输的方法,通过一种适用于不同应用场景的DMA控制器来使得多种数据传输模式均能够共用该DMA控制器,通用性强,节省了CPU与外部芯片的读写数据时间,而且能够节省芯片面积。
【附图说明】
[0057]图1为本发明实施例提供的一种DMA控制器的结构示意图;
[0058]图2为本发明实施例提供的一种内存空间示意图;
[0059]图3为本发明实施例提供的一种数据传输的方法流程示意图。
【具体实施方式】
[0060]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
[0061]参见图1,其示出了本发明实施例提供的一种DMA控制器10的结构,该DMA控制器10可以包括:被动传输单元101、主动传输单元102、DMA调度单元103和快捷外部设备互连(PCIe,Peripheral Component Interconnect Express)单元 104,其中,
[0062]被动传输单元101,用于根据CPU配置的传输参数完成由CPU发起的外部芯片与(PU之间的数据上送和下发操作;
[0063]主动传输单元102,用于通过中央处理器CPU在内存中设置的包括至少一个缓存描述(BD,Buffer Descriptor)项的BD表及数据缓存空间完成由外部芯片发起的外部芯片与CPU之间的数据上送和下发操作;
[0064]DMA调度单元103,用于通过仲裁的方式避免外部芯片与CPU之间的数据上送和下发操作所引起的竞争;
[0065]PCIe单元104,用于为CPU和DMA控制器之间的信息交互提供PCIe接口。
[0066]可以理解地,DMA控制器10中为了实现各单元的功能,还会相应地在各单元中设置寄存器及缓存等器件,而这些器件并不是本实施例技术方案的主要内容,因此,这些寄存器和缓存仅在后续的技术方案描述中的相应部分进行描述。
[0067]需要说明的是,在本实施例中,“主动”和“被动”是相对于外部芯片而言的,即:由外部芯片发起的数据传输称之为“主动”;由CPU发起的数据传输称之为“被动”上送”和“下发”是相对于CPU而言的,即:数据传输方向为外部芯片至CPU的为“上送”,数据传输方向为CPU至外部芯片的为“下发”。所以,DMA控制器10中的被动传输单元101和主动传输单元102均需要完成“上送”和“下发”这两个方向的数据传输。
[0068]示例性地,为了完成由CPU发起的外部芯片与CPU之间的数据上送操作,被动传输单元101具体用于:
[0069]接收CPU配置的上送启动指令后,从CPU预置的外部芯片源地址按照CPU预置的上送数据长度将外部芯片存储器中的待上送数据读取至被动上送缓存;
[0070]以及,将被动上送缓存中的待上送数据写入CPU预置的内存目的地址中;
[0071]以及,当待上送数据完全写入CPU预置的内存目的地址后,通知CPU写入完成。
[0072]需要说明的是,上述被动传输单元101的具体用途可以应用于CPU想要获取外部芯片中的某一块数据的场景;
[0073]具体地,CPU配置的上送启动指令可以通过CPU配置被动传输单元101中的写启动寄存器来实现,例如,当写启动寄存器被CPU置位时,表示被动传输单元101开始进行被动上送;CPU预置的上送数据长度可以通过CPU预先配置被动传输单元101中的上送数据长度寄存器来实现,在本实施例中,该寄存器的单位为128bit ;CPU预置的外部芯片源地址可以通过CPU预先配置被动传输单元101中的外部芯片片内源地址寄存器来实现;CPU预置的内存目的地址可以通过CPU配置被动传输单元101中的内存目的地址寄存器来实现;被动传输单元101将被动上送缓存中的待上送数据写入CPU预置的内存目的地址可以由被动传输单元101通过PCIe单元104提供的PCIe接口将被动上送缓存中的待上送数据向内存搬移;被动传输单元101通知CPU写入完成可以通过被动传输单元101将上送完成寄存器置位,并发出中断,从而使得CPU可以通过读取被动传输单元101中的上送完成寄存器或接收中断两种方式,判断被动上送过程完成。
[0074]示例性地,为了完成由CPU发起的外部芯片与CPU之间的数据下发操作,被动传输单元101,具体用于:
[0075]接收CPU配置的下发启动指令后,从CPU预置的内存源地址按照CPU预置的下发数据长度将内存中的待下发数据读取至被动下发缓存;
[0076]以及,将被动下发缓存中的待下发数据写入CPU预置的外部芯片存储器的目的地址中;
[0077]以及,当待下发数据完全写入CPU预置的外部芯片存储器的目的地址后,通知CPU下发完成。
[0078]具体地,CPU配置的下发启动指令可以通过CPU配置被动传输单元101中的读启动寄存器来实现,例如,当读启动寄存器被CPU置位时,表示被动传输单元101开始进行被动下发;CPU预置的下发数据长度可以通过CPU预先配置被动传输单元101中的下发长度寄存器来实现,在本实施例中,下发长度寄存器的单位32bit ;CPU预置的内存源地址可以通过CPU预先配置被动传输单元101中的内存源地址寄存器来实现;被动传输单元101通知CPU下发完成可以通过被动传输单元101置位下发完成寄存器,并发出中断来实现,从而使得CPU可以通过读被动传输单元101中的下发完成寄存器或者接收中断的方式,判断被动下发是否完成。
[0079]示例性地,为了完成由外部芯片发起的外部芯片与CPU之间的数据上送操作,主动传输单元102,具体用于:
[0080]接收CPU在初始化完成主动上送BD表后发送的主动上送BD表的特征信息;其中,主动上送BD表的特征信息包括:主动上送BD表中BD项的个数阈值,主动上送BD表存放的首地址和结束地址;而主动上送BD表中的BD项内容可以包括:该BD项的有效指示,该BD项对应的内存中数据块大小及该BD项对应的内存中数据起始地址;以及,
[0081]接收外部芯片发送的待上送数据,并将待上送数据存入DMA控制器10中的主动上送缓存;
[0082]当主动上送缓存满足预设条件时且主动传输单元102自身保存的有效BD项数小于BD项的个数阈值时,根据主动上送BD表存放的首地址和结束地址读取BD项;
[0083]当BD项的有效指示为O时,将主动上送缓存中的待上送数据传输至BD项对应的内存中数据起始地址,并将BD项的有效指示更改为1,且将主动传输单元102自身保存的有效BD项数加一;
[0084]根据主动上送BD表存放的首地址和结束地址读取BD项在BD表中的下一个BD项。
[0085]具体地,CPU可以初始化内存中的主动上送BD表项可以包括将BD项的有效字段val为0,该有效字段可以是BD项的有效指示的一种实现形式、BD项指向的内存空间的首地址字段表示BD项对应的内存中数据起始地址,而BD项的长度字段和保留字段不需要赋值。同时CPU还需要开辟BD表项指向的内存空间,每个BD指向的内存空间不小于最大传输数据长度。如图2所示,内存空间中的BD项的内容如图2右边所示,图2左边中交叉斜线表示的BD项BD_0在内存中指向的空间为交叉斜线所示的Bd_dat0至Bd_datk_l,其中,k表示数据长度;相对应地,方格阴影表示的BD项BD_1在内存中指向的空间为方格阴影所示的Bd_dat0至Bd_datk-1,其中,k表示数据长度。主动上送缓存可以是一个FIFO中缓存,而主动上送缓存满足预设条件可以是如下两个条件之一 =(I)FIFO中的缓存数据达到配置长度;(2) FIFO中的数据超过设定的最大等待时间。主动传输单元102自身保存的有效BD项数可以是主动传输单元102中的有效BD计数器。
[0086]进一步地,主动传输单元102还用于:接收CPU在读取完BD项对应的内存中数据起始地址中的待上送数据后发送的读取完毕信息,并将主动传输单元102自身保存的有效BD项数减一。具体地,CPU每次读取一个BD项后,将BD的有效字段val字段写0,并向主动传输单元102的读BD脉冲寄存器写32’ hl234_5678,主动传输单元102收到脉冲后,会将有效BD计数器减I
[0087]示例性地,为了完成由外部芯片发起的外部芯片与CPU之间的数据下发操作,主动传输单元102,具体用于:
[0088]接收CPU在初始化完成主动下发BD项后发送的主动下发BD项的首地址和结束地址;
[0089]以及,接收CPU发送的主动下发起始指令后,根据主动下发BD项的首地址和结束地址读取主动下发BD项;
[0090]以及,根据主动下发BD项指示的内存空间中的待下发数据传输至主动下发缓存,并将主动下发缓存中的数据传输至外部芯片的存储器;
[0091]以及,向CPU发送主动下发完成响应。
[0092]具体地,CPU初始化内存中的主动下发BD表项。初始的内容包括报文有效字段val为0,BD项对应内存首地址字段为CPU将这个待下发数据存储的内存地址,BD项长度字段和保留字段不需要赋值。CPU需要下发数据时,将数据存放到BD项指向的内存地址,并将BD项的val置1,将数据长度写入BD项的长度字段。CPU发送的主动下发起始指令可以通过CPU向主动传输单元102的写BD脉冲个数寄存器写32’ hl234_5678来实现,当主动传输单元102判断写BD脉冲个数寄存器大于0,则读取内存中的BD项,并将写BD脉冲个数寄存器减I。接着主动传输单元102根据读返回的BD项,将内存的数据搬移到外部芯片的存储器。主动传输单元102向CPU发送主动下发完成响应具体可以是主动传输单元102将BD项的val信号置0,并发送中断。从而使得CPU可以通过BD项的val位或中断,来判断当前BD项指向的数据是否被下发完成。
[0093]需要说明的是,由于PCIe接口协议中,只存在一个读接口,一个写接口和一个读返回接口,因此,上述被动传输单元101和主动传输单元102在进行数据传输过程中,频繁的跟CPU交互,进行接收和发送,从而难免出现冲突。于是DMA调度单元103的作用就是将这些存在竞争的操作进行仲裁,仲裁的方式是可以配置的,既可以配置为轮询调度又可以配置为严格优先级调度。
[0094]还需要说明的是,由于PCIe的协议层部分包括6组端口,P报文(不需要返回完成complet1n响应包的报文)发送/接收,NP报文(请求需要返回完成complet1n响应包的报文)发送/接收,CPL报文(完成complet1n响应包报文)发送/接收,完全根据PCIe协议开发。因此,DMA控制器10与CPU之间的控制信息接口通过PCIe单元104提供的PCIe接口来实现。
[0095]本实施例提供的DMA控制器10,可以同时支持主动方式和被动方式的数据传输,并且通过仲裁的方式避免了主动方式和被动方式的多路数据之间的竞争现象,通用性强,节省了 CPU与外部芯片的读写数据时间。
[0096]参见图3,其示出了本发明实施例提供的一种数据传输的方法流程,该方法应用于一直接内存存取DMA控制器,该方法可以包括:
[0097]S301 =DMA控制器根据中央处理器CPU配置的传输参数完成由CPU发起的外部芯片与CPU之间的数据上送和下发操作;
[0098]S302 =DMA控制器通过CPU在内存中设置的包括至少一个缓存描述BD项的BD表及数据缓存空间完成由外部芯片发起的外部芯片与CPU之间的数据上送和下发操作;
[0099]S303:DMA控制器通过仲裁的方式避免外部芯片与CPU之间的数据上送和下发操作所引起的竞争;
[0100]在本实施例中,CPU和DMA控制器之间的信息交互通过PCIe接口进行。
[0101]示例性地,DMA控制器根据CPU配置的传输参数完成由CPU发起的外部芯片与CPU之间的数据上送操作,包括:
[0102]DMA控制器接收CPU配置的上送启动指令后,从CPU预置的外部芯片源地址按照CPU预置的上送数据长度将外部芯片存储器中的待上送数据读取至被动上送缓存;
[0103]DMA控制器将被动上送缓存中的待上送数据写入CPU预置的内存目的地址中;
[0104]DMA控制器当待上送数据完全写入CPU预置的内存目的地址后,通知CPU写入完成。
[0105]示例性地,DMA控制器根据CPU配置的传输参数完成由CPU发起的外部芯片与CPU之间的数据下发操作,包括:
[0106]DMA控制器接收CPU配置的下发启动指令后,从CPU预置的内存源地址按照CPU预置的下发数据长度将内存中的待下发数据读取至被动下发缓存;
[0107]DMA控制器将被动下发缓存中的待下发数据写入CPU预置的外部芯片存储器的目的地址中;
[0108]DMA控制器当待下发数据完全写入CPU预置的外部芯片存储器的目的地址后,通知CPU下发完成。
[0109]示例性地,DMA控制器通过CPU在内存中设置的包括至少一个缓存描述BD项的BD表及数据缓存空间完成由外部芯片发起的外部芯片与CPU之间的数据上送操作,包括:
[0110]DMA控制器接收CPU在初始化完成主动上送BD表后发送的主动上送BD表的特征信息;其中,主动上送BD表的特征信息包括:主动上送BD表中BD项的个数阈值,主动上送BD表存放的首地址和结束地址;而主动上送BD表中的BD项内容可以包括:该BD项的有效指示,该BD项对应的内存中数据块大小及该BD项对应的内存中数据起始地址;
[0111]DMA控制器接收外部芯片发送的待上送数据,并将待上送数据存入所述DMA控制器中的主动上送缓存;
[0112]当主动上送缓存满足预设条件时且主动传输单元自身保存的有效BD项数小于BD项的个数阈值时,DMA控制器根据主动上送BD表存放的首地址和结束地址读取BD项;
[0113]当BD项的有效指示为O时,DMA控制器将主动上送缓存中的待上送数据传输至BD项对应的内存中数据起始地址,并将K)项的有效指示更改为I,且将主动传输单元自身保存的有效BD项数加一;
[0114]DMA控制器根据主动上送BD表存放的首地址和结束地址读取BD项在BD表中的下一个BD项。
[0115]进一步地,该方法还包括:
[0116]DMA控制器接收CPU在读取完BD项对应的内存中数据起始地址中的待上送数据后发送的读取完毕信息,并将主动传输单元自身保存的有效BD项数减一。
[0117]示例性地,DMA控制器通过CPU在内存中设置的包括至少一个缓存描述BD项的BD表及数据缓存空间完成由外部芯片发起的外部芯片与CPU之间的数据下发操作,包括:
[0118]DMA控制器接收CPU在初始化完成主动下发BD项后发送的主动下发BD项的首地址和结束地址;
[0119]DMA控制器接收CPU发送的主动下发起始指令后,根据主动下发BD项的首地址和结束地址读取主动下发BD项;
[0120]DMA控制器根据主动下发BD项指示的内存空间中的待下发数据传输至主动下发缓存,并将主动下发缓存中的数据传输至外部芯片的存储器;
[0121]DMA控制器向CPU发送主动下发完成响应。
[0122]本实施例提供的数据传输的方法,可以同时支持主动方式和被动方式的数据传输,并且通过仲裁的方式避免了主动方式和被动方式的多路数据之间的竞争现象,通用性强,节省了 CPU与外部芯片的读写数据时间
[0123]本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
[0124]本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0125]这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0126]这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
[0127]以上,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
【主权项】
1.一种直接内存存取DMA控制器,其特征在于,所述DMA控制器包括:被动传输单元、主动传输单元、DMA调度单元和快捷外部设备互连PCIe单元,其中, 所述被动传输单元,用于根据中央处理器CPU配置的传输参数完成由所述CPU发起的所述外部芯片与所述CPU之间的数据上送和下发操作; 所述主动传输单元,用于通过所述CPU在内存中设置的包括至少一个缓存描述BD项的BD表及数据缓存空间完成由外部芯片发起的所述外部芯片与所述CPU之间的数据上送和下发操作; 所述DMA调度单元,用于通过仲裁的方式避免所述外部芯片与所述CPU之间的数据上送和下发操作所引起的竞争; 所述PCIe单元,用于为所述CPU和所述DMA控制器之间的信息交互提供PCIe接口。2.根据权利要求1所述的DMA控制器,其特征在于,所述被动传输单元,具体用于: 接收所述CPU配置的上送启动指令后,从所述CPU预置的外部芯片源地址按照所述CPU预置的上送数据长度将外部芯片存储器中的待上送数据读取至被动上送缓存;以及, 将所述被动上送缓存中的待上送数据写入所述CPU预置的内存目的地址中;以及, 当所述待上送数据完全写入所述CPU预置的内存目的地址后,通知所述CPU写入完成。3.根据权利要求1所述的DMA控制器,其特征在于,所述被动传输单元,具体用于: 接收所述CPU配置的下发启动指令后,从所述CPU预置的内存源地址按照所述CPU预置的下发数据长度将所述内存中的待下发数据读取至被动下发缓存;以及, 将所述被动下发缓存中的待下发数据写入所述CPU预置的外部芯片存储器的目的地址中;以及, 当所述待下发数据完全写入所述CPU预置的外部芯片存储器的目的地址后,通知所述CPU下发完成。4.根据权利要求1所述的DMA控制器,其特征在于,所述主动传输单元,具体用于: 接收所述CPU在初始化完成主动上送BD表后发送的所述主动上送BD表的特征信息;其中,所述主动上送BD表的特征信息包括:所述主动上送BD表中BD项的个数阈值,所述主动上送BD表存放的首地址和结束地址;所述主动上送BD表中BD项的内容包括:所述BD项的有效指示,所述BD项对应的内存中数据块大小及所述BD项对应的内存中数据起始地址; 以及,接收外部芯片发送的待上送数据,并将所述待上送数据存入所述DMA控制器中的主动上送缓存; 以及,当所述主动上送缓存满足预设条件时且所述主动传输单元自身保存的有效BD项数小于所述BD项的个数阈值时,根据所述主动上送BD表存放的首地址和结束地址读取所述BD项; 以及,当所述BD项的有效指示为O时,将所述主动上送缓存中的待上送数据传输至所述BD项对应的内存中数据起始地址,并将所述BD项的有效指示更改为1,且将所述主动传输单元自身保存的有效BD项数加一; 以及,根据所述主动上送BD表存放的首地址和结束地址读取所述BD项在所述BD表中的下一个BD项。5.根据权利要求4所述的DMA控制器,其特征在于,所述主动传输单元还用于:接收所述CPU在读取完所述BD项对应的内存中数据起始地址中的待上送数据后发送的读取完毕信息,并将所述主动传输单元自身保存的有效BD项数减一。6.根据权利要求1所述的DMA控制器,其特征在于,所述主动传输单元,具体用于: 接收所述CPU在初始化完成主动下发BD项后发送的所述主动下发BD项的首地址和结束地址;以及, 接收所述CPU发送的主动下发起始指令后,根据所述主动下发BD项的首地址和结束地址读取所述主动下发BD项;以及, 根据所述主动下发BD项指示的内存空间中的待下发数据传输至主动下发缓存,并将所述主动下发缓存中的数据传输至所述外部芯片的存储器;以及, 向所述CPU发送主动下发完成响应。7.一种数据传输的方法,其特征在于,所述方法应用于一直接内存存取DMA控制器,所述方法包括: 所述DMA控制器根据中央处理器CPU配置的传输参数完成由所述CPU发起的所述外部芯片与所述CPU之间的数据上送和下发操作; 所述DMA控制器通过所述CPU在内存中设置的包括至少一个缓存描述BD项的BD表及数据缓存空间完成由外部芯片发起的所述外部芯片与所述CPU之间的数据上送和下发操作; 所述DMA控制器通过仲裁的方式避免所述外部芯片与所述CPU之间的数据上送和下发操作所引起的竞争,其中,所述CPU和所述DMA控制器之间的信息交互通过PCIe接口进行。8.根据权利要求7所述的方法,其特征在于,所述DMA控制器根据CPU配置的传输参数完成由所述CPU发起的所述外部芯片与所述CPU之间的数据上送操作,包括: 所述DMA控制器接收所述CPU配置的上送启动指令后,从所述CPU预置的外部芯片源地址按照所述CPU预置的上送数据长度将外部芯片存储器中的待上送数据读取至被动上送缓存; 所述DMA控制器将所述被动上送缓存中的待上送数据写入所述CPU预置的内存目的地址中; 所述DMA控制器当所述待上送数据完全写入所述CPU预置的内存目的地址后,通知所述CPU写入完成。9.根据权利要求7所述的方法,其特征在于,所述DMA控制器根据CPU配置的传输参数完成由所述CPU发起的所述外部芯片与所述CPU之间的数据下发操作,包括: 所述DMA控制器接收所述CPU配置的下发启动指令后,从所述CPU预置的内存源地址按照所述CPU预置的下发数据长度将所述内存中的待下发数据读取至被动下发缓存; 所述DMA控制器将所述被动下发缓存中的待下发数据写入所述CPU预置的外部芯片存储器的目的地址中; 所述DMA控制器当所述待下发数据完全写入所述CPU预置的外部芯片存储器的目的地址后,通知所述CPU下发完成。10.根据权利要求7所述的方法,其特征在于,所述DMA控制器通过所述CPU在内存中设置的包括至少一个缓存描述BD项的BD表及数据缓存空间完成由外部芯片发起的所述外部芯片与所述CPU之间的数据上送操作,包括: 所述DMA控制器接收所述CPU在初始化完成主动上送BD表后发送的所述主动上送BD表的特征信息;其中,所述主动上送BD表的特征信息包括:所述主动上送BD表中BD项的个数阈值,所述主动上送BD表存放的首地址和结束地址;所述主动上送BD表中BD项的内容包括:所述BD项的有效指示,所述BD项对应的内存中数据块大小,所述BD项对应的内存中数据起始地址; 所述DMA控制器接收外部芯片发送的待上送数据,并将所述待上送数据存入所述DMA控制器中的主动上送缓存; 当所述主动上送缓存满足预设条件时且所述主动传输单元自身保存的有效BD项数小于所述BD项的个数阈值时,所述DMA控制器根据所述主动上送BD表存放的首地址和结束地址读取所述BD项; 当所述BD项的有效指示为O时,所述DMA控制器将所述主动上送缓存中的待上送数据传输至所述BD项对应的内存中数据起始地址,并将所述BD项的有效指示更改为1,且将所述主动传输单元自身保存的有效BD项数加一; 所述DMA控制器根据所述主动上送BD表存放的首地址和结束地址读取所述BD项在所述BD表中的下一个BD项。11.根据权利要求10所述的方法,其特征在于,所述方法还包括: 所述DMA控制器接收所述CPU在读取完所述BD项对应的内存中数据起始地址中的待上送数据后发送的读取完毕信息,并将所述主动传输单元自身保存的有效BD项数减一。12.根据权利要求7所述的方法,其特征在于,所述DMA控制器通过所述CPU在内存中设置的包括至少一个缓存描述BD项的BD表及数据缓存空间完成由外部芯片发起的所述外部芯片与所述CPU之间的数据下发操作,包括: 所述DMA控制器接收所述CPU在初始化完成主动下发BD项后发送的所述主动下发BD项的首地址和结束地址; 所述DMA控制器接收所述CPU发送的主动下发起始指令后,根据所述主动下发BD项的首地址和结束地址读取所述主动下发BD项; 所述DMA控制器根据所述主动下发BD项指示的内存空间中的待下发数据传输至主动下发缓存,并将所述主动下发缓存中的数据传输至所述外部芯片的存储器; 所述DMA控制器向所述CPU发送主动下发完成响应。
【文档编号】G06F13/28GK105988953SQ201510074087
【公开日】2016年10月5日
【申请日】2015年2月12日
【发明人】牟崧友, 安康, 王志忠, 刘衡祁
【申请人】深圳市中兴微电子技术有限公司