视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
EDA课程设计基于VHDL的四路抢答器
2025-09-24 00:12:35 责编:小OO
文档
   

EDA小学期报告

设计课题: 四路抢答器  

学    院:  信息学院   

专业班级: 

姓    名:   

学    号: 

指导教师:  

职    称:   讲     师 

日    期:2011年12月17日

一 、摘要

EDA技术概述、可编程逻辑器件基础、典型FPGA/CPLD的结构与配置、原理图与宏功能模块设计、VHDL设计输入方式、VHDL结构与要素、VHDL基本语句与基本设计、VHDL设计进阶、数字接口实例及分析、通信算法实例及分析等,附录内容为EDA实验系统简介,并提供电子课件和习题解答。《EDA技术与WHDL设计》内容新颖,技术先进,由浅入深,既有关于EDA技术、大规模可编程逻辑器件和VHDL硬件描述语言的系统介绍,又有丰富的设计应用实例。本次试验是设计一个借助于EDA技术的只能四路抢答器。实现抢答的功能。

二‘关键词: EDA 、 四路抢答器 、  模拟和仿真

三设计要求:

在许多比赛活动中,为了准确、公正、直观地判断出第一抢答者,通常设置一台抢答器,通过数显、灯光及音响等各种手段批示出第一抢答者。同时,还可以设置计分、犯规及奖惩记录等各种功能。本设计的具体功能是:

1.可容纳四组参赛者进行抢答,每组设置一个抢答按钮供抢答者使用。

2.电路具有第一抢答信号的鉴别和锁存功能。在主持人交系统复位并发出抢答指令后,若有一组先按下抢答开关,则该组指示灯亮并用组别显示电路显示抢答者的组别,同时扬声器发出“嘀嘟”的双音音响,且持续2~3秒。此时,电路具备自锁功能,使他组的抢答开关不起作用。

3.具有计分功能,使每组在开始时的分数预置成100分,抢答后由主持人计分,答对一次加10分。

四、所用软件介绍

 Quartos II 是Altera公司的综合性PLD开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。 

  Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。 

  Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。 

  此外,Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。 

  Maxplus II 作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。目前Altera已经停止了对Maxplus II 的更新支持,Quartus II 与之相比不仅仅是支持器件类型的丰富和图形界面的改变。Altera在Quartus II 中包含了许多诸如SignalTap II、Chip Editor和RTL Viewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了Maxplus II 友好的图形界面及简便的使用方法。 

Altera Quartus II 作为一种可编程逻辑的设计环境, 由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。

图1、Quartus II  运行界面

五、系统方案论证与模块划分:

根据系统设计要求可知:

1.系统的输入信号有:各组的抢答按钮A、B、C、D,系统清零信号CLR,系统时钟信号CLK,计分复位端RST,加分按钮端ADD,计时预置控制端LDN,计时使能端EN,计时预置数据调整按钮TA、TB;

2.系统的输出信号有:四个组抢答成功与否的指示灯控制信号输出口LED_A、LES_B、LED_C、LED_D,四个组抢答时的计时数码显示控制信号若干,抢答成功组别显示的控制信号若干,各组计分动态显示的控制信号若干。

3.本系统应具有的功能有:第一抢答信号的鉴别和锁存功能;抢答计时功能;各组得分的累加和动态显示功能。

根据以上的分析,我们可将整个系统分为三个主要模块:抢鉴别模块QDJB;抢答计时模块JSQ;抢答计分模块JFQ;对于需显示的信息,需增加或外接译码器,进行显示译码。考虑到FPGA、CPLD的可用接口及一般EDA实验开发系统的输出显示资源的,这里我们将组别显示和计时显示的译码器内设,而将各组的计分显示的译码器外接。整个系统的组成框图如图2-1所示:

系统的工作原理如下:当主持人按下使能端EN1时,抢答器开始工作,A、B、C、D四个抢答者谁最先抢答成功则此选手的台号灯(LED_A—LED_D)将点亮,并且组别显示数码管将显示出抢答成功者的台号,并由蜂鸣器发出抢答成功的警报;接下来主持人提问,若回答正确,主持人按加分按钮ADD,抢答计分模块JFQ将给对应的组加分,并将该组的总分显示在对应的选手计分数码管JF2_A-JF0_A、JF2_B-JF0_B、JF2_C-JF0_C、JF2_D-JF0_D、上。在此过程中,主持人可以采用计时手段(JSQ模块),打开计时器使计时预置控制端LDN有效,输入抢答或回答时间,使计时使能端EN有效(EN与EN1接在同一端,可共同控制),开始计时。完成第一轮抢答后,主持人清零,重新开始,步骤同上。

六、各个模块的功能实现

1按键存储电路模块

library ieee;

use ieee.std_logic_11.all;

  entity store is

   port(en,clr:in std_logic;

        cp:in std_logic_vector(3 downto 0);

        q:out std_logic_vector(3 downto 0));

 end;

architecture store_arc of store is

begin

     process(cp,clr,en)

begin

     if en='1'then

     if clr='0'then

q<="0000";

elsif cp="0001"then q<="0001";

elsif cp="0010"then q<="0010";

elsif cp="0100"then q<="0100";

elsif cp="1000"then q<="1000";

    end if;

   end if;

  end process;

end store_arc;

图2、按键存储电路仿真图

2锁存器模块

library ieee;

use ieee.std_logic_11.all;

entity lock is

   port(d:in std_logic_vector(3 downto 0);

          clk,clr:in std_logic;

          q:out std_logic_vector(3 downto 0);

          alm:out std_logic);

end lock;

    architecture lockb_arc of lock is

signal al:std_logic;

signal ql:std_logic_vector(3 downto 0);

begin

   process(clk,clr)

begin

  if clr='0'then

ql<="0000";al<='0';

  elsif clk'event and clk='1'then

ql<=d;

al<=d(0) or d(1) or d(2) or d(3);

  end if;

 end process;

alm<=al;q<=ql;

end lockb_arc;

图3、锁存器仿真波形

3、译码电路模块

library ieee;

use ieee.std_logic_11.all;

entity decode is

port(clr,clk:in std_logic;

      ssin: in std_logic_vector(3 downto 0);

      ssout: out std_logic_vector(6 downto 0));

end decode;

  architecture decode_arc of decode is

begin

     process(ssin)

     begin

     if clr='0'then

ssout<="0000000";

     elsif clk'event and clk='1'then

     case ssin is

when"0001"=>ssout<="0000110";

when"0010"=>ssout<="1011011";

when"0011"=>ssout<="1001111";

when"0100"=>ssout<="1100110";

when others=>ssout<="0000000";

    end case;

    end if;

    end process;

end decode_arc;

图4、译码电路的仿真

4编码模块

library ieee;

use ieee.std_logic_11.all;

entity encode is

port(d: in std_logic_vector(3 downto 0);

       q:out std_logic_vector(3 downto 0));

end encode;

architecture encode_arc of encode is

begin

     process(d)

     begin

if d="0001" then q<="0001";

elsif d="0010" then q<="0010";

elsif d="0011" then q<="0100";

elsif d="0100" then q<="1000";

else q<="0000";

     end if;

  end process;

end encode_arc;

图5、编码的仿真

5、倒计时模块

library ieee;

use ieee.std_logic_11.all;

use ieee.std_logic_unsigned.all;

entity count is

      port(clk,en,clr:in std_logic;

                  sound:out std_logic);

end count;

architecture count_arc of count is

begin

     process(clk,en,clr)

variable ll:std_logic_vector(3 downto 0);

variable hh:std_logic_vector(2 downto 0):="111";

   begin

     if clr='0' then

sound<='0';

     elsif clk'event and clk='1' then

        if en='1'then

           if ll=0 and hh=0 then

sound<='1';

        elsif ll=0 then

          ll:="1001";hh:=hh-1;

        else

         ll:=ll-1;

        end if;

    else

sound<='0';

       hh:="110";ll:="1001";

      end if;

     end if;

   end process;

end count_arc;

图6‘倒计时模块仿真

六、顶层文件的连线

  图7、器件的组合

七、整体的仿真

图8、顶层仿真

图9、管脚的分配

图10、程序下载到芯片                            七、对自行设计的产品总结与评价

通过EDA的仿真,证明了本产品在实际运用中的正确性,完全可以实现预期任务的要求,在有一组信号抢答成功后蜂鸣器发出警报,在两组或两组以上信号同时抢答时视抢答无效,蜂鸣器不予响应。且计分器在实现计分功能时能够准确计数并将分数呈三位数显示,计时器在按下计时开始按钮后可以从60秒倒计时并通过译码器实时显示计时结果。

但是该产品仍有需要改进的地方:

1.在抢答鉴别模块中,抢答成功后各组台号灯具有记忆功能,这一点会造成即使下一轮抢答没有抢答

成功者(即有两人或两人以上同时按下抢答器),之前被点亮的led灯会仍然保持点亮状态。虽然此时可以根据有没有警报声来提示抢答是否有效,但是仍然不够完善;

2.在计时器模块内应增加计时结束报警功能,但是由于小组成员对vhdl语言运用不够熟练,在设计该项程序时遇到很多问题,进程之间不能很好的协调,故最终没有实现这一功能;

3. 在波形仿真时,当信号之间配合不当时有可能造成预期的结果不能在波形上得到正确显示,故应协调各个开关的功能及其有效时间然后进行仿真,方能得出正确的仿真波形。

4.另外,本产品还有需要改进的地方,如管脚过多,实际连接时不够简洁,容易造成连接错误。故应将各个模块综合起来设计总电路,但是由于成员对顶层程序设计这一部分不甚了解,故没有完成这一环节。

八、实习心得与体会

经过两星期的EDA设计,我们组的三位成员通过不懈努力,成功地设计出了数字式四路竞赛抢答器。回首这两周,虽然因为初次涉及EDA技术及MAX_PLUSⅡ软件,对相关知识知之甚少,我们也遇到了很多困难,但是我们在这次实习的过程中都受益匪浅。 

在这次课程设计的前期,我们先系统地学习了EDA工程概论,VHDL描述语言和设计应用方面的基础知识,使得后期能够较熟练地使用MAX_PLUSⅡ软件进行设计开发,用原理图输入及VHDL语言等设计输入并编译仿真,同时我们对以往学过的理论知识有了更加透彻的理解。

我们选择的课题为数字式四路竞赛抢答器,根据电路的特点,我们采用层次化结构化设计,将此项设计任务分成若干模块,规定每一模块的功能和各模块之间的接口,然后再将各模块合起来调试。我们选择分工合作,每个人负责一个模块的设计及调试,最后再联结起来调试。这不仅加深了我们对层次化设计的概念的认识,同时培养了我们团队合作的精神。在设计的过程中,遇到问题我们先思考,查找资料。到自己不能解决的时候就和其他组研究讨论,向指导老师请教。这样既提高了我们发现问题、分析问题、解决问题的能力,又很好地培养了交流合作的精神。

在设计过程中,由于我们对于VHDL语言的了解不多,在变量的定义,以及过程(process)的定义与应用等方面遇到了很大的阻力,也让我们吃了不少的苦头,但是在大家齐心协力,以及在老师的耐心指导下,我们最终还是克服了重重难关。虽然在程序的编写方面还不是很完善,我们还是设计出了我们需要的模块。在这次设计中,应该说从功能的实现到流程图的绘制,从程序的编写到程序的检查,从程序的调试到实验报告的写作,其间每一个过程都凝聚着大家的辛苦和汗水。

此次实习前我们对于数字电子技术这门课程的学习仅是纸上谈兵,在头脑中抽象地记忆、理解那些课本上的理论知识,有些理论知识晦涩难懂,甚至要靠自己死记硬背。而这次的实习就提供机会让我们在实践中灵活运用知识。我们通过在实践中发现问题,进而去书本中找相关的知识去解决问题,从而巩固了理论知识,同时也增强了我们以后的学习兴趣,为以后的工作积累了一定的经验。

经过这次实习,我们有了很深刻的体会。首先,要学好书本上的基本知识,掌握常用编程语句,这样在设计中才会游刃有余,得心应手。其次,在遇到困难时要勇于面对,其实只要有耐心,再加上试验中的细心操作,一切困难都将迎刃而解。 

九、参考文献

[1] 沈明山. EDA技术及可编程器件应用实训. 科学出版社。

[2] 曾繁泰,陈美金. VHDL程序设计. 北京:清华大学出版社。

[3] 谭会生,张昌凡. EDA技术及应用. 西安:西安电子科技大学出版社。下载本文

显示全文
专题