您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 给排水/暖通与智能化 > 课程设计2
数字逻辑设计课程设计(2)一.成员及分工:姓名学号负责内容尹康2012029010010思路分析、Verilog程序编写及波形仿真张枭2012029010024原理图绘制及报告撰写二.设计内容:1自动贩卖机核心电路设计:(1)三种商品(咖啡、可乐、橙汁)可供选择,价格分别是3元、2元、1元。一次只能买一件商品。投钱后选择商品并按确认键,得到商品并找零钱。(2)两个投币口:1元和5元,最多投5元。如果钱不够,则自动退款。(3)有取消功能(即按下取消键,就无条件退款)根据设计需要自行确定输入和输出思路分析:a可将电路分为两个模块:投币模块与售货模块,前者可用时序逻辑电路实现,后者可用组合逻辑电路实现;b在投币模块引入6个状态:init,S2,S3,S4,S5,分别代表收到0、1、2、3、4、5元,在每个时钟上升沿,根据当前状态及输入确定输出信号(Mealy型)。因为状态及输出较多,考虑使用Verilog语言描述设计;c结合题意,引入如下输入输出:输入:CLK:时钟信号m1,m5:投入1元或5元cancel:取消信号x1,x2,x3:购买橙汁、可乐或咖啡(除CLK均为高电平有效)输出:y1,y2,y3:购得橙汁、可乐或咖啡refund:退款数目d为简化设计,结合生活常识,做出以下规定:Ⅰ.不能同时投入两张纸币(m1、m2不同时有效);Ⅱ.只要投入一张1元,就不能再投入5元;Ⅲ.已投的钱达到5元后(state=S5),不能再投币;Ⅳ.投钱与购买不能同时发生(mi与xi不同时有效)Ⅴ.已投入的钱不足以购买选择的饮料时,直接退款。Verilog代码如下:modulevending_machine(x1,x2,x3,y1,y2,y3,m1,m5,clk,cancel,refund);inputx1,x2,x3,m1,m5,clk,cancel;outputy1,y2,y3;output[3:0]refund;regy1,y2,y3;reg[2:0]refund;reg[2:0]state;parameter[2:0]init=3'b000,s1=3'b001,s2=3'b010,s3=3'b011,s4=3'b100,s5=3'b101;always@(posedgeclk)begincase(state)init:if(m1)state=s1;elseif(m5)state=s5;elsebeginy1=0;y2=0;y3=0;refund=4'b000;state=init;ends1:if(m1)state=s2;elseif(x1)beginy1=1;refund=4'b000;state=init;endelseif(cancel||x2||x3)beginy1=0;y2=0;y3=0;refund=4'b001;state=init;endelsebeginy1=0;y2=0;y3=0;refund=4'b000;state=s1;ends2:if(m1)state=s3;elseif(x1)beginy1=1;refund=4'b001;state=init;endelseif(x2)beginy2=1;refund=4'b000;state=init;endelseif(cancel||x3)beginy1=0;y2=0;y3=0;refund=4'b010;state=init;endelsebeginy1=0;y2=0;y3=0;refund=4'b000;state=s2;ends3:if(m1)state=s4;elseif(x1)beginy1=1;refund=4'b010;state=init;endelseif(x2)beginy2=1;refund=4'b001;state=init;endelseif(x3)beginy3=1;refund=4'b000;state=init;endelseif(cancel)beginy1=0;y2=0;y3=0;refund=4'b011;state=init;endelsebeginy1=0;y2=0;y3=0;refund=4'b000;state=s3;ends4:if(m1)state=s5;elseif(x1)beginy1=1;refund=4'b011;state=init;endelseif(x2)beginy2=1;refund=4'b010;state=init;endelseif(x3)beginy3=1;refund=4'b001;state=init;endelseif(cancel)beginy1=0;y2=0;y3=0;refund=4'b100;state=init;endelsebeginy1=0;y2=0;y3=0;refund=4'b000;state=s4;ends5:if(x1)beginy1=1;refund=4'b100;state=init;endelseif(x2)beginy2=1;refund=4'b011;state=init;endelseif(x3)beginy3=1;refund=4'b010;state=init;endelseif(cancel)beginy1=0;y2=0;y3=0;refund=4'b101;state=init;enddefault:beginy1=0;y2=0;y3=0;refund=4'b000;state=init;endendcaseendendmodule仿真波形:a.投入三元(先投2元,再投1元),购买可乐→得到可乐,找零1元b.投入1元,购买咖啡→不足3元,直接退款c.投入5元后取消交易→直接退款2设计序列信号检测器:能同时检测自己名字的首字母(大写或小写)和学号最后一位数的ASCII编码,要求完成MOORE型重叠和不可重叠两种检测方法。若是组队完成,则每人都要有自己设计的电路和仿真结果。思路分析:a尹康的学号尾数为0,姓氏首字母为y。0、Y、y的ASCLL码分别为48、89、121,对应的8位二进制码分别为00110000、01011001、01111001;b张枭的学号尾数为4,姓氏首字母为z。4、Z、z的ASCLL码分别为52、90、122,对应的8位二进制码分别为00110100、01011010、01111010;c用串入并出移位寄存器可以简便地实现序列检测器,为简化设计,拟采用2片74X194通用移位寄存器构成Moor型可重复使用数据的8位二进制码序列检测器。d构成左移寄存器,数据由QD依次移到QA。SRSI等管脚不应悬空。原理图a(检测0、Y、y):仿真波形:即:S:00110000111001011001111001000:0000000010000000000000000000yd:0000000000000000000010000000yx:0000000000000000000000000010yes:0000000010000000000010000010原理图b(检测4、Z、z):仿真波形:即:S:10011010011001011010111101014:0000000001000000000000000000zd:0000000000000000000010000000zx:0000000000000000000000000001yes:0000000001000000000010000001三.心得体会1.在进行电路设计时,结合实际情况排除某些不可能出现的输入组合能大大简化设计过程;2.虽然利用原理图设计电路很直观,但当输入较多或中间状态较多,特别是在进行时序逻辑电路设计时,其分析、化简过程将变得十分困难,且不能直观地描述出状态转移关系。这时,使用硬件描述语言(如Verilog)进行设计更有优势;3.cmos电路中,不用的管脚不应悬空;4.这次课程设计,既加强了了我们独立思考的能力,又培养了我们团队合作的意识,既加深了我们对课本内容的认识,又锻炼了我们动手实践的能力,让我们认识到理论联系实际的重要性,使我们受益良多。
本文标题:课程设计2
链接地址:https://www.777doc.com/doc-6473736 .html