mutip.v

来自「16位乘法器 16位乘法器 16位乘法器」· Verilog 代码 · 共 53 行

V
53
字号
module Multiply(Mplr,Mcnd,Clock,Reset,Acc);
input [15:0] Mplr,Mcnd;   //Mplr是乘数,Mcnd是被乘数
input Clock,Reset;
output Done;
reg Done;
output [31:0] Acc;
reg [31:0] Acc;
parameter INIT=0,ASS=0,SHIFT=2;
reg[0:1] Mpy_State;
reg[31:0] Mcnd_Temp;       //临时变量

initial
  Mpy_State=INIT;  //初始状态为INIT

always@(negedge Clock)
  begin:PROCESS
	intefer Count;
 	case(Mpy_State)
	INIT:
	 if(Reset)
		Mpy_State=INIT;   //Reset有效时停留在INIT状态
	 else                  //Reset为0时
		begin
			Acc=0;Count=0;
			Mpy_State=ADD;      //跳转到下一个状态ADD
			Done=0;             //运算未完成
			Mcnd_Temp[15:0]=Mcnd;   //取被乘数
			Mcnd_Temp[31:16]=16'd0;   //临时变量的高16位置0
		end
	
	ADD:
	 begin
		if(Mplr[Count])      //判断乘数的第Count位是否为1
		  Acc=Acc+Mcnd_Temp;  //若为1则把乘数左移一位相加
		  Mpy_State=SHIFT;    //完成相加后跳到SHIFT状态继续左移
	 end

	SHIFT:
	  begin
		Mcnd_Temp={Mcnd_Temp[30:0],1'b0};        //左移一位,最低位补0
		Count=Count+1;            //计数器加一
		if(Count==16)     //循环16次 	
		  begin
			Mpy_State=INIT;
			Done=1;
		  end
	     else
		  Mpy_State=ADD;
	  end

	endcase
   end
endmodule

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?