parameter参数传递的16位乘法器_第1页
parameter参数传递的16位乘法器_第2页
parameter参数传递的16位乘法器_第3页
parameter参数传递的16位乘法器_第4页
parameter参数传递的16位乘法器_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、parameter参数传递的16位乘法器选用课后习题设计题目:设计一个4位乘法器,为此首先设计一个4位加法器,用例化语句调用这个加法器,用移位相加的方式完成乘法。并以此为基础,使用parameter参数传递的功能,设计一个16位乘法器。加法器采用行波进位的方法。4位加法器设计如下: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:0

2、; 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以此为基础的4位乘法器如下:module top(load, rst, clk, dataa, datab, sum); parameter n = 4; input load; input rst; input clk; input n-1:0 dataa; inpu

3、t 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 = 1b0) begin for (i = 0;

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

5、= i + 1) sum_tmpi = 1b0; next_state = state_s2; end state_s2 : begin if (datab_register0 = 1b1) / sum_tmp = sum_tmp + dataa_register;sum_tmp=(n-1)b0,cout,sum_tmp2n-1:0; if (datab_register = 4h0) next_state = state_s1; else begin datab_registern - 2:0 = datab_registern - 1:1; datab_registern - 1 = 1b

6、0; dataa_register2 * n - 1:1 = dataa_register2 * n - 2:0; dataa_register0 = 1b0; end end endcase end ripple_carry_adder #(N = 4) u0(.x(sum_tmp), .y(dataa_register), .cin(1b0), .sum(sum_tmp2), .cout(cout);endmodule以此为基础的16位乘法器为:module top(load, rst, clk, dataa, datab, sum,ready); parameter n = 16; in

7、put 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: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; ass

8、ign sum = sum_tmp; always (negedge rst or posedge clk) begin if (rst = 1b0) begin ready=1b0; for (i = 0; i = 2 * n - 1; i = i + 1) begin dataa_registeri = 1b0; sum_tmpi = 1b0; end for (i = 0; i = n - 1; i = i + 1) datab_registeri = 1b0; next_state = state_s1; end else case (next_state) state_s1 : if

9、 (load = 1b1) begin dataa_register2*n - 1:n=0; dataa_registern - 1:0 = dataa; datab_register = datab; ready=1b0; for (i = 0; i = 2 * n - 1; i = i + 1) sum_tmpi = 1b0; next_state = state_s2; end state_s2 : begin if (datab_register0 = 1b1) / sum_tmp = sum_tmp + dataa_register; sum_tmp=sum_tmp2; if (da

10、tab_register = 4h0) begin next_state = state_s1; ready=1b1; end else begin datab_registern - 2:0 = datab_registern - 1:1; datab_registern - 1 = 1b0; dataa_register2 * n - 1:1 = dataa_register2 * n - 2:0; dataa_register0 = 1b0; end end endcase end ripple_carry_adder#(2*n) u0(.x(sum_tmp), .y(dataa_register), .cin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论