SoC系统中DMA控制器的设计与实现

2017-09-03 10:52王胜史兴强杨晓刚
电子与封装 2017年8期
关键词:外设寄存器仲裁

王胜,史兴强,杨晓刚

(中科芯集成电路股份有限公司,江苏无锡214072)

SoC系统中DMA控制器的设计与实现

王胜,史兴强,杨晓刚

(中科芯集成电路股份有限公司,江苏无锡214072)

设计了一种高速、多通道DMA控制器。该控制器可以实现存储器与存储器、存储器与外设之间的数据传输。各个通道优先级可以配置,并支持通道循环传输功能。逻辑综合结果表明,该DMA控制器具有良好的传输性能,可广泛应用于片上系统中。

多通道;DMA控制器;片上系统

1 引言

在片上系统(SoC)中,外设与存储器,存储器与存储器之间的数据交换已经成为系统性能提升的瓶颈,而直接存储器存取(DMA)技术可以有效缓解这个问题,因此得到广泛的关注和研究[1]。本文设计的DMA控制器有以下特点:包含7个独立可配置的通道,每个通道均支持硬件与软件请求;各个通道之间的优先级可以通过软件进行配置;源的数据宽度与目标的数据宽度可以独立设置,能够根据地址以及数据传输的宽度,将有效数据进行打包与拆包[2];支持自动循环传输,通道完成数据传输后,自动恢复成初始配置状态,重新开始数据传输,不需要CPU重新进行设置;DMA通道的请求,仲裁和确认是在AHB系统总线外执行的,一个DMA数据访问只占用总线两个周期,能够最大程度减少总线占用率[3]。

2 DMA控制器系统结构

DMAC(Direct Memory Access Controller)系统结构是基于AHB总线结构,如图1所示。其中包含AHB SLAVE接口模块,仲裁模块,7个通道控制模块和AHB Master模块。AHB Slave模块主要功能是依据AHB读写时序对DMA寄存器进行配置。仲裁模块是对7个通道的优先级进行判断,输出当前最高优先级通道的编号。通道控制模块主要功能是进行传输地址计算,对传输量进行计数,与外设的传输请求进行握手以及通道的中断控制。AHB Master将从源地址读进来的数据根据地址以及数据传输的宽度,将有效数据进行打包与拆包最后写到目的地址中去[4]。

图1 DMAC系统结构

3 仲裁模块

仲裁模块的输入是外设的DMA硬件请求信号,7个通道的软件请求信号,通道使能信号和寄存器配置的通道优先级,输出是当前优先级最高通道。如图2所示。当仲裁模块检测到外设有DMA传输请求时,则开始进行仲裁,并在一个时钟周期内将当前最高优先级的通道编号送出。通道仲裁分两个检测阶段:

(1)检测软件配置:每个通道的优先权可以在DMA控制寄存器中设置优先级,总共有4个等级,最高优先级,高优先级,中等优先级和低优先级。

(2)检测通道编号:如果2个请求有相同的软件优先级,则编号低的通道优先级高,如通道2与通道4的优先等级相同,则通道2优先级高于通道4。

图2 仲裁模块

为了最大程度地降低DMA控制器的功耗,将每个通道的使能信号chnx_en用作各个通道请求门控使能。只有当通道使能有效,才能真正产生通道请求,才能使仲裁器开始仲裁。否则仲裁模块始终处于待机状态。具体实现如下:

在仲裁模块内部设置了7个4-bit的优先级请求寄存器chnx_pl_req,分别包含最高优先级(veryhigh_req),高优先级(high_req),中等优先级(medium_req)和低优先级(low_req)这4位,如图3所示。当某一通道出现硬件或软件请求时,并且该通道使能开启,才能产生真正有效的通道请求信号。当有效的通道请求信号生成,仲裁器才开始检测对应通道寄存器DMA_CCRx中的优先级配置位(PL):当PL位设置为11时,则将优先级请求寄存器中veryhigh_req位置1,当PL设置为10时,则将优先级请求寄存器中high_req位置1,当PL位为01时,则将优先级请求寄存器中medium_req位置1,当PL位为00时,则将优先级请求寄存器中low_req位置1。

一旦仲裁模块完成优先级请求的标记,则开始检测在同一优先级条件下通道的编号。仲裁模块首先分别将7个优先级请求寄存器中的veryhigh_req位、high_req位、medium_req位和low_req位进行或操作,只有当或操作结果为1时,才会进行通道编号的检测。否则认为该优先等级条件下没有通道请求。如果或操作的结果为1,就从通道1到通道7依次开始查询。例如7个优先级请求寄存器中的veryhigh_req位或操作结果为1,则开始检测通道编号:如果通道1中veryhigh_req为1,仲裁模块就将通道1编号输出;如果通道1中veryhigh_req为0,则查询通道2中的veryhigh_req位,如果通道2中veryhigh_req为1,仲裁模块就将通道2编号输出;如果通道1、通道2中的veryhigh_req都为0,则查询通道3中的veryhigh_req位,如果通道3中veryhigh_req为1,仲裁模块就将通道3编号输出;按照上述方法依次进行通道编号的检测。

图3 通道优先级请求寄存器

4 通道控制模块

4.1 握手接口设计

握手接口的设计主要是基于不同时钟域情况下考虑的。DMA控制器是属于AHB时钟域的,而系统中绝大部分外设是APB时钟域的,AHB的时钟频率往往大于APB的时钟频率。为了保证DMA控制器给出的应答信号能够被不同时钟域上的外设接收到,将外设发出的传输请求信号与DMA控制器发出的应答信号进行握手[5]。具体实现如下。

外设需要DMA搬运数据时,会向DMA控制器发送一个请求信号后,并将该请求信号一直保持有效。当DMA控制器访问外设并完成一个数据的传输后,DMA控制器立即发送给它一个应答信号。当从DMA控制器得到应答信号时,外设立即释放它的请求。一旦外设释放了这个请求,DMA控制器同时撤销应答信号。其中传输一个数据,外设就要发送一次请求。当外设是Memory时,则不需要握手信号。DMA控制器除了给出应答信号,在所有的数据传输完成时,还需要给出传输完成信号dma_tc(transfer complete),用于说明当前传输已经全部完成。传输完成信号与应答信号时序一致,如图4所示。

图4 握手接口时序

4.2 地址计算与传输计数器

DMA控制器每完成一次读写操作,读数据的地址与写数据的地址都需要根据实际情况进行更新操作。在DMA控制寄存器中分别设计了两位控制位:外设地址增量PINC和存储器地址增量MINC。根据PINC和MINC的值,外设和存储器的传输地址在每次传输后可以有选择地完成自动增量。

当PINC和MINC标志位为0,则传输地址始终保持不变。当PINC和MINC标志位不为0时,也即设置为增量模式时,下一个要传输的地址将是前一个地址加上增量值,增量值取决于所选的数据宽度。如果数据宽度是8-bit,则地址加1。如果数据宽度是16-bit,则地址加2。如果数据宽度是32-bit,则地址加4,如图5所示。

第一个传输的地址是存放在通道外设地址寄存器DMA_CPARx和通道存储器地址寄存器DMA_CMARx中的。在传输过程中,这些寄存器始终保持它们初始的数值。在自动循环模式下,最后一次传输结束时,地址计算模块会重新加载DMA_CPARx和DMA_CMARx寄存器中的初始基地址,开始重新传输。

图5 地址计算逻辑

DMA传输的数据量是可编程的,最大可以传输65535个32-bit的数据。DMA每进行一次传输,传输计数器就减1,值到传输计数器中的值为0时,表示DMA传输结束。在传输过程中,如果出现更高优先级通道,当前通道数据传输会停止,计数器会保留当前传输计数值,直到该通道恢复传输。

当通道配置为非循环模式时,传输结束后(即传输计数变0)将不再产生DMA操作。即使该通道有新的请求,DMA也不会去响应。要开始新的DMA传输,需要在关闭DMA通道的情况下,重新配置传输数目。

在自动循环模式下,最后一次传输结束时,通道传输计数器会重新加载初始数值,计数器重新开始计数。

5 AHB Master

AHB Master的主要功能是将从源地址读进来的数据,根据地址以及数据传输宽度进行调整,并将调整后的有效数据写到目的地址中去。在整个SoC系统中,DMA控制器的AHB Master是与总线矩阵Bus Matrix的0端口连接的,这就意味着DMA控制器总线的优先级高于内核总线的优先级。一旦DMA进行大量的数据传输,就会长时间占据着系统总线,从而阻塞内核对系统总线的使用[6]。尽可能减少DMA控制器对系统总线的占用率,是设计AHB Master的重点。

规划整个DMA工作流程时,将DMA通道的请求、仲裁以及传输完成后与外设的握手放在AHB系统总线外执行。这样一个DMA数据访问最少只占用总线两个周期,最大程度减少总线占用率。DMA传输时,占用总线的周期如图6所示,一个DMA访问花费2个周期在系统总线上。系统总线永远不会被DMA完全冻结,DMA占据系统总线访问数据时,至少保留3个周期给CPU,提高了整个系统的性能。

图6 DMA传输占用总线周期

AHB Master模块状态机如图7所示,总共分为5个状态:IDLE,READ_ADDR,READ_DATA,WRITE_ ADDR,WRITE_DATA。状态机复位时进入IDLE状态,当有DMA传输请求时进入READ_ADDR状态。在READ_ADDR状态下AHB Master输出读地址,AHB控制信号以及使能计数器。在READ_DATA状态时,计数hreadyin为0的时钟周期数。如果hreadyin始终为低电平,并持续32个hclk周期,则进入IDLE状态;如果在此状态下hreadyin为高电平,进入WRITE_ADDR状态并发送写地址和AHB控制信号。WRITE_DATA状态下AHB Master将对齐后的写数据送到总线hwdata上,计数hreadyin为0的时钟周期数。如果此时hreadyin始终为低电平,并持续32个hclk,也进入IDLE状态。

图7 AHB Master状态机

6 仿真与综合

DMA控制器功能仿真如图8(a)所示。在通道5数据传输的过程中,仲裁模块发现更高优先级通道请求,并输出最高优先级通道编号6。DMA控制器将系统总线的使用权由通道5切换给通道6,通道6则开始数据传输。通道5传输计数器完成一次计数后保留计数值,直到重新获得系统总线的使用权。图8(b)中,DMA控制器7个通道全部开启,依次完成数据的传输。

设计采用Synopsys公司的Design Compiler为综合工具,以TSMC 55 nm工艺库在最坏情况下对DMA控制器进行逻辑综合。当时钟频率为200 MHz时,最长路径延时为5.04 ns,动态功耗为496.3515 μW,漏流功耗为2.2614 μW。综合和仿真结果表明,DMA控制器的设计满足SoC系统对功耗及路径延时的要求。

图8 DMA控制器功能仿真

7 小结

本文设计了一种多通道DMA控制器,大大提高了SoC系统中数据传输的效率,有效减轻处理器的负担,从而提高系统性能。目前该设计已成功应用于SoC系统中。

[1]郭炜,魏继增,郭筝,等.SoC设计方法与实现(第2版) [M].北京:电子工业出版社,2011:81-93.

[2]TMS320C6000 DSP Enhanced Direct Memory Access (EDMA)Controller Reference Guide[Z].Texas Instruments, 2006.

[3]Viktor Mayer-Schonberger,Kenneth Cukier.Big Data:A Revolution That Transfer How We Live,Work and Think [M].Hodder Export.2013.

[4]彭莉.嵌入式SOC中DMA的设计与实现[D].上海交通大学硕士论文,2005.

[5]Grosso M Perez W J H.Functional test generation for DMA controller[J].IEEE Xplore digital library,2010,11(8):1-6.

[6]Hennessy J L,Patterson D A.计算机系统结构——量化研究方法[M].北京:电子工业出版社,2004.

Design and Implementation of a SoC-based DMA Controller

WANG Sheng,SHI Xingqiang,YANG Xiaogang
(China key system Co.,Ltd,Wuxi 214072,China)

A high-speed multi-channel DMA controller is designed in the paper.The controller manages memory-to-memory,peripheral-to-memory and memory-to-peripheral transfers.The transfer priority of different channels is configurable with automatic transfer.The DMA controller has good performance according to the synthesisresultand can be widely used in SoC systems.

multichannel;DMAcontroller;SoC

TN402

A

1681-1070(2017)08-0025-04

王胜(1979—),男,江苏盐城人,2001年毕业于吉林大学电子信息工程专业,现从事大规模数字SoC设计工作。

2017-4-21

猜你喜欢
外设寄存器仲裁
Lite寄存器模型的设计与实现
一种多通道共享读写SDRAM的仲裁方法
ICSID仲裁中的有效解释原则:溯源、适用及其略比
分簇结构向量寄存器分配策略研究*
两岸四地间相互执行仲裁裁决:过去、现在及将来(上)
Microchip推出具备双ADC外设的全新器件,扩展其低成本8位PIC®单片机产品线
高速数模转换器AD9779/AD9788的应用
一种可重构线性反馈移位寄存器设计
外设天地行情
外设天地行情