資源描述:
《旋轉(zhuǎn)因子乘法器》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、旋轉(zhuǎn)因子乘法器的設(shè)計(jì)2008年10月16日星期四一、高效乘法器設(shè)計(jì)原理:復(fù)數(shù)旋轉(zhuǎn)因子乘法R+j*I=(X+j*I)*(C+j*S)是可以化簡(jiǎn)的,因?yàn)镃和S可以預(yù)先計(jì)算,并存儲(chǔ)在一個(gè)表中。而且還可以存儲(chǔ)下面的3個(gè)系數(shù):C、C+S和C?S有了這3個(gè)預(yù)先計(jì)算的因子,我們首先可以計(jì)算:E=X-Y和Z二C*E=C*(X?Y)然后用:R二(C?S)*Y+ZI=(C+S)*X-Z計(jì)算最后的乘積。檢驗(yàn):R=(C-S)*Y+C*(X-Y)=C*Y?S*Y+C*X?C*Y二C*X?S*YI=(C+S)*X?C*(X?Y)二C*X+S*X?C*X+C*Y二C*Y+S*X這種算法使用的3次乘法,1次加法和2次
2、減法,其代價(jià)是額外的第三個(gè)表。二、實(shí)現(xiàn)過(guò)程:首先給旋轉(zhuǎn)因子乘法器選擇一些具體的設(shè)計(jì)參數(shù)。假設(shè)有8位二進(jìn)制數(shù)據(jù),系數(shù)就應(yīng)該有8位(也就是7位數(shù)字和一位符號(hào)位),并且乘以exp(j*pi/9)=exp(j*20°)。量化成8位,旋轉(zhuǎn)因子就變成了:C+j*S=128*exp(j*pi/9)=l21+j*39如果輸入值是70+j*50,則所期望的結(jié)果是:(70+j*50)*exp(j*pi/9)=(70+j*50)*(121+j*39)/128=(6520+j*8780)/128=50+j*68這樣,3個(gè)因子就變成了:0121,C+S二160和C?S二82從上面可以看到,一般情況下C+S和C-
3、S的表必須比C和S的表多一位精度。下面是VHDL代碼實(shí)現(xiàn)了旋轉(zhuǎn)因子乘法器:程序說(shuō)明—程序名:ccmul.vhd—-程序作用:旋轉(zhuǎn)因子乘法器,實(shí)現(xiàn)兩個(gè)復(fù)數(shù)相乘,--輸入、輸出均為8位數(shù)據(jù)。--編寫(xiě)時(shí)間:2008/10/16-librarylpm;use1pm」pm_componentSeall;libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;實(shí)體entityccmulisgeneric(W2:integer:=17;一乘法器的寬度Wl:integer:=9;一c+s的寬度W:integer:=8);-輸
4、入數(shù)據(jù)的寬度port(clk:std」ogic;x_in,y_in,c_in:instd_logic_vector(W-1downto0);一數(shù)據(jù)輸入端口cps_in,cms_in:instd_logic_vector(W1-1downto0);一數(shù)據(jù)輸入端Ur_out,i_out:outstd_logic_vector(W-1downto0));一結(jié)果輸出端口endccmul;結(jié)構(gòu)體architectureflexofccmulissignalx,y,c:std_logic_vector(W-1downto0);一輸入屮間信號(hào)signalr,i,cmsy,cpsx,xmyc:std_
5、logic_vector(W2-ldownto0);signalxmy,cps,cms,sxtx,sxty:std_logic_vector(Wl-ldownto0);beginX<=x_in;—xy<=yjn;-j*ycv=c_in;-ccps<=cps_in;—c+sems<=cms_in;--C-Sprocessbeginwaituntilelk-I1;r_out<=r(W2-3downtoW-l);■■去符號(hào)位,取8位輸出i_out<=i(W2-3downtoW-l);endprocess;sxtxv=x(x*high)&x;一符號(hào)擴(kuò)展sxty<=y(y'high)&y;3個(gè)乘
6、法器,2個(gè)減法器,1個(gè)加法器sub_l:lpm_add_sub一減法器1,實(shí)現(xiàn):x-ygenericmap(LPM_WIDTH二〉W1,LPM_DIRECTION二〉”SUB”,LPM_REPRESENTATION二『SIGNED”)portmap(dataa=>sxtx,datab=>sxty,result=>xmy);mul_I:lpm_mult■■乘法器1,實(shí)現(xiàn):(x?y)*c二xmycgenericmap(LPM_WIDTHA=>Wl,LPM_WIDTHB=>W,LPM_WIDTHP=>W2,LPM_WIDTHS=>W2,LPM_REPRESENTATION=>HSIGNEDH
7、)portmap(dataa=>xmy,datab=>c,result=>xmyc);mul_2:lpm_mult一乘法器2,實(shí)現(xiàn):(c?s)*y二cmsygenericmap(LPM_WIDTHA=>Wl,LPM_WIDTHB=>W,LPM_WIDTHP=>W2,LPM_WIDTHS=>W2,LPM_REPRESENTATI0N=>”SIGNED”)portmap(dataa=>cms,datab=>y,result=>cmsy);mul_3