为什么我的乘法器不好使?
时间:10-02
整理:3721RD
点击:
module multiply(
input[3:0] a,
input[3:0] b,
input clk,
output[7:0] product);
reg[3:0] ma;
reg[7:0] mb;
reg done;
reg[7:0] sum;
integer i=0;
initial
begin
ma=a;
mb={4'b0,b};
done=1'b0;
sum=8'b0;
end
always @(posedge clk)
begin
if(i>=4)
begin done<=1'b1;end
if(!done)
begin
if(ma[0]) begin sum<=sum+mb; end
i<=i+1;
mb<=mb<<1;
ma<=ma>>1;
end
end
assign product=sum;
endmodule
在仿真中,product一直是8'b0.....................
input[3:0] a,
input[3:0] b,
input clk,
output[7:0] product);
reg[3:0] ma;
reg[7:0] mb;
reg done;
reg[7:0] sum;
integer i=0;
initial
begin
ma=a;
mb={4'b0,b};
done=1'b0;
sum=8'b0;
end
always @(posedge clk)
begin
if(i>=4)
begin done<=1'b1;end
if(!done)
begin
if(ma[0]) begin sum<=sum+mb; end
i<=i+1;
mb<=mb<<1;
ma<=ma>>1;
end
end
assign product=sum;
endmodule
在仿真中,product一直是8'b0.....................
代码不规范....
哦,是的。经验太少,高手指点下
4bit
同问呀,那位高手可以传个呀
module multiply(
input[3:0] a,
input[3:0] b,
input clk,
output[7:0] product);
reg[3:0] ma;
reg[7:0] mb;
reg done;
reg[7:0] sum;
reg[3:0] i;
always @(posedge clk)
begin
if(done==1'b0)
begin
if(ma[0]==1'b1) begin sum<=sum+mb; end
i<=i+1;
mb<=mb<<1;
ma<=ma>>1;
end
end
always @(posedge clk)begin
if(i>=4)begin done<=1'b1;end
end
always @(ma or mb or sum)begin
$display("ma=%b,mb=%b,sum=%b",ma,mb,sum);
end
always @(a or b)begin
done=1'b0;
sum=8'b0;
i=4'b0;
ma=a;
mb={4'b0,b};
end
assign product=done?sum:8'b0;
endmodule
very good
