首页 > 代码库 > 简单无符号乘法器(怎么总是有疏漏,神啊!必须要level up了!)
简单无符号乘法器(怎么总是有疏漏,神啊!必须要level up了!)
module multiplier(input clk,rst,input [7:0] A,B,output [16:0] C);reg [3:0] cnt;reg [16:0] temp;always@(posedge clk or negedge rst)if(!rst)begincnt<=0;temp<=0;endelse if(cnt==8)cnt<=0;else if(B[cnt])begintemp<=temp+(A<<cnt);cnt<=cnt+1;endelsecnt<=cnt+1;assign C=(cnt==8)?temp:0;endmodule
1 `timescale 1ns/1ns 2 module multiplier_tb; 3 reg [7:0] A,B; 4 reg clk,rst; 5 wire [16:0] C; 6 7 multiplier U( 8 .A(A), 9 .B(B),10 .clk(clk),11 .rst(rst),12 .C(C)13 );14 15 initial16 begin17 rst=0;18 clk=0;19 A=8‘hfc;20 B=8‘hcf;21 #5 rst=1;22 end23 always24 #10 clk=~clk;25 26 endmodule
图中在第8个脉冲就输出了乘积,为什么这样呢?由程序可知,temp和cnt在一个进程内被赋值,也即:第8个clk沿到达后,temp和cnt同时完成赋值,一个是得出乘积,一个是cnt=8;又由于assign的即时性,所以在第8个clk,已得出乘积。
要考虑乘数的位权,小学都知道乘法算式要错位的写,现在怎么不知道了!!
简单无符号乘法器(怎么总是有疏漏,神啊!必须要level up了!)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。