太原免费网站建站模板,网站留言板 html,注销WordPress账号,网页购买功能要求#xff1a;
1.只售咖啡; 2.三元/杯,接收一元/五角硬币; 3.不找零钱; 4.售货机中的杯子永远用不完。 从投币口投入1元或5角硬币后,系统对钱币进行计数,当计够3元钱,便自动出咖啡一杯。如果投人的钱币大于3元,如 3.5 元,不进行找零,并且在卖出一次咖啡后,系统…功能要求
1.只售咖啡; 2.三元/杯,接收一元/五角硬币; 3.不找零钱; 4.售货机中的杯子永远用不完。 从投币口投入1元或5角硬币后,系统对钱币进行计数,当计够3元钱,便自动出咖啡一杯。如果投人的钱币大于3元,如 3.5 元,不进行找零,并且在卖出一次咖啡后,系统钱数清零。
系统定义 通过分析咖啡机的功能需求,可以提取出系统的最外层输入输出接口,包括时钟输人、复位输人、投币信号、注咖啡信号、咖啡注完信号、放杯信号、杯子准备就绪信号等。
状态机设计 按照流程图的条件转换关系,就可以对应的画出状态转换图,该图如图所示。在设计中有的状态需要向外部发出控制信号,有的状态不需要发出控制信号,有控制信号输出的状态,需要将控制信号表明在对应的状态图旁边。在该状态转换图中 Add a 和 Add_b分别是计数器一次计数加1行为。当投币是1元钱的时候,计数行为先经过 Add a 接着经过 Addb完成两次计数工作。当投币是5角钱的时候,计数行为只经过 Add_b只完成一次计数工作。Comp 状态是一个空状态,在这里就是为了再等一个时钟周期。因为前面的 Add b是一个计数器的时序动作,在时钟上沿来到的时候才有效,因此只在下一个时钟周期才会完成计数动作因此在这里需要等待一个时钟周期再判断计数值才有效。具体时序图关系如图所示。分别是计数器一次计数加1行为。当投币是1元钱的时候,计数行为先经过 Add a接着经过Addb完成两次计数工作当投币是5角钱的时候,计数行为只经过 Add b 只完成一次计数工作。comp 状态是一个空态,在这里就是为了再等一个时钟周期。因为前面的 Add_b是一个计数器的时序动作,在时钟上升沿来到的时候才有效,因此只在下一个时钟周期才会完成计数动作因此在这里需要等待一个时钟周期再判断计数值才有效。具体时序图关系如图所示。 //状态机模块
module coffee_ztj(clk,//时钟RSTN,//复位cup_rdy,//杯子就绪cof_rdy,//咖啡机就绪place_cup,//放杯子Release_cof,//注入咖啡half_yuan,//半元one_yuan,//一元present_state,//当前状态cnt,//计数值cnt_en,cnt_clr,Eql_grt);
input clk,RSTN,cup_rdy,cof_rdy,half_yuan,one_yuan,Eql_grt;
output place_cup,Release_cof,present_state,cnt_en,cnt_clr;
output [3:0]cnt;
//reg place_cup,inject_cof;
reg cnt_clr,a,b,c,d,e,f;
reg cnt_en, place_cup,Release_cof;
reg [3:0]present_state,next_state;//当前状态和下一状态
parameter Init3b000,//初始状态Wait3b010,//等待状态Add_a3b110,//加一元状态Add_b3b100,//加半元状态comp3b111,//比较状态Place3b001,//放杯子状态Release3b011;//释放咖啡状态
always (posedge clk)
begina~one_yuan;ba;ca(~b);
end
always (posedge clk)
begind~half_yuan;ed;fd(~e);
endalways (negedge clk or negedge RSTN)
if(!RSTN)//复位
present_stateInit;
else
present_statenext_state;
always (*)
begincase(present_state)Init: begin//初始状态{cnt_en,cnt_clr,place_cup,Release_cof}4b0000;next_stateWait;//等待状态endWait : begin//等待状态{cnt_en,cnt_clr,place_cup,Release_cof}4b0100;if(f)//半元next_stateAdd_b;//加半元状态elseif(c)//一元next_stateAdd_a;//加一元状态elsenext_stateWait;//等待状态endAdd_a: begin//加一元状态{cnt_en,cnt_clr,place_cup,Release_cof}4b1100;next_stateAdd_b;//加半元状态endAdd_b: begin//加半元状态{cnt_en,cnt_clr,place_cup,Release_cof}4b1100;next_statecomp;//比较状态endcomp: begin//比较状态{cnt_en,cnt_clr,place_cup,Release_cof}4b0100;if(Eql_grt)//计数到6next_statePlace;//放杯子状态elsenext_stateWait;//等待状态endPlace: begin//放杯子状态{cnt_en,cnt_clr,place_cup,Release_cof}4b0110;if(!cup_rdy)//杯子未就绪next_statePlace;//放杯子状态elsenext_stateRelease;//释放咖啡状态endRelease: begin//释放咖啡状态{cnt_en,cnt_clr,place_cup,Release_cof}4b0101;if(!cof_rdy)//咖啡机未就绪next_stateRelease;//释放咖啡状态elsenext_stateInit;// 初始化状态endendcase
endendmodule
数据通道设计 根据流程图来分析数据通道模块流程图中有加一动作,因此采用计数器来实现该功能。不过这里因为以5角钱作为基本计数单位,那么有可能投币情况会出现 3元与3元5角两种情况。以5角为单位,也就是说计数器最大计数值是 7,所以在数据通道中采用位宽为3位的二进制计数器来实现投币额度的计算。又由于咖啡机不找零,计数额大于等于 6 的时候就开始放杯倒咖啡,这时候计数器输出之和Sum[2:7的最高位Sum[2]一定是1,因此用Sum[2]信号引出给外部状态机电路作为计数额大于等于6有效地判断信号,该信号取名为 Eql_grt_6。
//数据通道模块
module DataPath(cnt_clr,//复位clk,//时钟cnt_en,Eql_grt,//等于大于信号Sum//计数值
);
input cnt_clr,clk,cnt_en;
output Eql_grt;
output [3:0]Sum;
wire cnt_en;
//实例化计数器模块
counter cnt1(.cnt_clr(cnt_clr),.clk(clk),.cnt(Sum),.cnt_en(cnt_en));
//实例化比较器模块
comparator cmp1(.clk(clk),.cnt(Sum),.Eql_grt(Eql_grt));
endmodule
整体电路设计 //顶层设计
module coffee(clk,//时钟RSTN,//复位cup_rdy,//杯子就绪cof_rdy,//咖啡机就绪half_yuan,//半元one_yuan,//一元place_cup,//放杯子Release_cof,//注入咖啡present_state,//当前状态cnt_en,cnt_clr);
input clk,RSTN,cup_rdy,cof_rdy,half_yuan,one_yuan;
output place_cup,Release_cof,present_state,cnt_en,cnt_clr;
wire place_cup,Release_cof,cnt_en,cnt_clr;
wire Eql_grt;
wire [3:0]cnt,present_state;
//实例化状态机
coffee_ztj coffee_ztj(.clk(clk),.RSTN(RSTN),.cup_rdy(cup_rdy),.cof_rdy(cof_rdy),.half_yuan(half_yuan),.one_yuan(one_yuan),.place_cup(place_cup),.Release_cof(Release_cof),.present_state(present_state),.cnt_en(cnt_en),.cnt_clr(cnt_clr),.Eql_grt(Eql_grt));
//实例化数据通道模块
DataPath DataPath(.cnt_clr(cnt_clr),.clk(clk),.cnt_en(cnt_en),.Eql_grt(Eql_grt),.Sum(cnt));
endmodule 其他子模块
//比较器模块
module comparator(clk,//时钟cnt,Eql_grt,//等于大于信号);
input clk;
input [3:0]cnt;
output Eql_grt;
reg Eql_grt;
always ( posedge clk ) beginif(cnt 4b0110)Eql_grt1b1;elseEql_grt1b0;
end
endmodule//计数器模块
module counter(cnt_clr,//复位clk,//时钟cnt,//计数信号cnt_en,//计数使能);
input cnt_en,cnt_clr,clk;
output [3:0]cnt;
reg [3:0]cnt;
always (negedge cnt_clr or posedge clk)
beginif(!cnt_clr)//复位cnt4b0000;elseif(cnt_en)//计数使能cntcnt3b1;elseif(cnt4b0111)//计数到15cnt4b0000;elsecntcnt;
end
endmodule 文章转载自: http://www.morning.ltkzb.cn.gov.cn.ltkzb.cn http://www.morning.jfxdy.cn.gov.cn.jfxdy.cn http://www.morning.hmtft.cn.gov.cn.hmtft.cn http://www.morning.gqflj.cn.gov.cn.gqflj.cn http://www.morning.hqwxm.cn.gov.cn.hqwxm.cn http://www.morning.frcxx.cn.gov.cn.frcxx.cn http://www.morning.cmzcp.cn.gov.cn.cmzcp.cn http://www.morning.kdrjd.cn.gov.cn.kdrjd.cn http://www.morning.pbbzn.cn.gov.cn.pbbzn.cn http://www.morning.xxwfq.cn.gov.cn.xxwfq.cn http://www.morning.hrqfl.cn.gov.cn.hrqfl.cn http://www.morning.ftrpvh.cn.gov.cn.ftrpvh.cn http://www.morning.bmncq.cn.gov.cn.bmncq.cn http://www.morning.hwtb.cn.gov.cn.hwtb.cn http://www.morning.mqldj.cn.gov.cn.mqldj.cn http://www.morning.dywgl.cn.gov.cn.dywgl.cn http://www.morning.wfykn.cn.gov.cn.wfykn.cn http://www.morning.rqqlp.cn.gov.cn.rqqlp.cn http://www.morning.dcpbk.cn.gov.cn.dcpbk.cn http://www.morning.tpbhf.cn.gov.cn.tpbhf.cn http://www.morning.ckxd.cn.gov.cn.ckxd.cn http://www.morning.tmzlt.cn.gov.cn.tmzlt.cn http://www.morning.jwmws.cn.gov.cn.jwmws.cn http://www.morning.lfsmf.cn.gov.cn.lfsmf.cn http://www.morning.ckdgj.cn.gov.cn.ckdgj.cn http://www.morning.hnhsym.cn.gov.cn.hnhsym.cn http://www.morning.qwhbk.cn.gov.cn.qwhbk.cn http://www.morning.chmcq.cn.gov.cn.chmcq.cn http://www.morning.bftqc.cn.gov.cn.bftqc.cn http://www.morning.nnmnz.cn.gov.cn.nnmnz.cn http://www.morning.rkmsm.cn.gov.cn.rkmsm.cn http://www.morning.hmktd.cn.gov.cn.hmktd.cn http://www.morning.gmnmh.cn.gov.cn.gmnmh.cn http://www.morning.kqzxk.cn.gov.cn.kqzxk.cn http://www.morning.djbhz.cn.gov.cn.djbhz.cn http://www.morning.nzdks.cn.gov.cn.nzdks.cn http://www.morning.zdzgf.cn.gov.cn.zdzgf.cn http://www.morning.jfnbh.cn.gov.cn.jfnbh.cn http://www.morning.tqfnf.cn.gov.cn.tqfnf.cn http://www.morning.yqgny.cn.gov.cn.yqgny.cn http://www.morning.nwbnt.cn.gov.cn.nwbnt.cn http://www.morning.qflwp.cn.gov.cn.qflwp.cn http://www.morning.lgpzq.cn.gov.cn.lgpzq.cn http://www.morning.ccpnz.cn.gov.cn.ccpnz.cn http://www.morning.nlbhj.cn.gov.cn.nlbhj.cn http://www.morning.bkpbm.cn.gov.cn.bkpbm.cn http://www.morning.drtgt.cn.gov.cn.drtgt.cn http://www.morning.mzrqj.cn.gov.cn.mzrqj.cn http://www.morning.zshuhd015.cn.gov.cn.zshuhd015.cn http://www.morning.wyrkp.cn.gov.cn.wyrkp.cn http://www.morning.xbwqg.cn.gov.cn.xbwqg.cn http://www.morning.bpknt.cn.gov.cn.bpknt.cn http://www.morning.vjwkb.cn.gov.cn.vjwkb.cn http://www.morning.jncxr.cn.gov.cn.jncxr.cn http://www.morning.wbxbj.cn.gov.cn.wbxbj.cn http://www.morning.xnkh.cn.gov.cn.xnkh.cn http://www.morning.qfqld.cn.gov.cn.qfqld.cn http://www.morning.zpstm.cn.gov.cn.zpstm.cn http://www.morning.lzjxn.cn.gov.cn.lzjxn.cn http://www.morning.qbmjf.cn.gov.cn.qbmjf.cn http://www.morning.lwzgn.cn.gov.cn.lwzgn.cn http://www.morning.pcgrq.cn.gov.cn.pcgrq.cn http://www.morning.mjtgt.cn.gov.cn.mjtgt.cn http://www.morning.bctr.cn.gov.cn.bctr.cn http://www.morning.lstmg.cn.gov.cn.lstmg.cn http://www.morning.dfndz.cn.gov.cn.dfndz.cn http://www.morning.wlxfj.cn.gov.cn.wlxfj.cn http://www.morning.mflhr.cn.gov.cn.mflhr.cn http://www.morning.nsncq.cn.gov.cn.nsncq.cn http://www.morning.pcbfl.cn.gov.cn.pcbfl.cn http://www.morning.kvzvoew.cn.gov.cn.kvzvoew.cn http://www.morning.swdnr.cn.gov.cn.swdnr.cn http://www.morning.srbl.cn.gov.cn.srbl.cn http://www.morning.kjnfs.cn.gov.cn.kjnfs.cn http://www.morning.zgnng.cn.gov.cn.zgnng.cn http://www.morning.dqrpz.cn.gov.cn.dqrpz.cn http://www.morning.hwljx.cn.gov.cn.hwljx.cn http://www.morning.bxqry.cn.gov.cn.bxqry.cn http://www.morning.krkwh.cn.gov.cn.krkwh.cn http://www.morning.pzqnj.cn.gov.cn.pzqnj.cn