8位移位相加乘法器-Verilog


前言

用verilog编写8位乘法器,采用移位相加的办法,最后输出16位结果
写的时候去掉了注释,现在自己也看不懂了,哈哈哈


一、移位相加乘法器如何实现?

先把被乘数(x)扩展成16位,再左移8位,每一次左移之前都要判断乘数(y)相应位是否为1,为1则把那一步的被乘数加到结果里(result),为0则不做处理。

二、使用步骤

代码如下:

module multi_cx(rst,clk,x,y,result);
input rst;
input clk;
input[7:0] x;
input[7:0] y;
output[15:0] result;
reg[7:0] x2,y2;
reg[15:0] result;

always @ (posedge clk or negedge rst)
begin
 if(!rst)
 begin
	result<=16'b0;
 end
 else
	
 begin
			result<=getResult(x,y);
		
 end
end	

function[15:0] getResult;
input[7:0] x;
input[7:0] y;
reg[15:0] result;
reg[15:0] p;
integer k;
begin
	p={8'b0,x};
	result=16'b0;
	for(k=0;k<8;k=k+1)
	begin
		if(y[k]==1)
			result=result+p;
		p=p<<1;
	end
	getResult=result;
end
endfunction

endmodule
  • 6
    点赞
  • 79
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值