首页> 中国专利> 一种基于双AHB Master接口的片上DMA控制器实现方法

一种基于双AHB Master接口的片上DMA控制器实现方法

摘要

一种基于双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设计中。

著录项

  • 公开/公告号CN101901200A

    专利类型发明专利

  • 公开/公告日2010-12-01

    原文格式PDF

  • 申请/专利权人 烽火通信科技股份有限公司;

    申请/专利号CN201010250368.5

  • 申请日2010-08-11

  • 分类号G06F13/28(20060101);

  • 代理机构北京捷诚信通专利事务所(普通合伙);

  • 代理人魏殿绅;庞炳良

  • 地址 430074 湖北省武汉市东湖开发区关东科技园东信路5号

  • 入库时间 2023-12-18 01:13:49

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2023-08-18

    未缴年费专利权终止 IPC(主分类):G06F13/28 专利号:ZL2010102503685 申请日:20100811 授权公告日:20120111

    专利权的终止

  • 2017-08-29

    专利权的转移 IPC(主分类):G06F13/28 登记生效日:20170809 变更前: 变更后:

    专利申请权、专利权的转移

  • 2017-06-27

    专利权的转移 IPC(主分类):G06F13/28 登记生效日:20170607 变更前: 变更后: 申请日:20100811

    专利申请权、专利权的转移

  • 2012-01-11

    授权

    授权

  • 2011-01-12

    实质审查的生效 IPC(主分类):G06F13/28 申请日:20100811

    实质审查的生效

  • 2010-12-01

    公开

    公开

查看全部

说明书

技术领域

本发明涉及嵌入式系统芯片中先进高性能总线的数据传输,具体的说是一种基于双AHB(Advanced High-performance Bus,先进高性能总线)Master(主设备)接口的片上DMA(Direct Memory Access,直接内存存取)控制器实现方法。 

背景技术

集成电路制作工艺进入深亚微米之后,IC(Integrated Circuit,集成电路)设计能力滞后于工艺水平日甚,势必要提出新的设计思想和设计方法,SoC(System on Chip,片上系统)是基于嵌入式系统的一种新的设计思想和设计方法,是将微处理器、模拟IP核(Intellectual Property core,知识产权核)、数字IP核和存储器(或片外存储控制接口)集成在单一芯片上,不仅提高了产品的集成度,而且大大降低了制造成本,使得最终产品的价格为普通消费者能够承担。其中AMBA(Advanced Micocontroller Bus Architecture,先进微控制器总线体系结构)总线是ARM公司(Advanced RISCMachines,先进RISC机器公司)提出的总线结构,由于其开放的总线规范,这种总线得到了广泛的应用。AMBA总线的目的是推出芯片内部总线的规范。AMBA总线有三个版本:AMBA1.0,AMBA2.0和AMBA3.0。目前AMBA2.0规范作为SoC的一种较为成熟的总线标准,其定义了3种不同的系统总线:1)AHB(先进高性能总线);2)ASB(Advanced System Bus,先进系统总线);3)APB(Advanced Peripheral Bus,先进外围设备总线)。 

AHB总线是新一代AMBA总线,作为高性能系统骨干总线,用于连接高性能、高时钟速率的系统模块,如完成处理器、片上存储器、 存储器控制器、中断控制器等模块间的通信。 

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控制器大部分仅适用于单层总线,需要的缓存FIFO(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,给AHB_master0接口单元,如果没有请求则继续在此步骤中等待执行; 

步骤3,当AHB_master0接口单元在pahb_req信号为高的情况下,得到仲裁单元仲裁出的通道号后,根据这个通道号对应通道的配置信息,所述对应通道的配置信息包括:对应通道的工作模式,有效数据宽度,数据源的起始地址,数据目的的起始地址,以及传输数据 长度,将其转变为一次INCR4类型或4个连续SINGLE类型的AHB_master0的ARB总线信号,根据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。 

在上述技术方案的基础上,每次DMA控制器数据传输只响应32个通道中的一个通道,每个通道的实现方法相同。 

在上述技术方案的基础上,当DMA控制器未完成当前响应通道n全部的数据传输时,n=0,1,2……31,其后续数据传输过程如下: 

1)在DMA控制器通道n开始数据传输之前,ARM微控制器通过APB总线对通道n的通道配置寄存器,源地址寄存器,目的地址寄存器,传输数据长度寄存器进行相应配置,并打开通道n的使能信号; 

2)仲裁单元根据仲裁原则确定响应通道n; 

3)AHB_master0接口单元将根据通道n的源地址寄存器发出相应的一次INCR4类型或者4个连续SINGLE类型的传输地址及控制信号;将从源地址读回的数据,存到DMA数据缓存寄存器组;并对读回的数据量按字节进行计数;并在DMA控制器完成通道n本次DMA请求全部的数据传输时产生通道n请求的清零信号dma_clr和中断信号dma_int,同时将该通道的配置信息以及数据存储的位置q_ram_select传递给AHB_master1接口单元, 

4)AHB_master1接口单元将根据通道n的目的地址寄存器发出相应的一次符合AHB总线要求的INCR4类型或者4个连续SINGLE类型的传输地址及控制信号,同时根据q_ram_select信号的指示将从DMA数据缓存寄存器组读出的数据,写到对应的目的地址上; 

5)该通道为主动模式或软件模式的情况下:若通道n的计数器未达到传输数据长度寄存器配置的值,则重复执行步骤2),3),4),否则执行步骤6); 

该通道为被动模式的情况下,若仲裁单元未检测到通道n的dma_last_req有效,或DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则重复执行步骤2),3),4),否则执行步骤6); 

6)通道n的数据传输结束,通道n的使能关闭。 

在上述技术方案的基础上,在一次数据传输过程中,AHB_master0总线用于对传输源进行读数据,AHB_master1总线用于对传输目的进行写数据。 

在上述技术方案的基础上,DMA数据缓存寄存器组用来缓存数据,内部数据流从AHB_master0接口单元到DMA数据缓存寄存器组最后到AHB_master1接口单元,整个内部数据传输过程为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,通过AHB_master0或AHB_master1接口单元的ram_select信号来选择当前对哪片寄存器组操作, 

仲裁单元:从当前的32个DMA通道的有效请求中,根据当前响应的通道号,仲裁出下一个响应的一个通道号,连同这个通道对应的 所有配置寄存器单元信息传递给AHB_master0接口单元,并在接收到当前通道的AHB_master0接口单元响应完成信号pahb_ack后,产生对AHB_master0接口单元下一次的请求pahb_req;仲裁单元仲裁的原则是轮询,其仲裁的时间是检测到pahb_ack信号为高电平或者32个通道均无有效请求的空闲状态,每次只有一个输入请求得到响应;检测仲裁单元当前响应的通道的通道配置模式,如果配置为被动模式,则预先配置当前响应通道的数据传输长度无效,同时根据检测当前响应通道的dma_last_req信号是否为高电平,如果为高电平,则表示当前响应的通道只剩最后一次INCR4类型或4个连续SINGLE类型数据需要传输,此时仲裁单元需要使送出的current_last_req信号为高电平,以此信号告知AHB_master0接口单元接下来进行最后一次数据传输,如果仲裁单元当前响应的通道的模式为主动模式或者软件模式,则使输出的current_last_req信号为低电平, 

AHB_master0接口单元:AHB_master0接口单元的AHB总线总是对数据源进行操作,即总是进行AHB总线读操作,在检测到仲裁单元发出的pahb_req请求信号后,将即将响应的通道号对应的所有配置寄存器单元信息转换为AHB_master0接口单元的一次INCR4类型或者4个连续的SINGLE类型传输,根据p_ram_select的指示将源地址p_src_addr对应的数据读回到DMA数据缓存寄存器组,并对这个通道读回的数据量进行计数,并在这一次传输完成时产生pahb_ack完成信号,在完成当前响应通道本次DMA请求全部的数据传输时产生dma请求清零信号dma_clr和中断信号dma_int,否则不产生, 

AHB_master1接口单元:AHB_master1接口单元的AHB总线总是对数据目的进行操作,即总是进行AHB写操作,每一次选中设备进行一次数据传输也为INCR4类型或者4个连续的SINGLE类型传输,并在这一次数据传输完成时产生qahb_ack完成信号;即在检测到AHB_master0接口单元发出的qahb_req请求信号后,将AHB_master0接口单元提供的与当前响应的通道号对应的数据目的的起始地址,以及目的地址是否增加信号转换为AHB_master1接口单元的AHB总线行 为,根据AHB_master0接口单元提供q_ram_select的值,从DMA数据缓存寄存器组里面读出相应的数据,并通过AHB_master1接口单元的AHB总线写到目的地址q_src_addr对应的地址上去。 

本发明所述的基于双AHB Master接口的片上DMA控制器实现方法,以AHB总线为基础,设计了一种基于双AHB Master接口的片上DMA控制器实现方法。双AHB Master接口不仅减少了数据传输的延时,而且只需要较小的内部FIFO;并能同时适用于多层AHB总线系统。对于每个DMA通道添加了流控管理,使每一个通道均可以灵活的工作在三种模式:软件模式、主动模式和被动模式。并且它结构简单,实现方便,因此易于重用到以其它高性能ARM微处理器为基础的SoC设计中。 

附图说明

本发明有如下附图: 

图1基于双AHB Master接口的片上DMA控制器的结构示意图, 

图2仲裁单元输入输出信号的时序图, 

图3AHB_master0接口单元输入输出信号的时序图, 

图4AHB_master1接口单元输入输出信号的时序图。 

具体实施方式

以下结合附图对本发明作进一步详细说明。 

本发明将DMA控制器设计为一个基本独立于ARM微处理器的AHB总线主设备,能够根据配置寄存器的值,独立的响应AHB从设备发出的DMA请求,更大程度的提高ARM微处理器效率。本发明所述DMA控制器拥有两个AHB Master接口,能够适应总线利用率更高的多层总线系统。其优点在于:双AHB master接口不仅减少了数据传输的延 时,而且仅需要较小的内部FIFO;并能同时适用于多层AHB总线系统,更有效的利用AHB总线带宽。同时对于每个DMA通道添加了流控管理,使每一个通道均可以灵活的工作在三种模式:软件模式、主动模式和被动模式。 

本发明的技术方案包括以下几点: 

1)DMA控制器有2个AHB master接口,一个是AHB_master0接口,一个是AHB_master1接口。AHB_master0和AHB_master1接口都可以单独作为一层AHB总线的主设备。在一次数据传输过程中,AHB_master0总线用于对传输源进行读数据,AHB_master1总线用于对传输目的进行写数据。 

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数据缓存寄存器组)用来缓存数据,内部数据流从AHB_master0接口单元到DMA数据缓存寄存器组最后到AHB_master1接口单元,整个内部数据传输过程为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位。以通道0(PDCO)的通道配置寄存器为例(其他通道的通道配置寄存器结构与此相同),其结构如表1所示: 

表1PDCO通道配置寄存器: 

  子地址   属性   标志   宽度   缺省值   0x00   RW   Pdc0_cfg   32   0x000000x0 

通道配置寄存器各字段和比特定义如下: 

DMA数据缓存寄存器组:寄存器组空间为32byte,宽度为32bits,深度为8,可以进行字节写。有两个接口,一个为读口,另一个为写口。这个寄存器组在内部分为两片A和B,每片空间为16byte,通过 AHB_master0或AHB_master1接口单元的ram_select信号来选择(即对应于寄存器组地址的最高位),当前对哪片寄存器组操作。如:当AHB_master0接口单元对A片进行写数据操作时,AHB_master1接口单元可以同时对B片寄存器组进行读操作,这样也提高了DMA控制器数据处理的效率。 

仲裁单元:从当前的32个DMA通道的有效请求中,根据当前响应的通道号,仲裁出下一个响应的一个通道号,连同这个通道对应的所有配置寄存器单元信息传递给AHB_master0接口单元。并在接收到当前通道的AHB_master0接口单元响应完成信号pahb_ack(脉冲信号)后,产生对AHB_master0接口单元下一次的请求pahb_req(脉冲信号)。仲裁单元仲裁的原则是轮询,其仲裁的时间是检测到pahb_ack信号为高电平或者32个通道均无有效请求的空闲状态,每次只有一个输入请求得到响应。32个通道的输入请求分别为R0(对应通道0),R1,R2,...,R31,初始状态下规定32个输入请求被仲裁单元响应的优先级顺序为:R0>R1>R2>...>R31。假设当前仲裁单元仲裁的结果是Rm(0≤m<31)被响应,则下一次轮询优先顺序为:Rm+1>Rm+2>...,例如:当m=0时,则下一次轮询优先顺序为R1>R2>...>R31>R0,当m=2时,则下一次轮询优先顺序为R3>R4>...>R31>R0>R1>R2,当m=11时,则下一次轮询优先顺序为R12>R13>...>R31>R0>R1>R2...>R11。即将Rm以及在初始状态中优先级高于Rm的所有输入请求作为一个整体(内部优先级不变),将R0~Rm的优先级调整到Rm+1,Rm+2,...,R31之后。若当前m的取值为31则下一次轮询的优先顺序为R0>R1>R2>...>R31。 

检测仲裁单元当前响应的通道的通道配置模式,如果配置为被动模式,则预先配置当前响应通道的数据传输长度无效,同时根据检测当前响应通道的dma_last_req信号是否为高电平,如果为高电平,则表示当前响应的通道只剩最后一次INCR4类型或4个连续SINGLE类型数据需要传输,此时仲裁单元需要使送出的current_last_req信号为高电平,以此信号告知AHB_master0接口单元接下来进行最后 一次数据传输。如果仲裁单元当前响应的通道的模式为主动模式或者软件模式,则使输出的current_last_req信号为低电平。仲裁单元输入输出信号的时序如图2所示。 

图2中各种信号的意义如下: 

1、hclk:输入到DMA控制器的时钟信号。 

2、dma_req[31:0]:DMA控制器32个通道各自的输入请求信号。0bit代表通道0。 

3、dma_last_req[31:0]:仅在被动模式下有效,表示DMA控制器32个通道各自的还有最后一批数据需要传输的请求信号,0bit代表通道0。 

4、current_num[6:0]:仲裁单元指示AHB_master0接口单元当前需要处理的通道号。0-31分别对应0-31号通道。为63时表示当前没有通道请求,为空闲状态。 

5、pahb_req:仲裁单元根据有效的dma_req或dma_last_req请求产生对AHB_master0接口单元的请求信号。 

6、current_last_req:仲裁单元以此信号告知AHB_master0接口单元接下来进行最后一批数据传输。 

7、p_ram_select:AHB_master0接口单元读回数据后缓存到哪一片寄存器组。初始化时,该信号为低电平,表示AHB_master0接口单元总线读回的数据缓存到A片寄存器组。当检测到pahb_ack信号为高电平时,进行翻转。下次AHB_master0接口读回的数据将缓存到B片寄存器组。 

8、p_src_addr:AHB_master0接口单元当前响应通道的源地址。 

9、pahb_size:AHB_master0接口单元当前响应通道的数据宽度。 

10、pahb_ack:AHB_master0接口单元完成当前需要响应的通道号(current_num[6:0])的数据传输时,给出的完成信号。 

AHB_master0接口单元:AHB_master0接口单元的AHB总线总是对数据源进行操作,即总是进行AHB总线读操作。在检测到仲裁单元 发出的pahb_req请求信号后,将即将响应的通道号对应的所有配置寄存器单元信息转换为AHB_master0接口单元的AHB总线信号,根据p_ram_select的指示将源地址p_src_addr对应的数据读回到DMA数据缓存寄存器组,并对这个通道读回的数据量进行计数(data_count)。在完成当前响应通道本次DMA请求全部的数据传输时,产生dma请求清零信号dma_clr和中断信号dma_int。请求清零信号与中断信号的产生原则为:先检测AHB_master0接口单元响应的通道工作模式。如果为被动模式,则检测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_count计数器是否等于该通道的传输数据长度寄存器值,如果等于,此时DMA控制器完成当前响应通道本次DMA请求全部的数据传输,则产生相应的dma_clr信号(清零dma_req和dma_last_req)和dma_int,否则不产生。 

AHB_master0接口单元支持的AHB总线传输协议为AMBA 2.0的子集。为了简化设计,AHB_master0接口单元的AHB传输规定,每一次选中设备进行一次数据传输为INCR4类型或者4个连续的SINGLE类型传输,并在这一次数据传输完成时产生pahb_ack完成信号。AHB_master0接口单元输入输出信号的时序如图3所示。 

图3中各种信号的意义如下(部分信号已在图2中出现过,其含义相同,不再说明了): 

1、p_src_inc_enable:AHB_master0接口单元当前响应通道的传输源地址是否增加。 

2、phaddr[31:0]:AHB_master0接口单元的AHB总线地址信号。 

3、phrdata[31:0]:AHB_master0接口单元的AHB总线读数据信 号。 

4、mem_addr:DMA数据缓存寄存器组地址信号。 

5、mem_wda:DMA数据缓存寄存器组写数据信号。 

6、hready:AHB_master0接口单元的AHB总线ready信号。 

7、q_ram_select:指示AHB_master1接口单元读DMA数据缓存寄存器组的哪一片。其值与当前AHB_master0接口单元已经完成的一次INCR4类型或者4个连续的SINGLE类型传输中,指示将从源地址读回的数据存储到DMA数据缓存寄存器组哪一片的p_ram_select值保持一致。 

8、qahb_req:AHB_master0接口单元根据DMA数据缓存寄存器组中有效的数据产生对AHB_master1接口单元的请求信号。 

9、q_src_inc_enable:AHB_master1接口单元当前响应通道的传输目的地址是否增加。 

10、qahb_size[1:0]:AHB_master1接口单元当前响应通道的数据宽度。 

11、q_src_addr[31:0]:AHB_master1接口单元当前响应通道的目的地址。 

12、qahb_ack:AHB_master1接口单元完成当前需要响应的通道号的数据传输时,给出的完成信号。 

AHB_master1接口单元:AHB_master1接口单元的AHB总线总是对数据目的进行操作,即总是进行AHB写操作。每一次选中设备进行一次数据传输也为INCR4类型或者4个连续的SINGLE类型传输,并在这一次数据传输完成时产生qahb_ack完成信号。即在检测到AHB_master0接口单元发出的qahb_req请求信号后,将AHB_master0接口单元提供的与当前响应的通道号对应的数据目的的起始地址,以及目的地址是否增加信号转换为AHB_master1接口单元的AHB总线行为。根据AHB_master0接口单元提供q_ram_select的值,从DMA数据缓存寄存器组里面读出相应的数据,并通过AHB_master1接口单元 的AHB总线写到目的地址q_src_addr对应的地址上去。AHB_master1接口单元输入输出信号的时序如图4所示。 

图4中各种信号的意义如下(部分信号已在图3中出现过,其含义相同,不再说明了): 

1、mem_addrb:DMA数据缓存寄存器组读地址信号。 

2、mem_rdb:DMA数据缓存寄存器组读数据信号。 

3、qhaddr[31:0]:AHB_master1接口单元的AHB总线地址信号。 

4、qhwdata[31:0]:AHB_master1接口单元的AHB总线写数据信号。 

如上所述,本发明所述的基于双AHB Master接口的片上DMA控制器的实现方法中: 

DMA配置寄存器单元:在DMA控制器开始工作前,由ARM微处理器通过APB总线对DMA控制器中的DMA配置寄存器单元进行初始化配置。 

DMA数据缓存寄存器组:用来缓存数据,内部数据流为3级流水。可减少数据传输延时。 

仲裁单元:当前DMA控制器的32个DMA通道的有效请求为两个或两个以上时,仲裁单元决定由哪个通道进行数据传输工作。 

AHB_master0接口单元:AHB_master0接口单元的AHB总线总是对数据源进行操作,即总是进行AHB总线读操作。 

AHB_master1接口单元:AHB_master1接口单元的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_master0接口单元,所述信号的具体产生过程详见上述。如果没有请求则继续等待执行步骤2。 

步骤3,当AHB_master0接口单元在pahb_req信号为高的情况下,得到仲裁单元仲裁出的通道号后,根据这个通道号对应通道的配置信息,所述对应通道的配置信息包括:对应通道的工作模式,有效数据宽度,数据源的起始地址,数据目的的起始地址,以及传输数据长度,将其转变为一次INCR4(循序位址增加)类型或4个连续SINGLE(单次)类型的AHB_master0的AHB总线信号,根据p_ram_select的指示将从源地址读回的数据存储在DMA数据缓存寄存器组中,并对这个通道读回的数据量进行计数(data_count)。每次INCR4类型或者4个连续SINGLE类型的传输完成时产生pahb_ack完成信号,给仲裁单元。同时将产生的qahb_req信号、该通道的配置信息以及数据存储的位置q_ram_select(即DMA数据缓存寄存器组的哪一片)传递给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。 

进一步,这种基于双AHB master接口的片上DMA控制器内部有32个通道,其中每次DMA控制器数据传输只响应其中一个通道,每个通道的实现方法相同,即都按上述步骤1~7处理数据。 

进一步,当DMA控制器未完成当前响应通道n全部的数据传输时,n=0,1,2……31,其后续数据传输过程如下: 

1)在DMA控制器通道n开始数据传输之前,ARM微控制器通过APB总线对通道n的通道配置寄存器,源地址寄存器,目的地址寄存器,传输数据长度寄存器进行相应配置,并打开通道n的使能信号。 

2)仲裁单元根据仲裁原则确定响应通道n。 

3)AHB_master0接口单元将根据通道n的源地址寄存器发出相应的一次INCR4类型或者4个连续SINGLE类型的传输地址及控制信号(当这个通道号对应的通道配置寄存器中P_src_inc_enable的值为1,则以前该通道号对应的源地址P_src_addr为起始地址,转变为一次INCR4类型的AHB总线传输;若P_src_inc_enable的值为0,则同样以P_src_addr为起始地址转变为4个连续SINGLE类型的AHB总线传输)。将从源地址读回数据,存到DMA数据缓存寄存器组。并对读回的数据量按字节进行计数(data_count)。并在DMA控制器完 成通道n本次DMA请求全部的数据传输时产生通道n请求的清零信号dma_clr和中断信号dma_int(所述信号的具体产生过程详见上述)。同时将该通道的配置信息(工作模式,有效数据宽度,数据源的起始地址,数据目的的起始地址,以及传输数据长度)以及数据存储的位置q_ram_select(即DMA数据缓存寄存器组的哪一片)传递给AHB_master1接口单元。 

4)AHB_master1接口单元将根据通道n的目的地址寄存器(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)该通道为主动模式或软件模式的情况下:若通道n的计数器(data_count)未达到传输数据长度寄存器配置的值,即DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则重复执行步骤2),3),4),否则执行步骤6)。 

该通道为被动模式的情况下,若仲裁单元未检测到通道n的dma_last_req有效,或DMA控制器未完成当前响应通道本次DMA请求全部的数据传输,则重复执行步骤2),3),4),否则执行步骤6) 

6)通道n的数据传输结束,通道n的使能关闭。 

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号