秦 爽 ,李 健 ,杨 颖 ,陈 杰
(1.中国科学院微电子研究所,北京100029;2.中国科学院大学,北京100049)
随着社会的发展,卫星导航已经广泛应用到人类社会的很多方面,如无人机、物联网、车辆导航以及物流等[1],对导航定位的精度要求也越来越高。 目前的导航SoC 主要采用CPU 来完成导航模块的数据搬移工作,随着导航系统和频点的增加,搬移大量导航通道的数据将占用CPU 大量的时间。 而且CPU 频繁地轮询检测各个通道的状态将使CPU 的低功耗设计变得极为复杂。 梁科等人设计了一款通用DMA,该DMA 能有效提高数据传输效率,但是它最多支持8 个通道,无法满足导航应用要求[2]。 张路煜等人设计的DMA 使用了专用数据通路,虽然避开了AHB 总线,能进行多路并行传输,但是会使SoC 内部时序复杂[3]。 本文设计了一种专用于导航SoC的DMA,它能高效的完成大量通道的数据搬移[4-11]。
基于先进微控制器总线体系结构(Advanced Microcontroller Bus Architecture,AMBA)总线的导航SoC 总体结构图如图1 所示。
导航SoC 主要包括处理器、DMA、存储模块、导航模块以及外设接口。 各IP 核之间通过AMBA 总线进行通信,其中处理器、DMA、存储模块和导航模块通过高级高性能总线(Advanced High Performance Bus,AHB)协议通信,外设接口连在外围总线(Advanced Peripheral Bus,APB)上。四大全球卫星导航系统各有几十颗卫星,每颗卫星会发射多个频点的信号。 随着导航SoC 支持的信号增加,导航模块需要搬移和处理的数据也越来越多,支持全系统全频点的导航SoC 需要处理数百个通道的数据。 通用DMA 无法支持数百通道的数据搬移,而传统的CPU 搬移数据方式效率会越来越低。 本设计中采用的专用DMA 可以不经过CPU 直接将导航通道中的数据搬移到静态随机存取存储器(Static Random-Access Memory,SRAM)中,这样CPU 可以直接读取SRAM 中的数据进行处理。
图1 导航SoC 总体结构
DMA 主要完成导航通道中两类数据的搬移工作,一类是跟踪模块中相干累加值, 相干累加值1 ms 更新一次,这类数据的传输称为DUMP 传输。 CPU 根据相干累加值的计算结果调节跟踪环路的参数。另一类是用于伪距和载波观测值,此值更新频率为1~20 Hz,这类传输称为TIC 传输。CPU 根据观测量计算用户的时间、位置、速度等信息。 DUMP 和TIC 均有标志位,当标志位有效时表示数值已更新。 为了保证数据不缺失,每隔0.1 ms轮询检测所有信号所有通道的DUMP 标志位,如果标志位有效,则搬移该通道DUMP 数据。 同样,每隔2 ms 检测TIC 标志位,如果标志位有效,则DMA 将完成所有信号所有通道的TIC 数据的搬移。
专用DMA 的总体结构如图2 所示。
图2 专用DMA 总体结构
专用DMA 主要由AHB 主机接口、AHB 从机接口、配置模块、控制状态机、传输状态机以及状态机转接口六个部分组成。 在AHB 总线上,DMA 既是主机又是从机。 它通过AHB 主机接口读写导航模块数据并将其存储到SRAM 中,而处理器通过AHB 从机接口对DMA 进行配置。配置模块将处理器的配置寄存并分发到其他各个模块。 控制状态机和传输状态机主要负责控制DMA的数据搬移。状态机转接口模块主要负责数据缓存和提供总线数据和地址。
在DMA 的RTL 级代码设计过程中使用低功耗设计方法。常用的低功耗设计技术有并行处理、流水线、资源共享、操作数隔离以及门控时钟等方法。在DMA RTL 代码设计过程主要使用了资源共享和门控时钟的低功耗优化方法[12-14]。
DMA 的工作状态可以由处理器进行配置。 DMA 是否工作以及工作时进行哪些通道的数据检测和搬移都可以通过处理器进行配置。
处理器对DMA 的配置数据经过AHB 从机接口进入DMA 之后先在配置模块进行寄存,然后由配置模块分发到其他各个部分。处理器也可以通过读取特定地址来获取当前SRAM 的写入地址。
控制状态机主要控制DMA 进入不同的传输模式,总共有三个状态,CTRL_IDLE 表示初始状态或者正在等待,CTRL_DUMP_TRANSFER 表示正在进行DUMP 传输,CTRL_TIC_TRANSFER 表示正在进行TIC 传输,状态转移图如图3 所示。
图3 控制状态机状态转移图
此模块中有两个计数器,一个DUMP 计数器,一个TIC 计数器,这两个计数器用来计算等待时间。 每隔0.1 ms 进行一次DUMP 传输,即进入CTRL_DUMP_TRANSFER 状态。每隔2 ms 进行一次TIC 传输,即进入CTRL_TIC_TRANSFER 状态。 其他时候在CTRL_IDLE 状态进行等待。
当控制状态机控制DMA 进行DUMP 或者TIC 传输之后,传输状态机开始工作。它控制DMA 进行不同的检测和传输工作。
对于DUMP 模式,状态机转移图如图4 所示。 DMA将轮询检测导航模块中的各个通道的标志位,如果标志位有效,则将该通道的数据搬移到SRAM 中,并清除该通道的标志位,然后继续检测下一通道。 如果标志位无效,则不进行任何操作,继续检测下一个通道。如果所有的通道全部检测并传输完毕,则传输状态机向控制状态机发送完成信号,控制状态机进入CTRL_IDLE 状态,等待下一次传输。
图4 DUMP 模式时传输状态机状态转移图
图5 TIC 模式时传输状态机状态转移图
对于TIC 模式,状态机转移图如图5 所示。 DMA 将先检测TIC 标志位,如果标志位有效,则将导航模块中所有开启的通道中TIC 数据搬移到SRAM 中,传输完成后清除TIC 标志位。 如果TIC 标志位无效或者所有通道上数据传输完成,则传输状态机向控制状态机发送完成信号,退出TIC 传输状态。
DMA 模块有两个AHB 接口,一个主机接口,一个从机接口。 DMA 通过主机接口经过AHB 总线读取导航模块的数据,将其缓存到移位寄存器中,待写状态时将数据写到挂载在AHB 总线上的SRAM 中。 从机接口使DMA 可以作为AHB 总线上的从机,这样CPU 就可以通过AHB 总线对DMA 寄存器进行配置[15]。
DMA 模块使用Verilog 语言编写,采用TSMC 90 nm 工艺进行综合验证。时钟约束为200 MHz,面积为40 345 μm2。使用Primetime PX 工具进行功耗分析,在DMA 设计过程中,使用了低功耗设计方法,其中寄存器插入时钟门控电路的比例为99.41%。 表1 为优化后与优化前功耗对比。
由表1 可知低功耗优化方法使DMA 模块的功耗降低至15%。
在导航SoC 中对DMA 模块进行数据搬移测试。 CPU1分别对GNSS 模块和DMA 模块进行配置使其进行不同通道数的数据搬移,另外采用CPU1 直接搬移相同配置的导航数据作为对比。 测试结果如图6 所示。
表1 低功耗优化与非低功耗优化DMA 模块功耗对比(mW)
图6 不同配置下数据搬移周期对比
由于GNSS 模块与AHB 总线不在同一个时钟域,因此DMA 和CPU 在读取GNSS 模块数据时需要进行握手操作,因此读取一个GNSS 模块中的数据需要花费10 个周期。 在计算CPU 搬移数据所需要的周期时不考虑进入中断和中断返回的开销。 由图6 可知,相同通道数的配置下,DMA 搬移数据所需要的周期数为CPU 的三分之一,且DMA 在进行数据搬移的过程中不需要CPU 的干预,这样就提高了CPU 的工作效率。
本文实现了一款应用于导航SoC 的专用DMA,该DMA 支持全系统全频点导航通道的数据搬移。与传统的CPU 搬移数据方法进行比较,数据搬移所需要的周期降为CPU 的三分之一,提高了CPU 的工作效率。 设计中采用了低功耗设计方法,使功耗降低为原来的15%。