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

📄 seller.v

📁 自动售货机的程序
💻 V
字号:
module seller(clk,rst_n,in_wujiao,in_yikuai,
                               sell_succeed,fetch_alarm,get_change);

input clk;
input rst_n;
input in_wujiao;
input in_yikuai;

output sell_succeed;
output fetch_alarm;
output get_change;

reg sell_succeed;
reg fetch_alarm;
reg get_change;

reg in_wujiao_reg;
reg in_yikuai_reg;

//one_hot 
parameter idle     =  5'b00001,
          wujiao   =  5'b00010,
          yikuai   =  5'b00100,
          yikuaiwu =  5'b01000,
          liangkuai=  5'b10000;
          
reg[4:0] PS;
reg[4:0] NS;

//ouput with clk
//assign sell_succeed = sell_succeed;
//assign fetch_alarm  = fetch_alarm;
//assign get_change   = get_change;

always@(posedge clk or negedge rst_n)
begin
  if(~rst_n)
    begin
      in_wujiao_reg <= 0;
      in_yikuai_reg <= 0;
    end
    else
      begin
        in_wujiao_reg <= in_wujiao;
        in_yikuai_reg <= in_yikuai;
      end
end

//state shift
always@(posedge clk or negedge rst_n)
begin
	if(~rst_n)
		PS<=idle;
	else
		PS<=NS;
end 

//state coding
always@(in_wujiao or in_yikuai or PS or in_wujiao_reg or in_yikuai_reg)
begin
	case(PS)
		idle:
			if(in_wujiao==0 && in_wujiao_reg==1)
				NS = wujiao;
			else if (in_yikuai==0 && in_yikuai_reg ==1)
				NS = yikuai;
			else
				NS = idle;
		wujiao:
		
			if(in_wujiao==0 && in_wujiao_reg==1)
				NS = yikuai;
			else if(in_yikuai==0 && in_yikuai_reg ==1)
				NS = yikuaiwu;
			else
				NS = wujiao;
		yikuai:
			if(in_wujiao==0 && in_wujiao_reg==1)
				NS = yikuaiwu;
			else if(in_yikuai==0 && in_yikuai_reg ==1)
				NS = liangkuai;
			else
				NS = yikuai;
		yikuaiwu:
			if(in_wujiao==0 && in_wujiao_reg==1)
				NS = liangkuai;
			else if(in_yikuai==0 && in_yikuai_reg ==1)
				NS = idle;
			else
				NS = yikuaiwu;
		liangkuai:
			if((in_wujiao==0 && in_wujiao_reg==1) || (in_yikuai==0 && in_yikuai_reg ==1))
				NS = idle;
			else
				NS = liangkuai;
		default:
			NS = idle;
	endcase
end

//output
always@(posedge clk or negedge rst_n)
begin
	if(~rst_n)
	begin
		sell_succeed  <= 1'b0;
		fetch_alarm <= 1'b0;
		get_change   <= 1'b0;
	end
	else
	case(PS)
		yikuaiwu:
			if(in_yikuai)
			begin
				fetch_alarm  <= 1'b1;
				sell_succeed   <= 1'b1;
			end
			else
			begin
				sell_succeed  <= 1'b0;
				fetch_alarm <= 1'b0;
				get_change   <= 1'b0;
			end
		liangkuai:
			if(in_yikuai)
			begin
				fetch_alarm  <= 1'b1;
				sell_succeed   <= 1'b1;
				get_change    <= 1'b1;
			end
			else if(in_wujiao)
			begin
				sell_succeed  <= 1'b1;
				fetch_alarm <= 1'b1;
			end
	        else
	        begin
				sell_succeed  <= 1'b0;
				fetch_alarm <= 1'b0;
				get_change   <= 1'b0;
			end
		default: 
		begin
				sell_succeed  <= 1'b0;
				fetch_alarm <= 1'b0;
				get_change   <= 1'b0;
		end
	endcase
end
endmodule
	

⌨️ 快捷键说明

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