《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 密码SoC中嵌入式链式DMA的研究与设计
密码SoC中嵌入式链式DMA的研究与设计
来源:电子技术应用2014年第1期
李军伟,戴紫彬,南龙梅
解放军信息工程大学,河南 郑州450004
摘要: 为了提高密码SoC中密码运算模块与其他功能部件之间数据传输的效率,提出了一种适合密码运算的嵌入式链式DMA传输方式。分析了CPU传输、Block DMA传输和链式DMA传输3种数据传输方式的特点;设计了嵌入式链式DMA的硬件架构,给出了其工作流程;为嵌入式链式DMA设计了主从复合接口,使其具有控制总线、发起总线传输的功能;使用65 nm CMOS工艺标准单元库对嵌入式链式DMA模块进行了ASIC实现;搭建了仿真验证平台。实验结果表明,嵌入式链式DMA可以明显提升密码SoC数据传输效率,满足了功能和性能的需求。
中图分类号: TP309.7
文献标识码: A
文章编号: 0258-7998(2014)01-0056-04
Research and design of embedded scatter-gather DMA for cipher SoC
Li Junwei,Dai Zibin,Nan Longmei
PLA Information Engineering University,Zhengzhou 450004,China
Abstract: To improve the efficiency of data transfer between cryptographic computation module and other functional components in cipher SoC,a method of embeded scatter-gather DMA is proposed. The characteristic of CPU transfer, Block DMA transfer and scatter-gather DMA transfer are analyzed. The hardware architecture of embedded scatter-gather DMA is designed,and its workflow is given. To enable embedded scatter-gather DMA has the function to control bus and initiate a bus transfer, a Master-Slave composite interface is designed.The simulate result indicates that the proposed embedded scatter-gather DMA can significantly enhance the data transmission efficiency of cipher SoC,meeting the functional and performance requirements.
Key words : cipher SoC;transmission mechanism;scatter-gather DMA;bus;master/slave interface

    随着加密技术在信息安全领域的广泛应用,对密码SoC(System on Chip)芯片的性能提出了更高的要求。相比于不断提高的接口传输速率和越来越大的存储容量,总线的数据传输效率却一直提升缓慢,已经逐渐成为制约密码芯片处理性能的瓶颈[1]。
    密码SoC中数据的传输方式有两种——CPU编程传输方式和直接存储器存取DMA(Direct Memory Access)传输方式[1]。以CPU为主控制器的数据传输方式相对简单,然而,该方式需要在CPU控制下进行寻址,每传输一个数据都需要经过多个指令周期。因此,存在传输效率低、CPU负担过重等问题,不适合进行大批量数据的传输。在DMA传输方式中,DMA控制器代替CPU接管总线并负责数据传输,省去了由CPU负责传输时所必须的寻址指令,大大提高了系统的数据传输效率和性能[2-3]。然而,传统的块传输DMA(Block DMA)每个数据“块”传输完成后都需要申请中断并重新启动DMA,块与块之间的传输延时较长,在执行多次传输操作时效率较低[4-5]。
    为了解决密码SoC中数据传输效率的瓶颈问题,本文研究了链式DMA传输方式,设计了适合密码运算的嵌入式链式DMA,并比较了其与CPU传输、Block DMA传输方式性能的优劣。
1 密码SoC系统
1.1 基于AMBA总线的密码SoC

    共享总线结构是目前密码SoC芯片中最常用的片上通信结构。它采用共享通信通道和时分复用的总线仲裁机制,为片上通信模块提供一条共享通信链路。本文设计的密码SoC架构如图1所示。

    选用AMBA(Advanced Microcontroller Bus Architecture)总线连接各IP核。其中,AXI(Advanced Extensible Interface)总线是一种高性能、高带宽、低延迟的片内总线[6]。它的地址/控制和数据相位是分离的,支持不对齐的数据传输,同时在突发传输中,只需要首地址。支持分离的读写数据通道、并支持显著传输访问和乱序访问,更加容易进行时序收敛。
    该密码SoC芯片集成了主处理器、密码运算模块(CIPHER PE)、通用DMA、片上存储器等关键模块,具备高安全性、高密码处理能力、多种通信接口等特点。
1.2 密码SoC中数据传输机制分析
    在密码SoC中,密码运算模块作为核心部件,需要通过总线与存储器、接口部件等进行频繁的、大批量的数据交互。数据的传输通过CPU编程传输方式和DMA传输方式实现。
1.2.1 CPU传输方式分析
    CPU作为主控制器的数据传输机制相对简单,CPU完善的指令系统能够支持用户进行灵活方便的数据传输操作。但是,CPU传输机制存在严重的不足。一方面,CPU作为控制数据传输的中间媒介,需要对每个数据分组做加载/存储才能实现一次完整的数据传输操作,这些加载/存储操作不仅占用了CPU宝贵的控制资源,而且消耗了大量的总线周期,传输效率非常低。另一方面,CPU需要全程控制数据的传输过程,导致无法进行其他运算或控制操作,CPU的数据位宽和处理能力也可能成为制约数据传输性能提升的瓶颈。
1.2.2 DMA传输方式分析
    在密码SoC芯片中,CPU并不适合于大批量数据的传输操作。为了解决批量数据的传输问题,引入了DMA数据传输机制。
    DMA传输是一种数据直接传输机制。DMA控制器能够在总线设备间快速传输数据,是一种完全由硬件完成输入/输出的操作方式。能够有效替代微处理器的加载/存储指令,显著提高系统的数据传输能力。然而,传统的块传输DMA存在诸多不足。首先,当密码运算用到的待加/解密数据、配置参数等来自多个非连续存储区域,或者分批次从I/O进入时,就要进行多次DMA块传输。每个数据“块”传输完成后都需要申请中断并重新启动DMA。块与块之间的传输延时较长,在执行多次传输操作时效率较低。其次,传统DMA为了解决长期占有总线的问题,设计的传输数据缓存单元中,所有需要DMA传输的数据都要经过DMA控制器的缓存,同样一段数据需要经过读写两个过程,而且不支持读写同时操作,浪费了总线传输周期。
    为解决这些问题,分布式结构、为数据吞吐量大的模块预设专用通道、链式DMA技术等技术被提出。其中为密码SoC芯片设计适合的DMA控制器是提高数据交换效率的关键技术。
2 嵌入式链式DMA设计
    嵌入式链式DMA是为总线上需要大量数据交换的部件设计的功能模块,将其嵌入到需要改进的部件中,通过总线接口挂接到总线上。为密码SoC的密码运算模块设计嵌入式链式DMA,使其具有DMA传输功能,可以大大提高密码SoC的数据传输效率。
2.1 链式DMA传输方式分析
    在传统的设计中,密码运算模块作为从设备挂接总线,系统DMA在CPU的配置和调度下完成大批量的数据传输。链式传输方式是指将DMA的传输描述符(源基地址、目标基地址、数据传输量、下一描述符指针及其他参数)放在DMA内的存储单元内,当DMA传输操作完成后,DMA控制器从指针寄存器指向的地址中把新的通道参数读入DMA传输控制器,按照新的参数要求进行新的DMA传输。系统只需初始化这些命令和参数,CPU接收DMA产生的传输完成中断信号,从而无需在DMA进行数据传输过程中频繁介入。
    在密码SoC芯片中,片上存储器、芯片接口与密码运算模块之间的数据传输较为频繁,参与密码运算的不同数据信息(密钥、参数、明文、密文等)通常来自于密码SoC的不同地址空间,而且明文、密文的传输会频繁交替进行,而批量数据报文的输入/输出非常适合采用链式DMA传输机制来实现,其传输机制如图2所示。

    基于以上分析,决定为密码SoC设计链式DMA,从而完成密码SoC中大批量的数据传输。下文对链式DMA进行详细的分析与设计。
2.2 硬件架构设计
    嵌入式链式DMA控制器主要由DMA寄存器组、描述符FIFO、数据通道FIFO、中断控制逻辑、硬件握手接口、DMA传输控制器、总线接口等模块组成。其硬件结构图如图3所示。

    DMA寄存器组是总线CPU和内部DMA传输控制器控制DMA传输的窗口,包括控制状态寄存器、地址寄存器、传输长度寄存器、中断状态寄存器和中断屏蔽寄存器等。
    (1)控制状态寄存器Control_reg:控制状态寄存器的内容描述了本次DMA的传输方式,DMA传输控制器通过判断控制状态寄存器的不同位的值,进入不同的传输状态,进行相应的传输操作。
    (2)地址寄存器RawAddr_reg:当链式DMA执行总线写操作时,地址寄存器标识数据源地址;当执行总线读操作时,地址寄存器标识目的地址。
    (3)传输长度寄存器SIZE_reg:表示本次DMA传输的数据长度,即传输的字节个数。
    (4)中断状态寄存器Intrp_Status_reg:为CPU提供嵌入式链式DMA的中断状态。
    (5)中断屏蔽寄存器Intrp_Block_reg:可以屏蔽嵌入式链式DMA的中断请求。
    描述符FIFO是一个32 bit进、160 bit出的FIFO,其大小为200×32 bit,在链式DMA模式下可以暂存40组DMA传输描述符。之所以这样设计描述符FIFO是因为在输入描述时,要符合总线32 bit的位宽,在输出描述符时,允许一个时钟周期内同时输出5个32 bit(即一组描述符),从而完成一次DMA传输。这样节省了读取描述符的周期,提高了DMA的工作效率。
    数据通道FIFO包括输入FIFO和输出FIFO。输入FIFO缓存总线写入的数据,输出FIFO缓存密码运算模块的计算结果。
    中断控制逻辑主要负责在数据传输完毕之后向CPU发送中断信号,以交还总线控制权。
    硬件握手接口用来向DMA 传输控制器发出信号,表明相应部件已经准备好。
    DMA传输控制器是嵌入式链式DMA的控制中枢,下节将对其设计进行详细介绍。
2.3 DMA传输控制器设计
    DMA传输控制器是链式DMA进行数据传输的核心,控制着整个DMA的传输过程,主要通过一个DMA传输状态机来实现。DMA传输控制器的状态转移如图4所示。

    在一次DMA传输发起之前, DMA传输控制器会读取FIFO中的描述符,向控制寄存器组写入数据。或者主处理器通过总线从接口直接配置DMA寄存器。然后, DMA传输控制器根据寄存器组中的控制信息开始一次DMA传输。
    主模式下的DMA有主模式写和主模式读两种类型,主模式写是把数据通道读FIFO里的数据包通过总线传送到从设备,主模式读则是读取从设备的数据包并传送到数据通道读FIFO中。
    IDLE状态:上电复位初始状态。系统上电复位进入该状态,在该状态中不做任何操作。
    DMA_read:DMA读操作状态。在该状态下,DMA传输控制器执行读操作,从总线存储设备、I/O接口中读取数据,传输到读数据缓存中。
    DMA_write:DMA写操作状态。在该状态下,DMA传输控制器执行写操作,从写数据缓存中读取数据,传输到总线存储设备、I/O接口中。
    WAIT:传输等待状态。在该状态下DMA传输控制器不作任何操作。
3 AXI总线主/从复合接口设计
    嵌入式链式DMA若要挂接总线,完成总线传输工作,必须为其设计总线接口,使其符合AXI总线的读写时序。根据应用需求,为嵌入式链式DMA设计的AXI总线接口包括总线从设备接口和总线主设备接口两部分。
3.1 AXI总线从设备接口设计
    AXI总线从设备接口是CPU控制链式DMA的接口,链式DMA作为总线从设备时,CPU可以通过该接口完成对链式DMA的描述符输入和寄存器配置工作。图5显示了总线从设备接口状态机的设计方式。

    IDLE 状态:空闲等待状态,系统上电复位进入该状态,在该状态中,不接收任何传输,所有输出的 ready 信号均为低。
    WRTD 状态:写数据状态,在该状态下,slave准备好接收数据,输出驱动awready以及wready为高,握手成功后即完成传输。
    REDD 状态:读数据状态。在该状态下,slave 输出驱动arready为高,解析地址与控制信息,将有效数据送上总线。
3.2 AXI总线主设备接口设计
    CPU承担着整个密码SoC的任务调度工作,由于它频繁的参与数据传输工作,限制了其计算能力的发挥和总线带宽的利用率。为密码协处理器设计总线主设备接口,配合嵌入式链式DMA使其具有总线控制功能,可以减轻CPU任务负载,提高总线数据传输效率。
    AXI总线主设备接口主要用于链式DMA向AXI总线发送传输控制信号,当链式DMA获得总线控制权后,作为总线主设备,它可以通过AXI主设备接口实现从源设备地址读取数据或者向目的设备地址写入数据的操作。
    以读操作为例,首先AXI 主设备接口单元控制器从读命令缓存队列中读取读命令字,产生相应的读传输操作命令,并传送到相应AXI读地址传输通道;然后AXI 读数据通道从外部读取相应的数据,把相应的数据送入内部宽度为32 bit的数据缓存中,完成相应读操作。此时当该突发传输所对应的所有数据读取完后,如果读命令缓存队列还有命令字,则发起相应的下一次读操作。嵌入式链式DMA进行总线写操作与此过程类似。
4 系统验证和测试

 


    为了验证嵌入式链式DMA设计的正确性,分析其对密码SoC整体性能的提升,采用CMOS 65 nm工艺标准单元库对嵌入式链式DMA模块进行了综合。根据综合结果得出该模块的时钟频率最高可以达到600 MHz。然后,搭建了验证测试平台。比较不同传输机制的传输效率和性能提升,定义数据传输效率为传输数据个数与总线周期数的比值[9]。
    表1统计了在系统工作频率一定时,分别采用CPU传输、BlockDMA传输、EmbeddedS-GDMA传输机制时密码SoC的吞吐率。其中性能提升是指BlockDMA、EmbeddedS-GDMA的传输效率相对于CPU传输方式的性能提升。

    从表1中可以看出,在3种传输方式中,嵌入式链式DMA的传输效率最高。传统块传输DMA次之,主要是因为其在使用时,数据需要经过块传输DMA的缓存,而且总线不能同时完成读写操作,浪费了一些时钟周期。同时可以看出,当传输的数据量越大、传输操作次数越多时,采用嵌入式链式DMA的传输方式对传输效率的提升越明显。
    本文设计的嵌入式链式DMA,减少了启动DMA传输的配置周期,提高了DMA传输机制的效率;还具有总线主设备功能,减轻了主处理器的任务负载。测试验证结果表明,相比于CPU传输方式和Block DMA传输方式,采用嵌入式链式DMA传输方式可以极大地提高数据传输效率,解决了密码SoC中数据传输的瓶颈问题,提升了密码SoC系统性能。
参考文献
[1] 苏阳.分组密码多引擎并行处理技术研究[D].郑州:解放军信息工程大学,2012.
[2] 季顺南.基于AXI总线的DMA控制器设计[D].广州:华南理工大学,2010.
[3] 王贺,张勇.基于PCI Express总线的分散-聚集式DMA的设计[J].仪器仪表学报,2010,31(8):100-102.
[4] 黄侃,佟冬,刘洋.MCS-DMA:一种面向SoC内DMA传输的内存控制器优化设计[J].电子学报,2010,38(3):598-603.
[5] Peng Yu,Li Bo,Liu Datong.A high speed DMA transaction method for PCI express devices[J].IEEE Computer Society,2009,108(4):103-108.
[6] KISTLER M,BROKENSHIRE D.Detecting race conditions in asynchronous DMA operations with full system simulation[J].IEEE Computer Society,2011,117(5):207-214.

此内容为AET网站原创,未经授权禁止转载。