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

📄 sell.v

📁 用HDL语言编写
💻 V
字号:
`timescale 1ns / 1ps//////////////////////////////////////////////////////////////////////////////////// Company: // Engineer: // // Create Date:    14:36:58 02/22/2008 // Design Name: // Module Name:    sell // Project Name: // Target Devices: // Tool versions: // Description: //// Dependencies: //// Revision: // Revision 0.01 - File Created// Additional Comments: ////////////////////////////////////////////////////////////////////////////////////module sell(kind1,kind2,kind3,one_dollar,se_reg,half_dollar, clk,CLK1,collect, half_out, dispense,decodeout);parameter idle=0,one=1,half=5,two=2,three=3,six=6;//状态变量,分别表示已投币0、1、0.5、2、1.5元的情况    input kind1;       //选择单价1.5元的饮料	 input kind2;       //选择单价2元的饮料	 input kind3;       //选择单价2.5元的饮料	 input one_dollar;  //投入一元硬币    input half_dollar; //投入五角硬币    input clk;         //时钟脉冲    input CLK1;	 output collect;    //提示取走饮料信号	 output half_out;   //找零    output dispense;   //售出一瓶饮料	 output decodeout;	 output se_reg;	 reg reset=1;     //系统reg collect,half_out,dispense;reg[3:0] D1;     //D1和D2分别是要在数码管上显示的两位数reg[3:0] D2;reg[6:0] decodeout1; reg[6:0] decodeout2;reg[6:0] decodeout;reg[1:0] loop_reg;reg[1:0] se_reg;always @(posedge clk)  begin             if(reset) //系统复位				      begin						      dispense=0;collect=0;								half_out=0;D1=idle;D2=idle;								reset=0;						end						             case(D1+D2)//5个状态D1和D2的和都不相同                  idle://已投币0元                        if(half_dollar)  //投币0.5元---half								  begin 								  D1=idle;D2=half;								  end                        else if(one_dollar)     //投币1元---one								  begin								  D1=one;D2=idle;								  end						half://已投币0.5元								if(half_dollar)   //投币0.5元---one								  begin								  D1=one;D2=idle;								  end							   else if(one_dollar)     //投币1元								begin								 D1=one;D2=half;								 if(kind1)              //若单价是1.5,售出,提示取走,系统复位								   begin								   dispense=1;								   collect=1;									reset=1;								   end								                        //否则---six								end						one: //已投币1元								if(half_dollar)         //投币0.5元								begin								 D1=one;D2=half;								 if(kind1)					//若单价是1.5,售出								   								   begin								   dispense=1;								   collect=1;								   reset=1;									end																	            				//否则---six								end								else if(one_dollar)		//投币1元								begin								 D1=two;D2=idle;								 if(kind2)					//若单价是2,售出								   								   begin 									dispense=1;								   collect=1;								   reset=1;									end													 else if(kind1)			//若单价是1.5,售出并找零								   begin								   dispense=1;								   collect=1;								   half_out=1;								   reset=1;									end								                 			//若单价是2.5---two								end						six://已投币1.5元									if(half_dollar) 			//投币0.5元								begin								 D1=two;D2=idle;								 if(kind2)					//若单价是2,售出								   begin 									dispense=1;								   collect=1;								   reset=1;									end								               			//若单凼?.5---three								 								end 								else if(one_dollar)		//投币1元								begin								 D1=two;D2=half;								 if(kind2)					//若单价是2,售出并找零								    begin								    dispense=1;								    collect=1;								    half_out=1;								    reset=1;									 end								 else if(kind3)				//若单价是2.5,售出										  begin								  dispense=1;								  collect=1;								  reset=1;								  end								end						two://已投币2元								if(half_dollar)         //0.5元,售出								  begin								  D1=two;D2=half;								  dispense=1;								  collect=1;								  reset=1;								  end 								else if(one_dollar)     //投币1元,售出并找钱															begin								D1=three;D2=idle;								dispense=1;								collect=1;								half_out=1;								reset=1;								end			    endcase       end		 always@ (D1 or D2)begin		case(D1)			    4'd0:decodeout1=7'b1111110; 			    4'd1:decodeout1=7'b0110000; 			    4'd2:decodeout1=7'b1101101; 			    4'd3:decodeout1=7'b1111001; 			    4'd5:decodeout1=7'b1011011; 			default: decodeout1=7'bx; 		endcase		case(D2)			     4'd0:decodeout2=7'b1111110; 		        4'd1:decodeout2=7'b0110000; 			     4'd2:decodeout2=7'b1101101; 			     4'd3:decodeout2=7'b1111001; 			     4'd5:decodeout2=7'b1011011; 			 default: decodeout2=7'bx; 		endcaseendalways @(posedge CLK1)    begin        loop_reg=loop_reg%2;        case(loop_reg)	     0:begin se_reg<=4'b01;decodeout<=decodeout1;loop_reg=loop_reg+1;end	     1:begin se_reg<=4'b10;decodeout<=decodeout2;loop_reg=loop_reg+1;end	    endcase    endendmodule

⌨️ 快捷键说明

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