X457Verilog參考例程-實戰(zhàn)訓(xùn)練6、16位乘法器芯片設(shè)計_第1頁
X457Verilog參考例程-實戰(zhàn)訓(xùn)練6、16位乘法器芯片設(shè)計_第2頁
X457Verilog參考例程-實戰(zhàn)訓(xùn)練6、16位乘法器芯片設(shè)計_第3頁
X457Verilog參考例程-實戰(zhàn)訓(xùn)練6、16位乘法器芯片設(shè)計_第4頁
X457Verilog參考例程-實戰(zhàn)訓(xùn)練6、16位乘法器芯片設(shè)計_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

實戰(zhàn)訓(xùn)練6、16位乘法器芯片設(shè)計乘法器是眾多數(shù)字系統(tǒng)中的基本模塊。從原理上說它屬于組合邏輯范疇;但從工程實際設(shè)計上來說,它往往會利用時序邏輯設(shè)計的方法來實現(xiàn),屬于時序邏輯范疇。通過這個實驗使大家能夠掌握利用FPGA/CPLD設(shè)計乘法器的思想,并且能夠?qū)⑽覀冊O(shè)計的乘法器應(yīng)用到實際工程中。下面我們分別列舉了十進(jìn)制乘法運算和二進(jìn)制乘法運算的例子。下面這種計算乘法的方式是大家非常熟悉的:乘積項與乘數(shù)相應(yīng)位對齊(即將乘積項左移),加法運算的數(shù)據(jù)寬度與被乘數(shù)的數(shù)據(jù)位寬相同。下面例子中的被乘數(shù)和乘數(shù)都是無符號的整數(shù),對于有符號數(shù)的乘法,可以將符號與數(shù)據(jù)絕對值分開處理,即絕對值相乘,符號異或。乘法器的設(shè)計方法有兩種:組合邏輯設(shè)計方法和時序邏輯設(shè)計方法。采用組合邏輯設(shè)計方法,電路事先將所有的乘積項全部計算出來,最后加法運算。采用時序邏輯設(shè)計方法,電路將部分已經(jīng)得到的乘積結(jié)果右移,然后與乘積項相加并保存和值,反復(fù)迭代上述步驟直到計算出最終乘積。在本次實驗中我們就利用時序邏輯設(shè)計方法來設(shè)計一個16位乘法器,既然是利用時序邏輯設(shè)計方法那么我們就得利用時鐘信號控制乘法器運算,那么這樣用時序邏輯設(shè)計方法與用組合邏輯設(shè)計方法比較,它有什么好處呢?利用時序邏輯設(shè)計方法可以使整體設(shè)計具備流水線結(jié)構(gòu)的特征,能適用在實際工程設(shè)計中。IO口定義:clk:芯片的時鐘信號。rst_n:低電平復(fù)位、清零信號。定義為0表示芯片復(fù)位;定義為1表示復(fù)位信號無效。start:芯片使能信號。定義為0表示信號無效;定義為1表示芯片讀入輸入管腳得乘數(shù)和被乘數(shù),并將乘積復(fù)位清零。2也:輸入@(被乘數(shù)),其數(shù)據(jù)位寬為16bit.6也:輸入6(乘數(shù)),其數(shù)據(jù)位寬為16bit.yout:乘積輸出,其數(shù)據(jù)位寬為32bit.done:芯片輸出標(biāo)志信號。定義為1表示乘法運算完成,yout端口的數(shù)據(jù)穩(wěn)定,得到最終的乘積;定義為0表示乘法運算未完成,yout端口的數(shù)據(jù)不穩(wěn)定。數(shù)據(jù)吞吐量的計算:數(shù)據(jù)吞吐量使指芯片在一定時鐘頻率條件下所能處理的有效數(shù)據(jù)量。假設(shè)本實驗設(shè)計的芯片時鐘頻率可達(dá)300MHz,那么該芯片的數(shù)據(jù)吞吐量是多少呢?由于芯片完成一次乘法運算需要1個以上的時鐘周期,因此,即使芯片采用300MHz的時鐘頻率,它每秒鐘所能處理的有效數(shù)據(jù)吞吐量也一定小于300M。對于16位乘法器而言,ain和bin均為0xFFFF時,芯片的運算量最大,計算所需的時間也最長,這種情況才能作為我們計算數(shù)據(jù)吞吐量的依據(jù)。假設(shè)芯片在200MHz的條件下ain和bin均為0xFFFF時需要16個時鐘周期才能得到乘法結(jié)果,那么芯片在200MHz的條件下的數(shù)據(jù)吞吐量就為:200M/16=12.5M。仿真波形:完成一個256×16928=4333568的運算,約16個時鐘周期以后done置高,表示運算結(jié)束,結(jié)果輸出。16bitX16bit無符號數(shù)乘法程序:(說明:start信號置位期間,ain和bin必須保持穩(wěn)定,如果需要再次進(jìn)行一次新的運算,則Start信號必須重新來一個上升沿。done輸出高電平以后需要軟件將其重新拉低。)待解決問題:不知道OutPut口是否能由外部電平拉高或者拉低?modulemux16(clk,rst_n,start,ain,bin,yout,done);inputclk; 〃芯片的時鐘信號。inputrst_n; 〃低電平復(fù)位、清零信號。定義為0表示芯片復(fù)位;定義為1表示復(fù)位信號無效。inputstart; 〃芯片使能信號。定義為0表示信號無效;定義為1表示芯片讀入輸入管腳得乘數(shù)和被乘數(shù),并將乘積復(fù)位清零。input[15:0]ain; 〃輸入a(被乘數(shù)),其數(shù)據(jù)位寬為16bit.input[15:0]bin; 〃輸入b(乘數(shù)),其數(shù)據(jù)位寬為16bit.OUtPUt[31:0]yout; 〃乘積輸出,其數(shù)據(jù)位寬為32bit.outputdone; 〃芯片輸出標(biāo)志信號。定義為1表示乘法運算完成.reg[15:0]areg;〃乘數(shù)a寄存器reg[15:0]breg; 〃乘數(shù)b寄存器reg[31:0]yout_r; 〃乘積寄存器regdone_r;reg[4:0]i; 〃移位次數(shù)寄存器always@(POSedgeClk)beginif(!rst_n)beginareg<=16'h0000;breg<=16'h0000;done_r<=1'b0;yout_r<=32'h00000000;i<=5'd0;endelseif(start) 〃啟動運算beginif(i<5'd21)i<=i+1'b1;if(i==5'd0)begin 〃鎖存乘數(shù)、被乘數(shù)areg<=ain;breg<=bin;endelseif(i>5'd0&&i<5'd16)beginif(areg[i-1])yout_r={1'b0,yout[30:15]+breg,yout_r[14:1]};〃累加并移位elseyout_r<=yout_r>>1;//移位不累加endelseif(i==5'd16&&areg[15])yout_r[31:16]<=yout_r[31:16]+breg;〃累加不移位elseif(i==5'd18)done_r<=1'b1;〃乘完成標(biāo)志位置位elseif(i==5'd20)done_r<=1'b0;〃乘完成標(biāo)志位清除endelsei<=5'd0;endassigndone=done_r;assignyout=yout_r;endmodule16bit×16bit有符合數(shù)乘法程序:modulemux_16bit_sign(clk,reset,start,ain,bin,yout,done);inputclk;inputreset;inputstart;input[15:0]ain;input[15:0]bin;output[31:0]yout;outputdone;reg[15:0]areg;reg[15:0]breg;reg[31:0]yout;regdone;integeri;initialbegindone<=0;i=0;yout=32'h00000000;areg=16'h0000;breg=16'h0000;endalways@(PoSedgeClk)beginif(!reset)beginareg=16'h0000;breg=16'h0000;yout=32'h00000000;i=0;endelseif(start&&(!done))beginif(ain[15])areg=~ain+1;elseareg=ain;if(bin[15])breg=~bin+1;elsebreg=bin;if(i==0)yout=32'h00000000;if((i<16)&&areg[i])yout[31:16]=yout[31:16]+breg;if(i==16)beginif(ain[15]^bin[15])beginyout=~(yout-1);endi=0;done<=1;endelsebegini="i"+1;yout=yout>>1;endendelsei="0";endendmodule以下是采用組合邏輯電路設(shè)計的16位乘法器綜合結(jié)果:(顯然的采用了很多的寄存器和加法器進(jìn)行運算)程序:modulemux(clk,rst_n,en,a,b_in,rdy,mux_out);inputclk;〃主時鐘信號inputrst_n;〃復(fù)位信號,低電平有效inputen;〃輸入使能信號,高電平有效input[15:0]a,b_in;〃兩個16位的輸入信號outputrdy;〃乘法結(jié)果輸出有效信號,高電平有效output[31:0]mux_out;//乘法輸出結(jié)果regrdy;〃reg[31:0]mux_out;reg[15:0]mux_reg0=16'd0;reg[16:0]mux_reg1=17'd0;reg[17:0]mux_reg2=18'd0;reg[18:0]mux_reg3=19'd0;reg[19:0]mux_reg4=20'd0;reg[20:0]mux_reg5=21'd0;reg[21:0]mux_reg6=22'd0;reg[22:0]mux_reg7=23'd0;reg[23:0]mux_reg8=24'd0;reg[24:0]mux_reg9=25'd0;reg[25:0]mux_reg10=26'd0;reg[26:0]mux_reg11=27'd0;reg[27:0]mux_reg12=28'd0;reg[28:0]mux_reg13=29'd0;reg[29:0]mux_reg14=30'd0;reg[30:0]mux_reg15=31'd0;reg[31:0]mux_reg16=32'd0;integeri;always@(rst_noraorb_inoren)beginif(!rst_n)beginrdy<=1'b0;endelseif(en)beginif(a[0])mux_reg0<=b_in;elsemux_reg0<=16'd0;if(a[1])mux_reg1<={b_in,mux_reg16[0]};elsemux_reg1<=17'd0;if(a[2])mux_reg2<={b_in,mux_reg16[1:0]};elsemux_reg2<=18'd0;if(a[3])mux_reg3<={b_in,mux_reg16[2:0]};elsemux_reg3<=19'd0;if(a[4])mux_reg4<={b_in,mux_reg16[3:0]};elsemux_reg4<=20'd0;if(a[5])mux_reg5<={b_in,mux_reg16[4:0]};elsemux_reg5<=21'd0;if(a[6])mux_reg6<={b_in,mux_reg16[5:0]};elsemux_reg6<=22'd0;if(a[7])mux_reg7<={b_in,mux_reg16[6:0]};elsemux_reg7<=23'd0;if(a[8])mux_reg8<={b_in,mux_reg16[7:0]};elsemux_reg8<=24'd0;if(a[9])mux_reg9<={b_in,mux_reg16[8:0]};elsemux_reg9<=25'd0;if(a[10])mux_reg10<={b_in,mux_reg16[9:0]};elsemux_reg10<=26'd0;if(a[11])mux_reg11<={b_in,mux_reg16[10:0]};elsemux_reg11<=27'd0;if(a[12])mux_reg12<={b_in,mux_reg16[11:0]};elsemux_reg12<=28'd0;if(a[13])mux_reg13<={b_in,mux_reg16[12:0]};elsemux_reg13<=29'd0;if(a[14])mux_reg14<={b_in,mux_reg16[13:0]};elsemux_reg14<=30'd0;if(a[15])mux_reg

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論