FPGA中如何充分利用DSP資源,DSP48E1內(nèi)部詳細資源介紹
FPGA中DSP資源是寶貴的且有限,我們在計算大位寬的指數(shù)、復數(shù)乘法、累加、累乘等運算時都會用到DSP資源,如果我們不了解底層的DSP特性,很多設計可能都無法進行。邏輯綜合往往是不可控的,為了能夠充分利用DSP資源,我們需要對DSP48E1有所了解。
1.DSP48E1介紹
DSP48E1是7系列的最小計算單元,DSP資源,支持許多獨立的功能,其基本功能如下所示
DSP48E1簡易模型
包括:
?帶有D寄存器的25位預加法器
?25*18二進制乘法
?48位累加
?三輸入加法
其他的一些功能還包括桶形移位、寬總線多路復用、幅度比較器、按位邏輯功能和寬計數(shù)器等。
每個DSP48E1都有一個雙輸入乘法器,接著是3個數(shù)據(jù)通路的多路復用器和一個三輸入的(加法器/減法器/累加器)
DSP48E1內(nèi)部詳細資源
一種典型的使用是A,B輸入相乘后與C輸入相加或減;當不使用第一級的乘法器的時候,兩組48位輸入可以實現(xiàn)按位操作的邏輯功能。
A和B的數(shù)據(jù)輸入可以選擇直接輸入或者寄存一級、兩級輸入,如下所示
DSP48E1輸入分層視圖
其他的數(shù)據(jù)和控制輸入可是選擇寄存一級輸入,這樣的輸入選擇有助于構(gòu)建多種類型,高流水化的DSP應用。
2.DSP48E1使用
(1)DSP原語使用的每個端口及位寬如下所示:
①表示的數(shù)據(jù)通道,運算數(shù)據(jù)的輸入。
②寄存器配置通道,我們可以通過配置這些寄存器,實現(xiàn)不同的功能,比如加法、減法、乘累加,累減等。
③數(shù)據(jù)輸入寄存器使能通道,在數(shù)據(jù)輸入的時候可以選擇寄存一級或者兩級(兩級僅限A和B)。
④配置寄存器使能通道。
⑤復位信號,寄存器的復位端口。
⑥、⑦和⑧表示的是級聯(lián)通道,其中CIN表示級聯(lián)的輸入,COUT表示級聯(lián)的輸出。
⑨模式檢測輸出,模式檢測用于檢測P總線是否與指定的模式或者模式的補碼完全匹配,如果加法器的輸出與設置的模式匹配,則PATTERNDETECT(PD)將變高,如果與設置的補碼匹配,則PATTERNBDETECT(PBD)將變高,其使用邏輯如下
模式檢測邏輯
OVERFLOW和UNDERFLOW是與模式檢測一起使用時的溢出指示標志。
(2)DSP的使用主要通過三個寄存器來進行控制和改變相應的運算。
?INMODE控制預加器,A,B,D寄存器的輸入;(5bit)
?OPMODE控制X,Y,Z選擇器的輸入;(7bit)
?ALUMODE邏輯控制選擇單元;(4bit)
我們通過構(gòu)建一個乘累加器來介紹DSP的使用以及寄存器的配置。
實現(xiàn)的乘累加完成如下功能,即SUM=SUM+A*B;SUM也就是DSP中的P輸出。
明確了運算表達式,然后我們需要對三個寄存器進行設置:
①乘法器的兩個輸入分別為A和B,我們選擇A端口和B的數(shù)據(jù)相乘的時候,只使用A的[24:0]位參與運算,具體介紹可以見Xinlinx文檔ug479(P30),這里我們把數(shù)據(jù)通過第二個寄存器輸出到乘法器,INMODE設置為5’b00000。圖片居中使用:
②多路復用器需要指明參與ALU運算模塊的數(shù)據(jù),根據(jù)運算功能,我們選擇乘法器的輸出和P輸出作為信號的輸入,OPMODE設置為7’b010_0001。
③在最后的運算中我們選擇加法運算。ALUMODE設置為4’b0000。即P=Z+X+Y+CIN其中Z=P,X=M,Y=0,CIN=0,M=A*B。所以P=P+A*B。
(3)相應的配置設置好之后,例化DSP48E1的原語,原語的調(diào)用可以見Xinlinx文檔ug768(P120),然后建立Vivado工程,測試如下
通過仿真得到了正確的乘累加結(jié)果
需要注意的是:在計算乘法時,M寄存器必須是打開的,多路復用器Z的輸入通過P寄存器,因此輸出至少滯后2個時鐘周期,這里通過A2和B2寄存器輸入,故延遲了4個時鐘周期輸出結(jié)果。
3.DSP48E1注意事項
?使用有符號數(shù)進行數(shù)據(jù)的處理。
?盡量使用流水進行數(shù)字信號的處理。
?當數(shù)字的處理位寬較小時,盡量使用邏輯進行數(shù)據(jù)處理
?級聯(lián)使用DSP的時候請盡量使用專用布線資源。
?合理的去復用DSP資源。
?在DSP不使用的時候,通過USE_MULT將乘法器關(guān)閉以降低功耗。
編輯:hfy