《EDA_拔河游戏机设计报告》由会员分享,可在线阅读,更多相关《EDA_拔河游戏机设计报告(13页珍藏版)》请在金锄头文库上搜索。
1、目 录拔河游戏机设计- 1 -1.摘 要- 1 -2.课程设计的任务和基本要求- 1 -2.1设计目的- 1 -2.2设计要求- 1 -2.3设计方案- 2 -3.拔河游戏机流程图- 2 -4设计过程- 2 -4.1 总体设计- 2 -42模块设计- 3 -4.2.1 模块1 分频器设计- 3 -4.2.2 模块2 二位16进制计数器设计- 4 -4.2.3 模块3 比较模块- 5 -4.2.4 模块4 显示模块- 6 -4.3整体电路图块- 7 -5. 系统仿真- 9 -6. 心得体会- 10 -参考文献- 10 -附录- 11 -拔河游戏机设计1.摘 要EDA是电子设计自动化(Electr
2、onic Dedign Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动完成逻辑编译、简化、分割、综合、优化、布局、布线、和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率好可操作性,减轻了设计者的劳动强度。利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以
3、将电子产品从电路设计、性能分析到设计出IC版图或者PCB版图的整个过程的计算机上自动处理完成。现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。我们学习EDA就是为了以后更好的进行电子信息设计控制工作。这门学科需要有坚实厚重的理论功底做依托,同时不能忽视实践的必要性。任何一门工科性质的技术都不能离开实际操作,在发现问题解决问题的过程中可以检验并巩固我们的理论知识,并提高实际
4、创造创新能力。基于以上原因,学院认真组织本次课程设计活动。通过一些小的设计学生对EDA这门课程和技术由感性认识上升到理性认识并有初步的设计能力。2.课程设计的任务和基本要求2.1设计目的通过设计一个简易拔河比赛游戏机(1) 熟练掌握EDA软件QUARTUS II的使用方法;(2) 能利用EDA软件QUARTUS II进行一个电子技术综合问题的设计;(3)掌握FPGA系统各种外围接口的灵活运用,培养实验的仿真及下载技能。(4) 掌握按键分配、CLOCK调用、LED数码管等外围接口的Verilog HDL语言编程;(5)通过软件编程和仿真理解并体会VHDL语言的常用编写语言和语法规 ;(6)培养分
5、析、寻找和排除电子电路中常见故障的能力;2.2设计要求1 设计一个能进行拔河游戏的电路。2 电路使用15个(或9个)发光二极管(机器限制的话可以选用六个发光二极管)开机后只有中间一个发亮,此即拔河的中心点。3 游戏双方各持一个按钮,迅速地、不断地按动,产生脉冲,谁按得快,亮点就向谁的方向移动,每按一次,亮点移动一次。4 亮点移到任一方终端二极管时,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后才使亮点恢复到中心。5 用数码管显示获胜者的盘数,并设置复位按钮。2.3设计方案 设置两个按钮分别代表两个选手,用按钮高电平信号输出表示选手用力一次。将两个按钮信号分别接入两个计数器,用来存储他
6、们的的用力情况。然后将他们的用力情况接入一个比较模块的两个输入端,假设一方比另一方多用力一次,那么将亮点向该方向移位一次。他们用力情况比较即结果处理的全部可能可以全部列出。这样拔河较量的过程和结果就可以通过亮点的变化表示出来。然后需要在任意一方胜利时设定两名选手的按键功能失效。只有复位接触这处设定后才能再次按键比赛。同时设定在一方胜利时给出胜利信号,作为一个上升脉冲接入胜利次数计数器。计数器输出通过译码器后在LED数码管上显示出来。胜利计数器的复位端口独立设为胜利次数显示复位键。3.拔河游戏机流程图如下图所示:4设计过程4.1 总体设计 (1)先设计一个分频器,用来对比赛信号的输出频率进行控制
7、。可以这样理解:我要怎样认为参赛一方获得了暂时的领先优势呢,答案是我可以设计参赛方按键若干次后才认为亮点向它那方移动一次。这样可以更真实的反应比赛过程。这个设想我通过分频器来实现。当然,老师给出的要求是领先按一次就认为亮点移动一次,我就可以直接把我的分频器改为不变分频,这样只需在分频程序里改动一点数据即可,也容易做到。为了硬件验证的简单同时兼顾程序的可扩展性,我这里的分频器以三分频来设计。即先设计一个三分频器。(2)设计一个四位16进制计数器。这个东西因为有之前的实验基础,思路相对比较清晰。复位端,使能端和进位输出端都保存设计,方便以后任意选择性使用。(3)设计一个比较模块。这个模块主要为了对
8、双方选手的用力情况进行一个比较。优势情况不同,经过比较,参赛方的优势可以通过电子绳的中心即一排二极管的亮点的移动来体现。这个只需要把选手的所有可能优势情况列出,并写出对应的亮点显示序列即可。当亮点移动到任意一端的终点后,设定有一个输出端为0,这个输出端接到之前用力计数器和分频器的使能端,限制比赛继续,即双方按键暂时失效。在胜利的同时输出一个进位信号,用以后继胜利次数计数。(4)设计胜利次数统计和显示的模块。这一模块由计数器和译码器两个部分组成,其实就是之前我们做的七段数码管显示。该部分里的计数器的使能端始终保持1,而把复位键作为胜利次数显示的复位键。(5)子模块设计完后进行整体组合。42模块设
9、计4.2.1 模块1 分频器设计 分频器设计的原理和思想其实就是一个计数器,只是把进位端作为分频输出端,而把其他不需要的端口设计省略。计数周期由程序内预置的计数上限来自由控制。我这里为了对比赛双方按键选项有效进行暂停复位的控制还加入了复位和使能控制端,与比赛信号计数器的使能,复位端口对应着一起使用。其实比赛过程中的用力情况是通过比赛信号计数器来反应的。比赛计数器的那两个端口已经足够使用。但是为了扩展分频器的功能,这两个端口还是暂时保留。原理图如下图所示:VHDL源程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_u
10、nsigned.all;entity clkgen is port(clk:in std_logic; rst4:in std_logic; en4:in std_logic; clk3:out std_logic); end entity clkgen; architecture art of clkgen issignal ct:integer range 0 to 8;beginprocess (clk,rst4,en4) begin if rst4=1 then clk3=0;elsif clkevent and clk=1 then if en4=1 then if ct2 then
11、 ct=ct+1; clk3=0; else ct=0; clk3=1; end if; end if;end if;end process;end architecture art;4.2.2 模块2 二位16进制计数器设计 原理图如下图所示:语言程序如下library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt4b is port(clk1,ena1,rst1:in std_logic; dout1,cout1:buffer std_logic_vector(3 downto 0);
12、end cnt4b;architecture art of cnt4b is begin process(clk1,ena1,rst1) beginif rst1=1 then dout1=0000; elsif clk1event and clk1=1 then if ena1=1 then dout1=dout1+1;end if;end if;if dout1=9 then cout1=cout1+1; else cout1=0000;end if; end process;end architecture art;4.2.3 模块3 比较模块 比较的对象是两个拔河信号计数器输出的四位2
13、进制数,所以模块的这两个输入端口接入的数据类型务必设定为逻辑位矢量型。因为要由它的比较结果来控制前面的使能情况。所以本模块要专门设定一个输出与前面部分进行联系。这个模块要有拔河绳亮点显示功能,故要有七位输出对应七个二极管。它的另一个重要功能是为以后的胜利次数计数器提供计数脉冲,所以每到亮点移至一段时要有一个类似进位的计数输出端。原理图如下源程序如下: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 d
14、ownto 0) ;led:out std_logic_vector(6 downto 0);en : out std_logic;dl: buffer std_logic;dr: buffer std_logic;rst3:in std_logic);end ;architecture one of lmov isbegin process(rst3,kl,kr)begin if rst3=1 then led=0001000;en=1;dl=0;dr=0;elsif kl-kr=1 then led=0010000;en=1;dl=0;dr=0;elsif kl-kr=2 then led=0100000;en=1;dl=0;dr=0;elsif kl-kr=3 then led=1000000;en=0;dl=1;dr=0;elsif kr-kl=1 then led=0000100;en=1;dl=0;dr=0;elsif kr-kl=2 then led=0000010;en=1;dl=0;dr=0;elsif kr-kl=3 then led=0000001;en=0;dr