前段時間一直在幫本科生做電賽,需要用到FPGA筆者作為學(xué)長責(zé)無旁貸去幫忙,耽誤了更新,抱歉。為了表現(xiàn)筆者的誠意,今天拿出干貨——DSP48E1的使用,全程高能不要眨眼。
安富利的陳博士出的試用題(1):使用DS48E1的SIMD功能實現(xiàn)四路并行12位加法”,要求數(shù)據(jù)從不同的DSP48端口進去。
評分標(biāo)準(zhǔn):
1)使用Vivado 仿真通過
2)使用7A50T板子,使用Vivado硬件實現(xiàn)且記錄波形,或者,使用Matlab sysgen硬件仿真,或者其他硬件實現(xiàn)方式且有硬件結(jié)果
軟件環(huán)境:
VIVADO 2015.2
System Generator 2015.2
MATLAB 2014b
WINDOWS 7-64bit
1.原理分析
我們先看下DSP48E1到底是個什么樣的東西,知己知彼。
圖1 DSP48E1結(jié)構(gòu)框圖
乍一看很復(fù)雜,不過想想DSP本質(zhì)無非就是乘加,端口多只是說明功能多而已。若要實現(xiàn)陳博士的題目,我們只取一瓢飲。
重點介紹以下端口:
A[29:0] :A寄存器輸入;
ACIN[29:0] :A寄存器輸入,從其它DSP48E1模塊輸入過來,實現(xiàn)級聯(lián);
B[17:0],BCIN[17:0],C[47:0],PCIN[47:0]同上,不作贅述;
OPMODE[6:0] :控制X,Y,Z的輸出,如本文中實現(xiàn)X=A:B;Y=C;Z=0;
ALUMODE[3:0] :控制X,Y,Z如何運算,如本文中實現(xiàn)X+Y+Z;
P[47:0] :運算結(jié)果輸出端口;
CARRYOUT[3:0] :運算輸出進位標(biāo)志位。
接下來,我們打開System Generator中的DSP48E1模塊。
Xilinx Blockset -> DSP ->DSP48E1
圖2 DSP48E1 IN System Generator
這里的carryin,carryinsel是作輸入進位控制的,與我們無關(guān)置0即可。
雙擊該模塊打開屬性配置:圖3
我們不需要從別的模塊級聯(lián)輸入,所以在Input Configuration直接選Direct from a port。
在DSP48E1 Data-path Configuration看到了我們今天的主角——SIMD。
圖3 DSP48E1 Basic tab
圖4 四路12位SIMD模式加法器
X,Y,Z都是48bits數(shù)據(jù),將他們從高位到低位劃分為4路12bits數(shù)據(jù)進行加減,從上圖可以看出CARRYOUT[3:0]對應(yīng)每路進位標(biāo)志。
值得注意的是,UG479_7Series DSP48E1 24頁提到:
When either TWO24 or FOUR12 mode is selected, the multiplier must not be used, and USE_MULT must be set to NONE.
當(dāng)使用2路24bits或4路12bits模式時,應(yīng)該禁用乘法器。這就是圖X勾選Do not use multiplier的原因。為什么會這樣,請參考數(shù)據(jù)手冊,有詳細(xì)解釋。
2.實驗仿真
圖5 System Generator 仿真搭建
仿真結(jié)果如圖6所示:
圖6 New Input 仿真結(jié)果
同時附上這兩次輸入的硬件仿真波形圖:
圖7 硬件仿真結(jié)果
從上圖中可以看出,從輸入到輸出需要2個CLK的延時,符合手冊中的描述。
結(jié)語:
DSP48E1是Xilinx 7系列FPGA的專用DSP模塊,運算速度可以達(dá)到600M/s以上,極大得提高FPGA在視頻圖像處理中的處理速度。
最后,筆者遇到了個小問題很費解。如圖7所示:這種方式控制DSP48E1模塊就會報錯。
圖7
筆者聯(lián)系郵箱:xp_peng2016@163.com
評論
查看更多