ECCapple的个人空间 https://blog.eetop.cn/1167279 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

并行实现两个无符号二进制数相乘

已有 1087 次阅读| 2014-3-10 22:40

两个4bit的无符号的二进制数相乘,采用的是列竖式相乘的方法来获得的:
首先,在数据进入时,用寄存器变量存起来。 把其中一个乘数拼接成一个与乘积同样bit的数。
其次,在乘数对应的bit是1时,对被乘数向左移位。
最后,关于av信号。缓存一个周期,add一个周期,共两个周期

module multiply_binary(
//Inputs
clk,
rstn,
ina,
inb,
en,
//Outputs
result_av,
  result
);
parameter  DATA_WD = 4;
parameter  MULT_WD = 8;

input  clk;
input  rstn;
input en;
input  [DATA_WD-1:0]  ina;
        input  [DATA_WD-1:0]  ina;
output  reg  [2*DATA_WD-1:0]  result;
output  result_av;
wire [MULT_WD-1:0]  add_value0;
wire [MULT_WD-1:0]  add_value1;
        wire [MULT_WD-1:0]  add_value2;
        wire [MULT_WD-1:0]  add_value3;

reg add_av;
reg add_av1;
        reg  [MULT_WD-1:0]  mult_r;
reg  [DATA_WD-1:0]  data_r;
always@(posedge clk or negedge rstn)begin
if(!rstn) begin
data_r <= {DATA_WD{1'b0}};
mult_r <= {MULT_WD{1'b0)};
end
else  begin
if(en)begin
data_r <= inb;
mult_r <= {{(MULT_WD - DATA_WD){1'b0}}, ina};
end
end
end
assign add_value0  = data_r[0]?  mult_r  :  MULT_WD'b0;    
assign add_value1  = data_r[1]?  mult_r<<1  :  MULT_WD'b0; 
assign add_value2  = data_r[2]?  mult_r<<2 :  MULT_WD'b0; 
assign add_value0 = data_r[3]?   mult_r<<3 : MULT_WD'b0; 

always@(posedge clk or negedge rstn)begin
if(!rstn)   result  <=  MULT_WD{1'b0)};
else if(add_av) begin 
 result <= add_value0 + add_value1 + add_value2 + add_value3;   // dd_value need one cl
end
end
lways@(posedge clk or negedge rstn)begin
if(!rstn)begin
add_av    <= 1'b0;
add_av1 <= 1'b0;
end 
else begin
add_av    <= en;
add_av1 <= add_av;
end
end
assign result_av = add_av1; // the computation need two clk

endmodule

点赞

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 0

    获赞
  • 0

    评论
  • 1

    访问数
关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-25 05:21 , Processed in 0.022448 second(s), 13 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部