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