verilog乘法器

设计32bit*32bit的乘法器

input clk,rst_n,x1,x2,mult_begin
output product,mult_end

先求有符号位x1,x2的补码,分别记为x1_abs,x2_abs

assign x1_sign=x1[31];
x1_abs=x1_sign? (~x1+1) :x1;

乘法
加载x1,mult_vld期间,x1每T左移1位

if (rst_n)begin
 y1<=64'b0;
end
else if (mult_vld) begin
 y1<={y1[62:0],1'b0};
end
else if (mult_begin) begin
 y1<={32'b0,x1_abs};
end

加载x2,mult_vld期间,x2每T右移1位

if (rst_n)begin
 y2<=32'b0;
end
else if (mult_vld) begin
 y2<={1'b0,y1[31:1]};
 end
else if (mult_begin) begin
 y2<=x2_abs;
end

mult_vld时序逻辑,复位及 (没开始或已结束)期间为0,其余为高。

assgin mult_end = mult_vld &&  ~(|y2);//y2全为0,即乘完了
assign part_product=y2[0] ? y1:64'b0;

时序

if (mult_vld)
product_temp<=product_temp+part_product;

最终

assign product=product_sign? (~product_temp+1):product_temp;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值