You are on page 1of 5

/*module mul(a,b,rst,clk,c);

parameter n=12;
parameter m=6;
parameter s=n/m;
input [n-1:0] a,b;
input rst,clk;
output reg [2*n-2:0] c;
reg [2*n-1:0] pp [0:n-1];
reg [2*n-1:0] reg_pp [0:n*m-1];
reg [2*n-1:0] sum [0:m-1];
reg [2*n-1:0] reg_sum [0:m-1];
reg [2*n-1:0] tmp2,tmp3;
integer i,j,k;

always @ (*)
for (i=0; i<n; i=i+1)
if (b[i]) begin
if (i==n-1) begin tmp3=(~a)+1; tmp2=tmp3<<n-1; tmp2[2*n-1]=tmp2[2*n-2];
reg_pp[i*m]=tmp2;/*{tmp2[2*n-2],tmp2};*/ /*end else
begin tmp3={n{a[n-1]}}; tmp2={tmp3,a}; reg_pp[i*m]=tmp2<<i; end end
else reg_pp[i*m]=0;

reg [2*n-1:0] tmp;


always @ (*)
for (i=0; i<m; i=i+1)
begin

if (i) tmp=reg_sum[i];
else tmp=0;
for (j=0; j<s; j=j+1)
tmp=tmp+reg_pp[(i*s+j)*m+i];
sum[i]=tmp;
end

always @ (posedge clk)


if (rst)
for (i=0; i<n; i=i+1)
for (j=0; j<m-1; j=j+1)
reg_pp[i*m+j+1]<=reg_pp[i*m+j];
else
for (i=0; i<n*m; i=i+1)
reg_pp[i]<=0;

always @ (*)
c=sum[m-1];

always @ (posedge clk)


if(rst)
for (i=0; i<m-1; i=i+1)
reg_sum[i+1]<=sum[i];
else
for (i=0; i<m; i=i+1)

reg_sum[i]<=0;

endmodule
*/

module mul(a,b,rst,clk,c);
parameter n=12;
parameter m=6;
parameter s=n/m;
input [n-1:0] a,b;
input rst,clk;
output reg [2*n-2:0] c;
reg [2*n-1:0] pp [0:n-1];
reg [2*n-1:0] reg_pp [0:n*m-1];
reg [2*n-1:0] sum [0:m-1];
reg [2*n-1:0] reg_sum [0:m-1];
reg [2*n-1:0] tmp2,tmp3;
integer i,j,k;

always @ (*)
for (i=0; i<n; i=i+1)
if (b[i]) begin
if (i==n-1) begin tmp3=(~a)+1; tmp2=tmp3<<n-1; tmp2[2*n-1]=tmp2[2*n-2];
reg_pp[i*m]=tmp2;/*{tmp2[2*n-2],tmp2};*/ end else

begin tmp3={n{a[n-1]}}; tmp2={tmp3,a}; reg_pp[i*m]=tmp2<<i; end end


else reg_pp[i*m]=0;

reg [2*n-1:0] tmp;


always @ (a or b)
begin
for (i=0; i<m; i=i+1)
begin
if (!i) tmp=0;
else tmp=reg_sum[i];
for (j=0; j<s; j=j+1)
tmp=tmp+reg_pp[(i*s+j)*m+i];
sum[i]=tmp;
end
end

always @ (posedge clk)


if (rst)
for (i=0; i<n; i=i+1)
for (j=0; j<m-1; j=j+1)
reg_pp[i*m+j+1]<=reg_pp[i*m+j];
else
for (i=0; i<n; i=i+1)
for (j=1; j<m; j=j+1)
reg_pp[i*m+j]<=0;

always @ (sum[m-1])
begin
c=sum[m-1];

end

always @ (posedge clk)


if(rst)
for (i=0; i<m-1; i=i+1)
reg_sum[i+1]<=sum[i];
else
for (i=0; i<m; i=i+1)
reg_sum[i]<=0;

endmodule

You might also like