簡簡單單學TI 多核DSP(1):TMS320C6678的架構

一. 這麼學DSP比較有效

在開始C6678的架構講解之前,我想拉出一點篇幅,給大家談一下,根據我個人的理解,怎麼樣才能比較快的學好DSP。

(1)學習DSP,首先要與學MCU區分開,畢竟這是兩個完全不同的架構,而且DSP與MCU的設計思路完全不一樣。MCU是爲通用的控制而設計,DSP則是專爲高速應用而設計;
(2)從硬件的角度來考慮,要玩轉DSP,首先需要仔細閱讀其數據手冊和用戶指南。數據手冊中,重點閱讀DSP的技術指標,最關鍵的是對芯片的電源需求做詳細的瞭解,其中對核電壓的需求一定要認真瞭解,這是DSP穩定運行的基本條件;做硬件設計的人,電源設計是最基本的,不僅要考慮電源的電壓,更重要的是要考慮電源的抗跌落性能、動態性能。尤其在DSP使用場合,高速電路對電源的要求尤其苛刻,尤其是對於上電時序需要特別注意 ;

(3)在對DSP芯片的電源需求做了深入的瞭解後,下一步就是要仔細閱讀如何啓動DSP,前面說了,DSP與MCU不一樣,但是有一點又是非常相似的,就是DSP跟MCU一樣,需要明確的設置好啓動的選項。因爲DSP是獨立的高速信號應用,DSP的控制程序和算法都是獨立的存儲在獨立的存儲空間。所以如何根據產品的需求進行啓動的配置,這是非常重要的;

(4)在瞭解了DSP的啓動選項後,還有一個需要密切關注的,就是對於晶體或者TCXO等等的選擇,這一點爲什麼要提出來,本人是做無線通信的,做基站或者終端,都必須根據網絡的需要,確定你需要的系統基準時鐘的技術指標,如果你選擇的晶體或者TCXO等等指標落後於你的網絡系統的需要,那麼在使用和測試的過程中,將會出現失步的問題。無線通信最嚴重的通信故障就是失步。尤其是我們國家推行的TD-SCDMA以及TDD-LTE都對網絡的同步提出了極爲苛刻的要求,在做DSP設計時,尤其需要對DSP的輸入時鐘根據系統的性能需要,做特別的處理 ;

(5)對於高速DSP,比如我們接下來要講的8核高速DSP TMS320C6678而言,一個至關重要的硬件設計,就是存儲器的設計。尤其是隨着性能的提高,都已經從DDR2升級到DDR3了,爲了追求極速的性能,一定要考慮存儲器的拓撲結構;

(6)進行DSP的產品實際設計前,建議優先採用DSP芯片廠家推薦的開發板或者評估板,做一些技術的準備,從這些開發板的設計資料中,體會設計中需要關注的地方。尤其是8核的TMS320C6678的設計,更加需要關注。這裏我提醒大家,做TMS320C6678的設計,最好不要完全按照自己以前的經驗進行,一定要按照參考設計進行;

(7)作爲DSP軟件工程師來說,比硬件工程師就要幸福多了。DSP的軟件,與目前主流的MCU差不多,同樣也要細分爲驅動程序,LINUX,算法以及應用開發等等。對於LINUX的應用和驅動的開發,這裏就不說了。重點給大家提示驅動開發需要注意的問題,在LINUX或者ANDROID開發中,有很多的驅動軟件,但是DSP的驅動軟件開發,需要下的功夫要多得多。除了大家都關心的驅動通用技術,更重要的是魯棒性;

二.多核DSP的架構

TMS320C6678是KeyStone架構的8核DSP處理器,每個CorePac核的頻率最高爲1.25 GHz,提供強大的定點和浮點運算能力,同時芯片內部集成了Multicore Navigator、RapidIO、千兆以太網和EDMA等外設,由於芯片處理能力強,外設功能豐富,而且片內集成了大量的硬件加速器,例如Packet Accelerator、Multicore Navigator等,可以廣泛地應用在通信、雷達、聲納、火控、電子對抗等領域。從目前的情況看,由於C6678的以上優異的特性,基於TMS320C6678的硬件和軟件平臺,在未來的5~10年內,將是信號處理平臺主流。

TMS320C6678有8個C66x核,典型速度是1GHz,每個核配置爲:
32KB Level 1 Data SRAM,它和DSP 核運行在相同的速度上,可以被用作普通的數據存儲器或數據cache;
32KB Level 1 Program SRAM, 它和DSP 核運行在相同的速度上,可以被用作普通的程序存儲器或程序cache;
512KB LL2 SRAM, 它的運行速度是DSP 核的一半,可以被用作普通存儲器或cache,既可以存放數據也可以存放程序;
所有DSP核共享4MB SL2 SRAM, 它的運行速度是DSP 核的一半,既可以存放數據也可以存放程序。一個64-bit 1333MTS DDR3 SDRAM接口可以支持8GB外部擴展存儲器。
C6678 集成一個64-bit 1333MTS DDR3 SDRAM 接口,可以支持8GB 外部擴展存儲器,既可以存放數據也可以存放程序。它的總線寬度也可以被配置成32 bits 或16 bits。

存儲器訪問性能對 DSP 上軟件運行的效率是非常關鍵的。在 C6678 DSP 上,所有的主模塊,包括多個DSP 核和多個DMA 都可以訪問所有的存儲器。

每個DSP 核每個時鐘週期都可以執行最多128 bits 的load 或store 操作。在1GHz  的時鐘頻率下,DSP 核訪問 L1D SRAM 的帶寬可以達到 16GB/S。當訪問二級(L2)存儲器或外部存儲器時,訪問性能主要取決於訪問的方式和cache。

每個 DSP 核有一個內部 DMA (IDMA),在 1GHz  的時鐘頻率下,它能支持高達 8GB/秒的傳輸。但IDMA 只能訪問L1 和LL2 以及配置寄存器,它不能訪問外部存儲器。DSP 的內部總線交換網絡,TeraNet,提供了C66x 核 (包括其本地存儲器),外部存儲器, EDMA 控制器,和片上外設之間的互聯。總共有 10 個 EDMA 傳輸控制器可以被配置起來同時執行任意存儲器之間的數據傳輸。芯片內部有兩個主要的TeraNet模塊,一個用 128 bit 總線連接每個端點,速度是DSP 核頻率的1/3,理論上,在1GHz 的器件上每個端口支持  5.333GB/秒的帶寬;另一個TeraNet內部總線交換網絡用 256  bit 總線連接每個端點,速度是DSP 核頻率的1/2,理論上,在1GHz 的器件上每個端口支持16GB/秒的帶寬。

在看了上面的介紹後,有三個基本的問題,給大家思考:
(1)如果是拷貝數據,我們應該用DSP核還是DMA?
(2)一個頻繁訪問存儲器的函數會消耗多少時鐘週期?
(3)當多個主模塊共享存儲器時,對某個模塊的性能到底有多大的影響?

下面的一些測試數據是在EVM上的結果,在這裏引用用來作性能評估參考 ,詳細的文檔在TI技術支持中文網站(www.deyisupport.com)下載:
http://www.deyisupport.com/quest ... e/f/53/t/21924.aspx

(1)1GHz C6678 上C66x 核,IDMA 和EDMA 的理論帶寬


(2)1GHz C6678 上各種存儲器端口的理論帶寬


(3)DSP 核,EDMA 和IDMA 數據拷貝的吞吐量比較



從以上測試結果可以得出,DSP核與內部存儲器之間數據交換的效率非常高,可是與外部存儲器的交換則顯得不那麼激動人心;IDMA非常適用於DSP核本地存儲器 (L1D,L1P,LL2)內連續數據塊的傳輸,但不能訪問共享存儲器 (SL2, DDR);所以外部存儲器的大塊數據訪問則應儘量使用EDMA。
Cache 配置顯著地影響DSP 核的訪問性能,預取緩衝器能提高讀訪問的效率,但對EDMA 和IDMA沒有影響。測試結果是在cache和預取緩衝器在測試前被清空。

對DSP 核,SL2 可以通過從0x0C000000 開始的缺省地址空間被訪問,通常這個地址空間被設置爲cacheable 而且prefetchable。SL2 可以通過XMC (eXtended Memory Controller)被重映射到其它存儲器空間,通常重映射空間被用作non-cacheable, nonprefetchable訪問(當然它也可以被設置爲cacheable 而且prefetchable)。通過缺省地址空間訪問比通過重映射空間訪問稍微快一點。

前面列出的EDMA 吞吐量數據是在EDMA CC0 (Channel Controller 0) TC0 (Transfer Controller 0)上測得的,EDMA CC1 和EDMA CC2 的吞吐量比EDMA CC0 低一些。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章