FPGA算法映射要點解析
掃描二維碼
隨時隨地手機看文章
將圖像處理的算法轉(zhuǎn)換為FPGA系統(tǒng)設(shè)計的過程稱為算法映射,CPU并行算法的實現(xiàn)與FPGA并行算法的實現(xiàn)是有一定區(qū)別的。
1.算法系統(tǒng)結(jié)構(gòu)
圖像處理算法主要有兩種設(shè)計結(jié)構(gòu):流水線結(jié)構(gòu)和并行陣列結(jié)構(gòu)。
1.1 流水線結(jié)構(gòu)
在我看來,流水線結(jié)構(gòu)和我們之前所理解的CPU的串行結(jié)構(gòu)還是有一定區(qū)別的。相反,它與處理器的流水線結(jié)構(gòu)很相似,都是依照時鐘來進(jìn)行流水層級的同步。
1.2并行陣列結(jié)構(gòu)
|--Data1--->Data1-->Data1
|InputData------Data2--->Data2-->Data2|
|--Data3--->Data3-->Data3
2.算法轉(zhuǎn)換
2.1 定常數(shù)轉(zhuǎn)換
對于FPGA而言,做加法與移位較為簡單,而涉及到乘法與除法時需要調(diào)用到乘法器或除法器,這在FPGA中是較為寶貴的資源,所以作為定常數(shù),我們盡量轉(zhuǎn)換為移位和加法運算,如:
ex1:dout = din * 255
轉(zhuǎn)換后
dout = ( din << 8 ) - dinex2:dout = din * 11
轉(zhuǎn)換后:
dout = din * 2^2 + din * 2^3 - din * 2^0= din * (2^2 + 2^3 - 2^0)
上式中的255 和 11就是定常數(shù)
2.2 不等式等效轉(zhuǎn)換
進(jìn)行轉(zhuǎn)換的目的也是為了在FPGA實現(xiàn)后能夠更加節(jié)省資源。如:
ex1:√a ̄ < b, a > 0
轉(zhuǎn)換后:
b^2 > aex2:a/b > c/b (b > 0, d > 0)
轉(zhuǎn)換后
a * d > b * c2.3 取近似值
最簡單的近似值莫過于四舍五入,假如某數(shù)據(jù)D[-1~4]為整數(shù)部分,D[3~0]為小數(shù)部分,那么四舍五入可為:
assign dout = din[3]?(dout[-1~4] + 1) : (dout[-1~4])
泰勒公式定義
那么就可以有如下近似轉(zhuǎn)換:
1/3 = 1/4 * (1 + 1/4 + 1/16 + 1/64 + 1/256)
3.構(gòu)造查找表
查找表是使用簡單的查詢操作代替運行時的實時計算,使用查找表代替那些運行時經(jīng)常需要用到的運算能夠極大的減少時間復(fù)雜度,如我們經(jīng)常用到的三角函數(shù)就應(yīng)該使用查找表替換實時計算。





