唐 山 学 院
程 设 计
题 目 智力竞赛抢答器设计 系 (部) 信息工程系 班 级 姓 名 学 号 指导教师
2014 年 6 月 30 日至 7 月 4 日 共 1 周
2014年 7 月 4 日
课程设计任务书
课程设计成绩评定表
目 录
1引言............................................................................................................................. 1 2 VHDL/Quartus2简介 ................................................................................................. 2
2.1 VHDL介绍 ...................................................................................................... 2 2.2 Quartus2介绍 ................................................................................................... 2 3智力竞赛抢答器设计................................................................................................. 3
3.1设计要求........................................................................ 错误!未定义书签。 3.2功能分析.......................................................................................................... 3 3.3 分频模块设计................................................................................................. 4 3.4 复位模块设计................................................................................................. 4 3.5 抢答模块设计............................................................................................... 10 3.6 倒计时模块设计............................................................................................. 6 4总结........................................................................................... 错误!未定义书签。 参考文献...................................................................................... 错误!未定义书签。 附录.............................................................................................. 错误!未定义书签。
1引言
20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。
EDA技术是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。
利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。
现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。本文所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。EDA设计可分为系统级、电路级和物理实现级。
2 VHDL/Quartus2简介
2.1 VHDL 介绍
EDA技术的应用引起电子产品及系统开发的革命性变革 。同时减少了设计芯片的数量、缩小了体积、降低了功耗、提高了设计的灵活性、可靠性和可扩展性。在电子电路设计领域中,电子设计自动化(EDA)工具已成为主要的设计手段,而VHDL语言则是EDA的关键技术之一,它采用自顶向下的设计方法,即从系统总体要求出发,自上至下地将设计任务分解为不同的功能模块,最后将各功能模块连接形成顶层模块,完成系统硬件的整体设计。本文介绍了基于EDA的出租车计费器的设计与分析。电子设计自动化技术EDA的发展给电子系统的设计带来了革命性的变化,EDA软件设计工具,硬件描述语言,可编程逻辑器件(PLD)使得EDA技术的应用走向普及。CPLD是新型的可编程逻辑器件,采用CPLD进行产品开发可以灵活地进行模块配置,大大缩短了产品开发周期,也有利于产品向小型化,
集成化的方向发展。而VHDL语言是EDA的关键技术之一,它它采用自顶向下的设计方法,完成系统的整体设计。
2.2 Quartus2 介绍
Quartus2是著名FPGA厂商Altera公司提供的,FPGA/CPLD开发集成环境,属于平台化设计工具。用户可以在Quartus2中实现整个数字电路的FPGA设计流程。Quartus2在21世纪初推出,在Quartus2上可以完成设计输入、HDL综合、布线布局(适配)、仿真和下载和硬件测试等流程,它提供了一个与结构无关的设计环境,使设计者能方便地进行设计输入、快速编程和器件编程。
Quartus2提供了多平台的设计环境,能满足各种特定设计的需要,也是单芯片可编程系统设计的综合环境和SOPC开发的基本设计工具,并为Altera DSP开发包进行系统模型设计提供了综合设计环境。Quartus2设计工具内部嵌有VHDL、Verilog逻辑综合器。Quartus2也可以利用第三方的综合工具,例如:Leonardo Spectrum、Synplifly Pro、FPGA Complier2,并能直接调用这些工具。同样,Quartus2具备仿真功能,同时也支持第三方的仿真工具,如:ModelSim。
3智力竞赛抢答器设计
3.1设计要求
(1)设计一个四组(人)参加的智力竞赛抢答计时器,它具有四路抢答输入,主持人按下复位键后,系统复位进入抢答状态,计时显示初始值;
(2)某组首先按下抢答键,该路抢答信号,竞赛抢答器能够设别最先抢答的信号,锁定该信号,同时扬声器响起,参赛小组的序号在数码管上显示;
(3)主持人对抢答结果进行确认,给出倒计时计数允许信号,开始回答问题,计时显示器从初始值开始以秒为单位倒计时,计数至0时,停止计数,扬声器发出超时报警信号,以中止继续回答问题;
(4)参赛者在规定时间内回答完问题,主持人给出倒计时计数禁止信号,以免扬声器鸣叫,按下复位键,又可开始新一轮的抢答;
3.2功能分析
抢答信号判别电路在系统复位后,对A、B、c、D四路抢答信号进行判别,输出端G3一G0与A—D一一对应,优胜者对应的G为“1”,其余的G为“0”,且将结果锁存。完成抢答判别的同时,输出端R输出有效信号,对扬声器进行选通。
分频电路用于产生倒计时电路所需的周期为l s的时钟脉冲,分频系数视输入时钟cLK的频率而定。
台号显示控制电路将输入信号G3一G0转换为BCD码,以驱动数码管,显示台号。
倒计时及时间显示控制电路由stop信号控制,由复位信号RESET将答题时间作为初值赋给倒计时计数器;由计数允许信号EN启动计数。输出信号为count1,count2,music与music1,其中music与music1为蜂鸣器选通控制信号。
扬声器控制电路使系统只在两种情况下输出驱动扬声器的脉冲信号:一种是倒计时计数器处于禁止计数状态,并且完成初始化,开始对抢答信号进行判别,当某参赛组抢先按下按键,系统在输出该组台号信息的同时,输出脉冲信号;一种是确认优先抢答的参赛组后,启动倒计时计数器计数,当计数到“0”时,输出脉冲信号。
3.3 整体设计思想
当主持人宣布开始抢答时,四个选手谁先按下他前面的控制开关,他的灯就会亮,同时会有警报声响起并将抢答的组别号用数码管显示出来,而且这时其他人再怎么按,也就不会亮,说明已经锁住。当有一个指示灯亮了等待主持人确定,主持人确定以后计数器就开始从29开始倒计时,到0时还要警告声,直到主持人
按下复位键为止。在选手答题过程中,如果在规定时间内答完,主持人按下暂停键,倒计时停止显示当前时间,待主持人按下复位键以后开始下一轮抢答,这样计数器开始工作就是在选手抢答以后在主持人的控制下工作。
所以可以设四个人分别为输入端A,B,C,D;因为四个输入端在VHDL中,要求四个输入端应该是相等优先级别,但只要有一个输入端接入高电平时,就给其他信号一个反馈,使得他们的输入无效,及他们对应的指示灯不亮;所以我们可以也并行语句,让它们分为四个进程( process ),同时也要求每个进程中都有反馈信号传给其他进程语句中,这样就可以完成抢答器基础部分了。其次就是计数器部分,当有人开始进入回答部分,指示灯亮,同时警报器开始工作,当主持人确定以后计时开始并要求是倒计时方式用七段显示出,通过这些消息我们可知,主持人确认键即是计数器开始倒计时的信号,本设计中采用了元件例化
( component ) 语句,在抢答器中给个选手已经开始回答了的信号插口,给计数器中的置零输入端,这样就基本上完成了设计,计数器采用倒计时方式,实现方式也很简单,只要给他们最初赋值为29,而后在每个上升沿来到减一,具体设计情况还是看看程序设计部分吧。本设计由于蜂鸣器是在脉冲控制下才会发出明显声响,故我们在此加了一个分频器,具体请看程序。
3.3 分频模块设计
此程序实现了64hz的脉冲信号64分频,得到1hz脉冲信号,给倒计时提供脉冲信号。
if(RISING_EDGE(CLK))then
temp:=temp+1;
if(temp=64 and ena = '1')then
temp:=0;
其仿真图如下图所示
图3-1 分频仿真图
3.4 复位模块设计
此程序将所有信号初始化,通过ean使数码管也初始化为初值29。
If (RESET='1') then LIGHT
ALIGHT
SET
其仿真图如下图所示
图3-2 复位仿真图
3.5 抢答模块设计
抢答模块的程序设计如下 begin
A2
A1
B1
C1
D1
抢答模块仿真图如下所示
图3-3 抢答模块仿真图
3.6 倒计时模块设计
begin
C1:process(SET,CLK,MUSIC1,ena) variable temp:integer range 0 to 255; begin
if (SET='0') then
MUSIC1
if(LOW="0000") then LOW
else LOW
if(HIGH="0000" and LOW="0000")then MUSIC1
end process C1;
倒计时仿真图如下
图3-4 倒计时复位仿真图
此程序主要功能是实现倒计时功能,当有人抢答以后蜂鸣器响起,在主持人确认以后开始倒计时29秒,如果在规定时间内回答完毕主此人则按下暂停键,停止计数显示当前时间如图3.6,如果超出规定时间则蜂鸣器响起,直到主此人按下复位键为止如图3.7,所有信号初始化,数码管显示29等待下一轮抢答。
总结:由以上仿真图可知,该设计基本实现了原先的设计要求,并在此基础上添加了选手相关位置的显示灯等功能。
3.7 引脚锁定
引脚锁定如下图:
图3-5 引脚锁定图
4心得体会
这次的EDA课程设计,掌握了基本的课程设计以及编译仿真的操作,这次的智能抢答器又让我学到很多,但是其中也遇到了很多困难。这次实验不仅仅是验证性的,还要由自己来分析,思考,设计,测试和验证以及改正,所以这个期间我个人觉得还是有困难的。
实验过程中,我们遇到的最大的问题就是在设计用VHDL语言编程的时候,总是不能完成硬件模块的连接,编译时总是有错误,最后在同学的帮助,将程序全部重新封装,以及重新连接,最后通过了编译。我们小组在实验室进行实物操作时也没有想象中的那么顺利,我们重复操作了很多次。
在这个试验过程中,我体会到耐心很重要。团队合作给我的启示太大了,只有我们队友之间团结一致,不断地发现问题,探索问题,才能解决问题。思维的碰撞才能得出结果。最后,这次设计让我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,实践是检验真理的唯一标准,通过这次课程设计,不但进一步掌握了数字电子技术的基础知识及一门专业仿真软件的基本操作,还提高了自己的设计能力及动手能力,同时对于智能抢答器的设计有了深刻的认识,同时更多的是让我看清了自己,明白了凡事需要耐心,这将有助于我今后的学习,端正自己的学习态度,从而更加努力的学习。
这次课程设计的完成,首先感谢学院给了我们这样一个很好的平台,其次感谢郭老师的细心指导,同时也感谢我一起并肩作战的队友。在这为一个星期的课程设计中,我们一起发现问题,探索问题,解决问题。相互鼓励,共同取得进步。在此也特别感谢我们的郭老师,认真的教学让我们打下了坚实的理论基础。最后还要感谢在实验过程中帮助过我们的同学,他们热心的帮助给了我们莫大的感动。再次感谢大家!
参考文献
[1] Voknei A.Pedroni.《VHDL数字电路设计教程》[M].电子工业出版社,2008.5
[2] 潘松,黄继业.《EDA技术实用教程》(第二版) [M].科学出版社,2005.2
[3] 焦素敏.《EDA应用技术》[M].清华大学出版社,2002.4
[4] 曹昕燕, 周凤臣, 聂春燕.《EDA技术实验与课程设计》[M].清华大学出版社
[5] 谭会生, 张昌凡.《EDA技术A)[M].西安电子科技大学出版社
附录
--顶层头文件
library ieee;
use ieee.std_logic_1164.all;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
entity aaa is
port(A,B,C,D,RESET,jishi,stop:in std_logic;
CLK:in std_logic;
MUSIC:out std_logic;
MUSIC0:out std_logic;
COUT1:out std_logic_vector(3 downto 0);
COUT2:out std_logic_vector(3 downto 0);
LIGHT:out std_logic_vector(3downto 0);
ALIGHT,BLIGHT,CLIGHT,DLIGHT:out std_logic);
end aaa;
architecture aaa of aaa is
component COUNTER29 is
port(ean,jishi,SET,CLK,stop:in std_logic;
MUSIC,MUSIC0:out std_logic;
COUT1:out std_logic_vector(3 downto 0);
COUT2:out std_logic_vector(3 downto 0));
end component COUNTER29;
component qiangda is
port(A,B,C,D,RESET,jishi:in std_logic;
CLK:in std_logic;
ean,SET: out std_logic;
LIGHT:out std_logic_vector(3downto 0);
ALIGHT,BLIGHT,CLIGHT,DLIGHT:out std_logic);
end component qiangda;
signal ean,SET:std_logic;
begin
U0:COUNTER29
Port map(ean,jishi,SET,CLK,stop,MUSIC,MUSIC0,COUT1,COUT2);
U1:qiangda
Port map(A,B,C,D,RESET,jishi,CLK,ean,SET,LIGHT,ALIGHT, BLIGHT,CLIGHT,DLIGHT);
end aaa;
--抢答模块程序
library ieee;
use ieee.std_logic_1164.all;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
entity qiangda is
port(A,B,C,D,RESET,jishi:in std_logic;
CLK:in std_logic;
ean,SET: out std_logic;
LIGHT:out std_logic_vector(3downto 0);
ALIGHT,BLIGHT,CLIGHT,DLIGHT:out std_logic );
end qiangda;
architecture qiangda of qiangda is
signal A0,B0,C0,D0:std_logic;
signal A1,B1,C1,D1:std_logic;
signal A2,B2,C2,D2:std_logic;
begin
A2
C2
L1:process(A0) --qiang da
begin
A1
end process L1;
L2:process(B0)
begin
B1
end process L2;
L3:process(C0)
begin
C1
end process L3;
L4:process(D0)
begin
D1
end process L4;
L5:process(A1,B1,C1,D1,A,B,C,D,RESET)
begin
if(RESET='1')then --fuwei
LIGHT
DLIGHT
ean
if (A='1') then
A0
end if;
if(B='1')then
B0
end if;
if(C='1')then
C0
end if;
if(D='1')then
D0
end if;
if(A1='1')then
LIGHT
elsif(B1='1')then
LIGHT
elsif(C1='1')then
LIGHT
elsif(D1='1')then
LIGHT
else
LIGHT
end if;
ALIGHT
SET
end if;
end process L5;
end qiangda;
--倒计时模块程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity COUNTER29 is
port( ean,jishi,SET,CLK,stop:in std_logic;
MUSIC,MUSIC0:out std_logic;
COUT1:out std_logic_vector(3 downto 0);
COUT2:out std_logic_vector(3 downto 0));
end COUNTER29;
architecture COUNTER29 of COUNTER29 is
signal MUSIC1,MUSIC2,ena,jishiqi,stop1:std_logic; signal HIGH:std_logic_vector(3 downto 0):="0010"; signal LOW:std_logic_vector(3 downto 0):="1001";
begin
C1:process(SET,CLK,MUSIC1,ena)
variable temp:integer range 0 to 255;
begin
if (SET='0') then
MUSIC1
elsif(RISING_EDGE(CLK))then
temp:=temp+1;
if(temp=64 and ena = '1')then
temp:=0;
if(LOW="0000") then
LOW
if(HIGH="0000") then
HIGH
else HIGH
end if;
else
LOW
end if;
end if;
end if;
if(HIGH="0000" and LOW="0000")then MUSIC1
end if;
end process C1;
C2:process(stop,jishi,SET,ean,HIGH,LOW) begin
if(stop='1') then
stop1
if(stop1='1')then
ena
end if;
end if;
if(jishi='1'and SET='1')then
ena
end if;
if(ean='1')then
ena
end if;
if(HIGH="0000" and LOW="0000")then ena
end if;
end process C2;
C3:process(jishi,SET)
begin
if (jishi='1') then
jishiqi
end if;
if(SET='0')then
MUSIC2
MUSIC2
end if;
end process C3; COUT1
唐 山 学 院
程 设 计
题 目 智力竞赛抢答器设计 系 (部) 信息工程系 班 级 姓 名 学 号 指导教师
2014 年 6 月 30 日至 7 月 4 日 共 1 周
2014年 7 月 4 日
课程设计任务书
课程设计成绩评定表
目 录
1引言............................................................................................................................. 1 2 VHDL/Quartus2简介 ................................................................................................. 2
2.1 VHDL介绍 ...................................................................................................... 2 2.2 Quartus2介绍 ................................................................................................... 2 3智力竞赛抢答器设计................................................................................................. 3
3.1设计要求........................................................................ 错误!未定义书签。 3.2功能分析.......................................................................................................... 3 3.3 分频模块设计................................................................................................. 4 3.4 复位模块设计................................................................................................. 4 3.5 抢答模块设计............................................................................................... 10 3.6 倒计时模块设计............................................................................................. 6 4总结........................................................................................... 错误!未定义书签。 参考文献...................................................................................... 错误!未定义书签。 附录.............................................................................................. 错误!未定义书签。
1引言
20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。
EDA技术是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。
利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。
现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。本文所指的EDA技术,主要针对电子电路设计、PCB设计和IC设计。EDA设计可分为系统级、电路级和物理实现级。
2 VHDL/Quartus2简介
2.1 VHDL 介绍
EDA技术的应用引起电子产品及系统开发的革命性变革 。同时减少了设计芯片的数量、缩小了体积、降低了功耗、提高了设计的灵活性、可靠性和可扩展性。在电子电路设计领域中,电子设计自动化(EDA)工具已成为主要的设计手段,而VHDL语言则是EDA的关键技术之一,它采用自顶向下的设计方法,即从系统总体要求出发,自上至下地将设计任务分解为不同的功能模块,最后将各功能模块连接形成顶层模块,完成系统硬件的整体设计。本文介绍了基于EDA的出租车计费器的设计与分析。电子设计自动化技术EDA的发展给电子系统的设计带来了革命性的变化,EDA软件设计工具,硬件描述语言,可编程逻辑器件(PLD)使得EDA技术的应用走向普及。CPLD是新型的可编程逻辑器件,采用CPLD进行产品开发可以灵活地进行模块配置,大大缩短了产品开发周期,也有利于产品向小型化,
集成化的方向发展。而VHDL语言是EDA的关键技术之一,它它采用自顶向下的设计方法,完成系统的整体设计。
2.2 Quartus2 介绍
Quartus2是著名FPGA厂商Altera公司提供的,FPGA/CPLD开发集成环境,属于平台化设计工具。用户可以在Quartus2中实现整个数字电路的FPGA设计流程。Quartus2在21世纪初推出,在Quartus2上可以完成设计输入、HDL综合、布线布局(适配)、仿真和下载和硬件测试等流程,它提供了一个与结构无关的设计环境,使设计者能方便地进行设计输入、快速编程和器件编程。
Quartus2提供了多平台的设计环境,能满足各种特定设计的需要,也是单芯片可编程系统设计的综合环境和SOPC开发的基本设计工具,并为Altera DSP开发包进行系统模型设计提供了综合设计环境。Quartus2设计工具内部嵌有VHDL、Verilog逻辑综合器。Quartus2也可以利用第三方的综合工具,例如:Leonardo Spectrum、Synplifly Pro、FPGA Complier2,并能直接调用这些工具。同样,Quartus2具备仿真功能,同时也支持第三方的仿真工具,如:ModelSim。
3智力竞赛抢答器设计
3.1设计要求
(1)设计一个四组(人)参加的智力竞赛抢答计时器,它具有四路抢答输入,主持人按下复位键后,系统复位进入抢答状态,计时显示初始值;
(2)某组首先按下抢答键,该路抢答信号,竞赛抢答器能够设别最先抢答的信号,锁定该信号,同时扬声器响起,参赛小组的序号在数码管上显示;
(3)主持人对抢答结果进行确认,给出倒计时计数允许信号,开始回答问题,计时显示器从初始值开始以秒为单位倒计时,计数至0时,停止计数,扬声器发出超时报警信号,以中止继续回答问题;
(4)参赛者在规定时间内回答完问题,主持人给出倒计时计数禁止信号,以免扬声器鸣叫,按下复位键,又可开始新一轮的抢答;
3.2功能分析
抢答信号判别电路在系统复位后,对A、B、c、D四路抢答信号进行判别,输出端G3一G0与A—D一一对应,优胜者对应的G为“1”,其余的G为“0”,且将结果锁存。完成抢答判别的同时,输出端R输出有效信号,对扬声器进行选通。
分频电路用于产生倒计时电路所需的周期为l s的时钟脉冲,分频系数视输入时钟cLK的频率而定。
台号显示控制电路将输入信号G3一G0转换为BCD码,以驱动数码管,显示台号。
倒计时及时间显示控制电路由stop信号控制,由复位信号RESET将答题时间作为初值赋给倒计时计数器;由计数允许信号EN启动计数。输出信号为count1,count2,music与music1,其中music与music1为蜂鸣器选通控制信号。
扬声器控制电路使系统只在两种情况下输出驱动扬声器的脉冲信号:一种是倒计时计数器处于禁止计数状态,并且完成初始化,开始对抢答信号进行判别,当某参赛组抢先按下按键,系统在输出该组台号信息的同时,输出脉冲信号;一种是确认优先抢答的参赛组后,启动倒计时计数器计数,当计数到“0”时,输出脉冲信号。
3.3 整体设计思想
当主持人宣布开始抢答时,四个选手谁先按下他前面的控制开关,他的灯就会亮,同时会有警报声响起并将抢答的组别号用数码管显示出来,而且这时其他人再怎么按,也就不会亮,说明已经锁住。当有一个指示灯亮了等待主持人确定,主持人确定以后计数器就开始从29开始倒计时,到0时还要警告声,直到主持人
按下复位键为止。在选手答题过程中,如果在规定时间内答完,主持人按下暂停键,倒计时停止显示当前时间,待主持人按下复位键以后开始下一轮抢答,这样计数器开始工作就是在选手抢答以后在主持人的控制下工作。
所以可以设四个人分别为输入端A,B,C,D;因为四个输入端在VHDL中,要求四个输入端应该是相等优先级别,但只要有一个输入端接入高电平时,就给其他信号一个反馈,使得他们的输入无效,及他们对应的指示灯不亮;所以我们可以也并行语句,让它们分为四个进程( process ),同时也要求每个进程中都有反馈信号传给其他进程语句中,这样就可以完成抢答器基础部分了。其次就是计数器部分,当有人开始进入回答部分,指示灯亮,同时警报器开始工作,当主持人确定以后计时开始并要求是倒计时方式用七段显示出,通过这些消息我们可知,主持人确认键即是计数器开始倒计时的信号,本设计中采用了元件例化
( component ) 语句,在抢答器中给个选手已经开始回答了的信号插口,给计数器中的置零输入端,这样就基本上完成了设计,计数器采用倒计时方式,实现方式也很简单,只要给他们最初赋值为29,而后在每个上升沿来到减一,具体设计情况还是看看程序设计部分吧。本设计由于蜂鸣器是在脉冲控制下才会发出明显声响,故我们在此加了一个分频器,具体请看程序。
3.3 分频模块设计
此程序实现了64hz的脉冲信号64分频,得到1hz脉冲信号,给倒计时提供脉冲信号。
if(RISING_EDGE(CLK))then
temp:=temp+1;
if(temp=64 and ena = '1')then
temp:=0;
其仿真图如下图所示
图3-1 分频仿真图
3.4 复位模块设计
此程序将所有信号初始化,通过ean使数码管也初始化为初值29。
If (RESET='1') then LIGHT
ALIGHT
SET
其仿真图如下图所示
图3-2 复位仿真图
3.5 抢答模块设计
抢答模块的程序设计如下 begin
A2
A1
B1
C1
D1
抢答模块仿真图如下所示
图3-3 抢答模块仿真图
3.6 倒计时模块设计
begin
C1:process(SET,CLK,MUSIC1,ena) variable temp:integer range 0 to 255; begin
if (SET='0') then
MUSIC1
if(LOW="0000") then LOW
else LOW
if(HIGH="0000" and LOW="0000")then MUSIC1
end process C1;
倒计时仿真图如下
图3-4 倒计时复位仿真图
此程序主要功能是实现倒计时功能,当有人抢答以后蜂鸣器响起,在主持人确认以后开始倒计时29秒,如果在规定时间内回答完毕主此人则按下暂停键,停止计数显示当前时间如图3.6,如果超出规定时间则蜂鸣器响起,直到主此人按下复位键为止如图3.7,所有信号初始化,数码管显示29等待下一轮抢答。
总结:由以上仿真图可知,该设计基本实现了原先的设计要求,并在此基础上添加了选手相关位置的显示灯等功能。
3.7 引脚锁定
引脚锁定如下图:
图3-5 引脚锁定图
4心得体会
这次的EDA课程设计,掌握了基本的课程设计以及编译仿真的操作,这次的智能抢答器又让我学到很多,但是其中也遇到了很多困难。这次实验不仅仅是验证性的,还要由自己来分析,思考,设计,测试和验证以及改正,所以这个期间我个人觉得还是有困难的。
实验过程中,我们遇到的最大的问题就是在设计用VHDL语言编程的时候,总是不能完成硬件模块的连接,编译时总是有错误,最后在同学的帮助,将程序全部重新封装,以及重新连接,最后通过了编译。我们小组在实验室进行实物操作时也没有想象中的那么顺利,我们重复操作了很多次。
在这个试验过程中,我体会到耐心很重要。团队合作给我的启示太大了,只有我们队友之间团结一致,不断地发现问题,探索问题,才能解决问题。思维的碰撞才能得出结果。最后,这次设计让我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,实践是检验真理的唯一标准,通过这次课程设计,不但进一步掌握了数字电子技术的基础知识及一门专业仿真软件的基本操作,还提高了自己的设计能力及动手能力,同时对于智能抢答器的设计有了深刻的认识,同时更多的是让我看清了自己,明白了凡事需要耐心,这将有助于我今后的学习,端正自己的学习态度,从而更加努力的学习。
这次课程设计的完成,首先感谢学院给了我们这样一个很好的平台,其次感谢郭老师的细心指导,同时也感谢我一起并肩作战的队友。在这为一个星期的课程设计中,我们一起发现问题,探索问题,解决问题。相互鼓励,共同取得进步。在此也特别感谢我们的郭老师,认真的教学让我们打下了坚实的理论基础。最后还要感谢在实验过程中帮助过我们的同学,他们热心的帮助给了我们莫大的感动。再次感谢大家!
参考文献
[1] Voknei A.Pedroni.《VHDL数字电路设计教程》[M].电子工业出版社,2008.5
[2] 潘松,黄继业.《EDA技术实用教程》(第二版) [M].科学出版社,2005.2
[3] 焦素敏.《EDA应用技术》[M].清华大学出版社,2002.4
[4] 曹昕燕, 周凤臣, 聂春燕.《EDA技术实验与课程设计》[M].清华大学出版社
[5] 谭会生, 张昌凡.《EDA技术A)[M].西安电子科技大学出版社
附录
--顶层头文件
library ieee;
use ieee.std_logic_1164.all;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
entity aaa is
port(A,B,C,D,RESET,jishi,stop:in std_logic;
CLK:in std_logic;
MUSIC:out std_logic;
MUSIC0:out std_logic;
COUT1:out std_logic_vector(3 downto 0);
COUT2:out std_logic_vector(3 downto 0);
LIGHT:out std_logic_vector(3downto 0);
ALIGHT,BLIGHT,CLIGHT,DLIGHT:out std_logic);
end aaa;
architecture aaa of aaa is
component COUNTER29 is
port(ean,jishi,SET,CLK,stop:in std_logic;
MUSIC,MUSIC0:out std_logic;
COUT1:out std_logic_vector(3 downto 0);
COUT2:out std_logic_vector(3 downto 0));
end component COUNTER29;
component qiangda is
port(A,B,C,D,RESET,jishi:in std_logic;
CLK:in std_logic;
ean,SET: out std_logic;
LIGHT:out std_logic_vector(3downto 0);
ALIGHT,BLIGHT,CLIGHT,DLIGHT:out std_logic);
end component qiangda;
signal ean,SET:std_logic;
begin
U0:COUNTER29
Port map(ean,jishi,SET,CLK,stop,MUSIC,MUSIC0,COUT1,COUT2);
U1:qiangda
Port map(A,B,C,D,RESET,jishi,CLK,ean,SET,LIGHT,ALIGHT, BLIGHT,CLIGHT,DLIGHT);
end aaa;
--抢答模块程序
library ieee;
use ieee.std_logic_1164.all;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
entity qiangda is
port(A,B,C,D,RESET,jishi:in std_logic;
CLK:in std_logic;
ean,SET: out std_logic;
LIGHT:out std_logic_vector(3downto 0);
ALIGHT,BLIGHT,CLIGHT,DLIGHT:out std_logic );
end qiangda;
architecture qiangda of qiangda is
signal A0,B0,C0,D0:std_logic;
signal A1,B1,C1,D1:std_logic;
signal A2,B2,C2,D2:std_logic;
begin
A2
C2
L1:process(A0) --qiang da
begin
A1
end process L1;
L2:process(B0)
begin
B1
end process L2;
L3:process(C0)
begin
C1
end process L3;
L4:process(D0)
begin
D1
end process L4;
L5:process(A1,B1,C1,D1,A,B,C,D,RESET)
begin
if(RESET='1')then --fuwei
LIGHT
DLIGHT
ean
if (A='1') then
A0
end if;
if(B='1')then
B0
end if;
if(C='1')then
C0
end if;
if(D='1')then
D0
end if;
if(A1='1')then
LIGHT
elsif(B1='1')then
LIGHT
elsif(C1='1')then
LIGHT
elsif(D1='1')then
LIGHT
else
LIGHT
end if;
ALIGHT
SET
end if;
end process L5;
end qiangda;
--倒计时模块程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity COUNTER29 is
port( ean,jishi,SET,CLK,stop:in std_logic;
MUSIC,MUSIC0:out std_logic;
COUT1:out std_logic_vector(3 downto 0);
COUT2:out std_logic_vector(3 downto 0));
end COUNTER29;
architecture COUNTER29 of COUNTER29 is
signal MUSIC1,MUSIC2,ena,jishiqi,stop1:std_logic; signal HIGH:std_logic_vector(3 downto 0):="0010"; signal LOW:std_logic_vector(3 downto 0):="1001";
begin
C1:process(SET,CLK,MUSIC1,ena)
variable temp:integer range 0 to 255;
begin
if (SET='0') then
MUSIC1
elsif(RISING_EDGE(CLK))then
temp:=temp+1;
if(temp=64 and ena = '1')then
temp:=0;
if(LOW="0000") then
LOW
if(HIGH="0000") then
HIGH
else HIGH
end if;
else
LOW
end if;
end if;
end if;
if(HIGH="0000" and LOW="0000")then MUSIC1
end if;
end process C1;
C2:process(stop,jishi,SET,ean,HIGH,LOW) begin
if(stop='1') then
stop1
if(stop1='1')then
ena
end if;
end if;
if(jishi='1'and SET='1')then
ena
end if;
if(ean='1')then
ena
end if;
if(HIGH="0000" and LOW="0000")then ena
end if;
end process C2;
C3:process(jishi,SET)
begin
if (jishi='1') then
jishiqi
end if;
if(SET='0')then
MUSIC2
MUSIC2
end if;
end process C3; COUT1