孙晔拔河游戏机.doc_第1页
孙晔拔河游戏机.doc_第2页
孙晔拔河游戏机.doc_第3页
孙晔拔河游戏机.doc_第4页
孙晔拔河游戏机.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

东 北 石 油 大 学课 程 设 计课 程 EDA技术课程设计 题 目 拔河游戏机 院 系 电子科学学院 专业班级 电子科学与技术 学生姓名 孙晔 学生学号 070901240127 指导教师 2011年 3 月11日东北石油大学课程设计任务书课程 EDA技术课程设计题目 拔河游戏机专业 电子科学与技术 姓名 孙晔 学号 070901240127主要内容、基本要求、主要参考资料等主要内容:电子拔河游戏机是一种能容纳甲乙双方参赛游戏电路。由一排发光二极管表示拔河的“电子绳”。由甲乙双方通过按纽开关使发光二极管向一方的终点延伸,当延伸到某方的最后一个发光二极管时, 则该方获胜,连续比赛多局以定胜负。基本要求:1、设计一个能进行拔河游戏的电路。2、电路使用9个发光二极管,开机后只有中间一个发亮,此即拔河的中心点。3、游戏双方各持一个按钮,迅速地、不断地按动,产生脉冲,谁按得快,亮点就向谁的方向移动,每按一次,亮点移动一次。4、亮点移到任一方终端二极管时,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后才使亮点恢复到中心。5、用数码管显示获胜者的盘数。主要参考资料:1 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.2 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006.3 阎石主编.数字电子技术基础. 北京:高教出版社,2003.完成期限 2011.3.11 指导教师 专业负责人 2011年 3月7日1 基本原理二十世纪后半期,通过EDA技术对大规模可编程逻辑器件编程,产品得到了大力的发展,这种方法不仅成本低、周期短、可靠性高,而且可随时在系统中修改其逻辑功能。这里采用VHDL语言来设计拔河游戏机,突出了其作为硬件描述,本设计的基本原理就是采用VHDL语言设计出拔河游戏机的原理程序,写入程序最后模拟仿真即可。拔河游戏机是一种能容纳甲乙双方参赛游戏电路。由一排发光二极管表示拔河的“电子绳”。本课题所设计的拔河游戏机由9个发光二极管排列成一行,开机之后只有中间一个发光二极管亮,以此作为拔河的中心线,游戏双方各持一个按键,迅速地、不断地按动产生脉冲,谁按得快,亮点就向哪方移动,每按一次,亮点移动一次。移到任一方终端指示灯点亮,这一方就获胜,此时双方按键均无作用,输出保持,只有经裁判复位后才使亮点恢复到中心线。当一局比赛结束后,由点亮该终点灯的信号使电路封锁加减脉冲信号的作用.即实现电路自锁,使加减脉冲无效。同时,使计分电路自动加分。控制电路部分应能控制由振荡器产生的脉冲信号进入计数器的加减脉冲的输入端,其进入方向则由参赛双方的按键信号决定。 由设计内容可知,首先需要一个十进制的计数器,用于对双方按钮的次数计数,并通过译码器显示在数码管上。设计要求用50MHz的频率,而设计用到的是1K Hz的频率,所以要设计一个程序进行分频。其次,显视控制部分设计要求在发光二极管上显示游戏状态,双方每按十次,亮点向先按十次移动一次,对脉冲进行计数,每十次移一位。需接入一个清零端 ,用于复位。再次,运用VHDL程序语言进行各个模块的程序编写,控制电路的正常运行。最后,将以上程序组装起来,就可得到所需要的拔河游戏机。2.设计框图甲方甲方胜利译码器可逆计数器LED中心线乙方胜利控制电路乙方整形电路显示计数器拔河游戏机线路框图二、设计步骤和调试过程1、总体设计电路2.模块设计和相应模块程序1)显示控制模块library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity bahe is port (a,b,rst,clk:in std_logic;sg,led:out std_logic_vector(8 downto 0);bt:out std_logic_vector(7 downto 0);end bahe;-architecture one of bahe iscomponent cnt10port (clk,rst,en:std_logic;cout:out std_logic;cq:out std_logic_vector(3 downto 0);end component;component scan port (clk :in std_logic;a1, a2,a3,b1,b2,b3:in std_logic_vector(3 downto 0);sg:out std_logic_vector(8 downto 0);bt: out std_logic_vector(7 downto 0);end component;component lmovport (kl ,kr:in std_logic_vector(3 downto 0) ;led:out std_logic_vector(8 downto 0);en : out std_logic;rst:in std_logic);end component;signal e,f,ca1,ca2,cb1,cb2:std_logic;signal cqa1,cqa2,cqa3,cqb1,cqb2,cqb3:std_logic_vector(3 downto 0);beginu1: cnt10 port map (en=e,rst=rst,clk=a,cout=ca1,cq=cqa1);u2: cnt10 port map (en=e,rst=rst,clk=ca1,cout=ca2,cq=cqa2);u3: cnt10 port map (en=e,rst=rst,clk=ca2,cq=cqa3);u4: cnt10 port map (en=e,rst=rst,clk=b,cout=cb1,cq=cqb1);u5: cnt10 port map (en=e,rst=rst,clk=cb1,cout=cb2,cq=cqb2);u6: cnt10 port map (en=e,rst=rst,clk=cb2,cq=cqb3);u7: scan port map (a1=cqa1,a2=cqa2,a3=cqa3,b1=cqb1,b2=cqb2,b3=cqb3,clk=clk,sg=sg,bt=bt);u8:lmov port map (en=e,kl=cqa2,kr=cqb2,rst=rst,led=led);end architecture one;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all; entity cnt10 isport(clk,rst,en:std_logic;cout:out std_logic;cq:out std_logic_vector(3 downto 0);end;architecture one of cnt10 isbeginprocess(clk,rst,en)variable cqi:std_logic_vector(3 downto 0);begin if rst=1 then cqi:=(others=0);elsif clkevent and clk=1 then if en=1 then if cqi0);end if ;end if;end if;if c qi=9 then cout=0 ;else cout=1;end if;cqbt=10000000;abt=01000000;abt=00100000;abt=00000100;abt=00000010;abt=00000001;abt=00000000;end case ;end process p1;-p2:process (clk)variable ct:integer range 0 to 50000;begin if clkevent and clk=1 then -1000HZ if ct49999 thenct:=ct+1;clk1=0;else ct:=0;clk1=1;end if;end if;end process p2;process(clk1)begin if clk1event an d clk1=1 thenif cnt45 thencnt4=cnt4+1;else cnt4sgsgsgsgsgsgsgsgsgsgsgsgsgsgsgsgnull;end case ;end process;end;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity lmov is port (kl ,kr:in std_logic_vector(3 downto 0) ;led:out std_logic_vector(8 downto 0);en : out std_logic;rst:in std_logic);end ;architecture one of lmov isbegin process(rst,kl,kr)begin if rst=1 then led=111101111;en=1;elsif kl-kr=1 then led=111011111;en=1;elsif kl-kr=2 then led=110111111;en=1;elsif kl-kr=3 then led=101111111;en=1;elsif kl-kr=4 then led=011111111;en=0;elsif kr-kl=1 then led=111110111;en=1;elsif kr-kl=2 then led=111111011;en=1 ;elsif kr-kl=3 then led=111111101;en=1;elsif kl-kr=4 then led=111111110;en=0;elsif kr-kl=0 then led=111101111;en=1;else null;end if;end process;end;3.仿真及仿真结果分析1)当a输入的频率大于b时,可观察到led:低电平有规则的向左移动。即向a方向移动,符合设计要求。波形如下图1。仿真图12)改变输入a和b的大小,b的输入频率大于a,得到的波形如下,由波形图可知低电平向右边移动,即向b方向移动,符合设计要求,波形如图2仿真图24、实验调试结果 检查电路的完整性和正确性,确保没有交叉短路和断路的线。 在电源的接入端接+5V电源。 开机后看看是否只有在拔河绳子中间的发光二极管亮。 接着按两个按钮看看发光二极管的发光顺序,是不是和预想的要求一致。三、结论及心得体会一开始接触这个课题的时候,不知道怎么下手,通过老师的讲解以及查找资料基本了解了拔河游戏机的设计原理。整个程序由以下几部分组成,计数器的设计及分析,扫描显视控制和分频器的设计及分析,拔河灯显示控制部分的设计及分析,游戏机的组装及分析。将程序设计完后进行程序分析、仿真分析、硬件测试、调试。将整个程序分成几个小程序后思路明显好多了,几个程序都是以前做过差不多的,只需稍加修改应该就可以应用。请教老师,指点后对每个小程序单独进行编译,这样也容易找到错误及时修改。当将几个小程序的错误修改后,在进行整个程序的编译时没出很大的差错。程序没问题了,接下来进行仿真波形,创建了仿真波形文件,选择了仿真的引脚并对input引脚付初值后进行仿真,接下来进行下载到sopc开发板进行测试。基本符合设计要求,开始9个led灯只有中间的灯亮,key1和key8代表甲乙双方的按键,分别按十次中间的led灯就向按键方移动一位,直到终端灯亮时结束,此时双方按钮均被锁住,清零后可重新开始。通过这次课程设计,我更加感到理论和实际之间的差异很大。我也越来越强烈地感到要掌握一项技术,唯一的办法也是最好的办法就是实践。只有通过实践才能将书本上的知识应用,也只有实践才能发现很多问题,真正掌握知识,学以致用。虽然遇到的问题很多,但是同时得到很多有用的经验。这些对于以后的学习和工作都有很大的帮助。参考资料1 潘松著.EDA技术实用教程(第二版). 北京:科学出版社,2005.2 康华光主编.电子技术基础 模拟部分. 北京:高教出版社,2006.3 阎石主编.数字电子技术基础. 北京:高教出版社,2003.东北石油大学课程设计成绩评价表

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论