Adam Taylor's博客系列講解在基于ARM的Zynq SoC芯片可編程邏輯上實(shí)現(xiàn)定點(diǎn)數(shù)學(xué)函數(shù)計(jì)算。
我們已經(jīng)在MicroZed 系列的前期博客中學(xué)習(xí)了在PL(可編程邏輯)內(nèi)實(shí)現(xiàn)定點(diǎn)運(yùn)算,現(xiàn)在我們來(lái)分析系統(tǒng)內(nèi)如何執(zhí)行這些函數(shù),將會(huì)發(fā)現(xiàn)令人驚訝的結(jié)果。
在編寫代碼前,需要確定我們?cè)谔囟▽?shí)例中用到的比例因子(小數(shù)點(diǎn)位置)。在這個(gè)示例中,輸入信號(hào)將在0至10范圍內(nèi),所以我們可以在16位的輸入向量?jī)?nèi)封裝4個(gè)小數(shù)位和12個(gè)分?jǐn)?shù)位。
執(zhí)行上述等式,其中有三個(gè)常量 A, B和C:
我們需要在計(jì)算中縮放這些常量。在FPGA這樣做的好處在于,我們可以分別擴(kuò)展每個(gè)常數(shù)以優(yōu)化性能,如表所示:

執(zhí)行上述公式后,我們需要考慮合成向量的擴(kuò)展,如下圖的Ax2 and Bx:

要執(zhí)行最后加上常量C,我們需要對(duì)齊小數(shù)位。因此,我們需要將Ax2 和Bx的結(jié)果值除以2的乘方,對(duì)齊常量C的小數(shù)位。結(jié)果值的格式為8,8。

完成上述計(jì)算后,我們開始在前期博客中創(chuàng)建的Vivado外設(shè)中執(zhí)行設(shè)計(jì)。第一步是打開Vivado內(nèi)的框圖,右鍵單擊外設(shè),然后選擇“Edit in IP Packager”。當(dāng)IP Packager在頂層文件中打開后,我們可以很容易地執(zhí)行簡(jiǎn)單進(jìn)程,可在數(shù)個(gè)時(shí)鐘周期數(shù)完成計(jì)算。(這個(gè)實(shí)例中是5個(gè)時(shí)鐘周期,您也可進(jìn)行進(jìn)一步優(yōu)化。)

現(xiàn)在我們可在Vivado內(nèi)重新封裝和重要?jiǎng)?chuàng)建項(xiàng)目(記得更新版本號(hào)),然后將更新的硬件導(dǎo)出至SDK。
在SDK內(nèi)我們可以使用此前使用的相同方法,唯一不同的是以前使用的是浮點(diǎn)系統(tǒng),現(xiàn)在使用的是定點(diǎn)系統(tǒng):

在MicroZed板創(chuàng)建上述代碼并運(yùn)行后,通過通過串行鏈路輸出以下結(jié)果:33610除以2 ^ 8結(jié)果等于131.289,這個(gè)結(jié)果值是正確的, (參見Zynq PS/PL, 第5篇: Adam Taylor’s MicroZed 系列25)。

計(jì)算結(jié)果相同,但最大的區(qū)別是計(jì)算時(shí)間。雖然由于外設(shè)執(zhí)行實(shí)際計(jì)算只需要5個(gè)時(shí)鐘周期,但生成這個(gè)結(jié)果值消耗140個(gè)時(shí)鐘周期或42ns,而在使用ARM Cortex-A9處理器在 Zynq SoC PS消耗了25個(gè)時(shí)鐘周期。
為什么會(huì)產(chǎn)生差異?難道可編程邏運(yùn)行速度不夠快?
這就需要在外設(shè)I / O開銷的中所學(xué)到的技巧。使用PL,我們必須考慮基于AXI總線和AXI總線頻率的總線延時(shí),在這個(gè)應(yīng)用程序中是142.8MHz (所要求的是150兆)。AXI總線開銷導(dǎo)致計(jì)算時(shí)間長(zhǎng)于預(yù)期。當(dāng)然所有努力并非徒勞,我們只是執(zhí)行錯(cuò)誤。由于I / O開銷的原因,不應(yīng)使用這種方式卸載Zynq SoC PL任務(wù)。
如果我們要采取更加合理的方法,我們會(huì)使用DMA發(fā)送至外設(shè)提出計(jì)算要求,正如我在博客系列對(duì)有關(guān)PL / PL接口所解釋的那樣。這個(gè)例子說明了DMA的重要性,我將在下一個(gè)博客中對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行解釋。
原文鏈接:
? Copyright 2014 Xilinx Inc
如需轉(zhuǎn)載,請(qǐng)注明出處
電子發(fā)燒友App



































評(píng)論