专利名称:一种基于双AHB Master接口的片上DMA控制器实现方法
技术领域:
本发明涉及嵌入式系统芯片中先进高性能总线的数据传输,具体的说是一种基于 双AHB (Advanced High-performance Bus,先进高性能总线)Master (主设备)接口的片上 DMA (Direct Memory Access,直接内存存取)控制器实现方法。
背景技术:
集成电路制作工艺进入深亚微米之后,ICdntegrated Circuit,集成电路)设计 能力滞后于工艺水平日甚,势必要提出新的设计思想和设计方法,SoC(System on Chip, 片上系统)是基于嵌入式系统的一种新的设计思想和设计方法,是将微处理器、模拟IP核 (Intellectual Property core,知识产权核)、数字IP核和存储器(或片外存储控制接口) 集成在单一芯片上,不仅提高了产品的集成度,而且大大降低了制造成本,使得最终产品的 价格为普通消费者能够承担。其中 AMBA(Advanced Micocontroller Bus Architecture, 先进微控制器总线体系结构)总线是ARM公司(Advanced RISCMachines,先进RISC机器 公司)提出的总线结构,由于其开放的总线规范,这种总线得到了广泛的应用。AMBA总线 的目的是推出芯片内部总线的规范。AMBA总线有三个版本:AMBA1. 0,AMBA2. O和AMBA3. O。 目前AMBA2. O规范作为SoC的一种较为成熟的总线标准,其定义了 3种不同的系统总线 1)AHB (先进高性能总线);2) ASB (Advanced System Bus,先进系统总线);3) APB (Advanced Peripheral Bus,先进外围设备总线)。AHB总线是新一代AMBA总线,作为高性能系统骨干总线,用于连接高性能、高时 钟速率的系统模块,如完成处理器、片上存储器、存储器控制器、中断控制器等模块间的通
fn °ASB总线是第一代AMBA系统总线,用于高性能系统模块间通信。目前已被AHB所 取代。APB总线主要用于低速且低功率的外围,可针对外围作功率消耗及复杂接口的最 佳化。在具有AHB总线的片上系统中,DMA控制器作为与ARM微处理器并列的主器件出现。 对于AHB总线而言,片上DMA控制器既是AHB总线的从设备,又与ARM微处理器一样是AHB 总线的主设备。增加一个用于完成存储器直接存取的DMA控制器,以减少ARM微处理器传 输数据的压力。DMA控制器技术本身就是一种代替微处理器完成存储器与外部设备之间大量数 据传送的方法,也称直接存储器存取方法。目前广泛应用的DMA控制器,当有输入设备需 要进行DMA数据传输时,其通过DMA请求触发器向DMA控制器发出DMA请求。在此之前 CPU (Central Processing Unit,中央处理单元)已经将地址等控制信息配给DMA控制器内 的地址寄存器中。当DMA控制器接到DMA请求时,其向CPU发起总线占用请求。CPU通常在 执行完当前的指令后将总线控制权交给DMA控制器,此时DMA控制器的控制和状态寄存器 发生变化,表明已经获得总线控制权,并发起一次DMA数据传输。在数据传输过程中,计数 器对传输的数据量进行计数,直到计数器值等于传输长度时停止计数,并改变控制和状态寄存器的内容。DMA控制器向CPU归还总线控制权。这样就能使CPU节省对外设的查询时 间。这种DMA控制器大部分仅适用于单层总线,需要的缓存FIF0(First In First Out,先入先出队列)数据缓存器过大,DMA控制器的每个通道未能实现灵活的流控管理,并 且未能与以AMBA2. 0总线规范为标准的SoC这种新的嵌入式设计方法结合起来。导致这些 DMA控制器产品效率难以提高,无法适应多层的AHB总线结构,无法满足日益增长的对性能 的需求,并且难以集成到自主设计的SoC系统中,重用性不高。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种基于双AHB Master接口 的片上DMA控制器实现方法,即在具有AHB总线的片上系统中,设计具有双master接口的 片上DMA控制器,解决目前的DMA控制器,大部分仅适用于单层总线,内部缓存过大,无法有 效的提高总线的利用率,每个DMA通道也未能实现灵活的流控管理的问题。为达到以上目的,本发明采取的技术方案是一种基于双AHB Master接口的片上DMA控制器实现方法,其特征在于包括以下步 骤步骤1,在DMA控制器开始工作前,由ARM微处理器通过APB总线对DMA控制器中 的DMA配置寄存器单元进行初始化配置,所述初始化配置包括对32个DMA通道的通道配 置寄存器,源地址寄存器,目的地址寄存器,传输数据长度寄存器进行初始化配置,即确定 每个DMA通道的使能,工作模式,有效数据宽度,数据源的起始地址,数据目的的起始地址, 以及传输数据长度;所述工作模式包括主动模式,被动模式,软件模式;所述有效数据宽度 包括 byte,half word, word ;步骤2,开始数据传输过程,DMA控制器等待出现的DMA请求信号,所述DMA请求信 号为在主动模式,被动模式,软件模式下均有效的dma_req,或仅在被动模式下有效的dma_ last_req,在dma_req对应的通道的使能有效的情况下,根据有效的请求信号DMA控制器的 仲裁单元仲裁出当前需要响应的通道号,并同时产生pahb_req信号和Current_laSt_req, 给AHBjiiasterO接口单元,如果没有请求则继续在此步骤中等待执行;步骤3,当AHBjnasterO接口单元在pahb_req信号为高的情况下,得到仲裁单元仲 裁出的通道号后,根据这个通道号对应通道的配置信息,所述对应通道的配置信息包括对 应通道的工作模式,有效数据宽度,数据源的起始地址,数据目的的起始地址,以及传输数 据长度,将其转变为一次INCR4类型或4个连续SINGLE类型的AHBjnasterO的ARB总线 信号,根据p_ram_select的指示将从源地址读回的数据存储在DMA数据缓存寄存器组中, 并对这个通道读回的数据量进行计数,每次INCR4类型或者4个连续SINGLE类型的传输完 成时产生pahb_aCk完成信号,给仲裁单元,同时将产生的qahbjeq信号、该通道的配置信 息以及数据存储的位置q_ram_SeleCt传递给AHBjnasterl接口单元;步骤4,AHBjnasterl接口单元在qahb_req信号为高的情况下,获得AHBjnasterO 接口单元传递的信息后,将其转变为一次INCR4类型或4个连续SINGLE类型的AHB_ masterl的AHB总线信号,根据q_ram_SeleCt的指示从DMA数据缓存寄存器组里面读出相 应的数据,并通过AHBjnasterl接口单元的AHB总线写到目的地址上去;每次INCR4类型或
6者4个连续SINGLE类型的传输完成时产生qahb_ack完成信号,给AHBjnasterO接口单元,步骤5,当DMA控制器完成当前响应通道本次DMA请求全部的数据传输,AHB_ masterO接口单元同时将该通道对应的DMA中断信号dma_int和DMA请求清零信号dma_clr 信号拉高,并用dma_Clr信号清零对应通道的外设或内存RAM发出的dma_req,使其不参加 下一次的仲裁;DMA配置寄存器单元在检测到中断信号dma_int时,将对应的通道的通道完 成状态寄存器置高,对应通道的使能信号关闭,此时表示该通道的请求响应完成,跳到步骤 7 ;若DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则跳到步骤6 ;步骤6,当DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则不作 任何信号调整,直接跳转到步骤2 ;此时该通道对应的DMA请求信号dma_req或dma_laSt_ req依然有效,与其它未被DMA控制器响应的有效通道请求一起参与仲裁单元的下一次仲 裁;步骤7,ARM微处理器通过APB总线对DMA控制器中,已完成本次DMA请求全部数 据传输的当前响应通道的配置寄存器单元(源地址寄存器,目的地址寄存器,传输数据长 度寄存器)进行重新配置,并重新打开当前响应通道的使能信号后跳到步骤2。在上述技术方案的基础上,每次DMA控制器数据传输只响应32个通道中的一个通 道,每个通道的实现方法相同。在上述技术方案的基础上,当DMA控制器未完成当前响应通道η全部的数据传输 时,η = 0,1,2……31,其后续数据传输过程如下1)在DMA控制器通道η开始数据传输之前,ARM微控制器通过APB总线对通道η 的通道配置寄存器,源地址寄存器,目的地址寄存器,传输数据长度寄存器进行相应配置, 并打开通道η的使能信号;2)仲裁单元根据仲裁原则确定响应通道η ;3)AHB_maSter0接口单元将根据通道η的源地址寄存器发出相应的一次INCR4类 型或者4个连续SINGLE类型的传输地址及控制信号;将从源地址读回的数据,存到DMA数 据缓存寄存器组;并对读回的数据量按字节进行计数;并在DMA控制器完成通道η本次DMA 请求全部的数据传输时产生通道η请求的清零信号dma_Clr和中断信号dma_int,同时将该 通道的配置信息以及数据存储的位置q_ram_SeleCt传递给AHBjnasterl接口单元,4)AHB_masterl接口单元将根据通道η的目的地址寄存器发出相应的一次符合 AHB总线要求的INCR4类型或者4个连续SINGLE类型的传输地址及控制信号,同时根据q_ ram_select信号的指示将从DMA数据缓存寄存器组读出的数据,写到对应的目的地址上;5)该通道为主动模式或软件模式的情况下若通道η的计数器未达到传输数据长 度寄存器配置的值,则重复执行步骤2),3),4),否则执行步骤6);该通道为被动模式的情况下,若仲裁单元未检测到通道η的dma_laSt_req有效, 或DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则重复执行步骤2),3), 4),否则执行步骤6);6)通道η的数据传输结束,通道η的使能关闭。在上述技术方案的基础上,在一次数据传输过程中,AHBjiiasterO总线用于对传输 源进行读数据,AHB_masterl总线用于对传输目的进行写数据。在上述技术方案的基础上,DMA数据缓存寄存器组用来缓存数据,内部数据流从AHB_masterO接口单元到DMA数据缓存寄存器组最后到AHBjnasterl接口单元,整个内部数 据传输过程为3级流水。在上述技术方案的基础上,在DMA控制器完成一次DMA数据传输时产生一个中断 信号用来指示一次传输完毕,或在DMA计数器计数满后产生中断信号用来指示一次传输完 毕。在上述技术方案的基础上,所述DMA控制器包括DMA APB接口单元,作为APB总线接口供APB总线从此设备接口对DMA控制器的 DMA配置寄存器进行配置,DMA配置寄存器单元,由通道配置寄存器,源地址寄存器,目的地址寄存器,传输数 据长度寄存器以及32个通道完成状态寄存器,32个通道完成状态屏蔽寄存器,32个通道中 断屏蔽寄存器组成;所述32个通道为32个DMA通道,32个DMA通道都有各自的通道配置 寄存器,源地址寄存器,目的地址寄存器和传输数据长度寄存器,其中每个通道配置寄存器 的有效位宽为8位,DMA数据缓存寄存器组寄存器组空间为32byte,宽度为32bits,深度为8,且能 进行字节写,有两个接口,一个为读口,另一个为写口,在内部分为两片A和B,每片空间为 16byte,通过AHBjnasterO或AHBjnasterl接口单元的ram_select信号来选择当前对哪片 寄存器组操作,仲裁单元从当前的32个DMA通道的有效请求中,根据当前响应的通道号,仲裁 出下一个响应的一个通道号,连同这个通道对应的所有配置寄存器单元信息传递给AHB_ masterO接口单元,并在接收到当前通道的AHBjnasterO接口单元响应完成信号pahb_ack 后,产生对AHBjnasterO接口单元下一次的请求pahb_req ;仲裁单元仲裁的原则是轮询,其 仲裁的时间是检测到pahb_aCk信号为高电平或者32个通道均无有效请求的空闲状态,每 次只有一个输入请求得到响应;检测仲裁单元当前响应的通道的通道配置模式,如果配置 为被动模式,则预先配置当前响应通道的数据传输长度无效,同时根据检测当前响应通道 的dma_last_req信号是否为高电平,如果为高电平,则表示当前响应的通道只剩最后一次 INCR4类型或4个连续SINGLE类型数据需要传输,此时仲裁单元需要使送出的current last_req信号为高电平,以此信号告知AHBjiiasterO接口单元接下来进行最后一次数据传 输,如果仲裁单元当前响应的通道的模式为主动模式或者软件模式,则使输出的current laSt_req信号为低电平,AHBjnasterO接口单元AHB_masterO接口单元的AHB总线总是对数据源进行操 作,即总是进行AHB总线读操作,在检测到仲裁单元发出的pahb_req请求信号后,将即将响 应的通道号对应的所有配置寄存器单元信息转换为AHBjnasterO接口单元的一次INCR4类 型或者4个连续的SINGLE类型传输,根据p_ram_select的指示将源地址p_srC_addr对应 的数据读回到DMA数据缓存寄存器组,并对这个通道读回的数据量进行计数,并在这一次 传输完成时产生pahb_ack完成信号,在完成当前响应通道本次DMA请求全部的数据传输时 产生dma请求清零信号dma_clr和中断信号dma_int,否则不产生,AHBjnasterl接口单元AHB_masterl接口单元的AHB总线总是对数据目的进行 操作,即总是进行AHB写操作,每一次选中设备进行一次数据传输也为INCR4类型或者4个 连续的SINGLE类型传输,并在这一次数据传输完成时产生qahb_aCk完成信号;即在检测到AHBjnasterO接口单元发出的qahb_req请求信号后,将AHBjnasterO接口单元提供的 与当前响应的通道号对应的数据目的的起始地址,以及目的地址是否增加信号转换为AHB_ masterl接口单元的AHB总线行为,根据AHBjnasterO接口单元提供q_ram_select的值, 从DMA数据缓存寄存器组里面读出相应的数据,并通过AHBjiiasterl接口单元的AHB总线 写到目的地址q_src_addr对应的地址上去。本发明所述的基于双AHB Master接口的片上DMA控制器实现方法,以AHB总线为 基础,设计了一种基于双AHB Master接口的片上DMA控制器实现方法。双AHB Master接 口不仅减少了数据传输的延时,而且只需要较小的内部FIFO;并能同时适用于多层AHB总 线系统。对于每个DMA通道添加了流控管理,使每一个通道均可以灵活的工作在三种模式 软件模式、主动模式和被动模式。并且它结构简单,实现方便,因此易于重用到以其它高性 能ARM微处理器为基础的SoC设计中。
本发明有如下附图图1基于双AHB Master接口的片上DMA控制器的结构示意图,图2仲裁单元输入输出信号的时序图,图3AHB_masterO接口单元输入输出信号的时序图,图4AHB_masterl接口单元输入输出信号的时序图。
具体实施例方式以下结合附图对本发明作进一步详细说明。本发明将DMA控制器设计为一个基本独立于ARM微处理器的AHB总线主设备,能 够根据配置寄存器的值,独立的响应AHB从设备发出的DMA请求,更大程度的提高ARM微处 理器效率。本发明所述DMA控制器拥有两个AHB Master接口,能够适应总线利用率更高的 多层总线系统。其优点在于双AHB master接口不仅减少了数据传输的延时,而且仅需要 较小的内部FIFO;并能同时适用于多层AHB总线系统,更有效的利用AHB总线带宽。同时对 于每个DMA通道添加了流控管理,使每一个通道均可以灵活的工作在三种模式软件模式、 主动模式和被动模式。本发明的技术方案包括以下几点1)DMA 控制器有 2 个 AHB master 接 口,一个是 AHBjnasterO 接 口,一个是 AHB_ masterl接口。AHBjnasterO和AHBjnasterl接口都可以单独作为一层AHB总线的主设备。 在一次数据传输过程中,AHBjnasterO总线用于对传输源进行读数据,AHB_masterl总线用 于对传输目的进行写数据。2) DMA控制器提供四种传输数据的通道存储器到外设;存储器到存储器;外设到 存储器;外设到外设。3) DMA控制器具有32个DMA通道来传送数据。每一个DMA通道只对一个数据源或 一个数据目标进行服务,即一对一服务。对于全双工的外设来说发送和接收各需要一个独 立的数据通道。对于传输源和传输目的来说,源地址和目的地址可以为递增或者非递增模 式;每一个DMA通道支持byte (字节)、half_WOrd (半字)或者word (字)数据传输;支持大、小端数据。4)每一个DMA通道均可以工作在三种工作模式软件模式、主动模式和被动模式。 每一个通道者β由dma_req、dma_last_req禾口 dma_clr三个信号进 亍握手。5) DMA控制器有内部FIFO 32bit*8 (DMA数据缓存寄存器组)用来缓存数据,内部 数据流从AHBjnasterO接口单元到DMA数据缓存寄存器组最后到AHBjnasterl接口单元, 整个内部数据传输过程为3级流水。每级数据流传输都可以同时进行,因此可减少数据在 DMA控制器内部的传输延时。6) DMA控制器具有APB接口。该接口符合APB总线规范,ARM微处理器可以通过 APB接口对DMA控制器的DMA配置寄存器进行配置。7)DMA控制器中断信号。可以在DMA控制器完成一次DMA数据传输时产生一个中 断信号,也可以在DMA计数器计数满后产生中断信号。这一般用来指示一次传输完毕。可 以对DMA控制器的中断信号进行屏蔽。本发明所述DMA控制器的结构如图1所示。其中DMA APB接口单元,作为APB总线接口供APB总线(APB BUS)从此设备接口对DMA 控制器的DMA配置寄存器进行配置。DMA配置寄存器单元,由通道配置寄存器,源地址寄存器,目的地址寄存器,传输数 据长度寄存器以及32个通道完成状态寄存器,32个通道完成状态屏蔽寄存器,32个通道中 断屏蔽寄存器组成,可采用现有技术实现。DMA控制器开始工作前,首先由ARM微处理器通 过APB总线(APB BUS)对每个DMA通道(32个DMA通道)的通道配置寄存器,源地址寄存 器,目的地址寄存器,传输数据长度寄存器进行初始化配置,即确定每个DMA通道的使能, 工作模式(主动模式,被动模式,软件模式),有效数据宽度(byte,half word,word),数据 源的起始地址,数据目的的起始地址,以及传输数据长度。32个通道(DMA通道)都有各自的通道配置寄存器,源地址寄存器,目的地址寄存 器和传输数据长度寄存器,其中每个通道配置寄存器的有效位宽为8位。以通道O(PDCO) 的通道配置寄存器为例(其他通道的通道配置寄存器结构与此相同),其结构如表1所示表1PDC0通道配置寄存器
子地址属性标志宽度缺省值0x00RffPdc0_cfg320x000000x0通道配置寄存器各字段和比特定义如下
名称比特定义reserved31 8保留PdcO_size7:6指示通道0的数据宽度 0 8bits byte
DMA数据缓存寄存器组寄存器组空间为32byte,宽度为32bits,深度为8,可以进 行字节写。有两个接口,一个为读口,另一个为写口。这个寄存器组在内部分为两片A和B, 每片空间为16byte,通过AHBjnasterO或AHBjnasterl接口单元的ram_select信号来选 择(即对应于寄存器组地址的最高位),当前对哪片寄存器组操作。如当AHBjiiasterO接 口单元对A片进行写数据操作时,AHB_masterl接口单元可以同时对B片寄存器组进行读 操作,这样也提高了 DMA控制器数据处理的效率。
仲裁单元从当前的32个DMA通道的有效请求中,根据当前响应的通道号,仲裁 出下一个响应的一个通道号,连同这个通道对应的所有配置寄存器单元信息传递给AHB_ masterO接口单元。并在接收到当前通道的AHBjnasterO接口单元响应完成信号pahb_ ack(脉冲信号)后,产生对AHBjnasterO接口单元下一次的请求pahb_req(脉冲信号)。 仲裁单元仲裁的原则是轮询,其仲裁的时间是检测到pahb_aCk信号为高电平或者32个通 道均无有效请求的空闲状态,每次只有一个输入请求得到响应。32个通道的输入请求分别 为R0 (对应通道0),R1, R2, ... , R31,初始状态下规定32个输入请求被仲裁单元响应的优先 级顺序为> R310假设当前仲裁单元仲裁的结果是Rm(0彡m < 31)被 响应,则下一次轮询优先顺序为Rm+1 > Rm+2 > ...,例如当m = O时,则下一次轮询优先顺 序为R1 > R2 > . . . > R31 > R。,当m = 2时,则下一次轮询优先顺序为R3 > R4 > · · · > R31 > R。> R1 > R2,当 m = 11 时,则下一次轮询优先顺序为 R12 > R13 > · · · > R31 > R0 > R1 > R2... > R11^即将Rm以及在初始状态中优先级高于Rm的所有输入请求作为一个整体(内 部优先级不变),将Rtl Rm的优先级调整到Rm+1,Rm+2,...,R31之后。若当前m的取值为31 则下一次轮询的优先顺序为R0 > R1 > R2 > · · · > R31。检测仲裁单元当前响应的通道的通道配置模式,如果配置为被动模式,则预先配 置当前响应通道的数据传输长度无效,同时根据检测当前响应通道的dma_last_req信号 是否为高电平,如果为高电平,则表示当前响应的通道只剩最后一次INCR4类型或4个连续 SINGLE类型数据需要传输,此时仲裁单元需要使送出的CUrrent_laSt_req信号为高电平, 以此信号告知AHBjiiasterO接口单元接下来进行最后一次数据传输。如果仲裁单元当前 响应的通道的模式为主动模式或者软件模式,则使输出的CUrrent_last_req信号为低电 平。仲裁单元输入输出信号的时序如图2所示。图2中各种信号的意义如下Uhclk 输入到DMA控制器的时钟信号。2、dma_req[31:0] :DMA控制器32个通道各自的输入请求信号。Obit代表通道0。3,dma_last_req[31:0]仅在被动模式下有效,表示DMA控制器32个通道各自的 还有最后一批数据需要传输的请求信号,Obit代表通道0。4、current_num[6:0]仲裁单元指示AHBjnasterO接口单元当前需要处理的通道 号。0-31分别对应0-31号通道。为63时表示当前没有通道请求,为空闲状态。5、pahb_req 仲裁单元根据有效的dma_req或dma_last_req请求产生对AHB_ masterO接口单元的请求信号。6、current_last_req 仲裁单元以此信号告知AHBjnasterO接口单元接下来进行 最后一批数据传输。7、p_ram_select :AHB_master0接口单元读回数据后缓存到哪一片寄存器组。初 始化时,该信号为低电平,表示AHBjiiasterO接口单元总线读回的数据缓存到A片寄存器 组。当检测到pahb_ack信号为高电平时,进行翻转。下次AHBjnasterO接口读回的数据将 缓存到B片寄存器组。8、p_src_addr :AHB_masterO接口单元当前响应通道的源地址。9、pahb_size :AHB_masterO接口单元当前响应通道的数据宽度。10、pahb_ack :AHB_masterO接口单元完成当前需要响应的通道号(current_
13num[6:0])的数据传输时,给出的完成信号。AHBjnasterO接口单元AHB_masterO接口单元的AHB总线总是对数据源进行操 作,即总是进行AHB总线读操作。在检测到仲裁单元发出的pahb_req请求信号后,将即 将响应的通道号对应的所有配置寄存器单元信息转换为AHBjnasterO接口单元的AHB总 线信号,根据p_ram_select的指示将源地址p_srC_addr对应的数据读回到DMA数据缓存 寄存器组,并对这个通道读回的数据量进行计数(data_COimt)。在完成当前响应通道本次 DMA请求全部的数据传输时,产生dma请求清零信号dma_clr和中断信号dma_int。请求清 零信号与中断信号的产生原则为先检测AHBjiiasterO接口单元响应的通道工作模式。如 果为被动模式,则检测Current_laSt_req信号是否为1,如果为1(或者检测该通道的内部 data_count[15:0]计数器是否满为FFFF),此时DMA控制器完成当前响应通道本次DMA请 求全部的数据传输,则产生相应的dma_clr信号和dma_int信号(同时置该DMA通道的配 置pdc_en为低,并保留当前产生的中断通道号到配制寄存器)。否则DMA控制器未完成当 前响应通道本次DMA请求全部的数据传输,不产生dma_clr信号和dma_int信号。如果不 为被动模式,则检测data_COimt计数器是否等于该通道的传输数据长度寄存器值,如果等 于,此时DMA控制器完成当前响应通道本次DMA请求全部的数据传输,则产生相应的dma_ clr 信号(清零 dma_req 禾Π dma_last_req)禾Π dma_int,否则不产生。AHBjnasterO接口单元支持的AHB总线传输协议为AMBA 2. O的子集。为了简化设 计,AHBjiiasterO接口单元的AHB传输规定,每一次选中设备进行一次数据传输为INCR4类 型或者4个连续的SINGLE类型传输,并在这一次数据传输完成时产生pahb_aCk完成信号。 AHBjnasterO接口单元输入输出信号的时序如图3所示。图3中各种信号的意义如下(部分信号已在图2中出现过,其含义相同,不再说明 了)1、p_src_inc_enable :AHB_masterO接口单元当前响应通道的传输源地址是否增 加。2、phaddr[31:0] :AHB_masterO 接口 单元的 AHB 总线地址信号。3、phrdata[31:0] :AHB_masterO 接口单元的 AHB 总线读数据信号。4、mem_addr =DMA数据缓存寄存器组地址信号。5,mem_wda =DMA数据缓存寄存器组写数据信号。6、hready :AHB_masterO 接口 单元的 AHB 总线 ready 信号。7、q_ram_select 指示AHBjnasterl接口单元读DMA数据缓存寄存器组的哪一片。 其值与当前AHBjnasterO接口单元已经完成的一次INCR4类型或者4个连续的SINGLE类型 传输中,指示将从源地址读回的数据存储到DMA数据缓存寄存器组哪一片的p_ram_select 值保持一致。8、qahb_req :AHB_masterO接口单元根据DMA数据缓存寄存器组中有效的数据产 生对AHBjnasterl接口单元的请求信号。9、q_src_inc_enable :AHB_masterl接口单元当前响应通道的传输目的地址是否 增加。10、qahb_size[l:0] :AHB_masterl接口单元当前响应通道的数据宽度。ll、q_src_addr[31:0] :AHB_masterl接口单元当前响应通道的目的地址。
12、qahb_ack =AHBjnasterl接口单元完成当前需要响应的通道号的数据传输时, 给出的完成信号。AHBjnasterl接口单元AHB_masterl接口单元的AHB总线总是对数据目的进行 操作,即总是进行AHB写操作。每一次选中设备进行一次数据传输也为INCR4类型或者4 个连续的SINGLE类型传输,并在这一次数据传输完成时产生qahb_aCk完成信号。即在检 测到AHBjnasterO接口单元发出的qahb_req请求信号后,将AHBjnasterO接口单元提供的 与当前响应的通道号对应的数据目的的起始地址,以及目的地址是否增加信号转换为AHB_ master 1接口单元的AHB总线行为。根据AHBjnasterO接口单元提供q_ram_select的值, 从DMA数据缓存寄存器组里面读出相应的数据,并通过AHBjiiasterl接口单元的AHB总线 写到目的地址q_src_addr对应的地址上去。AHB_masterl接口单元输入输出信号的时序如 图4所示。图4中各种信号的意义如下(部分信号已在图3中出现过,其含义相同,不再说明 了)1、mem_addrb =DMA数据缓存寄存器组读地址信号。2、mem_rdb =DMA数据缓存寄存器组读数据信号。3、qhaddr[31:0] :AHB_masterl 接口 单元的 AHB 总线地址信号。4、qhwdata[31:0] :AHB_masterl 接口 单元的 AHB 总线写数据信号。如上所述,本发明所述的基于双AHB Master接口的片上DMA控制器的实现方法 中DMA配置寄存器单元在DMA控制器开始工作前,由ARM微处理器通过APB总线对 DMA控制器中的DMA配置寄存器单元进行初始化配置。DMA数据缓存寄存器组用来缓存数据,内部数据流为3级流水。可减少数据传输 延时。仲裁单元当前DMA控制器的32个DMA通道的有效请求为两个或两个以上时,仲
裁单元决定由哪个通道进行数据传输工作。AHBjnasterO接口单元AHB_masterO接口单元的AHB总线总是对数据源进行操 作,即总是进行AHB总线读操作。AHBjnasterl接口单元AHB_masterl接口单元的AHB总线总是对数据目的进行操 作,即总是进行AHB总线写操作。这种基于双AHB Master接口的片上DMA控制器的数据传输过程的实现方法可以 具体分为以下几个步骤步骤1,ARM微处理器通过APB总线对DMA控制器中的DMA配置寄存器单元进行初 始化配置(即对32个通道下配置)。所述配置的具体过程详见上述。步骤2,DMA控制器等待出现的DMA请求信号dma_req(主动模式,被动模式,软 件模式均有效)或dma_last_req(仅在被动模式下有效),在dma_req对应的通道的使能 有效的情况下,根据有效的请求信号DMA控制器的仲裁单元仲裁出当前需要响应的通道号 current—num[6 0],并同时产生 pahb_req 信号禾口 current_last—req,给 AHB—masterO 接 Π 单元,所述信号的具体产生过程详见上述。如果没有请求则继续等待执行步骤2。步骤3,当AHBjnasterO接口单元在pahb_req信号为高的情况下,得到仲裁单元仲裁出的通道号后,根据这个通道号对应通道的配置信息,所述对应通道的配置信息包括 对应通道的工作模式,有效数据宽度,数据源的起始地址,数据目的的起始地址,以及传输 数据长度,将其转变为一次INCR4(循序位址增加)类型或4个连续SINGLE (单次)类型 的AHBjnasterO的AHB总线信号,根据p_ram_select的指示将从源地址读回的数据存储在 DMA数据缓存寄存器组中,并对这个通道读回的数据量进行计数(data_COimt)。每次INCR4 类型或者4个连续SINGLE类型的传输完成时产生pahb_aCk完成信号,给仲裁单元。同时 将产生的qahb_req信号、该通道的配置信息以及数据存储的位置q_ram_SeleCt ( S卩DMA数 据缓存寄存器组的哪一片)传递给AHBjiiasterl接口单元。步骤4,AHBjnasterl接口单元在qahb_req信号为高的情况下,获得AHBjnasterO 接口单元传递的信息后,将其转变为一次INCR4类型或4个连续SINGLE类型的AHB_ masterl的AHB总线信号,根据q_ram_SeleCt的指示从DMA数据缓存寄存器组里面读出相 应的数据,并通过AHBjnasterl接口单元的AHB总线写到目的地址上去。每次INCR4类型 或者4个连续SINGLE类型的传输完成时产生qahb_ack完成信号,给AHBjnasterO接口单元。步骤5,若DMA控制器完成当前响应通道本次DMA请求全部的数据传输,AHB_ masterO接口单元同时将该通道对应的DMA中断信号dma_int和DMA请求清零信号dma_clr 信号拉高,并用dma_Clr信号清零对应通道的外设或内存RAM发出的dma_req,使其不参加 下一次的仲裁;DMA配置寄存器单元在检测到中断信号dma_int时,将对应的通道的通道 完成状态寄存器置高,对应通道的使能信号关闭,此时表示该通道的请求响应完成,跳到步 骤7 ;若DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则跳到步骤6 ;步骤6,当DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则不作 任何信号调整,直接跳转到步骤2,此时该通道对应的DMA请求信号dma_req或dma_laSt_ req依然有效,与其它未被DMA控制器响应的有效通道请求一起参与仲裁单元的下一次仲 裁。步骤7,ARM微处理器通过APB总线对DMA控制器中,已完成本次DMA请求全部数 据传输的当前响应通道的配置寄存器单元(源地址寄存器,目的地址寄存器,传输数据长 度寄存器)进行重新配置,并重新打开当前响应通道的使能信号后跳到步骤2。进一步,这种基于双AHB master接口的片上DMA控制器内部有32个通道,其中每 次DMA控制器数据传输只响应其中一个通道,每个通道的实现方法相同,即都按上述步骤 1 7处理数据。进一步,当DMA控制器未完成当前响应通道η全部的数据传输时,η = 0,1,2…… 31,其后续数据传输过程如下1)在DMA控制器通道η开始数据传输之前,ARM微控制器通过APB总线对通道η 的通道配置寄存器,源地址寄存器,目的地址寄存器,传输数据长度寄存器进行相应配置, 并打开通道η的使能信号。2)仲裁单元根据仲裁原则确定响应通道η。3)AHB_maSter0接口单元将根据通道η的源地址寄存器发出相应的一次INCR4类 型或者4个连续SINGLE类型的传输地址及控制信号(当这个通道号对应的通道配置寄存 器中P_src_inc_enable的值为1,则以前该通道号对应的源地址P_src_addr为起始地址,
16转变为一次INCR4类型的AHB总线传输;若P_src_inc_enable的值为0,则同样以P_src_ addr为起始地址转变为4个连续SINGLE类型的AHB总线传输)。将从源地址读回数据,存 到DMA数据缓存寄存器组。并对读回的数据量按字节进行计数(data_COimt)。并在DMA控 制器完成通道η本次DMA请求全部的数据传输时产生通道η请求的清零信号dma_Clr和 中断信号dma_int(所述信号的具体产生过程详见上述)。同时将该通道的配置信息(工作 模式,有效数据宽度,数据源的起始地址,数据目的的起始地址,以及传输数据长度)以及 数据存储的位置q_ram_SeleCt (即DMA数据缓存寄存器组的哪一片)传递给AHBjnasterl 接口单元。4)AHB_maSterl接口单元将根据通道η的目的地址寄存器(P_deS_addr)发出相 应的一次符合AHB总线要求的INCR4类型或者4个连续SINGLE类型的传输地址及控制信 号(当这个通道号对应的通道配置寄存器中P_dst_inc_enable的值为1,则以前该通道号 对应的源地址P_deS_addr为起始地址,转变为一次INCR4类型的AHB总线传输;若P_dst_ inc_enable的值为0,则同样以P_des_addr为起始地址转变为4个连续SINGLE类型的AHB 总线传输)。同时根据q_ram_SeleCt信号的指示将从DMA数据缓存寄存器组读出的数据, 写到相应的目的地址上。5)该通道为主动模式或软件模式的情况下若通道η的计数器(data_COimt)未 达到传输数据长度寄存器配置的值,即DMA控制器未完成当前响应通道本次DMA请求全部 的数据传输,则重复执行步骤2),3),4),否则执行步骤6)。该通道为被动模式的情况下,若仲裁单元未检测到通道η的dma_laSt_req有效, 或DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则重复执行步骤2),3), 4),否则执行步骤6)6)通道η的数据传输结束,通 η的使能关闭。
权利要求
一种基于双AHB Master接口的片上DMA控制器实现方法,其特征在于包括以下步骤步骤1,在DMA控制器开始工作前,由ARM微处理器通过APB总线对DMA控制器中的DMA配置寄存器单元进行初始化配置,所述初始化配置包括对32个DMA通道的通道配置寄存器,源地址寄存器,目的地址寄存器,传输数据长度寄存器进行初始化配置,即确定每个DMA通道的使能,工作模式,有效数据宽度,数据源的起始地址,数据目的的起始地址,以及传输数据长度;所述工作模式包括主动模式,被动模式,软件模式;所述有效数据宽度包括byte,half word,word;步骤2,开始数据传输过程,DMA控制器等待出现的DMA请求信号,所述DMA请求信号为在主动模式,被动模式,软件模式下均有效的dma_req,或仅在被动模式下有效的dma_last_req,在dma_req对应的通道的使能有效的情况下,根据有效的请求信号DMA控制器的仲裁单元仲裁出当前需要响应的通道号,并同时产生pahb_req信号和current_last_req,给AHB_master0接口单元,如果没有请求则继续在此步骤中等待执行;步骤3,当AHB_master0接口单元在pahb_req信号为高的情况下,得到仲裁单元仲裁出的通道号后,根据这个通道号对应通道的配置信息,所述对应通道的配置信息包括对应通道的工作模式,有效数据宽度,数据源的起始地址,数据目的的起始地址,以及传输数据长度,将其转变为一次INCR4类型或4个连续SINGLE类型的AHB_master0的AHB总线信号,根据p_ram_select的指示将从源地址读回的数据存储在DMA数据缓存寄存器组中,并对这个通道读回的数据量进行计数,每次INCR4类型或者4个连续SINGLE类型的传输完成时产生pahb_ack完成信号,给仲裁单元,同时将产生的qahb_req信号、该通道的配置信息以及数据存储的位置q_ram_select传递给AHB_master1接口单元;步骤4,AHB_master1接口单元在qahb_req信号为高的情况下,获得AHB_master0接口单元传递的信息后,将其转变为一次INCR4类型或4个连续SINGLE类型的AHB_master1的AHB总线信号,根据q_ram_select的指示从DMA数据缓存寄存器组里面读出相应的数据,并通过AHB_master1接口单元的AHB总线写到目的地址上去;每次INCR4类型或者4个连续SINGLE类型的传输完成时产生qahb_ack完成信号,给AHB_master0接口单元,步骤5,当DMA控制器完成当前响应通道本次DMA请求全部的数据传输,AHB_master0接口单元同时将该通道对应的DMA中断信号dma_int和DMA请求清零信号dma_clr信号拉高,并用dma_clr信号清零对应通道的外设或内存RAM发出的dma_req,使其不参加下一次的仲裁;DMA配置寄存器单元在检测到中断信号dma_int时,将对应的通道的通道完成状态寄存器置高,对应通道的使能信号关闭,此时表示该通道的请求响应完成,跳到步骤7;若DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则跳到步骤6;步骤6,当DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则不作任何信号调整,直接跳转到步骤2;此时该通道对应的DMA请求信号dma_req或dma_last_req依然有效,与其它未被DMA控制器响应的有效通道请求一起参与仲裁单元的下一次仲裁;步骤7,ARM微处理器通过APB总线对DMA控制器中,已完成本次DMA请求全部数据传输的当前响应通道的配置寄存器单元(源地址寄存器,目的地址寄存器,传输数据长度寄存器)进行重新配置,并重新打开当前响应通道的使能信号后跳到步骤2。
2.如权利要求1所述的基于双AHBMaster接口的片上DMA控制器实现方法,其特征在于每次DMA控制器数据传输只响应32个通道中的一个通道,每个通道的实现方法相同。
3.如权利要求1所述的基于双AHBMaster接口的片上DMA控制器实现方法,其特征在 于,当DMA控制器未完成当前响应通道η全部的数据传输时,η = 0,1,2……31,其后续数据 传输过程如下1)在DMA控制器通道η开始数据传输之前,ARM微控制器通过APB总线对通道η的通 道配置寄存器,源地址寄存器,目的地址寄存器,传输数据长度寄存器进行相应配置,并打 开通道η的使能信号;2)仲裁单元根据仲裁原则确定响应通道η;3)AHB_maSter0接口单元将根据通道η的源地址寄存器发出相应的一次INCR4类型或 者4个连续SINGLE类型的传输地址及控制信号;将从源地址读回的数据,存到DMA数据缓 存寄存器组;并对读回的数据量按字节进行计数;并在DMA控制器完成通道η本次DMA请求 全部的数据传输时产生通道η请求的清零信号dma_Clr和中断信号dma_int,同时将该通道 的配置信息以及数据存储的位置q_ram_SeleCt传递给AHBjnasterl接口单元,4)AHB_masterl接口单元将根据通道η的目的地址寄存器发出相应的一次符合AHB总 线要求的INCR4类型或者4个连续SINGLE类型的传输地址及控制信号,同时根据q_ram_ select信号的指示将从DMA数据缓存寄存器组读出的数据,写到对应的目的地址上;5)该通道为主动模式或软件模式的情况下若通道η的计数器未达到传输数据长度寄 存器配置的值,则重复执行步骤2),3),4),否则执行步骤6);该通道为被动模式的情况下,若仲裁单元未检测到通道η的dma_last_req有效,或DMA 控制器未完成当前响应通道本次DMA请求全部的数据传输,则重复执行步骤2),3),4),否 则执行步骤6);6)通道η的数据传输结束,通道η的使能关闭。
4.如权利要求1或2或3所述的基于双AHBMaster接口的片上DMA控制器实现方法, 其特征在于在一次数据传输过程中,AHB_masterO总线用于对传输源进行读数据,AHB_ masterl总线用于对传输目的进行写数据。
5.如权利要求1或2或3所述的基于双AHBMaster接口的片上DMA控制器实现方法, 其特征在于DMA数据缓存寄存器组用来缓存数据,内部数据流从AHBjiiasterO接口单元到 DMA数据缓存寄存器组最后到AHBjiiasterl接口单元,整个内部数据传输过程为3级流水。
6.如权利要求1或2或3所述的基于双AHBMaster接口的片上DMA控制器实现方法, 其特征在于在DMA控制器完成一次DMA数据传输时产生一个中断信号用来指示一次传输 完毕,或在DMA计数器计数满后产生中断信号用来指示一次传输完毕。
7.如权利要求1或2或3所述的基于双AHBMaster接口的片上DMA控制器实现方法, 其特征在于,所述DMA控制器包括DMA APB接口单元,作为APB总线接口供APB总线从此设备接口对DMA控制器的DMA配 置寄存器进行配置,DMA配置寄存器单元,由通道配置寄存器,源地址寄存器,目的地址寄存器,传输数据长 度寄存器以及32个通道完成状态寄存器,32个通道完成状态屏蔽寄存器,32个通道中断屏 蔽寄存器组成;所述32个通道为32个DMA通道,32个DMA通道都有各自的通道配置寄存 器,源地址寄存器,目的地址寄存器和传输数据长度寄存器,其中每个通道配置寄存器的有效位宽为8位,DMA数据缓存寄存器组寄存器组空间为32byte,宽度为32bits,深度为8,且能进行字 节写,有两个接口,一个为读口,另一个为写口,在内部分为两片A和B,每片空间为16byte, 通过AHBjnasterO或AHBjnasterl接口单元的ram_select信号来选择当前对哪片寄存器 组操作,仲裁单元从当前的32个DMA通道的有效请求中,根据当前响应的通道号,仲裁出下一 个响应的一个通道号,连同这个通道对应的所有配置寄存器单元信息传递给AHBjiiasterO 接口单元,并在接收到当前通道的AHBjnasterO接口单元响应完成信号pahb_aCk后,产生 对AHBjnasterO接口单元下一次的请求pahb_req ;仲裁单元仲裁的原则是轮询,其仲裁的 时间是检测到pahb_aCk信号为高电平或者32个通道均无有效请求的空闲状态,每次只有 一个输入请求得到响应;检测仲裁单元当前响应的通道的通道配置模式,如果配置为被动 模式,则预先配置当前响应通道的数据传输长度无效,同时根据检测当前响应通道的dma_ last_req信号是否为高电平,如果为高电平,则表示当前响应的通道只剩最后一次INCR4 类型或4个连续SINGLE类型数据需要传输,此时仲裁单元需要使送出的current_laSt_req 信号为高电平,以此信号告知AHBjiiasterO接口单元接下来进行最后一次数据传输,如果 仲裁单元当前响应的通道的模式为主动模式或者软件模式,则使输出的Current_laSt_req 信号为低电平,AHBjnasterO接口单元AHB_masterO接口单元的AHB总线总是对数据源进行操作,即 总是进行AHB总线读操作,在检测到仲裁单元发出的pahb_req请求信号后,将即将响应的 通道号对应的所有配置寄存器单元信息转换为AHBjiiasterO接口单元的一次INCR4类型或 者4个连续的SINGLE类型传输,根据p_ram_select的指示将源地址p_srC_addr对应的数 据读回到DMA数据缓存寄存器组,并对这个通道读回的数据量进行计数,并在这一次传输 完成时产生pahb_aCk完成信号,在完成当前响应通道本次DMA请求全部的数据传输时产生 dma请求清零信号dma_clr和中断信号dma_int,否则不产生,AHBjiiasterl接口单元AHB_masterl接口单元的AHB总线总是对数据目的进行操作, 即总是进行AHB写操作,每一次选中设备进行一次数据传输也为INCR4类型或者4个连 续的SINGLE类型传输,并在这一次数据传输完成时产生qahb_aCk完成信号;即在检测到 AHBjnasterO接口单元发出的qahb_req请求信号后,将AHBjnasterO接口单元提供的与 当前响应的通道号对应的数据目的的起始地址,以及目的地址是否增加信号转换为AHB_ master 1接口单元的AHB总线行为,根据AHBjnasterO接口单元提供q_ram_select的值, 从DMA数据缓存寄存器组里面读出相应的数据,并通过AHBjiiasterl接口单元的AHB总线 写到目的地址q_src_addr对应的地址上去。
全文摘要
一种基于双AHB Master接口的片上DMA控制器实现方法,包括以下步骤1,对DMA配置寄存器单元进行初始化配置;2,仲裁单元根据DMA请求信号仲裁出当前需要响应的通道号给AHB_master0接口单元,或等待执行;3,AHB_master0接口单元完成数据传递,并发送信息给AHB_master1接口单元;4,AHB_master1接口单元完成数据传递,并发送信息给AHB_master0接口单元;5,若完成当前响应的本次DMA请求全部的数据传输跳到步骤7;否则跳到步骤6;6,不作任何信号调整,直接跳转到步骤2;7,重新配置配置寄存器单元,跳到步骤2。本发明采用双AHB_Master接口减少了数据传输的延时,只需要较小的内部FIFO;能同时适用于多层AHB总线系统,易于重用到以其它高性能ARM微处理器为基础的SoC设计中。
文档编号G06F13/28GK101901200SQ201010250368
公开日2010年12月1日 申请日期2010年8月11日 优先权日2010年8月11日
发明者刘婷, 张曦璐, 张继勇, 温玉屏, 谢振新 申请人:烽火通信科技股份有限公司