秦 爽 ,李 健 ,楊 穎 ,陳 杰
(1.中國科學(xué)院微電子研究所,北京100029;2.中國科學(xué)院大學(xué),北京100049)
隨著社會(huì)的發(fā)展,衛(wèi)星導(dǎo)航已經(jīng)廣泛應(yīng)用到人類社會(huì)的很多方面,如無人機(jī)、物聯(lián)網(wǎng)、車輛導(dǎo)航以及物流等[1],對(duì)導(dǎo)航定位的精度要求也越來越高。 目前的導(dǎo)航SoC 主要采用CPU 來完成導(dǎo)航模塊的數(shù)據(jù)搬移工作,隨著導(dǎo)航系統(tǒng)和頻點(diǎn)的增加,搬移大量導(dǎo)航通道的數(shù)據(jù)將占用CPU 大量的時(shí)間。 而且CPU 頻繁地輪詢檢測(cè)各個(gè)通道的狀態(tài)將使CPU 的低功耗設(shè)計(jì)變得極為復(fù)雜。 梁科等人設(shè)計(jì)了一款通用DMA,該DMA 能有效提高數(shù)據(jù)傳輸效率,但是它最多支持8 個(gè)通道,無法滿足導(dǎo)航應(yīng)用要求[2]。 張路煜等人設(shè)計(jì)的DMA 使用了專用數(shù)據(jù)通路,雖然避開了AHB 總線,能進(jìn)行多路并行傳輸,但是會(huì)使SoC 內(nèi)部時(shí)序復(fù)雜[3]。 本文設(shè)計(jì)了一種專用于導(dǎo)航SoC的DMA,它能高效的完成大量通道的數(shù)據(jù)搬移[4-11]。
基于先進(jìn)微控制器總線體系結(jié)構(gòu)(Advanced Microcontroller Bus Architecture,AMBA)總線的導(dǎo)航SoC 總體結(jié)構(gòu)圖如圖1 所示。
導(dǎo)航SoC 主要包括處理器、DMA、存儲(chǔ)模塊、導(dǎo)航模塊以及外設(shè)接口。 各IP 核之間通過AMBA 總線進(jìn)行通信,其中處理器、DMA、存儲(chǔ)模塊和導(dǎo)航模塊通過高級(jí)高性能總線(Advanced High Performance Bus,AHB)協(xié)議通信,外設(shè)接口連在外圍總線(Advanced Peripheral Bus,APB)上。四大全球衛(wèi)星導(dǎo)航系統(tǒng)各有幾十顆衛(wèi)星,每顆衛(wèi)星會(huì)發(fā)射多個(gè)頻點(diǎn)的信號(hào)。 隨著導(dǎo)航SoC 支持的信號(hào)增加,導(dǎo)航模塊需要搬移和處理的數(shù)據(jù)也越來越多,支持全系統(tǒng)全頻點(diǎn)的導(dǎo)航SoC 需要處理數(shù)百個(gè)通道的數(shù)據(jù)。 通用DMA 無法支持?jǐn)?shù)百通道的數(shù)據(jù)搬移,而傳統(tǒng)的CPU 搬移數(shù)據(jù)方式效率會(huì)越來越低。 本設(shè)計(jì)中采用的專用DMA 可以不經(jīng)過CPU 直接將導(dǎo)航通道中的數(shù)據(jù)搬移到靜態(tài)隨機(jī)存取存儲(chǔ)器(Static Random-Access Memory,SRAM)中,這樣CPU 可以直接讀取SRAM 中的數(shù)據(jù)進(jìn)行處理。
圖1 導(dǎo)航SoC 總體結(jié)構(gòu)
DMA 主要完成導(dǎo)航通道中兩類數(shù)據(jù)的搬移工作,一類是跟蹤模塊中相干累加值, 相干累加值1 ms 更新一次,這類數(shù)據(jù)的傳輸稱為DUMP 傳輸。 CPU 根據(jù)相干累加值的計(jì)算結(jié)果調(diào)節(jié)跟蹤環(huán)路的參數(shù)。另一類是用于偽距和載波觀測(cè)值,此值更新頻率為1~20 Hz,這類傳輸稱為TIC 傳輸。CPU 根據(jù)觀測(cè)量計(jì)算用戶的時(shí)間、位置、速度等信息。 DUMP 和TIC 均有標(biāo)志位,當(dāng)標(biāo)志位有效時(shí)表示數(shù)值已更新。 為了保證數(shù)據(jù)不缺失,每隔0.1 ms輪詢檢測(cè)所有信號(hào)所有通道的DUMP 標(biāo)志位,如果標(biāo)志位有效,則搬移該通道DUMP 數(shù)據(jù)。 同樣,每隔2 ms 檢測(cè)TIC 標(biāo)志位,如果標(biāo)志位有效,則DMA 將完成所有信號(hào)所有通道的TIC 數(shù)據(jù)的搬移。
專用DMA 的總體結(jié)構(gòu)如圖2 所示。
圖2 專用DMA 總體結(jié)構(gòu)
專用DMA 主要由AHB 主機(jī)接口、AHB 從機(jī)接口、配置模塊、控制狀態(tài)機(jī)、傳輸狀態(tài)機(jī)以及狀態(tài)機(jī)轉(zhuǎn)接口六個(gè)部分組成。 在AHB 總線上,DMA 既是主機(jī)又是從機(jī)。 它通過AHB 主機(jī)接口讀寫導(dǎo)航模塊數(shù)據(jù)并將其存儲(chǔ)到SRAM 中,而處理器通過AHB 從機(jī)接口對(duì)DMA 進(jìn)行配置。配置模塊將處理器的配置寄存并分發(fā)到其他各個(gè)模塊。 控制狀態(tài)機(jī)和傳輸狀態(tài)機(jī)主要負(fù)責(zé)控制DMA的數(shù)據(jù)搬移。狀態(tài)機(jī)轉(zhuǎn)接口模塊主要負(fù)責(zé)數(shù)據(jù)緩存和提供總線數(shù)據(jù)和地址。
在DMA 的RTL 級(jí)代碼設(shè)計(jì)過程中使用低功耗設(shè)計(jì)方法。常用的低功耗設(shè)計(jì)技術(shù)有并行處理、流水線、資源共享、操作數(shù)隔離以及門控時(shí)鐘等方法。在DMA RTL 代碼設(shè)計(jì)過程主要使用了資源共享和門控時(shí)鐘的低功耗優(yōu)化方法[12-14]。
DMA 的工作狀態(tài)可以由處理器進(jìn)行配置。 DMA 是否工作以及工作時(shí)進(jìn)行哪些通道的數(shù)據(jù)檢測(cè)和搬移都可以通過處理器進(jìn)行配置。
處理器對(duì)DMA 的配置數(shù)據(jù)經(jīng)過AHB 從機(jī)接口進(jìn)入DMA 之后先在配置模塊進(jìn)行寄存,然后由配置模塊分發(fā)到其他各個(gè)部分。處理器也可以通過讀取特定地址來獲取當(dāng)前SRAM 的寫入地址。
控制狀態(tài)機(jī)主要控制DMA 進(jìn)入不同的傳輸模式,總共有三個(gè)狀態(tài),CTRL_IDLE 表示初始狀態(tài)或者正在等待,CTRL_DUMP_TRANSFER 表示正在進(jìn)行DUMP 傳輸,CTRL_TIC_TRANSFER 表示正在進(jìn)行TIC 傳輸,狀態(tài)轉(zhuǎn)移圖如圖3 所示。
圖3 控制狀態(tài)機(jī)狀態(tài)轉(zhuǎn)移圖
此模塊中有兩個(gè)計(jì)數(shù)器,一個(gè)DUMP 計(jì)數(shù)器,一個(gè)TIC 計(jì)數(shù)器,這兩個(gè)計(jì)數(shù)器用來計(jì)算等待時(shí)間。 每隔0.1 ms 進(jìn)行一次DUMP 傳輸,即進(jìn)入CTRL_DUMP_TRANSFER 狀態(tài)。每隔2 ms 進(jìn)行一次TIC 傳輸,即進(jìn)入CTRL_TIC_TRANSFER 狀態(tài)。 其他時(shí)候在CTRL_IDLE 狀態(tài)進(jìn)行等待。
當(dāng)控制狀態(tài)機(jī)控制DMA 進(jìn)行DUMP 或者TIC 傳輸之后,傳輸狀態(tài)機(jī)開始工作。它控制DMA 進(jìn)行不同的檢測(cè)和傳輸工作。
對(duì)于DUMP 模式,狀態(tài)機(jī)轉(zhuǎn)移圖如圖4 所示。 DMA將輪詢檢測(cè)導(dǎo)航模塊中的各個(gè)通道的標(biāo)志位,如果標(biāo)志位有效,則將該通道的數(shù)據(jù)搬移到SRAM 中,并清除該通道的標(biāo)志位,然后繼續(xù)檢測(cè)下一通道。 如果標(biāo)志位無效,則不進(jìn)行任何操作,繼續(xù)檢測(cè)下一個(gè)通道。如果所有的通道全部檢測(cè)并傳輸完畢,則傳輸狀態(tài)機(jī)向控制狀態(tài)機(jī)發(fā)送完成信號(hào),控制狀態(tài)機(jī)進(jìn)入CTRL_IDLE 狀態(tài),等待下一次傳輸。
圖4 DUMP 模式時(shí)傳輸狀態(tài)機(jī)狀態(tài)轉(zhuǎn)移圖
圖5 TIC 模式時(shí)傳輸狀態(tài)機(jī)狀態(tài)轉(zhuǎn)移圖
對(duì)于TIC 模式,狀態(tài)機(jī)轉(zhuǎn)移圖如圖5 所示。 DMA 將先檢測(cè)TIC 標(biāo)志位,如果標(biāo)志位有效,則將導(dǎo)航模塊中所有開啟的通道中TIC 數(shù)據(jù)搬移到SRAM 中,傳輸完成后清除TIC 標(biāo)志位。 如果TIC 標(biāo)志位無效或者所有通道上數(shù)據(jù)傳輸完成,則傳輸狀態(tài)機(jī)向控制狀態(tài)機(jī)發(fā)送完成信號(hào),退出TIC 傳輸狀態(tài)。
DMA 模塊有兩個(gè)AHB 接口,一個(gè)主機(jī)接口,一個(gè)從機(jī)接口。 DMA 通過主機(jī)接口經(jīng)過AHB 總線讀取導(dǎo)航模塊的數(shù)據(jù),將其緩存到移位寄存器中,待寫狀態(tài)時(shí)將數(shù)據(jù)寫到掛載在AHB 總線上的SRAM 中。 從機(jī)接口使DMA 可以作為AHB 總線上的從機(jī),這樣CPU 就可以通過AHB 總線對(duì)DMA 寄存器進(jìn)行配置[15]。
DMA 模塊使用Verilog 語言編寫,采用TSMC 90 nm 工藝進(jìn)行綜合驗(yàn)證。時(shí)鐘約束為200 MHz,面積為40 345 μm2。使用Primetime PX 工具進(jìn)行功耗分析,在DMA 設(shè)計(jì)過程中,使用了低功耗設(shè)計(jì)方法,其中寄存器插入時(shí)鐘門控電路的比例為99.41%。 表1 為優(yōu)化后與優(yōu)化前功耗對(duì)比。
由表1 可知低功耗優(yōu)化方法使DMA 模塊的功耗降低至15%。
在導(dǎo)航SoC 中對(duì)DMA 模塊進(jìn)行數(shù)據(jù)搬移測(cè)試。 CPU1分別對(duì)GNSS 模塊和DMA 模塊進(jìn)行配置使其進(jìn)行不同通道數(shù)的數(shù)據(jù)搬移,另外采用CPU1 直接搬移相同配置的導(dǎo)航數(shù)據(jù)作為對(duì)比。 測(cè)試結(jié)果如圖6 所示。
表1 低功耗優(yōu)化與非低功耗優(yōu)化DMA 模塊功耗對(duì)比(mW)
圖6 不同配置下數(shù)據(jù)搬移周期對(duì)比
由于GNSS 模塊與AHB 總線不在同一個(gè)時(shí)鐘域,因此DMA 和CPU 在讀取GNSS 模塊數(shù)據(jù)時(shí)需要進(jìn)行握手操作,因此讀取一個(gè)GNSS 模塊中的數(shù)據(jù)需要花費(fèi)10 個(gè)周期。 在計(jì)算CPU 搬移數(shù)據(jù)所需要的周期時(shí)不考慮進(jìn)入中斷和中斷返回的開銷。 由圖6 可知,相同通道數(shù)的配置下,DMA 搬移數(shù)據(jù)所需要的周期數(shù)為CPU 的三分之一,且DMA 在進(jìn)行數(shù)據(jù)搬移的過程中不需要CPU 的干預(yù),這樣就提高了CPU 的工作效率。
本文實(shí)現(xiàn)了一款應(yīng)用于導(dǎo)航SoC 的專用DMA,該DMA 支持全系統(tǒng)全頻點(diǎn)導(dǎo)航通道的數(shù)據(jù)搬移。與傳統(tǒng)的CPU 搬移數(shù)據(jù)方法進(jìn)行比較,數(shù)據(jù)搬移所需要的周期降為CPU 的三分之一,提高了CPU 的工作效率。 設(shè)計(jì)中采用了低功耗設(shè)計(jì)方法,使功耗降低為原來的15%。