湖南人文科技学院
课程设计报告
课程名称:
设计题目: 六人抢答器
系 别: 通信与控制工程系
专 业: 电子信息工程 班 级: 电子信息二班 学生姓名: 鄢卫 张幸 学 号: 08409228 08409226 起止日期: 2011年06月14日~2011年06月26日 指导教师: 姚 毅 教研室主任: 侯海良
摘 要
本次设计在EDA开发平台QUARTUSⅡ6.0上利用VHDL语言设计六人抢答器电路。电路中设有六个抢答键,可供六人同时抢答;我们利用一个二十进制计数器,将其输入频率设定为一赫兹,成功实现了二十秒倒计时的功能;我们利用VHDL语言中的IF和CASE语句结合空操作语句NULL实现开始抢答与超前抢答的区别;各个模块配以一时钟频率由蜂鸣器输出可实现抢答成功、超前抢答犯规、超时抢答等各种情况的报警效果;本设计采用的是杭州康芯电子有限公司生产的GW48系列/SOPC/EDA实验开发系统,FPGA目标芯片型号为Altera公司的Cyclone系列中的EPIC6Q240C8。芯片配置成功后锁定引脚下载即可进行硬件测试:选择实验电路结构图NO.5,使CLK1与CLKOCK5相接(接受1024Hz时钟频率),CLK 与CLOCK0相接(接受1Hz时钟频率),报警输出接SPEAK,六位选手分别对应实验箱上的1~6键,键7为抢答开始键,当其未按下就进行抢答则为超前犯规,按下后二十秒倒计时开始,选手进行抢答,按实验箱上的复位键则可重新开始下一轮的抢答。
关键词:六人抢答器;数码显示;信号封锁;犯规报警。
目 录
设计要求 .................................................................................................................................... 1 1 总体设计方案论论证与对比 ................................................................................................ 1
1.1 方案一 ......................................................................................................................... 1 1.2 方案二 ......................................................................................................................... 1 2顶层电路VHDL程序设计 .................................................................................................... 2 3 单元模块程序设计 ................................................................................................................ 5
3.1 二十秒倒计时模块 ..................................................................................................... 5 3.2 抢答成功选手按键模块 ............................................................................................. 6 3.3 超前抢答犯规模块 ..................................................................................................... 7 3.4 抢答成功报警模块 ................................................................................................... 11 4 六人抢答器电路系统仿真及功能分析与调试 .................................................................. 12
4.1 分立模块的仿真 ....................................................................................................... 12 4.2 总体设计模块的仿真 ............................................................................................... 14 5 实验设备和器件 .................................................................................................................. 15 6 引脚锁定和下载硬件测试及实验结果 .............................................................................. 15
6.1 引脚锁定 ................................................................................................................... 15 6.2 下载和硬件测试及实验结果 ................................................................................... 16 7 参考文献 .............................................................................................................................. 17 8 心得体会 .............................................................................................................................. 17 附录 .......................................................................................................................................... 18
六人抢答器
设计要求
抢答台数为6;具有抢答开始后20秒倒计时,20秒倒计时后六人抢答显示超时,并报警;能显示超前抢答台号并显示犯规报警;系统复位后进入抢答状态,当有一路抢答按键按下,该路抢答信号将其余各路抢答信号封锁,同时铃声响起,直至该路按键松开,显示牌显示该路抢答台号。
1 总体设计方案论论证与对比
1.1 方案一
该方案方框图如图1:
在该方案中,由二十秒倒计时模块、抢答鉴别模块、锁存器模块等模块组成[3]。蜂鸣器和数码管分别起报警和显示台号的作用。但该方案中的数码管显示是由七段显示器的形式来显示台号的,由于实验箱电路结构与按键数目的限定,使得我们没有采用该方案。
1.2 方案二
该方案方框图如图2:
此方案中整个电路主要由超前抢答判别模块、二十秒倒计时模块、抢答成功按键模块、抢答报警模块四个模块组成[4]。其台号的显示都是将信号送入译码器译码之后再由数码管显示出来,结合前面六位选手的按键及开始键可得实验箱上模式5的电路结构满足硬件测试的要求。所以我们选定该方案来进行我们这次的课程设计。
2顶层电路VHDL程序设计
顶层电路VHDL程序如下 USE ieee.std_logic_1164.all; LIBRARY work; ENTITY jinaghu IS
port (rst : IN STD_LOGIC;--抢答开始键
clk : IN STD_LOGIC;--计数器时钟输入 clk1 : IN STD_LOGIC;--蜂鸣器时钟输入
AIN : IN STD_LOGIC_VECTOR(6 downto 1);--选手按键 speak : OUT STD_LOGIC;--蜂鸣器 cout : OUT STD_LOGIC; --超时抢答报警
shuma : OUT STD_LOGIC_VECTOR(3 downto 0);--抢答成功显示台号数码管
shuma1 : OUT STD_LOGIC_VECTOR(3 downto 0);
shuma2 : OUT STD_LOGIC _VECTOR(3 downto 0); shuma3 : OUT STD_LOGIC_VECTOR(3 downto 0);
shuma4 : OUT STD_LOGIC_VECTOR(3 downto 0); shuma5 : OUT STD_LOGIC_VECTOR(3 downto 0);
shuma6 : OUT STD_LOGIC_VECTOR(3 downto 0));
END jinaghu;
ARCHITECTURE bdf_type OF jinaghu IS component anjian --元件U1例化 PORT(rst : IN STD_LOGIC; AIN6 : IN STD_LOGIC_VECTOR(6 downto 1);
shuma : OUT STD_LOGIC_VECTOR(3 downto 0));
end component;
component chaoqian --元件U2例化 PORT(clk1 : IN STD_LOGIC; rst : IN STD_LOGIC;
AIN6 : IN STD_LOGIC_VECTOR(6 downto 1); speak : OUT STD_LOGIC;
shuma1 : OUT STD_LOGIC_VECTOR(3 downto 0); shuma2 : OUT STD_LOGIC_VECTOR(3 downto 0); shuma3 : OUT STD_LOGIC_VECTOR(3 downto 0); shuma4 : OUT STD_LOGIC_VECTOR(3 downto 0); shuma5 : OUT STD_LOGIC_VECTOR(3 downto 0);
shuma6 : OUT STD_LOGIC_VECTOR(3 downto 0) );
end component;
component daojishi --元件U3例化 PORT(clk : IN STD_LOGIC; clk1 : IN STD_LOGIC; rst : IN STD_LOGIC;
shuma : IN STD_LOGIC_VECTOR(3 downto 0); speak : OUT STD_LOGIC;
cout : OUT STD_LOGIC);
end component;
component qiangdabao --元件U3例化 PORT(rst : IN STD_LOGIC; clk1 : IN STD_LOGIC;
AIN6 : IN STD_LOGIC_VECTOR(6 downto 1);
speak : OUT STD_LOGIC);
end component;
signal SYNTHESIZED_WIRE_17 : STD_LOGIC_VECTOR(3 downto 0); signal SYNTHESIZED_WIRE_1 : STD_LOGIC; signal SYNTHESIZED_WIRE_2 : STD_LOGIC; signal SYNTHESIZED_WIRE_3 : STD_LOGIC; signal SYNTHESIZED_WIRE_4 : STD_LOGIC;
signal SYNTHESIZED_WIRE_18 : STD_LOGIC_VECTOR(3 downto 0); signal SYNTHESIZED_WIRE_19 : STD_LOGIC_VECTOR(3 downto 0); signal SYNTHESIZED_WIRE_20 : STD_LOGIC_VECTOR(3 downto 0); BEGIN
shuma3
shuma30
b2v_inst : anjianPORT MAP(rst =>rst, AIN6 => AIN, shuma => SYNTHESIZED_WIRE_17); --参数传递映射语句
b2v_inst1 : chaoqian PORT MAP(clk1 => clk1, rst => rst, AIN6 => AIN,
speak => SYNTHESIZED_WIRE_1, shuma1 => SYNTHESIZED_WIRE_18, shuma2 => SYNTHESIZED_WIRE_19, shuma3 => SYNTHESIZED_WIRE_20, shuma4 => shuma4, shuma5 => shuma5, shuma6 => shuma6);
b2v_inst2 : daojishi PORT MAP(clk => clk, clk1 => clk1, rst => rst,
shuma => SYNTHESIZED_WIRE_17, speak => SYNTHESIZED_WIRE_3, cout
=> cout);
b2v_inst3 : qiangdabao PORT MAP(rst => rst, clk1 => clk1, AIN6 => AIN,
speak => SYNTHESIZED_WIRE_2);
SYNTHESIZED_WIRE_4
3 单元模块程序设计
根据顶层原理图,共分为anjian模块、chaoqian模块、daojishi模块、qiangdabao模块这四个模块。其中anjian模块的功能是锁定抢答成功的选手的台号并显示,chaoqian模块可将超前抢答了的选手台号显示出来并伴随报警,daojishi模块进行二十秒倒计时并显示超时报警,qiangdabao模块主要是为抢答成功之后提供报警功能[2]。
3.1 二十秒倒计时模块
3.1.1二十秒倒计时模块原理图
daojishi
clkclk1rst
shuma[3..0]
speak
cout
3.1.2二十秒倒计时模块VHDL程序设计[1]
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity daojishi is
port (clk,clk1,rst: in std_logic;
shuma: inout std_logic_vector(3 downto 0);--主数码管 speak : out std_logic;
cout: inout std_logic);--进位,可用于超时显示 end daojishi;
architecture one of daojishi is begin
process(clk,rst)
variable cqi : std_logic_vector(7 downto 0); begin
if (rst='1') and (clk'event and clk='1') then if cqi'0'); end if; end if;
if (cqi>20) and (cqi
if (cout='1') and (shuma="0000") and (rst='1')then speak
end process; end one;
3.2 抢答成功选手按键模块
3.2.1抢答成功选手按键模块原理图
anjian
rst
shuma[3..0]
AIN6[6..1]
3.2.2 抢答成功选手按键模块VHDL程序设计
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity anjian is
port (rst: in std_logic;
AIN6: in std_logic_vector(6 downto 1);--六位选手抢答输入 shuma:out std_logic_vector(3 downto 0));--主数码管 end anjian ;
architecture one of anjian is begin
process(AIN6,rst)
variable temp: std_logic_vector(3 downto 0); begin
if rst='1' then
if AIN6="000000" then temp:="0000";
elsif AIN6="000001" then temp:="0001" ; elsif AIN6="000010" then temp:="0010" ; elsif AIN6="000100" then temp:="0011" ; elsif AIN6="001000" then temp:="0100" ; elsif AIN6="010000" then temp:="0101" ; elsif AIN6="100000" then temp:="0110" ; else null; end if; end if;
shuma
3.3 超前抢答犯规模块
3.3.1超前抢答犯规模块原理图
chaoqian
clk1speak
rst
shuma1[3..0]AIN6[6..1]
shuma2[3..0] shuma3[3..0] shuma4[3..0] shuma5[3..0] shuma6[3..0]
--1 --2 --3 --4 --5 --6
3.3.2超前抢答犯规模块VHDL程序设计
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity chaoqian is
port (clk1,rst: in std_logic;
AIN6:in std_logic_vector(6 downto 1); speak : out std_logic;
shuma1,shuma2,shuma3:out std_logic_vector(3 downto 0); shuma4,shuma5,shuma6:out std_logic_vector(3 downto 0)); end chaoqian;
architecture one of chaoqian is
signal abc:std_logic_vector(6 downto 0); begin
abc
variable tepm: std_logic_vector(3 downto 0); begin
case abc is
when "0000001"=>shuma1
when "0000010"=>shuma1
when "0000100"=>shuma1
when "0001000"=>shuma1
when "0010000"=>shuma1
when "0100000"=>shuma1
when "0000011"=>shuma1
when "0000101"=>shuma1
when "0001001"=>shuma1
when "0010001"=>shuma1
when "0100001"=>shuma1
when "0000110"=>shuma1
when "0001010"=>shuma1
when "0010010"=>shuma1
when "0100010"=>shuma1
when "0001100"=>shuma1
when "0010100"=>shuma1
when "0100100"=>shuma1
when "0011000"=>shuma1
when "0101000"=>shuma1
when "0110000"=>shuma1
when "0000111"=>shuma1
when "0001011"=>shuma1
when "0010011"=>shuma1
when "0100011"=>shuma1
when "0001101"=>shuma1
when "0010101"=>shuma1
when "0100101"=>shuma1
when "0011001"=>shuma1
when "0101001"=>shuma1
when "0110001"=>shuma1
when "0001110"=>shuma1
when "0010110"=>shuma1
when "0100110"=>shuma1
when "0011010"=>shuma1
when "0101010"=>shuma1
when "0110010"=>shuma1
when "0011100"=>shuma1
when "0101100"=>shuma1
when "0110100"=>shuma1
when "0111000"=>shuma1
when "0111100"=>shuma1
when "0111010"=>shuma1
when "0110110"=>shuma1
when "0101110"=>shuma1
when "0011110"=>shuma1
when "0111001"=>shuma1
when "0110101"=>shuma1
when "0101101"=>shuma1
when "0011101"=>shuma1
when "0110011"=>shuma1
when "0101011"=>shuma1
when "0011011"=>shuma1
when "0100111"=>shuma1
when "0010111"=>shuma1
when "0001111"=>shuma1shuma1
when "0111101"=>shuma1shuma1shuma1shuma1shuma1shuma1 shuma1
shuma4
3.4 抢答成功报警模块
3.4.1抢答成功报警模块原理图
qiangdabao
rstclk1
AIN6[6..1]speak
3.4.2抢答成功报警模块VHDL程序设计[5]
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity qiangdabao is
port (rst,clk1: in std_logic;
AIN6: in std_logic_vector(6 downto 1);
speak : out std_logic);
end qiangdabao;
architecture one of qiangdabao is begin
process(rst,AIN6(1),AIN6(2),AIN6(3),AIN6(4),AIN6(5),AIN6(6)) begin
if (rst='1') and ((AIN6(1) or AIN6(2) or AIN6(3) or AIN6(4) or AIN6(5) or AIN6(6))='1')
then speak
4 六人抢答器电路系统仿真及功能分析与调试
4.1 分立模块的仿真
4.1.1二十秒倒计时模块的仿真 (1)波形仿真
将所编写的二十秒倒计时模块daojishi的程序设为工程,选用Altera公司的Cyclone系列中的EPIC6Q240C8为目标芯片进行仿真。
仿真结果如下图:
(2)模块功能分析
当抢答开始后(rst为1),若二十秒内无人抢答,则报警灯亮(cout为1),同时蜂鸣器进行报警(speak的输出频率为clk1的频率),综上可得二十秒倒计时并超时报警的功能要求。
4.1.2抢答成功选手按键模块的仿真 (1)波形仿真
将编写的抢答成功选手按键模块anjian的程序设为工程,选用Altera公司的Cyclone系列中的EPIC6Q240C8为目标芯片进行仿真。
仿真结果如下图:
(2)模块功能分析
抢答开始后,各位选手可进行抢答,其中最先抢答的选手的台号将显示于数码管shuma上,从仿真波形图上我们可以看出当1号选手最先抢答后,其它选手再按抢答键无效,显示台只显示1号选手的台号。 4.1.3超前抢答犯规模块的仿真 (1)波形仿真
将编写的超前抢答犯规模块chaoqian的程序设为工程,选用Altera公司的Cyclone系列中的EPIC6Q240C8为目标芯片进行仿真。
仿真结果如下图9:
(2)模块功能分析
当开始键为0(未开始)时,无论哪位选手抢答即为超前抢答犯规,其台号将分别显示于各自的数码管上,同时蜂鸣器进行报警。 4.1.4抢答成功报警模块 (1)波形仿真
将编写的抢答成功报警模块qiangdabao的程序设为工程,选用Altera公司的Cyclone系列中的EPIC6Q240C8为目标芯片进行仿真。
仿真结果如下图10:
(2)模块功能分析
由仿真图我们可以看出:当开始抢答后,只要有人抢答成功,蜂鸣器就会对其进行报警,表示抢答结束,系统复位后即可进行下一轮的抢答。
4.2 总体设计模块的仿真 (1) 波形仿真
利用顶层原理图创建工程,将各分立模块的程序添入工程打包,将所编写的二十秒倒计时模块daojishi的程序设为工程,选用Altera公司的Cyclone系列中的EPIC6Q240C8为目标芯片进行仿真。
仿真结果如下图11:
(2)功能分析
由仿真图我们可以清楚地看到超前抢答选手的台号会依次显示于与各自相对应的数码管上,并伴有报警提示,抢答开始后,第一位抢答成功的选手台号将显示于主数码管shuma上,其它选手再抢答则无效。
5 实验设备和器件
(1) 计算机一台
(2) EDA/SOP实验开发系统GW48-PK2 1套 (3) QuartusⅡ6.0开发软件一套
6 引脚锁定和下载硬件测试及实验结果
6.1 引脚锁定
选定NO.5电路结构,引脚锁定如下图所示:
6.2 下载和硬件测试及实验结果
我们采用的是杭州康芯电子有限公司生产的GW48系列/SOPC/EDA实验开发系统,FPGA目标芯片型号为Altera公司的Cyclone系列中的EPIC6Q240C8。选择实验电路结构图NO.5,使CLK1与CLKOCK5相接(接受1024Hz时钟频率),CLK 与CLOCK0
相
接(接受1Hz时钟频率),报警输出接SPEAK,当有人犯规或抢答成功或是抢答超时,蜂鸣器会发出嘀嘀嘀的报警声。六位选手分别对应实验箱上的1~6键,键7为抢答开始键,当未按下键7就进行抢答则为超前犯规,按下后二十秒倒计时开始,选手进行抢答,按实验箱上的复位键则可重新开始下一轮的抢答。当有人抢答成功或犯规抢答时,数码管会显示抢答成功者和犯规选手的台号。 7 参考文献
[1] 潘松.EDA技术与VHDL(第2版).北京:清华大学出版社,2007 [2] 李宗伯译.VHDL设计表示和综合.北京:机械工业出版社,2002 [3] 王金明.数字系统设计与Verilog HDL.北京:电子工业出版社,2002 [4] 王锁萍.电子设计自动化教程.成都:电子科技大学出版社,2000 [5] 徐志军.CPLD/FPGA的开发与应用.北京:电子工业出版社,2002
8 心得体会
课程设计是针对某一理论课程的要求,对学生进行综合性实践训练的实践教学环节,可以提高学生运用课程中所学的理论知识与实践紧密结合,独立地解决实际问题的能力。在这次课程设计过程中使我从中学到许多以前在课本和课堂上所无法学到的,特别是在课程设计过程中查找资料的过程中从中学到许多以前在课本和课堂上所无法学到的并从中体会到许多的乐趣,从而丰富了自己,使自己无论是上课时还是在课余都感到很充实。在本次课程设计的过程中,曾得到过老师与几位同学的悉心指导与帮助,才使得我们的设计非常圆满的完成,在此对他们表示我们最衷心的感谢,谢谢你们!
因学习知识的能力和时间有限,并且此次EDA课程设计对于我们来说还只是初体验,因此在本次的课程设计过程中,难免存在错误,恳请老师给以批评指正,并再次感谢曾帮助过我们的老师和同学。
附录
顶层模块原理图如下图所示:
湖南人文科技学院
课程设计报告
课程名称:
设计题目: 六人抢答器
系 别: 通信与控制工程系
专 业: 电子信息工程 班 级: 电子信息二班 学生姓名: 鄢卫 张幸 学 号: 08409228 08409226 起止日期: 2011年06月14日~2011年06月26日 指导教师: 姚 毅 教研室主任: 侯海良
摘 要
本次设计在EDA开发平台QUARTUSⅡ6.0上利用VHDL语言设计六人抢答器电路。电路中设有六个抢答键,可供六人同时抢答;我们利用一个二十进制计数器,将其输入频率设定为一赫兹,成功实现了二十秒倒计时的功能;我们利用VHDL语言中的IF和CASE语句结合空操作语句NULL实现开始抢答与超前抢答的区别;各个模块配以一时钟频率由蜂鸣器输出可实现抢答成功、超前抢答犯规、超时抢答等各种情况的报警效果;本设计采用的是杭州康芯电子有限公司生产的GW48系列/SOPC/EDA实验开发系统,FPGA目标芯片型号为Altera公司的Cyclone系列中的EPIC6Q240C8。芯片配置成功后锁定引脚下载即可进行硬件测试:选择实验电路结构图NO.5,使CLK1与CLKOCK5相接(接受1024Hz时钟频率),CLK 与CLOCK0相接(接受1Hz时钟频率),报警输出接SPEAK,六位选手分别对应实验箱上的1~6键,键7为抢答开始键,当其未按下就进行抢答则为超前犯规,按下后二十秒倒计时开始,选手进行抢答,按实验箱上的复位键则可重新开始下一轮的抢答。
关键词:六人抢答器;数码显示;信号封锁;犯规报警。
目 录
设计要求 .................................................................................................................................... 1 1 总体设计方案论论证与对比 ................................................................................................ 1
1.1 方案一 ......................................................................................................................... 1 1.2 方案二 ......................................................................................................................... 1 2顶层电路VHDL程序设计 .................................................................................................... 2 3 单元模块程序设计 ................................................................................................................ 5
3.1 二十秒倒计时模块 ..................................................................................................... 5 3.2 抢答成功选手按键模块 ............................................................................................. 6 3.3 超前抢答犯规模块 ..................................................................................................... 7 3.4 抢答成功报警模块 ................................................................................................... 11 4 六人抢答器电路系统仿真及功能分析与调试 .................................................................. 12
4.1 分立模块的仿真 ....................................................................................................... 12 4.2 总体设计模块的仿真 ............................................................................................... 14 5 实验设备和器件 .................................................................................................................. 15 6 引脚锁定和下载硬件测试及实验结果 .............................................................................. 15
6.1 引脚锁定 ................................................................................................................... 15 6.2 下载和硬件测试及实验结果 ................................................................................... 16 7 参考文献 .............................................................................................................................. 17 8 心得体会 .............................................................................................................................. 17 附录 .......................................................................................................................................... 18
六人抢答器
设计要求
抢答台数为6;具有抢答开始后20秒倒计时,20秒倒计时后六人抢答显示超时,并报警;能显示超前抢答台号并显示犯规报警;系统复位后进入抢答状态,当有一路抢答按键按下,该路抢答信号将其余各路抢答信号封锁,同时铃声响起,直至该路按键松开,显示牌显示该路抢答台号。
1 总体设计方案论论证与对比
1.1 方案一
该方案方框图如图1:
在该方案中,由二十秒倒计时模块、抢答鉴别模块、锁存器模块等模块组成[3]。蜂鸣器和数码管分别起报警和显示台号的作用。但该方案中的数码管显示是由七段显示器的形式来显示台号的,由于实验箱电路结构与按键数目的限定,使得我们没有采用该方案。
1.2 方案二
该方案方框图如图2:
此方案中整个电路主要由超前抢答判别模块、二十秒倒计时模块、抢答成功按键模块、抢答报警模块四个模块组成[4]。其台号的显示都是将信号送入译码器译码之后再由数码管显示出来,结合前面六位选手的按键及开始键可得实验箱上模式5的电路结构满足硬件测试的要求。所以我们选定该方案来进行我们这次的课程设计。
2顶层电路VHDL程序设计
顶层电路VHDL程序如下 USE ieee.std_logic_1164.all; LIBRARY work; ENTITY jinaghu IS
port (rst : IN STD_LOGIC;--抢答开始键
clk : IN STD_LOGIC;--计数器时钟输入 clk1 : IN STD_LOGIC;--蜂鸣器时钟输入
AIN : IN STD_LOGIC_VECTOR(6 downto 1);--选手按键 speak : OUT STD_LOGIC;--蜂鸣器 cout : OUT STD_LOGIC; --超时抢答报警
shuma : OUT STD_LOGIC_VECTOR(3 downto 0);--抢答成功显示台号数码管
shuma1 : OUT STD_LOGIC_VECTOR(3 downto 0);
shuma2 : OUT STD_LOGIC _VECTOR(3 downto 0); shuma3 : OUT STD_LOGIC_VECTOR(3 downto 0);
shuma4 : OUT STD_LOGIC_VECTOR(3 downto 0); shuma5 : OUT STD_LOGIC_VECTOR(3 downto 0);
shuma6 : OUT STD_LOGIC_VECTOR(3 downto 0));
END jinaghu;
ARCHITECTURE bdf_type OF jinaghu IS component anjian --元件U1例化 PORT(rst : IN STD_LOGIC; AIN6 : IN STD_LOGIC_VECTOR(6 downto 1);
shuma : OUT STD_LOGIC_VECTOR(3 downto 0));
end component;
component chaoqian --元件U2例化 PORT(clk1 : IN STD_LOGIC; rst : IN STD_LOGIC;
AIN6 : IN STD_LOGIC_VECTOR(6 downto 1); speak : OUT STD_LOGIC;
shuma1 : OUT STD_LOGIC_VECTOR(3 downto 0); shuma2 : OUT STD_LOGIC_VECTOR(3 downto 0); shuma3 : OUT STD_LOGIC_VECTOR(3 downto 0); shuma4 : OUT STD_LOGIC_VECTOR(3 downto 0); shuma5 : OUT STD_LOGIC_VECTOR(3 downto 0);
shuma6 : OUT STD_LOGIC_VECTOR(3 downto 0) );
end component;
component daojishi --元件U3例化 PORT(clk : IN STD_LOGIC; clk1 : IN STD_LOGIC; rst : IN STD_LOGIC;
shuma : IN STD_LOGIC_VECTOR(3 downto 0); speak : OUT STD_LOGIC;
cout : OUT STD_LOGIC);
end component;
component qiangdabao --元件U3例化 PORT(rst : IN STD_LOGIC; clk1 : IN STD_LOGIC;
AIN6 : IN STD_LOGIC_VECTOR(6 downto 1);
speak : OUT STD_LOGIC);
end component;
signal SYNTHESIZED_WIRE_17 : STD_LOGIC_VECTOR(3 downto 0); signal SYNTHESIZED_WIRE_1 : STD_LOGIC; signal SYNTHESIZED_WIRE_2 : STD_LOGIC; signal SYNTHESIZED_WIRE_3 : STD_LOGIC; signal SYNTHESIZED_WIRE_4 : STD_LOGIC;
signal SYNTHESIZED_WIRE_18 : STD_LOGIC_VECTOR(3 downto 0); signal SYNTHESIZED_WIRE_19 : STD_LOGIC_VECTOR(3 downto 0); signal SYNTHESIZED_WIRE_20 : STD_LOGIC_VECTOR(3 downto 0); BEGIN
shuma3
shuma30
b2v_inst : anjianPORT MAP(rst =>rst, AIN6 => AIN, shuma => SYNTHESIZED_WIRE_17); --参数传递映射语句
b2v_inst1 : chaoqian PORT MAP(clk1 => clk1, rst => rst, AIN6 => AIN,
speak => SYNTHESIZED_WIRE_1, shuma1 => SYNTHESIZED_WIRE_18, shuma2 => SYNTHESIZED_WIRE_19, shuma3 => SYNTHESIZED_WIRE_20, shuma4 => shuma4, shuma5 => shuma5, shuma6 => shuma6);
b2v_inst2 : daojishi PORT MAP(clk => clk, clk1 => clk1, rst => rst,
shuma => SYNTHESIZED_WIRE_17, speak => SYNTHESIZED_WIRE_3, cout
=> cout);
b2v_inst3 : qiangdabao PORT MAP(rst => rst, clk1 => clk1, AIN6 => AIN,
speak => SYNTHESIZED_WIRE_2);
SYNTHESIZED_WIRE_4
3 单元模块程序设计
根据顶层原理图,共分为anjian模块、chaoqian模块、daojishi模块、qiangdabao模块这四个模块。其中anjian模块的功能是锁定抢答成功的选手的台号并显示,chaoqian模块可将超前抢答了的选手台号显示出来并伴随报警,daojishi模块进行二十秒倒计时并显示超时报警,qiangdabao模块主要是为抢答成功之后提供报警功能[2]。
3.1 二十秒倒计时模块
3.1.1二十秒倒计时模块原理图
daojishi
clkclk1rst
shuma[3..0]
speak
cout
3.1.2二十秒倒计时模块VHDL程序设计[1]
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity daojishi is
port (clk,clk1,rst: in std_logic;
shuma: inout std_logic_vector(3 downto 0);--主数码管 speak : out std_logic;
cout: inout std_logic);--进位,可用于超时显示 end daojishi;
architecture one of daojishi is begin
process(clk,rst)
variable cqi : std_logic_vector(7 downto 0); begin
if (rst='1') and (clk'event and clk='1') then if cqi'0'); end if; end if;
if (cqi>20) and (cqi
if (cout='1') and (shuma="0000") and (rst='1')then speak
end process; end one;
3.2 抢答成功选手按键模块
3.2.1抢答成功选手按键模块原理图
anjian
rst
shuma[3..0]
AIN6[6..1]
3.2.2 抢答成功选手按键模块VHDL程序设计
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity anjian is
port (rst: in std_logic;
AIN6: in std_logic_vector(6 downto 1);--六位选手抢答输入 shuma:out std_logic_vector(3 downto 0));--主数码管 end anjian ;
architecture one of anjian is begin
process(AIN6,rst)
variable temp: std_logic_vector(3 downto 0); begin
if rst='1' then
if AIN6="000000" then temp:="0000";
elsif AIN6="000001" then temp:="0001" ; elsif AIN6="000010" then temp:="0010" ; elsif AIN6="000100" then temp:="0011" ; elsif AIN6="001000" then temp:="0100" ; elsif AIN6="010000" then temp:="0101" ; elsif AIN6="100000" then temp:="0110" ; else null; end if; end if;
shuma
3.3 超前抢答犯规模块
3.3.1超前抢答犯规模块原理图
chaoqian
clk1speak
rst
shuma1[3..0]AIN6[6..1]
shuma2[3..0] shuma3[3..0] shuma4[3..0] shuma5[3..0] shuma6[3..0]
--1 --2 --3 --4 --5 --6
3.3.2超前抢答犯规模块VHDL程序设计
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity chaoqian is
port (clk1,rst: in std_logic;
AIN6:in std_logic_vector(6 downto 1); speak : out std_logic;
shuma1,shuma2,shuma3:out std_logic_vector(3 downto 0); shuma4,shuma5,shuma6:out std_logic_vector(3 downto 0)); end chaoqian;
architecture one of chaoqian is
signal abc:std_logic_vector(6 downto 0); begin
abc
variable tepm: std_logic_vector(3 downto 0); begin
case abc is
when "0000001"=>shuma1
when "0000010"=>shuma1
when "0000100"=>shuma1
when "0001000"=>shuma1
when "0010000"=>shuma1
when "0100000"=>shuma1
when "0000011"=>shuma1
when "0000101"=>shuma1
when "0001001"=>shuma1
when "0010001"=>shuma1
when "0100001"=>shuma1
when "0000110"=>shuma1
when "0001010"=>shuma1
when "0010010"=>shuma1
when "0100010"=>shuma1
when "0001100"=>shuma1
when "0010100"=>shuma1
when "0100100"=>shuma1
when "0011000"=>shuma1
when "0101000"=>shuma1
when "0110000"=>shuma1
when "0000111"=>shuma1
when "0001011"=>shuma1
when "0010011"=>shuma1
when "0100011"=>shuma1
when "0001101"=>shuma1
when "0010101"=>shuma1
when "0100101"=>shuma1
when "0011001"=>shuma1
when "0101001"=>shuma1
when "0110001"=>shuma1
when "0001110"=>shuma1
when "0010110"=>shuma1
when "0100110"=>shuma1
when "0011010"=>shuma1
when "0101010"=>shuma1
when "0110010"=>shuma1
when "0011100"=>shuma1
when "0101100"=>shuma1
when "0110100"=>shuma1
when "0111000"=>shuma1
when "0111100"=>shuma1
when "0111010"=>shuma1
when "0110110"=>shuma1
when "0101110"=>shuma1
when "0011110"=>shuma1
when "0111001"=>shuma1
when "0110101"=>shuma1
when "0101101"=>shuma1
when "0011101"=>shuma1
when "0110011"=>shuma1
when "0101011"=>shuma1
when "0011011"=>shuma1
when "0100111"=>shuma1
when "0010111"=>shuma1
when "0001111"=>shuma1shuma1
when "0111101"=>shuma1shuma1shuma1shuma1shuma1shuma1 shuma1
shuma4
3.4 抢答成功报警模块
3.4.1抢答成功报警模块原理图
qiangdabao
rstclk1
AIN6[6..1]speak
3.4.2抢答成功报警模块VHDL程序设计[5]
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity qiangdabao is
port (rst,clk1: in std_logic;
AIN6: in std_logic_vector(6 downto 1);
speak : out std_logic);
end qiangdabao;
architecture one of qiangdabao is begin
process(rst,AIN6(1),AIN6(2),AIN6(3),AIN6(4),AIN6(5),AIN6(6)) begin
if (rst='1') and ((AIN6(1) or AIN6(2) or AIN6(3) or AIN6(4) or AIN6(5) or AIN6(6))='1')
then speak
4 六人抢答器电路系统仿真及功能分析与调试
4.1 分立模块的仿真
4.1.1二十秒倒计时模块的仿真 (1)波形仿真
将所编写的二十秒倒计时模块daojishi的程序设为工程,选用Altera公司的Cyclone系列中的EPIC6Q240C8为目标芯片进行仿真。
仿真结果如下图:
(2)模块功能分析
当抢答开始后(rst为1),若二十秒内无人抢答,则报警灯亮(cout为1),同时蜂鸣器进行报警(speak的输出频率为clk1的频率),综上可得二十秒倒计时并超时报警的功能要求。
4.1.2抢答成功选手按键模块的仿真 (1)波形仿真
将编写的抢答成功选手按键模块anjian的程序设为工程,选用Altera公司的Cyclone系列中的EPIC6Q240C8为目标芯片进行仿真。
仿真结果如下图:
(2)模块功能分析
抢答开始后,各位选手可进行抢答,其中最先抢答的选手的台号将显示于数码管shuma上,从仿真波形图上我们可以看出当1号选手最先抢答后,其它选手再按抢答键无效,显示台只显示1号选手的台号。 4.1.3超前抢答犯规模块的仿真 (1)波形仿真
将编写的超前抢答犯规模块chaoqian的程序设为工程,选用Altera公司的Cyclone系列中的EPIC6Q240C8为目标芯片进行仿真。
仿真结果如下图9:
(2)模块功能分析
当开始键为0(未开始)时,无论哪位选手抢答即为超前抢答犯规,其台号将分别显示于各自的数码管上,同时蜂鸣器进行报警。 4.1.4抢答成功报警模块 (1)波形仿真
将编写的抢答成功报警模块qiangdabao的程序设为工程,选用Altera公司的Cyclone系列中的EPIC6Q240C8为目标芯片进行仿真。
仿真结果如下图10:
(2)模块功能分析
由仿真图我们可以看出:当开始抢答后,只要有人抢答成功,蜂鸣器就会对其进行报警,表示抢答结束,系统复位后即可进行下一轮的抢答。
4.2 总体设计模块的仿真 (1) 波形仿真
利用顶层原理图创建工程,将各分立模块的程序添入工程打包,将所编写的二十秒倒计时模块daojishi的程序设为工程,选用Altera公司的Cyclone系列中的EPIC6Q240C8为目标芯片进行仿真。
仿真结果如下图11:
(2)功能分析
由仿真图我们可以清楚地看到超前抢答选手的台号会依次显示于与各自相对应的数码管上,并伴有报警提示,抢答开始后,第一位抢答成功的选手台号将显示于主数码管shuma上,其它选手再抢答则无效。
5 实验设备和器件
(1) 计算机一台
(2) EDA/SOP实验开发系统GW48-PK2 1套 (3) QuartusⅡ6.0开发软件一套
6 引脚锁定和下载硬件测试及实验结果
6.1 引脚锁定
选定NO.5电路结构,引脚锁定如下图所示:
6.2 下载和硬件测试及实验结果
我们采用的是杭州康芯电子有限公司生产的GW48系列/SOPC/EDA实验开发系统,FPGA目标芯片型号为Altera公司的Cyclone系列中的EPIC6Q240C8。选择实验电路结构图NO.5,使CLK1与CLKOCK5相接(接受1024Hz时钟频率),CLK 与CLOCK0
相
接(接受1Hz时钟频率),报警输出接SPEAK,当有人犯规或抢答成功或是抢答超时,蜂鸣器会发出嘀嘀嘀的报警声。六位选手分别对应实验箱上的1~6键,键7为抢答开始键,当未按下键7就进行抢答则为超前犯规,按下后二十秒倒计时开始,选手进行抢答,按实验箱上的复位键则可重新开始下一轮的抢答。当有人抢答成功或犯规抢答时,数码管会显示抢答成功者和犯规选手的台号。 7 参考文献
[1] 潘松.EDA技术与VHDL(第2版).北京:清华大学出版社,2007 [2] 李宗伯译.VHDL设计表示和综合.北京:机械工业出版社,2002 [3] 王金明.数字系统设计与Verilog HDL.北京:电子工业出版社,2002 [4] 王锁萍.电子设计自动化教程.成都:电子科技大学出版社,2000 [5] 徐志军.CPLD/FPGA的开发与应用.北京:电子工业出版社,2002
8 心得体会
课程设计是针对某一理论课程的要求,对学生进行综合性实践训练的实践教学环节,可以提高学生运用课程中所学的理论知识与实践紧密结合,独立地解决实际问题的能力。在这次课程设计过程中使我从中学到许多以前在课本和课堂上所无法学到的,特别是在课程设计过程中查找资料的过程中从中学到许多以前在课本和课堂上所无法学到的并从中体会到许多的乐趣,从而丰富了自己,使自己无论是上课时还是在课余都感到很充实。在本次课程设计的过程中,曾得到过老师与几位同学的悉心指导与帮助,才使得我们的设计非常圆满的完成,在此对他们表示我们最衷心的感谢,谢谢你们!
因学习知识的能力和时间有限,并且此次EDA课程设计对于我们来说还只是初体验,因此在本次的课程设计过程中,难免存在错误,恳请老师给以批评指正,并再次感谢曾帮助过我们的老师和同学。
附录
顶层模块原理图如下图所示: