Noam Levine 和 David Skolnick
到目前為止,我們已經(jīng)描述了DSP處理器的物理架構(gòu),解釋了DSP如何提供與傳統(tǒng)模擬電路相比的一些優(yōu)勢,并研究了數(shù)字濾波,展示了DSP的可編程特性如何適用于此類算法?,F(xiàn)在,我們來看看在硬件平臺ADSP-2 EZ-Kit Lite&tm;上實(shí)現(xiàn)有限脈沖響應(yīng)(FIR)濾波器算法的過程(在第2100部分中簡要介紹,在ADSP-2181系列匯編代碼中實(shí)現(xiàn))。該實(shí)現(xiàn)已擴(kuò)展為處理數(shù)據(jù) I/O 問題。
使用數(shù)字濾波器
DSP的許多架構(gòu)特性,例如執(zhí)行零開銷環(huán)路的能力,以及在單個處理器周期中獲取兩個數(shù)據(jù)值的能力,對于實(shí)現(xiàn)此濾波器非常有用。簡要回顧一下,F(xiàn)IR濾波器是一種全零濾波器,它是通過將具有濾波器系數(shù)的輸入數(shù)據(jù)點(diǎn)序列進(jìn)行卷積來計算的。其控制方程和直接形式表示如圖1所示。
圖1.直接形式的FIR濾波器結(jié)構(gòu)。
在此結(jié)構(gòu)中,每個“z–1“框表示輸入數(shù)據(jù)歷史記錄的單個增量,采用 z 變換表示法。將每個連續(xù)延遲的樣本乘以適當(dāng)?shù)南禂?shù)值 h(m),并將結(jié)果加在一起,生成一個值,表示對應(yīng)于第 n 個輸入樣本的輸出。延遲元件或濾波器抽頭的數(shù)量及其系數(shù)值決定了濾波器的性能。
濾波器結(jié)構(gòu)通過使用DSP進(jìn)行計算來建議實(shí)現(xiàn)此算法所需的物理元素。對于計算本身,每個輸出樣本都需要多次等于濾波器長度的乘法累加運(yùn)算。
輸入數(shù)據(jù)的延遲塊和系數(shù)值列表需要 DSP 中保留的內(nèi)存區(qū)域來存儲數(shù)據(jù)值和系數(shù)。DSP的增強(qiáng)型哈佛架構(gòu)允許程序員將數(shù)據(jù)存儲在程序存儲器和數(shù)據(jù)存儲器中,從而在每個周期內(nèi)從DSP的內(nèi)部SRAM執(zhí)行兩次同時存儲器訪問。通過數(shù)據(jù)存儲器保存?zhèn)魅氲臉颖?,程序存儲器存儲系?shù)值,可以在一個周期內(nèi)獲取數(shù)據(jù)值和系數(shù)值以進(jìn)行計算。
此 DSP 架構(gòu)支持使用循環(huán)緩沖的程序(在第 2 部分和本期后面的部分中簡要討論)。這意味著地址指針只需要在程序開始時初始化,循環(huán)緩沖機(jī)制確保指針不會離開其分配的內(nèi)存緩沖區(qū)的邊界 - 這是FIR濾波器代碼中廣泛用于輸入延遲線和系數(shù)的功能。一旦確定了程序的元素,下一步就是開發(fā)DSP源代碼來實(shí)現(xiàn)算法。
開發(fā) DSP 軟件
ADSP-2100系列的軟件開發(fā)流程包括以下步驟:架構(gòu)描述、源代碼生成、軟件驗證(調(diào)試)和硬件實(shí)現(xiàn)。圖 2 顯示了一個典型的開發(fā)周期。
圖2.軟件開發(fā)流程。
架構(gòu)說明:首先,用戶創(chuàng)建運(yùn)行算法的硬件系統(tǒng)的軟件描述。系統(tǒng)描述文件包括系統(tǒng)中的所有可用內(nèi)存和任何內(nèi)存映射的外設(shè)。以下是使用ADSP-2181 EZ-Kit Lite的此過程示例。
源代碼生成:從理論到實(shí)踐,這一步——將算法思想轉(zhuǎn)化為在DSP上運(yùn)行的代碼——通常是過程中最耗時的步驟。有幾種方法可以生成源代碼。一些程序員更喜歡用高級語言(如 C)編寫算法;其他人更喜歡使用處理器的本機(jī)匯編語言。對于程序員來說,C 語言的實(shí)現(xiàn)可能更快,但編譯的 DSP 代碼由于沒有充分利用處理器的架構(gòu)而缺乏效率。
匯編代碼通過充分利用處理器的設(shè)計,可以產(chǎn)生高效的實(shí)現(xiàn)。但是程序員需要熟悉處理器的本機(jī)匯編語言。最有效的方法是將C語言與系統(tǒng)的時間關(guān)鍵型數(shù)學(xué)密集型部分的匯編代碼相結(jié)合。在任何情況下,程序員都必須了解處理器的系統(tǒng)約束和外設(shè)細(xì)節(jié)。本文中的FIR濾波器系統(tǒng)示例使用ADSP-2100系列的本機(jī)匯編語言。
軟件驗證(“調(diào)試”): 此階段使用稱為模擬器的軟件工具測試代碼生成的結(jié)果,以檢查程序的邏輯流并驗證算法是否按預(yù)期執(zhí)行。模擬器是DSP處理器的模型,它a)提供對所有存儲器位置和處理器寄存器的可見性,b)允許用戶連續(xù)運(yùn)行DSP代碼或一次運(yùn)行一條指令,c)可以模擬向處理器饋送數(shù)據(jù)的外部設(shè)備。
硬件實(shí)現(xiàn):在這里,代碼在真正的DSP上運(yùn)行,通常分幾個階段:a)在EZ-Kit Lite等評估平臺上試用;b) 在線仿真,以及 c) 生產(chǎn) ROM 生成。試用提供程序操作的快速通過/不通過確定;此技術(shù)是本文中使用的實(shí)現(xiàn)方法。在線仿真監(jiān)控系統(tǒng)中的軟件調(diào)試,其中EZ-ICE等工具可以?控制目標(biāo)平臺上的處理器操作。所有調(diào)試完成后,可以生成最終代碼的引導(dǎo)ROM;它用作最終的生產(chǎn)實(shí)現(xiàn)。
使用ADSP-2181 EZ-Kit Lite
我們的開發(fā)周期示例介紹了整個過程,使用ADSP-2181 EZ-Kit Lite(開發(fā)包ADDS-21xx- EZLITE)作為濾波器算法的目標(biāo)硬件。EZ-Kit Lite是一款低成本演示和開發(fā)平臺,由一個33 MHz ADSP-2181處理器、一個AD1847立體聲音頻編解碼器和一個插座式EPROM組成,后者包含用于通過RS-232連接將新算法下載到DSP的監(jiān)控代碼(圖3)。
圖3.EZ-Kit Lite 板的布局。
要完成架構(gòu)描述階段,需要知道DSP可用的存儲器和存儲器映射外設(shè)。程序員將此信息存儲在系統(tǒng)描述文件中,以便開發(fā)工具軟件可以為目標(biāo)系統(tǒng)生成適當(dāng)?shù)拇a。EZ-Kit Lite不需要DSP外部的存儲器,因為片上可用存儲器由ADSP-16的程序存儲器(PM)SRAM的384,2181個位置和數(shù)據(jù)存儲器(DM)SRAM的16,352個位置組成。(用于系統(tǒng)控制寄存器的 32 個 DM 位置不可用于工作代碼)。有關(guān)ADSP-2181、EZ-Kit Lite架構(gòu)和相關(guān)主題的更多信息,請參見本文末尾提到的文本。
可用的系統(tǒng)資源信息記錄在系統(tǒng)描述文件中,供ADSP-2100系列開發(fā)工具使用。系統(tǒng)描述文件具有.SYS擴(kuò)展名。以下列表顯示了系統(tǒng)描述文件 [EZKIT_LT.SYS]:
.系統(tǒng)EZ_LITE; /* 為這個系統(tǒng)命名 */
.adsp2181; /* 指定處理器 */
.mmap0; /* 指定系統(tǒng)引導(dǎo),并且 */,
/* PM 位置 0 在內(nèi)部存儲器中 */
.seg/PM/RAM/ABS=0/code/data int_pm[16384];
.seg/DM/RAM/ABS=0 int_dm[16352];
.endsys; /* 結(jié)束描述 */
該列表將 PM 的 16,384 個位置聲明為 RAM,從地址 0 開始,以便將代碼段和數(shù)據(jù)值都放置在那里。還聲明了 16,352 個可用位置的數(shù)據(jù)存儲器作為 RAM,從地址 0 開始。由于這些處理器使用具有兩個不同內(nèi)存空間的哈佛體系結(jié)構(gòu),因此 PM 地址 0 不同于 DM 地址 0。ADSP-2181 EZ-Kit Lite的編解碼器使用串行端口連接到DSP,該串行端口未在系統(tǒng)描述文件中聲明。要使系統(tǒng)描述文件可用于其他軟件工具,系統(tǒng)組裝器實(shí)用程序 BLD21 會將.SYS文件轉(zhuǎn)換為體系結(jié)構(gòu)或 。呵呵,文件。系統(tǒng)構(gòu)建器的輸出是一個名為 EZKIT_LT 的文件。哎呀。
編寫完代碼后,下一步是生成可執(zhí)行文件,即將代碼轉(zhuǎn)換為DSP可以執(zhí)行的指令。第一個組裝DSP代碼。這會將程序文件轉(zhuǎn)換為其他開發(fā)工具可以處理的格式。匯編還會檢查代碼是否存在語法錯誤。接下來,使用體系結(jié)構(gòu)文件中聲明的可用內(nèi)存鏈接代碼以生成 DSP 可執(zhí)行文件。鏈接器將源代碼中的所有代碼和數(shù)據(jù)放入內(nèi)存空間;輸出是一個DSP可執(zhí)行文件,可以下載到EZ-Kit Lite板。
生成過濾器代碼
本系列的第 2 部分 [模擬對話 31-2,第 14 頁,圖 6] 介紹了 FIR 濾波器的小型匯編代碼列表。在這里,該代碼被增強(qiáng)以包含一些特定于 EZ-Kit Lite 的功能,特別是編解碼器初始化和數(shù)據(jù) I/O。核心濾波器算法元素(乘法累加、使用循環(huán)緩沖區(qū)對數(shù)據(jù)和系數(shù)進(jìn)行數(shù)據(jù)尋址,以及對零開銷循環(huán)效率的依賴)不會改變。
輸入數(shù)據(jù)將使用板載AD1847編解碼器進(jìn)行采樣,該編解碼器具有可編程采樣速率、輸入增益、輸出衰減、輸入選擇和輸入混頻功能。其可編程特性使系統(tǒng)具有靈活性,但它也增加了編程任務(wù),以便為DSP系統(tǒng)初始化它。
訪問數(shù)據(jù)
在本例中,編解碼器的一系列控制字(將在列表第一部分中的程序開頭定義)將初始化編解碼器,使其具有8 kHz采樣率,每個輸入通道上的增益值適中。由于AD1847是可編程的,用戶通常會重復(fù)使用接口和初始化代碼段,僅更改不同應(yīng)用的特定寄存器值。此示例會將特定的篩選器段添加到 EZ-Kit Lite 軟件中找到的現(xiàn)有代碼段。
此接口代碼聲明內(nèi)存中用于數(shù)據(jù) I/O 的兩個區(qū)域:“tx_buf”(用于從編解碼器傳輸出的數(shù)據(jù))和“rx_buf”(用于接收傳入數(shù)據(jù))。這些內(nèi)存區(qū)域或緩沖區(qū)中的每一個都包含三個元素:控制或狀態(tài)字、左通道數(shù)據(jù)和右通道數(shù)據(jù)。對于每個采樣周期,DSP 將從編解碼器接收狀態(tài)字、左通道數(shù)據(jù)和右通道數(shù)據(jù)。在每個采樣周期,DSP必須向編解碼器提供發(fā)射控制字、左聲道數(shù)據(jù)和右聲道數(shù)據(jù)。在此應(yīng)用程序中,發(fā)送到編解碼器的控制信息不會更改,因此傳輸數(shù)據(jù)緩沖區(qū)中的第一個單詞將保持原樣。我們假設(shè)源是使用右聲道的單聲道麥克風(fēng)(無需擔(dān)心左聲道輸入數(shù)據(jù))。
使用EZ-Kit Lite軟件中的I / O shell程序,我們只需要參與標(biāo)有“input_samples”的代碼部分。當(dāng)從準(zhǔn)備處理的編解碼器接收到新數(shù)據(jù)時,將訪問此部分代碼。如果只需要正確的通道數(shù)據(jù),我們需要讀取位于數(shù)據(jù)存儲器中位置rx_buf + 2的數(shù)據(jù),并將其放入數(shù)據(jù)寄存器中以饋入濾波器程序。
來自編解碼器的數(shù)據(jù)需要使用ADSP-2181的循環(huán)緩沖功能通過輸入延遲線饋入濾波器算法。輸入延遲塊的長度由濾波器使用的系數(shù)數(shù)決定。由于數(shù)據(jù)緩沖區(qū)是循環(huán)的,因此緩沖區(qū)中最早的數(shù)據(jù)值將位于上次訪問篩選器后指針指向的任何位置(圖 4)。同樣,每次通過濾波器始終以相同的順序訪問的系數(shù)也放置在程序存儲器的循環(huán)緩沖區(qū)中。
圖4.對篩選數(shù)據(jù)使用循環(huán)緩沖區(qū)的示例 輸入。
算法代碼
要對接收到的數(shù)據(jù)進(jìn)行操作,只需進(jìn)行少量修改即可使用上一期中發(fā)布的代碼部分。為了實(shí)現(xiàn)這個過濾器,我們需要使用乘法/累加(MAC)計算單元和數(shù)據(jù)地址生成器。
ADSP-2181的MAC將結(jié)果存儲在40位寄存器中(32個2位字的乘積為16位,8位允許總和擴(kuò)展而不會溢出)。這允許中間篩選器值根據(jù)需要增長和收縮,而不會損壞數(shù)據(jù)。使用的代碼段是通用的(即,可用于任何長度的過濾器);因此,MAC的額外輸出位允許運(yùn)行具有未知數(shù)據(jù)的任意過濾器,而不必?fù)?dān)心丟失數(shù)據(jù)。
為了實(shí)現(xiàn)FIR濾波器,對濾波器在每個數(shù)據(jù)點(diǎn)上的所有抽頭重復(fù)乘法/累加操作。為此(并為下一個數(shù)據(jù)點(diǎn)做好準(zhǔn)備),MAC 指令以循環(huán)的形式編寫。ADSP-21xx的零開銷環(huán)路功能允許在指定數(shù)量的計數(shù)內(nèi)重復(fù)MAC指令,而無需編程干預(yù)。計數(shù)器設(shè)置為抽頭數(shù)減一,循環(huán)機(jī)制自動減少每個循環(huán)操作的計數(shù)器。將循環(huán)計數(shù)器設(shè)置為“taps–1”可確保數(shù)據(jù)指針在執(zhí)行完成后最終位于正確的位置,并允許最終 MAC 操作包括舍入。由于AD1847為16位編解碼器,因此具有舍入功能的MAC可提供四舍五入到最接近的16位值的統(tǒng)計無偏結(jié)果。此最終結(jié)果將寫入編解碼器。
為了獲得最佳代碼執(zhí)行,每個指令周期都應(yīng)執(zhí)行有意義的數(shù)學(xué)計算。ADSP-21xxs通過多功能指令實(shí)現(xiàn)這一點(diǎn):處理器可以在同一指令周期內(nèi)執(zhí)行多種功能。對于FIR濾波器代碼,每個乘法累加(MAC)操作可以與兩個數(shù)據(jù)訪問并行執(zhí)行,一個來自數(shù)據(jù)存儲器,一個來自程序存儲器。此功能意味著在每次循環(huán)迭代中都會執(zhí)行 MAC 操作。同時,正在獲取下一個數(shù)據(jù)值和系數(shù),并且計數(shù)器會自動遞減。所有這些都不會浪費(fèi)時間維護(hù)循環(huán)。
當(dāng)為每個輸入數(shù)據(jù)樣本執(zhí)行濾波器代碼時,MAC環(huán)路的輸出將被寫入輸出數(shù)據(jù)緩沖區(qū),tx_buf。雖然該程序僅處理單通道輸入數(shù)據(jù),但結(jié)果將通過寫入內(nèi)存緩沖區(qū)地址 tx_buf+1 和 tx_buf+2 寫出到兩個通道。
最終的源代碼列表顯示在第 15 頁。過濾器算法本身列在“中斷服務(wù)例程”下。其余代碼用于編解碼器和 DSP 初始化以及中斷服務(wù)例程定義。這些主題將在本系列的后續(xù)部分中探討。
The EZ-Kit Lite
EZ-Kit Lite隨附的基于Windows的監(jiān)控軟件可以將可執(zhí)行文件加載到EZ-Kit Lite板上的ADSP-2181中。這是通過下拉的“加載”菜單選擇“下載用戶程序并轉(zhuǎn)到”來完成的(圖5)。這會將濾波器程序下載到ADSP-2181并開始程序執(zhí)行。
圖5.EZ-Kit 精簡版下載菜單。
本文的目的是概述從算法描述到可在硬件開發(fā)平臺上運(yùn)行的 DSP 可執(zhí)行程序的步驟。引入的問題包括軟件開發(fā)流程、架構(gòu)描述、源代碼生成、數(shù)據(jù) I/O 和 EZ-Kit Lite 硬件平臺。
與每個主題相關(guān)的許多細(xì)節(jié)級別,這篇簡短的文章無法公正地對待。更多信息可在以下參考資料中找到。本系列將繼續(xù)在此應(yīng)用程序的基礎(chǔ)上構(gòu)建其他主題。下一篇文章將通過處理器中斷結(jié)構(gòu)更詳細(xì)地研究數(shù)據(jù)輸入/輸出 (I/O) 問題,并討論簡單濾波器算法的其他功能。
審核編輯:郭婷
-
處理器
+關(guān)注
關(guān)注
68文章
19103瀏覽量
228824 -
dsp
+關(guān)注
關(guān)注
552文章
7959瀏覽量
347933 -
濾波器
+關(guān)注
關(guān)注
160文章
7705瀏覽量
177489
發(fā)布評論請先 登錄
相關(guān)推薦
評論