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