毕业论文-路多抢答器设计eda课程设计.doc
目 录目 录1一、方案设计与论证4二、单元电路设计5(一)抢答鉴别模块5(二)计时模块7(三)数据选择模块9(四)报警模块11(五)译码模块13(六)分频模块14(七)顶层文件16(八)主电路连线图19(九)将程序下载到芯片FLEXEPF10LC84-4上,引脚图如下19三、器件编程与下载20四、性能测试与分析20五、实验设备20六、心得体会21七、参考文献21程序设计流程图层次化设计图形输入文本输入建立项目文件设计器件增益逻辑正确仿真分析引脚分配重新调整设计正确生成下载文件下载并验证NONOYESYES设计输入设计生成设计实现硬件下载一、方案设计与论证将该任务分成七个模块进行设计,分别为:抢答器鉴别模块、抢答器计时模块、抢答器记分模块、分频模块、译码模块、数选模块、报警模块,最后是撰写顶层文件。1、 抢答器鉴别模块:在这个模块中主要实现抢答过程中的抢答功能,并能对超前抢答进行警告,还能记录无论是正常抢答还是朝前抢答者的台号,并且能实现当有一路抢答按键按下时,该路抢答信号将其余个绿抢答封锁的功能。其中有四个抢答信号s0、s1、s2、s3;抢答使能信号s;抢答状态显示信号states;抢答与警报时钟信号clk2;系统复位信号rst;警报信号tmp。2、 抢答器计时模块:在这个模块中主要实现抢答过程中的计时功能,在有抢答开始后进行30秒的倒计时,并且在30秒倒计时后无人抢答显示超时并报警。其中有抢答时钟信号clk2;系统复位信号rst;抢答使能信号s;抢答状态显示信号states;无人抢答警报信号warn;计时中止信号stop;计时十位和个位信号tb,ta。3、 数据选择模块:在这个模块中主要实现抢答过程中的数据输入功能,输入信号a3.0、b3.0、c3.0;计数输出信号s;数据输出信号y;计数脉冲clk2,实现a、b、c按脉冲轮流选通,在数码管上显示。4、 报警模块: 在这个模块中主要实现抢答过程中的报警功能,当主持人按下控制键,有限时间内 人抢答或是计数到时蜂鸣器开始报警,有效电平输入信号i;状态输出信号q;计数脉冲clk2。5、 译码模块:在这个模块中主要实现抢答过程中将BCD码转换成7段的功能。6、 分频模块:在这个模块中主要实现抢答过程中实现输出双脉冲的功能。7、 顶层文件:在这个模块中是对前七个模块的综合编写的顶层文件。抢答器的设计分析按照要求,我们可以将整个系统分为四个主要模块:抢答鉴别模块;抢答计时模块;抢答计分模块;译码显示模块。对于需显示的信息,需要增加或外接译码器,进行显示译码。考虑到实验开发平台提供的输出显示资源的限制,我们将组别显示和计时显示的译码器内设,而将各组的计分显示的译码器外接。整个系统的大致组成框图如图2.1所示。 图 2.12 电子抢答器的结构原理21 电子抢答器的整体结构电子抢答器的整体结构如图1所示。它包括鉴别与锁存模块、定时与犯规设置模块以及计分模块。 二、单元电路设计(一)抢答鉴别模块 1、VHDL源程序library ieee;-抢答鉴别模块use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity qdjb is port(rst,clk2:in std_logic; s0,s1,s2,s3:in std_logic; states:buffer std_logic_vector(3 downto 0);tmp:out std_logic);end qdjb;architecture one of qdjb issignal st:std_logic_vector(3 downto 0);beginp1:process(s0,rst,s1,s2,s3,clk2) begin if rst='0' then tmp<='0'st<="0000" elsif clk2'event and clk2='1' then if (s0='1' or st(0)='1')and not( st(1)='1' or st(2)='1' or st(3)='1' ) then st(0)<='1' end if ; if (s1='1' or st(1)='1')and not( st(0)='1' or st(2)='1' or st(3)='1' ) then st(1)<='1' end if ; if (s2='1' or st(2)='1')and not( st(0)='1' or st(1)='1' or st(3)='1' ) then st(2)<='1' end if ; if (s3='1' or st(3)='1')and not( st(0)='1' or st(1)='1' or st(2)='1' ) then st(3)<='1' end if ;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;2、仿真图:抢答鉴别模块图在这个模块中主要实现抢答过程中的抢答功能,并能对超前抢答进行警告,还能记录无论是正常抢答还是朝前抢答者的台号,并且能实现当有一路抢答按键按下时,该路抢答信号将其余个绿抢答封锁的功能。其中有四个抢答信号s0、s1、s2、s3;抢答使能信号s;抢答状态显示信号states;抢答与警报时钟信号clk2;系统复位信号rst;警报信号tmp。(二)计时模块 1、VHDL源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity js is port(clk,rst,s,stop:in std_logic; warn:out std_logic; ta,tb:buffer std_logic_vector(3 downto 0);end js;architecture one of js issignal co:std_logic;beginp1:process(clk,rst,s,stop,ta) begin if rst='0' or stop='1' then ta<="0000" elsif clk'event and clk='1' then co<='0' if s='1' then if ta="0000" then ta<="1001"co<='1' else ta<=ta-1; end if; end if; end if;end process p1;p2:process(co,rst,s,stop,tb) begin if rst='0' or stop='1' then tb<="0010" elsif co'event and co='1' then if s='1' then if tb="0000" then tb<="0011" else tb<=tb-1; end if; end if; end if;end process p2;end one;2、仿真图计时模块图在这个模块中主要实现抢答过程中的计时功能,在有抢答开始后进行30秒的倒计时,并且在30秒倒计时后无人抢答显示超时并报警。其中有抢答时钟信号clk2;系统复位信号rst;抢答使能信号s;抢答状态显示信号states;无人抢答警报信号warn;计时中止信号stop;计时十位和个位信号tb,ta。(三)数据选择模块1、VHDL源程序library ieee;use ieee.std_logic_1164.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;2、仿真图数据选择模块图在这个模块中主要实现抢答过程中的数据输入功能,输入信号a3.0、b3.0、c3.0;计数输出信号s;数据输出信号y;计数脉冲clk2,实现a、b、c按脉冲轮流选通,在数码管上显示。(四)报警模块1、VHDL源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ALARM ISPORT(CLK,I:IN STD_LOGIC; Q:OUT 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) BEGIN IF CLK'EVENT AND CLK='1' THEN IF I='0' THEN WARN <='0' ELSIF(I='1'AND N<=19)THEN WARN <=NOT WARN; N<=N+1; ELSE WARN <='0' END IF; END IF;END PROCESS;END BEHAVE;2、仿真图报警模块图在这个模块中主要实现抢答过程中的报警功能,当主持人按下控制键,有限时间内如果人抢答或是计数到时蜂鸣器开始报警,有效电平输入信号i;状态输出信号q;计数脉冲clk2。(五)译码模块1、VHDL源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.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 ISBEGIN 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;2、仿真图译码模块图在这个模块中主要实现抢答过程中将BCD码转换成7段的功能。(六)分频模块1、VHDL源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clkdiv ISPORT(clk2 : IN STD_LOGIC;clk16 : OUT STD_LOGIC);END clkdiv;ARCHITECTURE rtl OF clkdiv ISSIGNAL count : STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(clk2)BEGINIF (clk2'event AND clk2='1') THENIF(count="1111") THENCount <="0000"ELSECount <= count +1;END IF ;END IF ;END PROCESS;PROCESS(clk2)BEGINIF (clk2'event AND clk2='1') THENIF(count="1111") THENclk16 <= '1'ELSEclk16 <= '0'END IF ;END IF ;END PROCESS;END rtl;2、仿真图分频模块图在这个模块中主要实现抢答过程中实现输出双脉冲的功能。(七)顶层文件1、VHDL源程序library ieee;use ieee.std_logic_1164.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; n,k,q_out:out std_logic; m:out std_logic_vector(1 downto 0); a,b,c,d,e,f,g:out std_logic);end qiangdaqi;architecture bhv of qiangdaqi iscomponent qdjb is port(clk2,rst:in std_logic; s0,s1,s2,s3:in std_logic; tmp:out std_logic; states:out std_logic_vector(3 downto 0);end component;component js is port(clk,rst,s,stop:in std_logic; warn:out std_logic; ta,tb:buffer std_logic_vector(3 downto 0);end component;component sjxz is port(clk2,rst:in std_logic; s:out std_logic_vector(1 downto 0); a,b,c:in std_logic_vector(3 downto 0); y:out std_logic_vector(3 downto 0);end component;component ymq is port(ain4: in std_logic_vector (3 downto 0); dout7: out std_logic_vector (6 downto 0);end component;component alarm is port(clk,i:in std_logic; q:out std_logic);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;begina<=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:sjxz port map(clk2=>clk2,rst=>rst,s=>m,a=>states_out,b=>ta_out,c=>tb_out,y=>y_out);u4:ymq port map(ain4=>y_out,DOUT7=>ledout);u5:alarm port map(clk2,s,q_out);end bhv;2、仿真图顶层文件图在这个模块中是对前七个模块的综合编写的顶层文件。(八)主电路连线图(九)将程序下载到芯片FLEXEPF10LC84-4上,引脚图如下三、器件编程与下载将编译好的模块程序下载到CPLD中(注:device选取要与硬件对应,否则会导致实验失败),连线做硬件实验。四、性能测试与分析按下rst键清零,按下s键,观察数码管是否开始倒计时,扬声器是否发出报警声,按下s0,观察数码管是否显示1和抢答的时间,再按s1,s2.s3均不改变显示,按下rst键,观察是否清零,再按s键,不按别的,直到计时时间到,观察是否显示00,扬声器是否发出报警。 五、实验设备计算机,EL教学实验箱六、心得体会 通过这次对抢答器的设计和实践,学到了很多的东西,不仅巩固了以前所学的知识,而且学到了书本上没有的东西,在调试中每修改一个小的错误,自己心中的成就感就徒增,特别是把一个程序模块转化成原理图时,自己从课本看到是一段话“首先打开要转换的VHDL文件,选择File-Creat/Update-Creat symbel/Files for current File 命令,即可将当前文件变成一个元件符号SINGT,然后再于另一工程中调用此元件,但必须注意,此工程和已生成的都在同一文件夹中”课本P-130页,这一段话一开始让我不知其解,后到百度搜索,发现也是这几句话,后看到软件中的File中”Block-Diagram/Schematic File”,又去查英语字典,原来要先建立空白的原理图再到工程中添加已生成的模块图,觉的书本写的很简洁,但实际操作起来却是另外一种感觉,真是“纸上得到终觉浅,绝知此事要躬行”这句话的含义。 在这次设计,把理论与实践信结合起来,在老师的指导下和视频学习下,有些关键的问题才得以解决,锻炼了自己的能力,对以后走的路有了更清楚的认识,同时有了更多的信心。七、参考文献1、江国强:EDA技术习题与实验,电子工业出版社 2、曹昕燕,周风臣,聂春燕:EDA技术试验与课程设计,清华大学出版社3、黄仁欣:EDA技术实用教程,清华大学出版社指导教师评语及设计成绩 评 语 课程设计成绩: 指导教师: 日期: 年 月 日 22