课程设计报告
报 告 题 目: 基于VHDL的四路抢答器
作者所在系部: 电子工程系
作者所在专业:
作者所在班级:
作 者 姓 名 :
指导教师姓名:
完 成 时 间 :
一 概 述………………………………………………………………………3
二 方案设计与论证………………………………………………………………3
三 单元电路设计…………………………………………………………………3
3.1抢答鉴别模块……………………………………………………3
3.1.1源程序设计 ………………………… ……………………………… 4
3.1.2 仿真图………………………………………… …………………… 4
3.2 抢答计时模块 ………………………………………… ……………… 5
3.2.1源程序设计 ………………………………………………………… 5
3.2.2 仿真图 ………………………………………………………………6
3.3 数据选择模块 ……………………………………………………………6
3.3.1源程序设计 ………………………………………………………… 6
3.3.2 仿真图……………………………………………………………… 7
3.4报警模块……………………………………………… ………………… 7
3.4.1源程序设计 ………………………………………………………… 7
3.4.2 仿真图………………………………………… …………………… 8
3.5分频模块……………………………………………………………………8
3.5.1源程序设计 ………………………………………………………… 8
3.5.2 仿真图…………………………………………………………………9
3.6 顶层文件………………………………………………………………… 9
3.6.1源程序设计……………………………………………………………9
3.6.2 仿真图 ………………………………………………………………10
3.7顶层文件……………………………………………………………………10
3.8 主电路连线图………………………………………………………………10
四、器件编程与下载 ……………………………………………………………11
五 性能测试与分析………………………………………………………………12
(要围绕设计要求中的各项指标进行)
六 实验设备………………………………………………………………………12
七 心得体会………………………………………………………………………12
八 参考文献………………………………………………………………………13
课程设计任务书
课题
| 名称 | 基于VHDL的四路答器 | 完成 时间 | |||||
| 指导 教师 | 职称 | 学生 姓名 | 班级 | ||||
| 总体设计要求和技术要点 | |||||||
| 设计要求: 1.抢答器同时供4名选手或4个代表队比赛,分别用4个按钮S0~ S3表示。 2.设置一个系统清除和抢答控制开关S,该开关由主持人控制。 3.抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。 4. 抢答器具有定时抢答功能,且一次抢答的时间由主持人设定(如30秒)。当主持人启动“开始”键后,定时器进行减计时,同时扬声器发出短暂的声响,声响持续的时间0.5秒左右。 5. 参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。 6. 如果定时时间已到,无人抢答,本次抢答无效,系统报警并禁止抢答,定时显示器上显示00。 技术要点:1、实现封锁功能; 3、总程序的编译、仿真、打包并下载到实验箱。 | |||||||
| 工作内容及时间进度安排 工作内容:1、编程、仿真、打包、编辑总程序,编译。2、下载到实验箱,验证结果。 进度安排:周一到周五上机调试程序。周六并下载验证,做硬件实验。周日课设验收并总结报告。 | |||||||
| 课程设计成果 | |||||||
| 1.与设计内容对应的软件程序 2.课程设计报告书 3.成果使用说明书 4.设计工作量要求 | |||||||
一、概述
抢答器主要由抢答鉴别模块、抢答计时模块、数据选择模块、报警器、译码模块和分频模块组成。在设计中,要实现倒计时功能,并且主持人按键后才能抢答,一人抢答后,其他人就不能再抢答了。抢答器共有3个输出显示,选手代号、计数器的个位和十位,把这三个输出与显示译码器连接,实现显示功能。当主持人按下控制键、选手按下抢答键或倒计时到时蜂鸣器短暂响起。
二、方案设计与论证
将该任务分成六个模块进行设计,分别为:抢答器鉴别模块、抢答器计时模块、数据选择模块、报警模块、译码模块和分频模块,最后是撰写顶层文件。
1、抢答器鉴别模块:
在这个模块中主要实现抢答过程中的抢答功能,并能对超前抢答进行警告,还能记录无论是正常抢答还是朝前抢答者的台号,并且能实现当有一路抢答按键按下时,该路抢答信号将其余个绿抢答封锁的功能。其中有四个抢答信号s0、s1、s2、s3;抢答使能信号s;抢答状态显示信号states;抢答与警报时钟信号clk2;系统复位信号rst;警报信号tmp。
2、抢答器计时模块:
在这个模块中主要实现抢答过程中的计时功能,在有抢答开始后进行30秒的倒计时,并且在30秒倒计时后无人抢答显示超时并报警。其中有抢答时钟信号clk2;系统复位信号rst;抢答使能信号s;抢答状态显示信号states;无人抢答警报信号warn;计时中止信号stop;计时十位和个位信号tb,ta。
3、数据选择模块:
在这个模块中主要实现抢答过程中的数据输入功能,输入信号a[3..0]、b[3..0]、c[3..0];计数输出信号s;数据输出信号y;计数脉冲clk2,实现a、b、c按脉冲轮流选通,在数码管上显示。
4、报警模块:
在这个模块中主要实现抢答过程中的报警功能,当主持人按下控制键,有限时间内 人抢答或是计数到时蜂鸣器开始报警,有效电平输入信号i;状态输出信号q;计数脉冲clk2。
5、译码模块:
在这个模块中主要实现抢答过程中将BCD码转换成7段的功能。
6、分频模块:
在这个模块中主要实现抢答过程中实现输出双脉冲的功能。
7、顶层文件:
在这个模块中是对前七个模块的综合编写的顶层文件。
一、单元电路设计
3.1抢答鉴别模块
3.1.1、VHDL源程序
library ieee;--抢答鉴别模块
use ieee.std_logic_11.all;
use ieee.std_logic_unsigned.all;
entity qdjb is
port(rst,clk2:in std_logic;
tmp:out std_logic);
end qdjb;
architecture one of qdjb is
signal st:std_logic_vector(3 downto 0);
begin
p1:process(s0,rst,s1,s2,s3,clk2)
begin
if (s1='1' or st(1)='1')and not( st(0)='1' or st(2)='1' or st(3)='1' ) then st(1)<='1';
if (s2='1' or st(2)='1')and not( st(0)='1' or st(1)='1' or st(3)='1' ) then st(2)<='1';
if (s3='1' or st(3)='1')and not( st(0)='1' or st(1)='1' or st(2)='1' ) then st(3)<='1';
tmp<=s0 or s1 or s2 or s3;
end if ;
end process p1;
p2:process(states(0),states(1),states(2),states(3))
begin
if (st="0000") then states<="0000"; elsif (st<="0001") then states<="0001";
elsif (st<="0010") then states<="0010"; elsif (st<="0100") then states<="0011";
elsif (st<="1000") then states<="0100"; end if; end process p2;
end one;
3.1.2、仿真图:
3.2抢答计时模块
3.2.1、VHDL源程序
library ieee;--抢答器计时模块
use ieee.std_logic_11.all;
use ieee.std_logic_unsigned.all;
entity js is
port(clk,rst,s,stop:in std_logic;
end js;
architecture one of js is
signal co:std_logic;
begin
p1:process(clk,rst,s,stop,ta)
end process p1;
p2:process(co,rst,s,stop,tb)
end process p2;
3.2.2、仿真图
3.3数据选择模块
3.3.1、VHDL源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
ENTITY sjxz IS
PORT (a,b,c: IN STD_LOGIC_vector(3 downto 0);
clk2,rst: IN STD_LOGIC;
s: out STD_LOGIC_vector(1 downto 0);
y: OUT STD_LOGIC_vector(3 downto 0) );
END sjxz;
ARCHITECTURE body_chooser OF sjxz IS
SIGNAL count: STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
s<=count;
PROCESS(clk2,rst)
BEGIN
if(rst='0')then count<="00";
elsif(clk2'event and clk2='1')then
if(count>="10")then
count<="00";
else count<=count+1;
end if;
end if;
case count is
WHEN "00"=>y<=a;
WHEN "01"=>y<=b;
WHEN "10"=>y<=c;
WHEN OTHERS=>NULL;
END CASE;
END PROCESS;
END body_chooser;
3.3.2、仿真图
3.4报警模块
3.4.1、VHDL源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY ALARM IS
PORT(CLK,I:IN STD_LOGIC;
END ALARM;
ARCHITECTURE BEHAVE OF ALARM IS
SIGNAL warn:STD_LOGIC;
SIGNAL N:INTEGER RANGE 0 TO 20;
BEGIN
Q<=warn;
PROCESS(CLK)
END PROCESS;
END BEHAVE;
3.4.2、仿真图
3.5译码模块
3.5.1、VHDL源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY YMQ IS
PORT(AIN4: IN STD_LOGIC_VECTOR(3 DOWNTO 0);
DOUT7: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));
END YMQ;
ARCHITECTURE ART OF YMQ IS
BEGIN
PROCESS(AIN4)
BEGIN
CASE AIN4 IS
WHEN "0000"=>DOUT7<="1111110"; --0
WHEN "0001"=>DOUT7<="0110000"; --1
WHEN "0010"=>DOUT7<="1101101"; --2
WHEN "0011"=>DOUT7<="1111001"; --3
WHEN "0100"=>DOUT7<="0110011"; --4
WHEN "0101"=>DOUT7<="1011011"; --5
WHEN "0110"=>DOUT7<="1011111"; --6
WHEN "0111"=>DOUT7<="1110000"; --7
WHEN "1000"=>DOUT7<="1111111"; --8
WHEN "1001"=>DOUT7<="1111011"; --9
WHEN OTHERS=>DOUT7<="0000000";
END CASE;
END PROCESS;
END ARCHITECTURE ART;
3.5.2、仿真图
3.6分频模块
3.6.1、VHDL源程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY clkdiv IS
PORT(clk2 : IN STD_LOGIC;
clk16 : OUT STD_LOGIC);
END clkdiv;
ARCHITECTURE rtl OF clkdiv IS
SIGNAL count : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN
PROCESS(clk2)
BEGIN
IF (clk2'event AND clk2='1') THEN
IF(count="1111") THEN
Count <="0000";
ELSE
Count <= count +1;
END IF ;
END IF ;
END PROCESS;
PROCESS(clk2)
BEGIN
IF (clk2'event AND clk2='1') THEN
IF(count="1111") THEN
clk16 <= '1';
ELSE
clk16 <= '0';
END IF ;
END IF ;
END PROCESS;
END rtl;
3.6.2、仿真图
3.7顶层文件
3.7.1VHDL源程序
library ieee;--抢答器顶层文件
use ieee.std_logic_11.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
entity qiangdaqi is
port(clk,clk2,s,s0,s1,s2,s3,stop,rst:in std_logic;
end qiangdaqi;
architecture bhv of qiangdaqi is
component qdjb is
port(clk2,rst:in std_logic;
s0,s1,s2,s3:in std_logic;
end component;
component js is
port(clk,rst,s,stop:in std_logic;
end component;
component sjxz is
end component;
component ymq is
port(AIN4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
end component;
component alarm is
end component;
signal states_out,ta_out,tb_out,y_out:std_logic_vector(3 downto 0);
signal ledout:std_logic_vector(6 downto 0);
signal w:std_logic;
begin
a<=ledout(6);b<=ledout(5);c<=ledout(4);d<=ledout(3);e<=ledout(2);f<=ledout(1);g<=ledout(0);
u1:qdjb port map(clk2,rst,s0,s1,s2,s3,tmp=>k,states=>states_out);
u2:js port map(clk,rst,s,stop,warn=>n,ta=>ta_out,tb=>tb_out);
u3:sjxzportmap(clk2=>clk2,rst=>rst,a=>states_out,b=>ta_out,c=>tb_out,s=>m,y_out;
u4:ymq port map(ain4=>y_out,DOUT7=>ledout);
u5:alarm port map(clk2,i=>s,q_out);
end bhv;
3.7.2仿真图
3.8主电路连线图
四、器件编程与下载
将编译好的模块程序下载到CPLD中(注:device选取要与硬件对应,否则会导致实验失败),连线做硬件实验。
五、性能测试与分析
按下复位键rst抢答信号清零、计数器清零,按下始能键s,观察数码管是否开始倒计时同时扬声器是否发出报警声,按下抢答键s0观察数码管是否显示相应位数,再按s1,s2.s3均不改变显示实现封锁,按下rst键,观察是否清零,再按s键,不按别的,直到计时时间到,观察是否显示00,扬声器是否发出报警。
六、实验设备
计算机,EL教学实验箱
七、心得体会
通过这次EDA课程设计,在了解到抢答器的基本工作原理的同时,我还基本掌握了试验软件的使用方法,并且意识到作为二十一世纪的跨世纪电子通讯专业人才,这些软硬件的应用操作常识是必不可少的。在此次实训的过程中,我们虽然碰到了很多困难和问题,到最后还是靠大家的共同努力与坚持的完成了任务。当遇到了自己无法解决的困难与问题的时候,还请教老师给予指导和帮助。这次实训给我最深的印象就是扩大自己的知识面,了解更多与本专业有关的科技信息,与时代共同进步,才能在将来成为有用的科技人才。
八、参考文献
[1] 、李国洪,沈明山:《可编程逻辑器件EDA技术与实践》,[M].机械工业出版社,2004.7
[2]、江国强:《EDA技术习题与实验》 电子工业出版社 ,2002.5
[3]、曹昕燕,周风臣,聂春燕:《EDA技术试验与课程设计》,清华大学出版社,2006.5
[4]、黄仁欣:《EDA技术实用教程》,清华大学出版社,2006.9
[5]、王振红:《数字电路设计与应用实践教程》,机械工业出版社2003.6
| 指导教师评语及设计成绩 | 评 语 |
课程设计成绩:
指导教师: 日期: 年 月 日 |