最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

EDA课程设计—四人抢答器设计

来源:动视网 责编:小OO 时间:2025-09-24 16:50:41
文档

EDA课程设计—四人抢答器设计

摘要现代生活中,数字电路产品与我们接触的是越来越平凡了,包括计算机、电子表、智能仪器表及其它很多领域中,它给我们带来的不仅是工作上的方便,而且也给我们的生活娱乐添滋加彩。这次EDA课程设计中,我做的是四人抢答器,基于设计要求,本文主要是从锁存器及计数器功能和VHDL语言着手,但侧重点在用VHDL语言上。首先简单介绍一下数字电路、EDA、VHDL等的有关知识,其次介绍了一下设计要求和我的设计构想,再运用VHDL语言特点,写出程序代码,最后是一些总结和抢答器部分实验电路图与倒计时设计的电路图和用M
推荐度:
导读摘要现代生活中,数字电路产品与我们接触的是越来越平凡了,包括计算机、电子表、智能仪器表及其它很多领域中,它给我们带来的不仅是工作上的方便,而且也给我们的生活娱乐添滋加彩。这次EDA课程设计中,我做的是四人抢答器,基于设计要求,本文主要是从锁存器及计数器功能和VHDL语言着手,但侧重点在用VHDL语言上。首先简单介绍一下数字电路、EDA、VHDL等的有关知识,其次介绍了一下设计要求和我的设计构想,再运用VHDL语言特点,写出程序代码,最后是一些总结和抢答器部分实验电路图与倒计时设计的电路图和用M
摘要

   现代生活中,数字电路产品与我们接触的是越来越平凡了,包括计算机、电子表、智能仪器表及其它很多领域中,它给我们带来的不仅是工作上的方便,而且也给我们的生活娱乐添滋加彩。这次EDA课程设计中,我做的是四人抢答器,基于设计要求,本文主要是从锁存器及计数器功能和VHDL语言着手,但侧重点在用VHDL语言上。首先简单介绍一下数字电路、EDA、VHDL等的有关知识,其次介绍了一下设计要求和我的设计构想,再运用VHDL语言特点,写出程序代码,最后是一些总结和抢答器部分实验电路图与倒计时设计的电路图和用MAX+PLUSII软件仿真的结果部分图附录等部分。

   关键词:置位;复位;锁存;计数器;七段显示器;MAX+PLUSII;译码器

    摘要:………………………………………………………1

引言:…………………………………………………………2    

一、设计任务及要求:………………………………………2

二、题目分析与整体构思:…………………………………2

三、VHDL程序设计:……………………………………··3

四、心得体会及模型评价与推广:…………………………5

  附录:………………………………………………………6

   参考文献:…………………………………………………10

引    言

数字电路主要是基于两个信号(我们可以简单的说是有电压和无电压),用数字信号完成对数字量进行算术运算和逻辑运算的电路我们称之为数字电路,它具有逻辑运算和逻辑处理等功能,数字电路可分为组合逻辑电路和时序逻辑电路。

EDA技术又称电子设计自动化,它是为解决自动控制系统设计而提出的,从70年代经历了计算机辅助设计(CAD),计算机辅助工程(CAE),电子系统设计自动化(ESDA)3个阶段。前两个阶段的EDA产品都只是个别或部分的解决了电子产品设计中的工程问题;第三代EDA工具根据工程设计中的瓶颈和矛盾对设计数据库实现了统一管理,并提出了并行设计环境概念,提供了于工艺和厂家的系统级的设计工具。

VHDL(VERY HIGH SPEED INTEGRATED CIRCUIT HARDWARE DESCRIPTION LANGUAGE)语言最早是有美国国防部提出的,它支持行为领域和结构领域的硬件描述,并且可以从最抽象的系统级一直到最精确的逻辑级,在描述数字系统时,可以使用前后一致的语义和语法跨越多个层次,并且使用跨越多个级别的混合描述模拟该系统。因此,它可以由高层次行为描述子系统及低层次详细实现子系统所组成的系统模拟。它有两个版本IEEEStd1076-1987[LRM87]和IEEEStd1076-1993[LRM93],他们并不完全兼容,但做一些修改就可以兼容了。 

许多公司都为VHDL开发出了编译和仿真软件,其中Max+plusII(或写成Maxplus2,或MP2) 是Altera公司推出的的第三代PLD开发系统(AlteraPLD开发系统被称为:QuartusII,主要用于设计新器件和大规模CPLD/FPGA).使用MAX+PLUSII的设计者不需精通器件内部的复杂结构。设计者可以用自己熟悉的设计工具(如原理图输入或硬件描述语言)建立设计,MAX+PLUSII把这些设计转自动换成最终所需的格式。其设计速度非常快。对于一般几千门的电路设计,使用MAX+PLUSII,从设计输入到器件编程完毕,用户拿到设计好的逻辑电路,大约只需几小时。设计处理一般在数分钟内内完成。特别是在原理图输入等方面。 

一、设计任务及要求:

   本设计要求做一个四人抢答器,并要求当有某一参赛者首先按下抢答开关时,相应

显示灯亮并报警,此时抢答器不再接受其他输入信号。电路具有回答问题时间控制功能。要求回答问题时间小于等于100s(显示0-99),时间采用倒计时方式。当到达限定时间,发出警告。

二、题目分析与整体构思:

对于一个四人抢答器,四个选手在电路中的起始控制作用是一样的,当裁判员宣布开始抢答时,谁先按下他前面的控制开关,他的灯就会亮,而且这时其他人再怎么按,也就不会亮了,说明每个人对其他人都有一个先发制人的作用,及每个人都在时间控制下,能锁存住其他选手的功能。当有一个指示灯亮了,计数器就开始从99开始倒计时,到0时还要警告声,这样计数器开始工作就是在指示灯的指示下工作。

可以设四个人分别为输入端A,B,C,D;因为四个输入端在VHDL中,要求四个输入端应该是相等优先级别,但只要有一个输入端接入高电平时,就给其他信号一个反馈,使得他们的输入无效,及他们对应的指示灯不亮;所以我们可以也并行语句,让它们分为四个进程(process),同时也要求每个进程中都有反馈信号传给其他进程语句中,这样就可以完成抢答器基础部分了,设计的逻辑电路图部分见附录图一。其次就是计数器部分,当有人开始进入回答部分,指示灯亮,同时计数器开始工作,并要求是倒计时方式并七段显示出,通过这些消息我们可知,指示灯即是计数器开始倒计时的信号,本设计中采用了元件例化(component)语句,在抢答器中给个选手已经开始回答了的信号插口,给计数器中的置零输入端,这样就基本上完成了设计,计数器采用倒计时方式,实现方式也很简单,只要给他们最初赋值为99,而后在每个上升沿来到减一,具体设计情况还是看看程序设计部分吧,在附录部分还有这个99倒时计数器的逻辑电路图。

三、VHDL程序设计:

  根据上面的分析可知,我们只要用四个进程语句,就可以处理好四位选手的相互的问题,再将四个指示灯用相与来控制计数器的置零端set,再用一个元件话语句component连接计数器,下面是具体的抢答器的VHDL语言代码:

    代码中A、B、C、D分别代表四位参赛选手,RESET是主裁判员的控制开关,CLK是计数器的时钟信号,MUSIC是警告的控制开关,COUNT1和CONT2代表的是99倒计时的七段显示二进制码直接与LED显示器连接,ALIGHT,BLIGHT,CLIGHT,DLIGHT分别代表四位选手的显示灯。

library ieee;

use ieee.std_logic_11.all;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; 

entity Qiang_DA is

port(A,B,C,D,RESET:in std_logic;

        CLK:in std_logic;

        MUSIC:out std_logic;

        COUT1:out std_logic_vector(6 downto 0);

        COUT2:out std_logic_vector(6 downto 0);

       ALIGHT,BLIGHT,CLIGHT,DLIGHT:out std_logic);

end;

architecture one of Qiang_DA is

component COUNTER99 

     port(SET,CLK:in std_logic;

           MUSIC:out std_logic;

           COUT1:out std_logic_vector(6 downto 0);

           COUT2:out std_logic_vector(6 downto 0));

end component;

signal A1,B1,C1,D1:std_logic;

signal A2,B2,C2,D2:std_logic;

signal SET:std_logic; 

begin

A2<=not A1 ;

B2<=not B1 ;

C2<=not C1 ;

D2<=not D1 ;

  L1:process(A)

       begin

A1<=(A and B2 and C2 and D2) ;

     end process L1;

 L2:process(B)

      begin

B1<=(B and A2 and C2 and D2);

    end process L2;

 L3:process(C)

      begin

C1<=(C and A2 and B2 and D2);

    end process L3;

 L4:process(D)

      begin

D1<=(D and A2 and C2 and B2);

    end process L4;

 L5:process(A1,B1,C1,D1,RESET)

    begin

    if RESET='0' then

ALIGHT<='0';BLIGHT<='0';CLIGHT<='0';DLIGHT<='0';SET<='0';

else ALIGHT<=A1;BLIGHT<=B1;CLIGHT<=C1;DLIGHT<=D1;SET<=(A1 or B1 or C1 or D1);

    end if;

   end process L5;

U0:COUNTER99 port map(SET,CLK,MUSIC,COUT1,COUT2); 

end;

   下面是99倒数计数器的VHDAL语言代码:

library ieee;

use ieee.std_logic_11.all;

use ieee.std_logic_unsigned.all;

entity COUNTER99 is

port( SET,CLK:in std_logic;

      MUSIC:out std_logic;

      COUT1:out std_logic_vector(6 downto 0);

      COUT2:out std_logic_vector(6 downto 0));

end;

architecture behave of COUNTER99 is

signal MUSIC1:std_logic;

signal HIGH:std_logic_vector(3 downto 0):="1001";

signal LOW:std_logic_vector(3 downto 0):="1001";

begin

C1:process(SET,CLK,MUSIC1)

begin

   if SET='0'  then

MUSIC1<='0';HIGH<="1001";LOW<="1001";

   else

       if RISING_EDGE(CLK) then 

             if LOW="0000" then

LOW<="1001";

                if HIGH="0000" then

HIGH<="1001";

else HIGH<=HIGH-1;

                end if;

else LOW<=LOW-1;

             end if   ;  

           end if;

   if (HIGH="0000" and LOW="0001")   then

MUSIC1<='1';

   end if;

end if;   

end process C1;

C5:process(HIGH,LOW)

function decode(four:std_logic_vector(3 downto 0)) return std_logic_vector is

variable outdata:std_logic_vector(6 downto 0);

begin

   case four is

WHEN "0000"=>outdata:="1111110";

WHEN "0001"=>outdata:="0110000";

WHEN "0010"=>outdata:="1101101";

WHEN "0011"=>outdata:="1111001";

WHEN "0100"=>outdata:="0110011";

WHEN "0101"=>outdata:="1011011";

WHEN "0110"=>outdata:="1011111"; 

WHEN "0111"=>outdata:="1110000";

WHEN "1000"=>outdata:="1111111";

WHEN "1001"=>outdata:="1111011";

WHEN others=>outdata:="0000000";

   end case;

  return(outdata);

end  decode;

begin   

COUT1<=decode(LOW);

COUT2<=decode(HIGH);

MUSIC<=MUSIC1;

end process C5;

end;

在附录部分有上述代码在MAX+PLUXII软件中的部分仿真结果,具体电路模拟结果参照附录。

四、心得体会及模型评价与推广:

   经过一周的EDA的课程设计,我对VHDL有了更深刻的认识,在最开始的时候也遇到

不少问题,的确书看得比较少啊!后来通过查阅资料和书本,总算写出了一点东西,但模型的仿真过程中,也发现了一些问题,在时钟周期设置200ns内时就出现了组合逻辑电路中的竞争冒险现象,有待改进,单此种模型可以推广到比四人更多的抢答器中,只要添加进程语句就可以了。

附录:

      以下四幅图是99倒数计数器的简单设计逻辑电路示意图及仿真结果

上图中4DEC是四位的减法器代号

下图是上一幅图的仿真结果

参考文献:

《EDA技术实用教程》第二版;编者:潘松,黄继业;科学出版社

《数字电路逻辑设计》;编者:朱正伟,何宝祥;清华大学出版社

文档

EDA课程设计—四人抢答器设计

摘要现代生活中,数字电路产品与我们接触的是越来越平凡了,包括计算机、电子表、智能仪器表及其它很多领域中,它给我们带来的不仅是工作上的方便,而且也给我们的生活娱乐添滋加彩。这次EDA课程设计中,我做的是四人抢答器,基于设计要求,本文主要是从锁存器及计数器功能和VHDL语言着手,但侧重点在用VHDL语言上。首先简单介绍一下数字电路、EDA、VHDL等的有关知识,其次介绍了一下设计要求和我的设计构想,再运用VHDL语言特点,写出程序代码,最后是一些总结和抢答器部分实验电路图与倒计时设计的电路图和用M
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top