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