EDA课程设计李爱军.docx
《EDA课程设计李爱军.docx》由会员分享,可在线阅读,更多相关《EDA课程设计李爱军.docx(16页珍藏版)》请在冰豆网上搜索。
EDA课程设计李爱军
EDA电子抢答器的设计
学院电气信息工程学院
班级信息08—1班
组号第二组
组员
实习日期2011年6月29日
指导老师
北华大学
目录
一、设计题目:
EDA电子抢答器的设计2
二、目的与任务2
三、设计要求2
四、设计方案2
五、设计内容及程序3
(一)抢答鉴别及锁存模块3
(二)计分模块5
(三)计时模块6
(四)译码显示模块7
(五)分频模块8
(六)抢答器的顶层原理图设计9
六、实习总结10
七、实习心得与体会10
八、参考文献11
一、设计题目:
EDA电子抢答器的设计
二、目的与任务
进一步掌握QUARTUSⅡ软件的使用方法;
(1)会使用VHDL语言设计小型数字电路系统;
(2)掌握应用QUARTUSⅡ软件设计电路的流程;
(3)掌握电子抢答器的设计方法。
三、设计要求
(1)设计一个可以容纳四组参赛队进行比赛的电子抢答器。
(2)具有第一抢答信号的鉴别和锁存功能。
在主持人发出抢答指令后,若有参赛者按抢答器按钮,则该组指示灯亮,显示器显示出抢答者的组别。
同时,电路处于自锁存状态,使其他组的抢答器按钮不起作用。
(3)具有计时功能。
在初始状态时,主持人可以设置答题时间的初始值。
在主持人对抢答组别进行确认,并给出倒计时记数开始信号以后,抢答者开始回答问题。
此时,显示器从初始值开始倒计时,计到0时停止计数,同时扬声器发出超时警报信号。
若参赛者在规定的时间内回答完问题,主持人可以给出计时停止信号,以免扬声器鸣叫。
(4)具有计分功能。
在初始状态时,主持人可以给每组设置初始分值。
每组抢答完毕后,由主持人打分,答对一次加10分,答错一次减1分。
(5)具有犯规设置电路。
对提前抢答者和超时抢答者,给予鸣喇叭警示,并显示规范组别。
四、设计方案
系统的输入信号有:
各组的抢答按钮A、B、C、D,系统允许抢答信号STA,系统清零信号CLR,系统时钟信号CLK,计分复位端CLR,加分按钮端ADD,计时使能端EN;系统的输出信号有:
四个组抢答成功与否的指示灯控制信号输出口可用如LED_A、LED_B、LED_C、LED_D表示,四个组抢答时的计时数码显示控制信号若干,抢答成功组别显示的控制信号若干,各组计分动态显示的控制信号若干。
整个系统至少有三个主要模块:
抢答鉴别模块;抢答计时模块;抢答计分模块,其他功能模块(分频模块,输出显示模块)。
系统组成框图
五、设计内容及程序
(一)抢答鉴别及锁存模块
抢答队伍共分为四组A,B,C,D。
当主持人按下STA键后,对应的START指示灯亮,四组队伍才可以按抢答键抢答,即抢答信号A,B,C,D输入电路中后,通过判断是哪个信号最先为‘1’得出抢答成功的组别1,2,3或4组,将组别号输出到相应端A1,B1,C1,D1,并将组别序号换算为四位二进制信号输出到STATES[3..0]端锁存,等待输出到计分和显示单元。
同时RING端在有成功抢答的情况下发出警报。
其模块如下:
抢答鉴别模块
1抢答鉴别及锁存源程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityqdjbis
port(STA,RST:
instd_logic;
A,B,C,D:
instd_logic;
A1,B1,C1,D1,START:
outstd_logic;
STATES:
outstd_logic_vector(3downto0));
endqdjb;
architectureoneofqdjbis
signalsinor,ringf,tmp,two:
std_logic;
begin
sinor<=(AXORB)XOR(CXORD);
two<=AandB;
process(A,B,C,D,RST,tmp)
begin
ifRST='1'then
tmp<='1';
A1<='0';B1<='0';C1<='0';D1<='0';START<='0';STATES<="0000";
elsiftmp='1'then
ifSTA='1'then
START<='1';
if(A='1'ANDB='0'ANDC='0'ANDD='0')then
A1<='1';B1<='0';C1<='0';D1<='0';STATES<="0001";tmp<='0';
ELSIF(A='0'ANDB='1'ANDC='0'ANDD='0')THEN
A1<='0';B1<='1';C1<='0';D1<='0';STATES<="0010";tmp<='0';
ELSIF(A='0'ANDB='0'ANDC='1'ANDD='0')THEN
A1<='0';B1<='0';C1<='1';D1<='0';STATES<="0011";tmp<='0';
ELSIF(A='0'ANDB='0'ANDC='0'ANDD='1')THEN
A1<='0';B1<='0';C1<='0';D1<='1';STATES<="0100";tmp<='0';
elsetmp<='1';STATES<="0000";
endif;
ELSESTART<='0';
ENDIF;
endif;
endprocess;
endone;
2、波形仿真
(二)计分模块
在计分器电路的设计中,按照一般的设计原则,按一定数进制进行加减即可,但是随着计数数目的增加,但由于实验板上数码管数目的限制在,每组都猜用十进制数计分,这种电路连线简单方便。
clr为复位端,将计分起始分数设为3。
CHOS[3..0]端功能是锁存已抢答成功的组别序号,当接加分按钮ADD后,将给CHOS[3..0]所存的组别加分。
每按一次加1分,每组的分数将在对应的数码管上显示。
计分模块
1、计分模块源程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityjfis
port(acc,clr:
instd_logic;
add:
instd_logic;
chose:
instd_logic_vector(3downto0);
aa,bb:
outstd_logic_vector(3downto0);
cc,dd:
outstd_logic_vector(3downto0));
endentityjf;
architectureartofjfis
begin
p1:
process(acc,add,chose)is
variablea2:
std_logic_vector(3downto0);
variableb2:
std_logic_vector(3downto0);
variablec2:
std_logic_vector(3downto0);
variabled2:
std_logic_vector(3downto0);
begin
if(clr='1')then
a2:
="0011";
b2:
="0011";
c2:
="0011";
d2:
="0011";
elsif(add'eventandadd='1')then
ifchose="0001"then
ifa2="1001"then
a2:
="0000";
else
a2:
=a2+'1';
endif;
elsifchose="0010"then
ifb2="1001"then
b2:
="0000";
else
b2:
=b2+'1';
endif;
elsifchose="0011"then
ifc2="1001"then
c2:
="0000";
else
c2:
=c2+'1';
endif;
elsifchose="1000"then
ifd2="1001"then
d2:
="0000";
else
d2:
=d2+'1';
endif;
endif;
endif;
aa<=a2;
bb<=b2;
cc<=c2;
dd<=d2;
endprocess;
endarchitectureart;
2、波形仿真
(三)计时模块
本系统中的计时器电路既有计时初始值的预置功能,又有减计数功能,功能比较齐全。
其中将初始值设置为9秒,clk为时钟信号,EN端为高电平后开始计时,rst为复位端,操作简洁。
其模块如下:
计时模块
1.计时源程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitycntis
port(clk,en,rst:
instd_logic;
ring:
outstd_logic;
data:
outstd_logic_vector(3downto0));
endcnt;
architecturebhvofcntis
signala:
std_logic_vector(3downto0);
begin
process(clk)
begin
ifrst='1'then
a<="1001";ring<='0';
elsifclk'eventandclk='1'then
ifen='1'then
a<="1001";a<=a-1;
ifa="0000"then
a<="0000";ring<='1';
endif;
endif;
endif;
endprocess;
data<=a;
endbhv;
2、波形仿真
补充:
(四)译码显示模块
本译码器用于将抢答鉴别模块抢答成功的组别和计时器的时间进行显示,in4[3..0]端输入需显示的二进制数组,OUT7[6..0]端输出显示在数码管,显示显示范围为0~9。
其模块如下:
译码模块
源程序如下
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityymis
port(in4:
instd_logic_vector(3downto0);
out7:
outstd_logic_vector(6downto0));
endym;
architectureartofymis
begin
process(in4)
begin
casein4is
when"0000"=>out7<="1000000";
when"0001"=>out7<="1111001";
when"0010"=>out7<="0100100";
when"0011"=>out7<="0110000";
when"0100"=>out7<="0011001";
when"0101"=>out7<="0010010";
when"0110"=>out7<="0000010";
when"0111"=>out7<="1111000";
when"1000"=>out7<="0000000";
when"1001"=>out7<="0010000";
whenothers=>out7<="1111111";
endcase;
endprocess;
endarchitecture;
(五)分频模块
该模块主要是将频率为50MHz的时钟信号分频成1Hz。
其模块如下:
分频模块
源程序如下:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityclk_1sis
port(clk:
instd_logic;--50Min
clk_fp:
outstd_logic);
endclk_1s;
architecturebhvofclk_1sis
signalcnt:
std_logic_vector(27downto0);
begin
process(clk)
begin
ifclk'eventandclk='1'then
cnt<=cnt+1;clk_fp<='0';
ifcnt=x"2faf080"then
cnt<=x"0000000";
clk_fp<='1';
elseclk_fp<='0';
endif;
endif;
endprocess;
endbhv;
(六)抢答器的顶层原理图设计
顶层原理图的源文件:
顶层原理图
六、实习总结
通过对Quartus软件仿真,证明了本产品在实际运用中的正确性,完全可以实现预期任务的要求,在有一组信号抢答成功后数码管显示相应的组别,在两组或两组以上信号同时抢答时视抢答无效。
且计分器在实现计分功能时能够准确记录每组的成绩并将分数通过对应的数码管呈一位数显示,计时器在按下计时开始按钮后可以从9秒倒计时并通过译码器实时显示计时结果。
如果在9秒时间内无人抢答,系统将发出警报,由小灯显示。
但是该设计仍有需要改进的地方:
1.在抢答鉴别模块中,只有当主持人按下抢答信号时,各小组才能开始抢答,并显示组号及对应的小灯。
而当主持人没有按下抢答信号时,各组抢答无效,因此需要完善。
2.在计分模块中,只有当每组抢答正确时加一分,而抢答错误时,没进行设计减分功能,这是我们在这次设计中最大的不足,因此需要改进。
七、实习心得与体会
经过一周的EDA实习,我们组的三位成员通过不懈努力,成功地设计出了四路电子抢答器。
回首这周的实习,我们经历了酸甜苦辣,因为对EDA技术及Quartus软件的相关知识知道的不够深入,在设计过程中我们遇到了很多困难,但通过我们从网上,图书馆找一些相关资料及根据自己的能力,我们最终完成了设计任务。
是我们在这次实习的过程中都受益匪浅。
我们设计的课题为电子抢答器,当拿到这个题目时,我们感到很欣慰,感觉这个题目很简单。
第一天,我们到处查找相关电子抢答器的资料,找了好多,
在第二天,我们通过对这些资料的修改及改进,编译及下载,没想到没能成功,
第三天,通过我们的设计思路,编写、编译及下载还是没能成功,我们组陷入了惊慌的局面,看着本班的同学一个个的都设计完了自己要设计的题目时,我们心慌意乱,感觉我们组将会失败,对自己的题目感觉心烦。
当天晚上,我们碰到了一个对VHDL语言比较懂得同学,我们讲述了我们组的情况,他给我们分析了一下我们组主要出现的问题,并讲述了如何去设计,这时我有了大体的思路。
第四天,根据自己的设计思路,我们采用层次化结构化设计,将此项设计任务分成若干模块,规定每一模块的功能和各模块之间的接口,然后再将各模块合起来进行调试,虽然与设计要求有点区别,但终于调试成功。
在这次设计中,应该说从功能的实现到流程图的绘制,从程序的编写到程序的检查,从程序的调试到实验报告的写作,其间每一个过程都凝聚着大家的辛苦和汗水。
课程设计虽然结束了,但是我们还有很多的事情要做,对仍然不熟悉或不了解的知识点我们要尽快的去学习了解,对课程设计中出现的问题我们还要去认真的分析研究。
还有我们还需要去增强自己的动手能力,去不断的锻炼,只有这样该课程设计才能发挥最大的作用。
这次实习使我们对VHDL语言编程和QuartusII的使用有了更深层次的感性和理性认识;培养和锻炼我们的实际动手设计的能力。
使我们的理论知识与实践充分地结合,作到不仅具有专业知识,而且还具有较强的实践动手能力,能分析问题和解决问题的高素质人才,为以后的顺利就业作好准备。
经过这次实习,我们有了很深刻的体会。
首先,要学好书本上的基本知识,掌握常用编程语句,这样在设计中才会游刃有余,得心应手。
其次,在遇到困难时要勇于面对,不会时请教老师和同学,其实只要有耐心,再加上实习中的细心操作,一切困难都将迎刃而解。
八、参考文献
[1]沈明山. EDA技术及可编程器件应用实训. 科学出版社
[2]曾繁泰,陈美金. VHDL程序设计. 北京:
清华大学出版社
[3]谭会生,张昌凡. EDA技术及应用. 西安:
西安电子科技大学出版社
[4]李国丽,朱维勇. EDA与数字系统设计. 北京:
机械工业出版社
[5]苏光大. 图像并行处理技术. 北京:
清华大学出版社
[6]VokneiA.Pedroni.《VHDL数字电路设计教程》.电子工业出版社,2008.5
[7].潘松,黄继业.《EDA技术实用教程》(第二版).科学出版社,2005.2
[8].焦素敏.《EDA应用技术》.清华大学出版社,2002.4