EDA拔河比赛课程设计Word格式文档下载.docx
《EDA拔河比赛课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《EDA拔河比赛课程设计Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
参考文献………………………………………………18
摘要
EDA是电子设计自动化(ElectronicDedignAutomation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
20世纪90年代,国际上电子和计算机技术较先进的国家一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大的成功。
在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性,这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。
这一切极大的改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动完成逻辑编译、简化、分割、综合、优化、布局、布线、和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的出现,极大地提高了电路设计的效率好可操作性,减轻了设计者的劳动强度。
利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或者PCB版图的整个过程的计算机上自动处理完成。
现在对EDA的概念或范畴用得很宽。
包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。
目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。
例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。
我们学习EDA就是为了以后更好的进行电子信息设计控制工作。
这门学科需要有坚实厚重的理论功底做依托,同时不能忽视实践的必要性。
任何一门工科性质的技术都不能离开实际操作,在发现问题解决问题的过程中可以检验并巩固我们的理论知识,并提高实际创造创新能力。
基于以上原因,学院认真组织本次课程设计活动。
通过一些小的设计学生对EDA这门课程和技术由感性认识上升到理性认识并有初步的设计能力。
1课程设计的任务和基本要求
1.1设计目的
通过设计一个简易拔河比赛游戏机
(1)熟练掌握EDA软件QUARTUSII的使用方法;
(2)能利用EDA软件QUARTUSII进行一个电子技术综合问题的设计;
(3)掌握FPGA系统各种外围接口的灵活运用,培养实验的仿真及下载技能。
(4)掌握按键分配、CLOCK调用、LED数码管等外围接口的VerilogHDL语言编程;
(5)通过软件编程和仿真理解并体会VHDL语言的常用编写语言和语法规;
(6)培养分析、寻找和排除电子电路中常见故障的能力;
1.2设计要求
1设计一个能进行拔河游戏的电路。
2电路使用15个(或9个)发光二极管(机器限制的话可以选用六个发光二极管)
开机后只有中间一个发亮,此即拔河的中心点。
3游戏双方各持一个按钮,迅速地、不断地按动,产生脉冲,谁按得快,亮点就向谁的方向移动,每按一次,亮点移动一次。
4亮点移到任一方终端二极管时,这一方就获胜,此时双方按钮均无作用,输出保持,只有复位后才使亮点恢复到中心。
5用数码管显示获胜者的盘数,并设置复位按钮。
1.3设计方案
设计方案一
按钮信号即输入的脉冲信号,每按一次按钮都应能进行有效的计数。
用可逆计数器的加、减计数输入端分别接受两路脉冲信号,可逆计数器原始输出状态为0000,经译码器输出,使中间一只二极管发亮。
当计数器进行加法计数时,亮点向右移;
进行减法计数时,亮点向左移。
由一个控制电路指示谁胜谁负,当亮点移到任一方终端时,由控制电路产生一个信号,使计数器停止计数。
将双方终端二极管“点亮”信号分别接两个计数器的“使能”端,当一方取胜时,相应的计数器进行一次计数,这样得到双方取胜次数的显示。
设置一个“复位”按钮,使亮点回到中心,取胜计数器也要设置一个“复位”按钮,使之能清零。
设计方案二
设置两个按钮分别代表两个选手,用按钮高电平信号输出表示选手用力一次。
将两个按钮信号分别接入两个计数器,用来存储他们的的用力情况。
然后将他们的用力情况接入一个比较模块的两个输入端,假设一方比另一方多用力一次,那么将亮点向该方向移位一次。
他们用力情况比较即结果处理的全部可能可以全部列出。
这样拔河较量的过程和结果就可以通过亮点的变化表示出来。
然后需要在任意一方胜利时设定两名选手的按键功能失效。
只有复位接触这处设定后才能再次按键比赛。
同时设定在一方胜利时给出胜利信号,作为一个上升脉冲接入胜利次数计数器。
计数器输出通过译码器后在LED数码管上显示出来。
胜利计数器的复位端口独立设为胜利次数显示复位键。
通过比较,我个人认为第二种方法得心应手,设计思路更简单,更条理,所以采用第二种设计方案。
2设计过程……………………
2.1总体设计
(1)先设计一个分频器,用来对比赛信号的输出频率进行控制。
可以这样理解:
我要怎样认为参赛一方获得了暂时的领先优势呢,答案是我可以设计参赛方按键若干次后才认为亮点向它那方移动一次。
这样可以更真实的反应比赛过程。
这个设想我通过分频器来实现。
当然,老师给出的要求是领先按一次就认为亮点移动一次,我就可以直接把我的分频器改为不变分频,这样只需在分频程序里改动一点数据即可,也容易做到。
为了硬件验证的简单同时兼顾程序的可扩展性,我这里的分频器以三分频来设计。
即先设计一个三分频器。
(2)设计一个四位16进制计数器。
这个东西因为有之前的实验基础,思路相对比较清晰。
复位端,使能端和进位输出端都保存设计,方便以后任意选择性使用。
(3)设计一个比较模块。
这个模块主要为了对双方选手的用力情况进行一个比较。
优势情况不同,经过比较,参赛方的优势可以通过电子绳的中心即一排二极管的亮点的移动来体现。
这个只需要把选手的所有可能优势情况列出,并写出对应的亮点显示序列即可。
当亮点移动到任意一端的终点后,设定有一个输出端为‘0’,这个输出端接到之前用力计数器和分频器的使能端,限制比赛继续,即双方按键暂时失效。
在胜利的同时输出一个进位信号,用以后继胜利次数计数。
(4)设计胜利次数统计和显示的模块。
这一模块由计数器和译码器两个部分组成,其实就是之前我们做的七段数码管显示。
该部分里的计数器的使能端始终保持‘1’,而把复位键作为胜利次数显示的复位键。
(5)子模块设计完后进行整体组合。
2.2模块设计……………………………………………
2.2.1模块1分频器设计
分频器设计的原理和思想其实就是一个计数器,只是把进位端作为分频输出端,而把其他不需要的端口设计省略。
计数周期由程序内预置的计数上限来自由控制。
我这里为了对比赛双方按键选项有效进行暂停复位的控制还加入了复位和使能控制端,与比赛信号计数器的使能,复位端口对应着一起使用。
其实比赛过程中的用力情况是通过比赛信号计数器来反应的。
比赛计数器的那两个端口已经足够使用。
但是为了扩展分频器的功能,这两个端口还是暂时保留。
原理图如下
VHDL源程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityclkgenis
port(clk:
instd_logic;
rst4:
en4:
clk3:
outstd_logic);
endentityclkgen;
architectureartofclkgenis
signalct:
integerrange0to8;
begin
process(clk,rst4,en4)
begin
ifrst4='
1'
thenclk3<
='
0'
;
elsifclk'
eventandclk='
then
ifen4='
then
ifct<
2then
ct<
=ct+1;
clk3<
else
=0;
endif;
endif;
endprocess;
endarchitectureart;
2.2.2模块2二位16进制计数器设计
原理图如下
语言程序如下
entitycnt4bis
port(clk1,ena1,rst1:
dout1,cout1:
bufferstd_logic_vector(3downto0));
endcnt4b;
architectureartofcnt4bis
begin
process(clk1,ena1,rst1)
ifrst1='
thendout1<
="
0000"
elsifclk1'
eventandclk1='
ifena1='
dout1<
=dout1+1;
ifdout1=9thencout1<
=cout1+'
elsecout1<
endprocess;
2.2.3模块3比较模块
比较的对象是两个拔河信号计数器输出的四位2进制数,所以模块的这两个输入端口接入的数据类型务必设定为逻辑位矢量型。
因为要由它的比较结果来控制前面的使能情况。
所以本模块要专门设定一个输出与前面部分进行联系。
这个模块要有拔河绳亮点显示功能,故要有七位输出对应七个二极管。
它的另一个重要功能是为以后的胜利次数计数器提供计数脉冲,所以每到亮点移至一段时要有一个类似进位的计数输出端。
由于我采用的是双方分别处理的方式,所以许多非控制类端口都需要双份。
源程序如下
entitylmovis
port(kl,kr:
instd_logic_vector(3down