我們先來了解一下上節(jié)中介紹的Zynq SoC PS/PL接口,我創(chuàng)建一個(gè)很簡單的外設(shè),使用的是DSP48E1的DSP邏輯片,依靠這個(gè)外設(shè)第一個(gè)寄存器內(nèi)的控制字執(zhí)行乘法,加法或減法。假設(shè)我們需要為一種工業(yè)控制系統(tǒng)在Zynq內(nèi)執(zhí)行更復(fù)雜的計(jì)算。通常,這些系統(tǒng)將通過熱敏電阻、熱電偶、壓力傳感器、鉑電阻溫度計(jì)( PRT)等會(huì)產(chǎn)生多個(gè)模擬輸入(通過ADC)。
來自這些傳感器的數(shù)據(jù)需要經(jīng)過多次轉(zhuǎn)換函數(shù)處理,將來自ADC的原始數(shù)據(jù)值轉(zhuǎn)換成可進(jìn)行下一步計(jì)算的數(shù)據(jù)。其中最好的實(shí)例是使用Zynq XADC,其中在XADCPS.h文件內(nèi)包含了一些內(nèi)函數(shù)/宏,可將原始XADC值轉(zhuǎn)換成電壓或溫度。然而,這些轉(zhuǎn)換是非常簡單的。轉(zhuǎn)換越復(fù)雜, Zynq處理的時(shí)間越長。如果Zynq SoC的可編程邏輯( PL)用于執(zhí)行計(jì)算,則可大大加快計(jì)算速度。另外一個(gè)好處是,處理器將釋放空間,可執(zhí)行其他軟件任務(wù),這樣在使用PL進(jìn)行計(jì)算時(shí),處理帶寬有了顯著改善。
轉(zhuǎn)移函數(shù)越復(fù)雜,處理器用來計(jì)算結(jié)果的時(shí)間越長。舉個(gè)例子,將大氣壓力(單位:毫巴)轉(zhuǎn)換成海拔高度(單位:米),(參見我在Xcell Journal Issue 80?的博客文章 - “FPGA數(shù)學(xué)基礎(chǔ)”)。以下的轉(zhuǎn)換函數(shù)列出0-10毫巴壓力的海拔高度(單位:米):
利用Zynq SoC的處理系統(tǒng)( PS)Zynq按照以下代碼行,執(zhí)行這個(gè)轉(zhuǎn)換函數(shù)很簡單,其中“結(jié)果”是浮點(diǎn)數(shù);轉(zhuǎn)換函數(shù)中定義的a, b,和c 是常數(shù);且i為輸入值:
在這個(gè)例子中我將在“for”循環(huán)語句中使用以上嵌套代碼模擬輸入值的步驟。代碼通過STDOUT輸出結(jié)果。因?yàn)槲乙?jì)算執(zhí)行此計(jì)算的時(shí)間,我將使用專用定時(shí)器來判斷計(jì)算時(shí)間,在開始計(jì)算時(shí)打開計(jì)時(shí)器,在結(jié)束計(jì)算時(shí)關(guān)閉計(jì)時(shí)器:
?
雖然這段代碼可能沒有提供最準(zhǔn)確的時(shí)間基準(zhǔn),但足以說明我們將在接下來幾個(gè)博客中研究的主體。在基于Zynq MicroZed板上運(yùn)行以上代碼,我在終端窗口中得出以下結(jié)果。注:由于我對(duì)STDOUT結(jié)果的格式進(jìn)行了設(shè)定,可將這個(gè)輸出結(jié)果按照逗號(hào)分隔變量 (CSV) 文件提取到Microsoft Excel:
?
對(duì)輸出結(jié)果執(zhí)行簡單的分析表明,計(jì)算結(jié)果平均需要25 CPU_3x2x時(shí)鐘周期。結(jié)果還不錯(cuò)。使用一個(gè)666 MHz的處理器時(shí)鐘發(fā)現(xiàn),這個(gè)計(jì)算占用76納秒。我相信很多人發(fā)現(xiàn)ADC輸出不是浮點(diǎn)數(shù),它是一個(gè)固定點(diǎn)數(shù)。使用整數(shù)函數(shù)重寫函數(shù)代碼得出類似的平均時(shí)鐘周期數(shù)。但是我認(rèn)為在這個(gè)例子中,浮點(diǎn)數(shù)會(huì)更容易使用,避免解釋定點(diǎn)數(shù)系統(tǒng)背后的主題。
確定一個(gè)基準(zhǔn)時(shí)間,即Zynq PS需要多長時(shí)間執(zhí)行中等復(fù)雜程度的轉(zhuǎn)換函數(shù),接下來我們可以看下當(dāng)我們將這個(gè)計(jì)算卸載到設(shè)備的PL側(cè),計(jì)算同一函數(shù)所需要的時(shí)間。
評(píng)論