⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mutip.v

📁 16位乘法器 16位乘法器 16位乘法器
💻 V
字号:
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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -