Adam Taylor's博客系列講解基于ARM的Zynq SoC芯片可編程邏輯實(shí)現(xiàn)定點(diǎn)算法以提高性能。
這個(gè)博客系列每周發(fā)布,迄今為止已經(jīng)發(fā)布了6個(gè)月,我們?cè)赯ynq SoC處理器系統(tǒng)(PS)中實(shí)現(xiàn)了轉(zhuǎn)換函數(shù),并粗略測量了計(jì)算時(shí)間。在這個(gè)博客中我們開始了解在之前創(chuàng)建的外設(shè)添加VHDL(或Verilog)代碼所需要執(zhí)行的任務(wù),以實(shí)現(xiàn)和加速同一轉(zhuǎn)換函數(shù)。我們將使用定點(diǎn)數(shù)值系統(tǒng)執(zhí)行這個(gè)任務(wù)。因此本篇博客將介紹定點(diǎn)函數(shù),以及如何在Zynq SoC可編輯邏輯中如何實(shí)現(xiàn)這個(gè)函數(shù)。
在設(shè)計(jì)中有兩種方法表示數(shù)值:定點(diǎn)和浮點(diǎn)。定點(diǎn)表示指小數(shù)點(diǎn)在固定位置,極大簡化了算術(shù)運(yùn)算。定點(diǎn)數(shù)由兩個(gè)部分組成:整數(shù)部分和小數(shù)部分,如圖所示:
數(shù)值的整數(shù)部分在隱小數(shù)點(diǎn)左側(cè),而數(shù)值的小數(shù)部分在隱小數(shù)點(diǎn)右側(cè)。上述定點(diǎn)數(shù)能夠表示在0.0至255.9906375之間的無符號(hào)數(shù),或者使用兩個(gè)補(bǔ)碼表示在–128.9906375至127.9906375之間的有符號(hào)數(shù)。
浮點(diǎn)數(shù)由兩個(gè)部分組成,即指數(shù)和尾數(shù)。浮點(diǎn)表示法使得小數(shù)點(diǎn)按照數(shù)值的數(shù)量級(jí)在數(shù)值內(nèi)浮動(dòng)。
定點(diǎn)數(shù)的缺點(diǎn)是表示較大數(shù)值或獲取帶有小數(shù)的精確結(jié)果值時(shí),需要更多的位數(shù)。雖然FPGA可支持定點(diǎn)數(shù)和浮點(diǎn)數(shù),但大多數(shù)應(yīng)用程序選擇使用定點(diǎn)數(shù),主要是因?yàn)槎c(diǎn)數(shù)系統(tǒng)更容易實(shí)現(xiàn)。
在設(shè)計(jì)中我們可選擇使用符號(hào)數(shù)或無符號(hào)數(shù)。一般地,怎樣選擇數(shù)值受所實(shí)現(xiàn)的算法約束。無符號(hào)數(shù)可表示0 至2n – 1之間的數(shù)值,總是表示正數(shù)。符號(hào)數(shù)使用兩個(gè)補(bǔ)碼數(shù)系統(tǒng)表示正數(shù)和負(fù)數(shù)。兩個(gè)補(bǔ)碼數(shù)系統(tǒng)可利用兩個(gè)數(shù)相加來表示一個(gè)數(shù)減去另一個(gè)數(shù)。兩個(gè)補(bǔ)碼數(shù)可表示為:
在定點(diǎn)數(shù)中表示整數(shù)位和小數(shù)位之間分割的一般方法是 x,y,其中x表示整數(shù)位數(shù),而y表示小數(shù)位數(shù)。例如8,8表示8個(gè)整數(shù)位,8個(gè)小數(shù)位,而16,0表示16個(gè)整數(shù)位,0個(gè)小數(shù)位。
在許多情況下,在設(shè)計(jì)時(shí)已經(jīng)確定整數(shù)位和小數(shù)位的位數(shù),一般按照浮點(diǎn)算法轉(zhuǎn)換。由于FPGA具有靈活性,可表示任意位數(shù)的定點(diǎn)數(shù);FPGA支持32位、64位或甚至128位寄存器。FPGA同樣支持15位、37位、1024位寄存器。我們可擴(kuò)展硬件準(zhǔn)確地解決問題。
必要的整數(shù)位數(shù)取決于需要存儲(chǔ)數(shù)值的最大整數(shù)值。小數(shù)位數(shù)取決于結(jié)果值所需的精確度。
要確定必要的整數(shù)位數(shù),需要使用以下等式:
例如必要的整數(shù)位數(shù)表示0.0和423.0之間數(shù)值的等式為:
我們需要9個(gè)整數(shù)位,表示0至511之間的數(shù)值。
必須對(duì)齊兩個(gè)定點(diǎn)運(yùn)算數(shù)的小數(shù)點(diǎn)以加、減、乘、除這兩個(gè)數(shù)值。即,x,8數(shù)只能與同樣在x,8表達(dá)式中的一個(gè)數(shù)加、減、乘、除。執(zhí)行不同x,y格式內(nèi)數(shù)值的運(yùn)算,必須首先要對(duì)齊小數(shù)點(diǎn)。注意嚴(yán)格來說,在除法算式中不需要對(duì)齊小數(shù)點(diǎn)。但執(zhí)行定點(diǎn)除法需要仔細(xì)考慮以確保結(jié)果值能夠被除盡,不會(huì)出現(xiàn)負(fù)數(shù)。
同樣,將兩個(gè)定點(diǎn)數(shù)相乘時(shí)也不需要對(duì)齊小數(shù)點(diǎn)。按照乘法得出結(jié)果值格式為X1 + X2, Y1 + Y2 。也就是說,將兩個(gè)格式分別為14,2和10,6的定點(diǎn)數(shù)相乘所得出的值為24,8(格式為24個(gè)整數(shù)位和8個(gè)小數(shù)位)。
如果需要除以不變常數(shù),我們當(dāng)然可通過計(jì)算常數(shù)的倒數(shù),將結(jié)果值當(dāng)做乘數(shù)以簡化設(shè)計(jì)。通常,使用這個(gè)方法可完成更為有效的設(shè)計(jì)實(shí)現(xiàn)。
以上就是有關(guān)定點(diǎn)算法的講解,我們將在下個(gè)博客系列中講述在FPGA內(nèi)使用定點(diǎn)數(shù)系統(tǒng)執(zhí)行函數(shù)。
順便說下我將在EElive演講!時(shí)間就是本周,地點(diǎn)在加利福尼亞州圣何塞市。如果您也參加活動(dòng),遇到我別忘記與我打招呼,我也期待與您見面。以下是我的日程安排。
原文鏈接:
? Copyright 2014 Xilinx Inc.
如需轉(zhuǎn)載,請(qǐng)注明出處
評(píng)論