parameter參數(shù)傳遞的16位乘法器_第1頁
parameter參數(shù)傳遞的16位乘法器_第2頁
parameter參數(shù)傳遞的16位乘法器_第3頁
parameter參數(shù)傳遞的16位乘法器_第4頁
parameter參數(shù)傳遞的16位乘法器_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、parameter參數(shù)傳遞的16位乘法器 選用課后習(xí)題設(shè)計題目:設(shè)計一個4位乘法器,為此首先設(shè)計一個4位加法器,用例化語句調(diào)用這個加法器,用移位相加的方式完成乘法。并以此為基礎(chǔ),使用parameter參數(shù)傳遞的功能,設(shè)計一個16位乘法器。加法器采用行波進位的方法。4位加法器設(shè)計如下:module ripple_carry_adder(x, y, cin, sum, cout); parameter N = 4; input cin; input N-1:0 x, y; output N-1:0 sum; output cout; reg cout; reg N-1:0 sum; reg qN:

2、0; always (x or y or cin)begin:ADDER integer i; q0 = cin; for(i=0; i<=N-1; i=i+1)begin qi+1 = (xi&yi) | (xi&qi) | (yi&qi); sumi = xi yi qi; end cout = qN; endendmodule以此為基礎(chǔ)的4位乘法器如下:module top(load, rst, clk, dataa, datab, sum); parameter n = 4; input load; input rst; input clk; input

3、n-1:0 dataa; input n-1:0 datab; output 2*n-1:0 sum; parameter 1:0 state_s1 = 0, state_s2 = 1; reg 1:0 next_state; reg 2*n-1:0 dataa_register; reg n-1:0 datab_register; reg 2*n-1:0 sum_tmp,sum_tmp2; wire cout; assign sum = sum_tmp; always (negedge rst or posedge clk) begin: integer i; if (rst = 1'

4、;b0) begin for (i = 0; i <= 2 * n - 1; i = i + 1) begin dataa_registeri <= 1'b0; sum_tmpi <= 1'b0; end for (i = 0; i <= n - 1; i = i + 1) datab_registeri <= 1'b0; next_state <= state_s1; end else case (next_state) state_s1 : if (load = 1'b1) begin dataa_registern -

5、1:0 <= dataa; datab_register <= datab; for (i = 0; i <= 2 * n - 1; i = i + 1) sum_tmpi <= 1'b0; next_state <= state_s2; end state_s2 : begin if (datab_register0 = 1'b1) / sum_tmp <= sum_tmp + dataa_register;sum_tmp<=(n-1)'b0,cout,sum_tmp2n-1:0; if (datab_register = 4

6、'h0) next_state <= state_s1; else begin datab_registern - 2:0 <= datab_registern - 1:1; datab_registern - 1 <= 1'b0; dataa_register2 * n - 1:1 <= dataa_register2 * n - 2:0; dataa_register0 <= 1'b0; end end endcase end ripple_carry_adder #(N = 4) u0(.x(sum_tmp), .y(dataa_re

7、gister), .cin(1'b0), .sum(sum_tmp2), .cout(cout);endmodule以此為基礎(chǔ)的16位乘法器為:module top(load, rst, clk, dataa, datab, sum,ready); parameter n = 16; input load; input rst; input clk; input n-1:0 dataa; input n-1:0 datab; output 2*n-1:0 sum; output ready; parameter 1:0 state_s1 = 0, state_s2 = 1; reg 1

8、:0 next_state; reg 2*n-1:0 dataa_register; reg n-1:0 datab_register; reg 2*n-1:0 sum_tmp; reg ready; wire 2*n-1:0 sum_tmp2; wire cout; integer i; assign sum = sum_tmp; always (negedge rst or posedge clk) begin if (rst = 1'b0) begin ready<=1'b0; for (i = 0; i <= 2 * n - 1; i = i + 1) be

9、gin dataa_registeri <= 1'b0; sum_tmpi <= 1'b0; end for (i = 0; i <= n - 1; i = i + 1) datab_registeri <= 1'b0; next_state <= state_s1; end else case (next_state) state_s1 : if (load = 1'b1) begin dataa_register2*n - 1:n<=0; dataa_registern - 1:0 <= dataa; datab_r

10、egister <= datab; ready<=1'b0; for (i = 0; i <= 2 * n - 1; i = i + 1) sum_tmpi <= 1'b0; next_state <= state_s2; end state_s2 : begin if (datab_register0 = 1'b1) / sum_tmp <= sum_tmp + dataa_register; sum_tmp<=sum_tmp2; if (datab_register = 4'h0) begin next_state

11、<= state_s1; ready<=1'b1; end else begin datab_registern - 2:0 <= datab_registern - 1:1; datab_registern - 1 <= 1'b0; dataa_register2 * n - 1:1 <= dataa_register2 * n - 2:0; dataa_register0 <= 1'b0; end end endcase end ripple_carry_adder#(2*n) u0(.x(sum_tmp), .y(dataa_register

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論