第三章 實驗平台架構
3.2 軟體架構
本平台的軟體介面,主要可分成兩個部分:一是 HOST 端與 DSP 溝通的 介面,二是 DSP 之間的 McBSP 溝通介面。
3.2.1 Host <-> DSP
此平台在 HOST 端的程式,是以 Visual C 來完成,藉由 PCI 9054 橋 接器的資料交換,達到溝通 DSP 的目的。在此過程中,HOST 端是處於被動 的角色,只有 DSP 可以主動存取 Visual C 執行程式內的資料。
─32─
在 DSP 端傳送的指令格式,我們設定為以下形式:
command 部分是由使用者自行設定需要的指令。Args[6]的部分,表 示從 DSP 傳到 HOST 端,或是由 HOST 端回傳給 DSP 的參數數目,最多可以 達到六個。而 done 的設計,是為了讓 DSP 知道 HOST 端是否正確的接收到 命令。因為這個指令傳送的過程,是利用橋接器裡面 I2O 的通道來傳遞,而 I2O 通道是一個 FIFO 通道,在前面的資料會因為前一次的通訊尚未完成而 未取走,造成通道阻塞的狀況,所以必須要有確認的機制,才能確定傳送與 接收的資料是正確的。
在 Visual C 內,也必須先行定義可以被 DSP 存取的函數〈可視為 DSP 與 HOST 溝通窗口〉,並透過 GPCI_command_descriptor 資料結構來記 錄每一個函數的位址〈可視為一個函數位址對應表〉;在 DSP 端則利用內部 記 憶 體 前 端 預 留 的 16 個 WORD 空 間 , 來 存 放 對 應 於 Visual C 內 GPCI_command_descriptor 的順序〈0X80000000~0x80000010〉,
經由 PCI 9054 傳遞轉換資料,則 PC 端即可知道被呼叫的函數以及傳進來 的參數。
─33─
圖 26 PC 端與 DSP 端溝通架構
此傳送過程中,DSP 必須先向 HOST 端要求一塊 PCI buffer,作為資 料在 PCI bus 上傳輸的空間,而這塊空間,Visual C 與 DSP 都必須互相 知道,才能夠順利的完成資料的傳輸。
3.2.2 DSP <-> DSP
DSP 之間的溝通,是利用內建的 McBSP〈Multichannel Buffered Serial Ports〉介面來溝通。這種介面的特色,是以全雙工〈Full Duplex〉
的模式,來與其他 DSP 單元交換資料,速度為 3.125Mbytes/sec,並且 最多可以擴充至傳收 128 個不同的 channel 資料。傳輸訊號的時脈,可以 由外部輸入或是 DSP 內部產生,增加了此介面的彈性。[10]
─34─
MATLAB 是針對處理矩陣運算而設計的程式開發 軟體,提供了大量複雜的數學函數運算功能,例
─35─
在完成演算法的驗證之後,我們選擇先在 Visual C 再次驗證演算法,
而非直接開始寫入 DSP,主要有兩個原因:第一是原因是雖然 Visual C 與 DSP 都是寫 C code,但是 Visual C 的 debug 介面功能較為強大,在驗 證完畢之後,可以直接移植到 DSP,因此做此選則。第二是 Visual C 可以 透過內建的函式庫,呼叫 MATLAB engine,直皆存取 MATLAB,可以避免 掉在 C 裡面撰寫複雜的繪圖程式,浪費時間。
在完成 Visual C 的驗證之後,我們便可以著手開始撰寫 DSP 程式。德 州儀器公司針對 6000 系列的 DSP,提供了軟體開發工具─CCS〈Code Composer Studio〉,擁有 C compiler,可以讓使用者直階以高階的 C 語言來開發程式,這跟傳統的組合語言撰寫相比較,程式設計者能夠以更快 的速度來撰寫出複雜的程式碼,且在 debug 程式的時候,也會更加的容易。
由於 DSP 是一個嵌入式系統,在硬體資源上,無法像在個人電腦上獲得龐大 的支援,最明顯的就是 DSP 的資料記憶體只有 16K Bytes,完全無法與個 人電腦動輒 256K 以上的記憶體相提並論,這個限制,直接的衝擊了 DSP 程 式執行的效能,也考驗了程式設計師程式撰寫的功力。DSP 程式碼的最佳化,
將在下一個章節有詳細的討論。
─36─
〈functional unit〉,依照功能來做區 分,可分為.D、.S、.L、.M 四種,可 用來處理 6701 所有形式的指令。而這 八個處理單元,如果在指令
圖 30 八個運算單元平行處理組語表示