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

📄 st_mult1.v

📁 veilog实现的状态机乘法器.可以参考
💻 V
字号:
module st_mult1 (cheng_shu, bei_cheng_shu, clk, rst, ok, result ) ;// M p l r是乘数,M c n d是被乘数。
input [15:0] cheng_shu, bei_cheng_shu;
input clk, rst;
output ok;
reg ok;
output [31:0] result;
 reg [31:0] result;

parameter ini=0, add=1,shift=2,hold=3;
reg [1:0] current_state;
reg [1:0]state_temp;
reg [31:0] bei_cheng_shu_Temp;
reg [15:0]cheng_shu_temp;

reg[4:0] count ;

 always@(posedge clk)
       if(rst)
      current_state=ini;
      else
      current_state=state_temp;


always@(current_state ) 

begin 
	 
		 
	case (current_state)
	ini:
	begin
	             count = 0;//位计数清零
				 bei_cheng_shu_Temp[15:0] = bei_cheng_shu;//加载数据
				 bei_cheng_shu_Temp[31:16]=16'b0 ;//高位置零
                 cheng_shu_temp=cheng_shu ;
			     result=0;
				 ok=0;

		         state_temp = add;//下一个状态为加运算
		
	end
	add: 
	begin
	 	 if (cheng_shu_temp[count]==1)
		    
		 	result=result+bei_cheng_shu_Temp;
	       
            state_temp=shift;
	         
	end
	
	shift:
	begin //此处必须是语句或者语句块。
			bei_cheng_shu_Temp={bei_cheng_shu_Temp[30:0],1'b0};
		    count=count+1;
	     if(count==16)
		     begin
			 state_temp=hold;
			    
		     end
	     else
	        state_temp=add;
	end
    hold:   
	begin
 			state_temp=hold;
			ok=1;
	end   
			endcase //对M p y _ S t a t e的c a s e语句结束。
end //顺序程序块P R O C E S S。
endmodule


⌨️ 快捷键说明

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