控制dma访问不连续物理地址的方法及dma控制器的制作方法

文档序号:6579184阅读:239来源:国知局

专利名称::控制dma访问不连续物理地址的方法及dma控制器的制作方法
技术领域
:本发明涉及通信
技术领域
,尤其涉及一种控制DMA访问不连续物理地址的方法及DMA控制器。
背景技术
:为了提高数据传送的速率,人们提出使用DMA(DirectMemoryAddress,直接存贮器地址)进行数据存取传送方式,即在一定时间段内,由DMAC(DMA控制器)取代CPU(CentreProcessorUnit,中央处理单元),获得总线控制权,实现内存与外设或者内存的不同区域之间大量数据的快速传送。DMA传输包括字节传输和块传输。图1是一个典型的DMAC的原理图,DMA控制器、CPU、存储器、数据端口和状态/控制端口都通过总线连接。当从外围设备向存储器传输数据时,来自输入设备的数据首先进入数据緩冲寄存器,然后通过数据端口到达总线;来自输入设备的控制命令到达DMA请求触发器,DMA请求发送到DMAC,准备命令到达状态/控制端口,以触发数据向总线发送。DMA控制器接收到DMA请求后,向CPU发送HOLD(挂起命令),要求CPU放弃对地址总线、数据总线和有关控制总线的使用权,CPU收到DMA请求后,无条件放弃总线控制权,向DMA控制器发送HLDA(挂起响应),此时DMA控制器获取总线控制权,对存储器进行内存寻址、计数数据传送个数,并开始通过总线连续传送数据。每传送一个字节,自动修改当前地址及当前字节计数寄存器的内容,直到字节数寄存器从设置值减到O终止计数,或由外部设备输入EOP(过程结束)有效信号终结DMA传送,将总线控制权交给CPU。当从存储器向外围设备传输数据时,过程与上述写入过程相反,不再赘述。其中,DMAC包括地址寄存器,用于存储DMA进行数据传输过程中的存储器地址;计数器,用于对传输字节进行计数;控制/状态寄存器,用于存放通道已终止计数、通道有DMA请求等状态信息,使CPU可以随时了解各通道的DMA状态。才各式如表l所示<table>tableseeoriginaldocumentpage6</column></row><table>D3到D0为对应通道3-0,Di^表示i通道已计数到终止或出现外加EOP信号;D7到D4为对应通道3-0,Di-l表示通道i-4有DMA请求还未处理。其中,地址寄存器包括基地址寄存器,用于存放DMA传送的存储器首址,传送过程中基地址寄存器的内容不变。当前地址寄存器,用于存放DMA传送过程中的存储器地址,在每次传送后地址自动增l或减l(读出或写入的顺序不同,例如先高位后低位,则减l操作,先低位后高位,则增l操作);基字节计数寄存器,用于存放DMA传送的总字节数;当前字节数寄存器,用于存放DMA传送过程中没有传送完的字节数,在每次传送完后,字节数计数器减l,当值为0时,表示字节数传送完毕。基地址寄存器与当前地址寄存器被同时写入某一起始地址,可用作内存区域的首地址或末地址。现有的DMA控制器对于连续的物理内存搬移是没有任何问题的,但是目前许多情况下由于CPU芯片的种种要求,在内存管理池中会出现虚拟地址连续,但是物理地址不连续的情况,即物理内存的地址不连续,为一块一块的。在这种情况下,如果虚拟内存的管理不善,会出现提供给DMA的内存搬移起始地址是有效的,但是搬移长度已经实际上经过了空洞,会导致部分DMA控制器由于访问不存在的内存地址导致挂死。如图2所示,左边为虚拟地址空间,右侧为物理地址空间。左侧的虛拟地址从0xl00000000x30000000是连续的。其中0x10000000-0x20000000对应的物理地址为0x00x10000000,0x200000000x30000000的虚拟地址对应的物理地址为0x200000000x30000000,其中物理地址0xl00000000x20000000为存储空洞,不对应任何物理实体。其中,虚拟地址和物理地址的关系由软件人员依据CPU的寄存器进行配置。如果DMA向虚拟地址0xlFFFFF00(物理地址0x0FFFFF00)开始放入1K字节,在传输开始,虚拟地址OxlFFFFFOO对应的物理地址OxOFFFFFOO的物理内存是存在的,可以正常操作;但在传输的过程中DMA物理地址访问到0xl00000000x20000000范围内(0x0FFFFF00+lK=10000F24),由于该物理地址没有物理内存,因此该写入请求无效导致DMA读写失败。
发明内容本发明提供了一种控制DMA访问不连续物理地址的方法及DMA控制器,以解决虚拟地址连续、物理内存地址不连续的系统中,DMA跨越物理存储块边^H般移数据,导致DMA控制器读写失败的问题。本发明提供了一种控制DMA访问不连续物理地址的方法,包括以下步骤对相邻两个物理存储块配置物理地址边界寄存器,每个物理地址边界寄存器与相邻的两个物理存储块间的空洞相对应,分别存有上一个物理存储块的结束物理地址和下一个物理存储块的开始物理地址;所述DMA控制器根据访问的物理地址更新其存储器地址,将更新后的存储器地址与所述物理存储块的结束物理地址比较,如果相等,则说明已传输到所述上一个物理存储块边界,将所述DMA控制器中的存储器地址更新为下一个物理存储块的开始物理地址,继续传输数据并比较,直到数据传输完成。其中,还包括如果更新后的存储器地址与所述物理存储块的结束物理地址不相等,则说明没有传输到所述上一个物理存储块边界,继续传输数据比较。其中,所述对相邻两个物理存储块配置物理地址边界寄存器,具体包括确定每个物理存储块的起始物理地址和结束物理地址;按照地址顺序将第一个物理存储块的结束物理地址和第二个物理存储块的开始物理地址写入第一物理地址边界寄存器,将第二个物理存储块的结束物理地址和第三个物理存储块的开始物理地址写入第二物理地址边界寄存器,依次类推;形成物理存储块与物理地址边界寄存器的对应关系。较,具体包括所述DMA控制器根据初始存储器地址确定对应的物理存储块;所述DMA控制器从所述物理存储块对应的物理地址边界寄存器中获取所述物理存储块的结束物理地址;所述DMA控制器将所述更新后的存储器地址与所述物理存储块的结束物理i也址比寿支。其中,所述传输数据包括从外部设备向物理存储块写数据,或从所述存储块向外部设备读数据,或在不同存储块之间传输数据。本发明提供了一种DMA控制器,用于对包括至少两个物理地址不连续的物理存储块的访问进行控制,所述DMA控制器至少包括地址寄存器、比较处理模块和至少一个物理地址边界寄存器,所述物理地址边界寄存器,与相邻的两个物理存储块间的空洞相对应,用于存有相邻两个物理存储块中上一个物理存储块的结束物理地址和下一个物理存储块的开始物理地址;所述地址寄存器,用于存储当前存储器地址,并根据访问的物理地址更新其存储器地址;所述比较处理模块,分别与所述地址寄存器和所述物理地址边界寄存器存储块的结束物理地址比较,如果相等,则说明已传输到所述物理存储块边界,将所述地址寄存器中的存储器地址更新为下一个物理存储块的开始物理地址,继续传输数据并比较。其中,所述比较处理模块,还用于如果更新后的存储器地址与所述物理存储块的结束物理地址不相等,则说明没有传输到所述物理存储块边界,继续传输数据并比较。其中,所述比较处理模块中将更新后的存储器地址与所述物理存储块的结束物理地址比较,具体为所述DMA控制器根据初始存储器地址确定对应8的物理存储块;所述DMA控制器从所述物理存储块对应的物理地址边界寄存器中获取所述物理存储块的结束物理地址;所述DMA控制器将所述更新后的存储器地址与所述物理存储块的结束物理地址比较。其中,所述传输数据包括从外部设备向物理存储块写数据,或从所述存储块向外部设备读数据。与现有技术相比,本发明具有以下优点本发明中,通过设置物理存储块边界寄存器和比较模块,DMA控制器在每次传输数据后判断物理存储块是否超出边界,如果超出,则选用其他物理存储块进行数据传输。因此,本发明在存储器物理地址不连续的情况,避免了DMA控制器访问到没有物理存储块的物理地址产生的读写失败,而且,增加了软件存储管理设计的灵活性和可靠性。图1是现有技术中DMA控制器原理图2是现有技术中虚拟地址连续物理地址不连续的映射图3是本发明中一种控制DMA访问不连续物理地址的方法流程图4是本发明中一种DMA控制器结构图5是应用本发明图4的一种具体应用场景的边界寄存器示意图;具体实施例方式本发明的核心思路是通过设置物理存储块边界寄存器和比较模块,DMA控制器在每次传输数据后判断物理存储块是否超出边界,如果超出,则选用其他物理存储块进行数据传输。因此,本发明在存储器物理地址不连续的情况,避免了DMA控制器访问到没有物理存储块的物理地址产生的读写失败。下面针对存储器为物理内存的情况介绍下,对于其他有虚拟地址和物理地址的存储器同样适用。本发明4是供了一种控制DMA访问不连续物理地址的方法,如图3所示,包括以下步骤步骤301,对相邻两个物理存储块配置物理地址边界寄存器,每个物理地址边界寄存器与相邻的两个物理存储块间的空洞相对应,分别存有上一个物理存储块的结束物理地址和下一个物理存储块的开始物理地址;其中,所述对相邻两个物理存储块配置物理地址边界寄存器,具体包括确定每个物理存储块的起始物理地址和结束物理地址;按照地址顺序将第一个物理存储块的结束物理地址和第二个物理存储块的开始物理地址写入第一物理地址边界寄存器,将第二个物理存储块的结束物理地址和第三个物理存储块的开始物理地址写入第二物理地址边界寄存器,依次类推;形成物理存储块与物理地址边界寄存器的对应关系。例如,如果包括N个不连续物理存储块,则需要N-1个物理地址边界寄存器;第一个物理地址边界寄存器存储第一个物理存储块的结束物理地址和第二个物理存储块的开始物理地址,第二个物理地址边界寄存器存储第二个物理存储块的结束物理地址和第三个物理存储块的开始物理地址,依次类推,第N-l个物理地址边界寄存器存储第N-l个物理存储块的结束物理地址和第N个物理存储块的开始物理地址。步骤302,所述DMA控制器根据访问的物理地址更新其存储器地址,将更新后的存储器地址与所述物理存储块的结束物理地址比较,如果相等,则说明已传输到所述上一个物理存储块边界,将所述DMA控制器中的存储器地址更新为下一个物理存储块的开始物理地址,继续传输数据并比较,直到数据传输完成。如果更新后的存储器地址与所述物理存储块的结束物理地址不相等,则说明没有传输到所述上一个物理存储块边界,继续传输数据比较。具体包括所述DMA控制器根据初始存储器地址确定对应的物理存储块;所述DMA控制器根据步骤301生成的物理存储块与物理地址边界寄存器的对应的结束物理地址;所述DMA控制器将所述更新后的存储器地址与所述物理存储块的结束物理地址比4^。其中,传输数据包括从外部设备向物理存储块写数据,或从所述存储块向外部设备读数据,或在不同存储块之间传输数据。本发明提供了一种DMA控制器,用于对包括至少两个物理地址不连续的物理存储块的访问进行控制,所述DMA控制器如图4所示,至少包括地址寄存器410、比较处理模块420和至少一个物理地址边界寄存器430,物理地址边界寄存器410,与相邻的两个物理存储块间的空洞相对应,用于存有相邻两个物理存储块中上一个物理存储块的结束物理地址和下一个物理存储块的开始物理地址;地址寄存器420,用于存储当前存储器地址(物理地址),并根据访问的物理地址更新其存储器地址,即不会在同一物理地址重复写入it据或重复读出数据;比较处理模块430,分别与地址寄存器410和物理地址边界寄存器420连储块的结束物理地址比较,如果相等,则说明已传输到所述物理存储块边界,将所述地址寄存器中的存储器地址更新为下一个物理存储块的开始物理地址,继续传输数据并比较。其中,传输数据包括从外部设备向物理存储块写数据,或从所述存储块向外部设备读数据。其中,将更新后的存储器地址与所述物理存储块的结束物理地址比较,具体为所述DMA控制器根据初始存储器地址确定对应的物理存储块;所述DMA控制器>^人所述物理存储块对应制器将所述更新后的存储器地址与所述物理存储块的结束物理地址比较。比较处理模块430,还用于如果更新后的存储器地址与所述物理存储块的结束物理地址不相等,则说明没有传输到所述物理存储块边界,继续传输数据并比较。应用图4所述DMA控制器的实现方法的原理,结合具体场景进行详细说明。在DMAC中增加N个物理地址边界寄存器,如图5所示,支持N+1个不连ii续的物理存储块(例如内存条等)。其中每个物理地址边界寄存器有两个物理地址A0/A1,AO是上一个物理存储块的结束物理地址,A1是对应A0的下一个物理存储块的起始物理地址。例如,存储器包括3个不连续的物理存储块1、物理存储块2、物理存储块3,物理存储块l的起始物理地址为OxO,结束物理地址为OxlOOOOOOO,物理存储块2的起始物理地址为0x20000000,结束物理地址为0x50000000,物理存储块3的起始物理地址为0x60000000,结束物理地址为0x80000000;物理地址边界寄存器组包括物理地址边界寄存器l和物理地址边界寄存器2,其中,物理地址边界寄存器l的A0为0x20000000,Al为0x30000000;物理地址边界寄存器2的A0为0x50000000,Al为0x60000000。并在DMAC增加比较处理模块,当前地址寄存器在DMA搬移过程中每增加或者减一后都和对应的物理地址边界寄存器的第一个地址AO进行比较,如果和地址相同(即到达了该物理存储块的边界,那么自动将当前地址寄存器中的地址更新为下一个物理存储块的起始地址A1),然后继续工作。这样在硬件上就解决了需要跨越物理地址不连续搬移的情况。使得DMA应用的通用性更广。例如,向以物理存储块1中的物理地址OxOFFFFFOO为起始地址向物理存储块1中写入1K字节。该实施例中以每写入1个字节,就进行一次比较为例进行说明,实际应用中也可以当每写入一个数据块(N个字节)后进行比较。当写入l字节后,当前寄存器地址为OxOFFFFFOO+l=OxOFFFFF01,与物理存储块l的结束物理地址0x20000000比较,结果不相同,说明物理地址仍然有效,继续写入数据并比较;当写入100字节后,当前寄存器地址为0x0FFFFF00+100=0x10000000,与物理存储块1的结束物理地址为Oxi0000000比较,结果相同,说明已到物理存储块1的边界,如果再继续写入数据,将写到不存在的物理地址上,导致数据写入失败;因此,此时DMAC需要将后续数据写入物理存储块2,也就是说,将写入地址置为物理存储块2的开始物理地址0x20000000,进行lt据写入。同样数据存储于上述物理存储块1、2、3中,以物理存储块1中的物理地址OxOFFFFFOO为起始地址从物理存储块1中向外部设备读出1K字节,当读出1字节后,当前寄存器地址为OxOFFFFFOO+l=OxOFFFFF01,与物理存储块1的结束物理地址0x20000000比较,结果不相同,i兌明物理地址仍然有效,继续读出数据并比较;当读出100字节后,当前寄存器地址为0x0FFFFF00+100=0x10000000,与物理存储块1的结束物理地址为0x10000000比较,结果相同,说明已到物理存储块1的边界,没有连续物理地址,导致数据读出失败;因此,此时DMAC需要从物理存储块2读出数据,也就是说,将读出地址置为物理存储块2的开始物理地址0x20000000,进行数据读出。同理,本发明也适用于两个内部存储器之间传输数据,即从一个内部存储器读出数据,写到另一个内部存储器中,这两个内部存储器可以都是包括不连续的物理存储块,读写两端都采用本发明方案;或者只有一个内部存储器包括不连续的物理存储块,而另一个内部存储器包括连续的物理存储块,只需一端采用本发明方案。当然,本发明实施例中,以从物理地址的低位到高位顺序进行写入或读出,实际应用中也可以采用相反的顺序读出或写入,原理相同,不再赘述。本发明中,通过设置物理存储块边界寄存器和比较模块,DMA控制器在每次传输数据后判断物理存储块是否超出边界,如果超出,则选用其他物理存储块进行数据传输。因此,本发明在存储器物理地址不连续的情况,避免了DMA控制器访问到没有物理存储块的物理地址产生的读写失败,而且,增加了软件存储管理设计的灵活性和可靠性。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。上述本发明序号仅仅为了描述,不代表实施例的优劣。以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。权利要求1、一种控制DMA访问不连续物理地址的方法,其特征在于,包括以下步骤对相邻两个物理存储块配置物理地址边界寄存器,每个物理地址边界寄存器与相邻的两个物理存储块间的空洞相对应,分别存有上一个物理存储块的结束物理地址和下一个物理存储块的开始物理地址;所述DMA控制器根据访问的物理地址更新其存储器地址,将更新后的存储器地址与所述物理存储块的结束物理地址比较,如果相等,则说明已传输到所述上一个物理存储块边界,将所述DMA控制器中的存储器地址更新为下一个物理存储块的开始物理地址,继续传输数据并比较,直到数据传输完成。2、如权利要求l所述的方法,其特征在于,还包括如果更新后的存储器地址与所述物理存储块的结束物理地址不相等,则说明没有传输到所述上一个物理存储块边界,继续传输数据比较。3、如权利要求1所述的方法,其特征在于,所述对相邻两个物理存储块配置物理地址边界寄存器,具体包括确定每个物理存储块的起始物理地址和结束物理地址;按照地址顺序将第一个物理存储块的结束物理地址和第二个物理存储块的开始物理地址写入第一物理地址边界寄存器,将第二个物理存储块的结束物理地址和第三个物理存储块的开始物理地址写入第二物理地址边界寄存器,依次类推;形成物理存储块与物理地址边界寄存器的对应关系。4、如权利要求3所述的方法,其特征在于,所述将更新后的存储器地址与所述物理存储块的结束物理地址比较,具体包括所述DMA控制器根据初始存储器地址确定对应的物理存储块;所述DMA控制器根据所述物理存储块与物理地址边界寄存器的对应关系,结束物理地址;所述DMA控J物理地址比專交。5、如权利要求1至4中任一项所述的方法,其特征在于,所述传输数据包括从外部设备向物理存储块写数据,或从所述存储块向外部设备读数据,或在不同存储块之间传输数据。6、一种DMA控制器,用于对包括至少两个物理地址不连续的物理存储块的访问进行控制,其特征在于,所述DMA控制器至少包括地址寄存器、比较处理模块和至少一个物理地址边界寄存器,所述物理地址边界寄存器,与相邻的两个物理存储块间的空洞相对应,用于存有相邻两个物理存储块中上一个物理存储块的结束物理地址和下一个物理存储块的开始物理地址;所述地址寄存器,用于存储当前存储器地址,并根据访问的物理地址更新其存储器地址;所述比较处理模块,分别与所述地址寄存器和所述物理地址边界寄存器存储块的结束物理地址比较,如果相等,则说明已传输到所述物理存储块边界,将所述地址寄存器中的存储器地址更新为下一个物理存储块的开始物理地址,继续传输数据并比较。7、如权利要求6所述的DMA控制器,其特征在于,所述比较处理模块,还用于如果更新后的存储器地址与所述物理存储块的结束物理地址不相等,则说明没有传输到所述物理存储块边界,继续传输数据并比较。8、如权利要求6所述的DMA控制器,其特征在于,所述比较处理模块中将更新后的存储器地址与所述物理存储块的结束物理地址比较,具体为:硇定对危的物斑在储块;所述DMA控结束物理地址;所述DMA控制器将所述更新后的存储器地址与所述物理存储块的结束物理地址比较。9、如权利要求6至8中任一项所述的DMA控制器,其特征在于,所述传输数据包括从外部设备向物理存储块写数据,或从所述存储块向外部设备读数据。全文摘要本发明公开了一种控制DMA访问不连续物理地址的方法,包括对相邻两个物理存储块配置物理地址边界寄存器,每个物理地址边界寄存器与相邻的两个物理存储块间的空洞相对应,分别存有上一个物理存储块的结束物理地址和下一个物理存储块的开始物理地址;DMA控制器根据访问的物理地址更新其存储器地址,将更新后的存储器地址与物理存储块的结束物理地址比较,如果相等,则说明已传输到所述上一个物理存储块边界,将DMA控制器中的存储器地址更新为下一个物理存储块的开始物理地址,继续传输数据并比较,直到数据传输完成。因此,本发明在存储器物理地址不连续的情况,避免了DMA控制器访问到没有物理存储块的物理地址产生的读写失败。文档编号G06F12/06GK101599049SQ20091015787公开日2009年12月9日申请日期2009年7月9日优先权日2009年7月9日发明者高瑞昌申请人:杭州华三通信技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1