module usmultiplier #(
parameter NUMBER1 =8,
parameter NUMBER2 =8)(
input [NUMBER1-1:0] input1 ,
input signed[NUMBER2-1:0] input2 ,
input clk ,
input rst_n ,
input begin_en ,
output reg finish_en ,
output reg [NUMBER1+NUMBER2-2:0] out
);//======================================================================================\
// define parameter and internal signal \
//======================================================================================\
reg [NUMBER1+NUMBER2-2 : 0] out1 ;//==========================================================================================\
// next is main code \\
//===========================================================================================\\
always@(posedge clk or negedge rst_n)
begin
if(rst_n ==0)
begin
out <=0;
end
elseif(begin_en && finish_en )
begin
out[NUMBER1+NUMBER2-3:0]<= input1 * input2[NUMBER2-2:0];
out[NUMBER1+NUMBER2-2]<= input2[NUMBER2-1];
end
else
out <= out ;
end
always@(posedge clk or negedge rst_n )
begin
if(rst_n ==0)
begin
out1 <=0;
end
else
out1 <= out ;
end
always@(posedge clk or negedge rst_n)
begin
if(rst_n ==0)
begin
finish_en <=1'b1 ;
end
elseif(out != out1)
begin
finish_en <=1'b1 ;
end
else
finish_en <=1'b0 ;
end
endmodule