📄 mutip.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 + -