VHDL8路抢答器课程设计

更新时间:2024-04-20 17:20:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于VHDL语言的8路抢答器设计

摘 要 本课程设计分为主体电路和扩展电路两部分共同实现抢答器的锁存、显示与报警功能。在本次设计中,系统开发平台为MAX plusⅡ,硬件描述语言是VHDL。竞赛者可以分为8组,抢答时各组对主持人提出的问题要在最短的时间内做出判断,并按下抢答按键回答问题。当第一个人按下按键后,则在显示器上显示该组的号码,对应的灯亮,同时电路将其他各组按键封锁,使其不起作用。若抢答时间内无人抢答,则报警灯亮。回答完问题后,由主持人将所有按键恢复,重新开始下一轮抢答。并且依据设计方案和设计平台完成了程序编写和程序调试,通过运行程序及时序波形的仿真有效验证了设计的正确性,初步实现了设计目标。

关键词 锁存、显示;抢答器;MAX plus Ⅱ;VHDL。

Abstract:This course design is divided into two main circuit and expansion circuit realized partly joint inverter latch responder, display and alarm function. In this design, system developing platform for MAX plus Ⅱ, hardware description language is VHDL. Competitors may be divided into eight groups, vies to answer first when each to the host puts forward the problems in the shortest possible time to make judgments, and press the buttons vies to answer the question. When the first man press buttons, then on screen display supervisor number, the corresponding lights, and other groups circuit will buttons blockade, make it doesn't work. If responder time no contest, the alarm light. Answers questions, by a host will restore all keys and start again next contest. And according to the design scheme and design platform completed programming and program test, through to run the program in time sequence waveform simulation verified effectively the correctness of design, and then realized the design goal.

Keywords: latch, display, Scare-answering manometers; MAX plus Ⅱ; VHDL.

目录

1 引 言 ............................................................... 1

1.1 课程设计目的 ...................................................... 1 1.2 课程设计具体要求及功能 ............................................ 1

2 EDA和MAX plusⅡ简介 ............................................ 2

2.1 EDA简介 .......................................................... 2 2.2 MAX plusⅡ ........................................................ 2

3 设计方案 ............................................................. 4

3.1 抢答器控制系统的设计思路 .......................................... 4 3.2 抢答器的系统结构及工作原理 ........................................ 4 3.3 具体实现 .......................................................... 6

4 系统仿真 ............................................ 错误!未定义书签。

4.1 顶层模块及管脚介绍 ............................... 错误!未定义书签。 4.2 仿真结果分析 ..................................................... 20

小结 ................................................... 错误!未定义书签。 参考文献 .............................................. 错误!未定义书签。 附录 ................................................... 错误!未定义书签。

** 基于VHDL语言的8路抢答器设计 第 1页 共29页

1 引 言

随着科学技术的不断发展,促使人们学科学、学技术、学知识的手段多种多样。抢答器作为一种工具,已广泛应用于各种竞赛场合。本课程设计以8路抢答器为理念,实现优先抢答、判决、锁存及数码管显示等功能。

在本次计中,系统开发平台为MAX plusⅡ[2] 。MAX plusⅡ是Altera公司提供的FPGA/CPLD开发集成环境,Altera是世界上最大可编程逻辑器件的供应商之一。Max plusⅡ界面友好,使用便捷,被誉为业界最易用易学的EDA软件。在Max plusⅡ上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供了一种与结构无关的设计环境,是设计者能方便地进行设计输入、快速处理和器件编程。

在本次设计中,采用的硬件描述语言是VHDL[1](Very-High-Speed Integrated Circuit Hardware Description Language)。VHDL语言是一种用于电路设计的高级语言。 VHDL主要用于描述数字系统的结构、行为、功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。

1.1 课程设计目的

学习ALTERA公司的FPGA/CPLD的结构、特点和性能。学习集成开发软件MAX plus II/Quartus II的使用及设计过程。熟悉EDA工具设计数字电路设计方法,掌握VHDL硬件描述语言设计方法。根据给定题目设计数字电路,来加深对可编程逻辑器件的理解和掌握。

1.2 课程设计具体要求及功能

在所选择器件内完成八路抢答器的设计,要求设计完成后芯片具有抢答器的全部功能、包括显示和操作接口。抢答器要求有八路抢答输入,抢答逻辑设计合理(具有抢答锁定),抢答编号显示,抢答成功指示,抢答完成后状态复位。在相应的器件平台上完成设计的输入、编译、综合或适配通过。

8路抢答器控制系统是娱乐活动中经常使用的重要基础设备之一,根据抢答要求,系统所需实现的功能如下:

(1) 主持人按键清零,数码显示0,蜂鸣器不叫,进入抢答状态。

(2) 主持人发出开始命令,8人开始抢答。其中一人先按下抢答键,蜂鸣器发出鸣叫,数码显示该人号码,其他人再按键,系统不再响应,直至主持人按键清零,下一次抢答开始。

** 基于VHDL语言的8路抢答器设计 第 2页 共29页

2 EDA及MAX plus Ⅱ简介

2.1 EDA简介

EDA(Electronics Design Automation)技术是随着集成电路和计算机技术的飞速发展应运而生的一种高级、快速、有效的电子设计自动化工具。它是为解决自动控制系统设计而提出的。EDA在通信行业(电信)里的另一个解释是企业数据架构,EDA给出了一个企业级的数据架构的总体视图,并按照电信企业的特征,进行了框架和层级的划分。

EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。

利用EDA工具,电子设计师可以从概念、算法、协议等开始设计进行八路抢答器的系统,大量工作可以通过计算机完成,并可以将抢答器从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。

2.2 MAX plus Ⅱ简介

Max plusⅡ是Altera公司提供的FPGA/CPLD开发集成环境,Altera是世界上最大可编程逻辑器件的供应商之一。Max plusⅡ界面友好,使用便捷,被誉为业界最易用易学的EDA软件。在Max plusⅡ上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供了一种与结构无关的设计环境,是设计者能方便地进行设计输入、快速处理和器件编程。Max plusⅡ的编译器还提供了强大的逻辑综合与优化功能,使用户比较容易地将设计集成到器件中。

●设计输入

MAX plus II软件的设计输入方式有多种,主要包括原理图输入方式、文本输入方式、波形设计输入方式、层次设计输入方式和底层设计输入方式。因此,设计人员可以根据自己的实际情况灵活选择使用。

●设计编译

MAX plus II编译一个设计时,Compiler在设计文件中读取信息并产生编程文件和仿真文件,Message Processor(信息处理程序)可自动定位错误。

●设计校验

设计校验过程包括设计仿真和定时分析,仿真起的作用是测试逻辑操作和设计功能的完备性;Timing Analyzer(定时分析程序)可分析设计的定时和延时情况。

** 基于VHDL语言的8路抢答器设计 第 3页 共29页

●器件编程

MAX plus II Programmer是使用Compiler生成的编程文件对Altera器件进行编程的。它可以用来对器件编程、校验和试验,是对设计功能进行的测试。Altera公司器件的编程方法有许多种,可根据具体情况选择使用。编译生成的配置文件经计算机并行通信口接到Altera专用编程电缆上,再接到器件的编程接口[6],利用应用软件提供的编程软件,Programmer即可对器件进行配置。这种方法的优点是配置方便、迅速,便于修改。

MAX plus2在Windows 2000/XP上一旦安装完毕,经过设置即可使用硬件下载功能。在Windows 2000上除了安装软件外,为了使用ByteBlaster(MV)下载功能,还必须安装硬件驱动(Drivers)以支持MAX plus2对PC机并行口的操作。

** 基于VHDL语言的8路抢答器设计 第 4页 共29页

3设计方案

3.1 八路抢答器控制系统的设计思路

抢答器同时供8名选手或8个代表队比赛,分别用8个按钮[a1]~[a8]。设置一个系统清除和抢答控制开关Reset, 该开关由主持人控制。抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,扬声器发出声响提示,数码显示选手号码。其他人再按键,系统进行了优先锁存,不再响应,优先抢答选手的编号一直保持到主持人将系统清除为止,下一次抢答开始。

扩展功能:该电路具有犯规报警功能。当主持人未按下开关开始抢答前,参赛选手若按下开关,则抢答系统发出蜂鸣声报警并显示犯规组别。

3.2 抢答器的系统结构及工作原理

(1)系统结构:如图3.1所示为抢答器的结构框图,它由主体电路和扩展电路两部分组成。主体电路完成基本的抢答功能,即开始抢答后,当选手按动抢答键时,能显示选手的编号,同时能封锁输入电路,禁止其他选手抢答。扩展电路完成检测数码管工作情况。其工作原理为:接通电源后,主持人将开关拨到\清除\状态,抢答器处于禁止状态,编号显示器灭灯,定时器显示设定时间;主持人将开关置于\开始\状态,宣布\开始\抢答器工作。定时器倒计时,扬声器给出声响提示。选手在定时时间内抢答时,抢答器完成:优先判断、编号锁存、编号显示、扬声器提示。当一轮抢答之后,定时器停止、禁止二次抢答、定时器显示剩余时间。如果再次抢答必须由主持人再次操作\清除\和\开始\状态开关。

** 基于VHDL语言的8路抢答器设计 第 5页 共29页

抢答 按纽 优先编码电路 锁存器 译码 电路 译码 显示 主持人控制开关 控制电路 报警电路 秒脉冲产生电路 定时 电路 译码 电路 显示 电路

图3.1 抢答器结构框图

(2)工作流程:

** 基于VHDL语言的8路抢答器设计 第 6页 共29页

加载运 正常流犯规流开开始数码管显 示FFF开开始前有选显示犯规选手号码并伴有语倒计时结 有选手 显示显示选手号码,倒计 时时间,语音报若超过答题 时间,则答题根据选手表现,规 则由主持人

图3.2抢答器工作流程

抢答器的基本工作原理:在抢答竞赛或呼叫时,有多个信号同时或不同时送入主电路中,抢答器内部的寄存器工作,并识别、记录第一个号码,同时内部的定时器开始工作,记录有关时间并产生超时信号。在整个抢答器工作过程中,显示电路、语音电路等还要根据现场的实际情况向外电路输出相应信号。抢答器的工作流程分为、系统复位、正常流程、犯规流程等几部分。

3.3 具体实现

(1)抢答器的电路设计

1、抢答器电路总体结构:如图3.3所示为总体方框图。接通电源后,后台工作人员将检测开关S置“检测”状态,数码管在正常清除下,显示“

”;当后台工作人员将

** 基于VHDL语言的8路抢答器设计 第 7页 共29页

检测开关S置“抢答”状态,主持按系统清除按键,抢答器处于禁止状态,编号显示器灭灯;主持人松开,宣布“开始”,抢答器工作。选手按动抢答按键,抢答器完成:优先判断、编号锁存、编号显示。当一轮抢答之后,优先抢答选手的编号一直保持到主持人将系统清除为止。如果再次抢答必须由主持人再次按动系统清除按键。

检测按钮 抢答按键 优先编码器 锁存器 译码显 示器 支持人 按钮 图3.3 抢答器总体方框图

2、优先判断与编号锁存电路:其电路如图3.4所示。电路选用优先编码器 74LS148 和锁存器 74LS279 来完成。该电路主要完成两个功能:一是分辨出选手按键的先后,并锁存优先抢答者的编号;二是禁止其他选手按键,其按键操作无效。工作过程:系统清除按键按动时,74LS279的四个RS触发器的置0端均为0,使四个触发器均被置0。1Q为0,使74LS148的使能端 =0,74LS148处于允许编码状态,同时1Q为0,使74LS48的灭灯输入端 =0,数码管无显示。这时抢答器处于准备抢答状态。

当系统清除按键松开时,抢答器处于等待状态。当有选手将按键开关按下时,抢答器将接受并显示抢答结果,假设按下的是S4,则74LS148的编码输出为011,此代码送入74LS279锁存后,使4Q3Q2Q=100,亦即74LS148的输入为0100;又74LS148的优先编码标志输出 为0,使1Q=1,即 =1,74LS148处于译码状态,译码的结果显示为“4”。同时1Q=1,使74LS148的 =1,74LS148处于禁止状态,从而封锁了其他按键的输入。此外,当优先抢答者的按键松开再按下时,由于仍为1Q=1,使 =1,74LS148仍处于禁止状态,确保不会接受二次按键时的输入信号,保证了抢答者的优先性。(74LS148为8线-3线优先编码器,图3.5为74LS148和74LS279的引脚图和真值表。)

R总VCC系统清除按键HPRI/BCD抢答按键S0S1S2S3S4S5S6S7RLRES2LEDGND10111213123450/Z101/Z112/Z123/Z134/Z145/Z156/Z167/Z17V18ENa101112131415161711235610111297614151R1S11S22R2S3R3S13S24R4S1Q41Q18a15142Q72Q3Q93Q1a2a4a4Q134Q

图3.4 74LS148为8线-3线优先编码器

** 基于VHDL语言的8路抢答器设计 第 8页 共29页

Inputs Outputs S R Q H H Q0

L H H H L L Not sure

L L 图3.5 74LS148和74LS279的引脚图和真值表

(2) 抢答器的单元电路设计

简易逻辑数字抢答器由主体电路与扩展电路组成。优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出;用控制电路和主持人开关启动报警电路,以上两部分组成主体电路。通过定时电路和译码电路将秒脉冲产生的信号在显示器上输出实现计时功能,构成扩展电路。现简单介绍抢答器设计中的抢答电路、定时电路、报警电路、时序控制电路、显示及译码电路。

1、抢答电路:参考电路如图3.6所示。该电路完成两个功能:一是分辨出选手按键的先后,并锁存优先抢答者的编号,同时译码显示电路显示编号;二是禁止其他选手按键操作无效。

工作过程:开关S置于“清除”端时,RS触发器的R端均为0,4个触发器输出置0,使74LS148的ST=0,使之处于工作状态。当开关S置于“开始”时,抢答器处

Y2Y1Y0?010,YEX?0,BI=1,经RS锁存后,1Q=1,74LS48处于工作状态,4Q3Q2Q=101,经译码显示为“5”。此外,1Q=1,使74LS148ST=1,处于禁止状态,封锁其他按键

** 基于VHDL语言的8路抢答器设计 第 9页 共29页

的输入。当按键松开即按下时,74LS148的YEX?1,此时由于仍为1Q=1,使ST=1,所以74LS148仍处于禁止状态,确保不会出二次按键时输入信号,保证了抢答者的优先性。如有再次抢答需由主持人将S开关重新置于“清除”然后再进行下一轮抢答。(LS148为8线-3线优先编码器。)

图3.6 抢答电路

2、定时电路:由节目主持人根据抢答题的难易程度,设定一次抢答的时间,通过预置时间电路对计数器进行预置,计数器的时钟脉冲由秒脉冲电路提供。可预置时间的电路选用十进制同步加减计数器74LS192进行设计,具体电路如图3.7所示。本设计是以555构成震荡电路,由74LS192来充当计数器,构成抢答器的倒计时电路。该电路简单,无需用到晶振,芯片都是市场上容易购得的。设计功能完善,能实现直接清零、启动。

** 基于VHDL语言的8路抢答器设计 第 10页 共29页

图3.7 定时电路

3、报警电路:由555定时器和三极管构成的报警电路如图3.8所示。其中555构成多谐振荡器,振荡频率fo=1.43/[(RI+2R2)C],其输出信号经三极管推动扬声器。PR为控制信号,当PR为高电平时,多谐振荡器工作,反之,电路停振。

图3.8 报警电路

4、时序控制电路:时序控制电路是抢答器设计的关键,它要完成以下三项功能: (a) 主持人将控制开关拨到\开始\位置时,扬声器发声,抢答电路和定时电路进人

** 基于VHDL语言的8路抢答器设计 第 11页 共29页

正常抢答工作状态。

(b) 当参赛选手按动抢答键时,扬声器发声,抢答电路和定时电路停止工作。 (c) 当设定的抢答时间到,无人抢答时,扬声器发声,同时抢答电路和定时电路停止工作。

根据上面的功能要求,设计的时序控制电路如图 3.9所示。图中,门G1 的作用是控制时钟信号CP的放行与禁止,门G2的作用是控制74LS148的输人使能端 。图4-3的工作原理是:主持人控制开关从\清除\位置拨到\开始\位置时,来自于图4-1中的74LS279的输出 1Q=0,经G3反相, A=1,则时钟信号CP能够加到74LS192的CPD时钟输入端,定时电路进行递减计时。同时,在定时时间未到时,则\定时到信号\为1,门G2的输出ST=0,使 74LS148处于正常工作状态,从而实现功能①的要求。当选手在定时时间内按动抢答键时,1Q=1,经 G3反相, A=0,封锁 CP信号,定时器处于保持工作状态;同时,门G2的输出ST=1,74LS148处于禁止工作状态,从而实现功能②的要求。当定时时间到时,则\定时到信号\为0,ST=1,74LS148处于禁止工作状态,禁止选手进行抢答。同时, 门G1处于关门状态,封锁 CP信号,使定时电路保持00状态不变,从而实现功能③的要求。集成单稳触发器74LS121用于控制报警电路及发声的时间。

图3.9 时序控制电路

5、显示与译码电路:七段显示译码器与数码管如下图3.10 7段显示译码所示,74LS48将锁存器74LS279的信号译码,输出给数码管。当后台工作人员将S置于GND,

LT=0,使灯测试输入端(图中3号)=1,这时测试数码管工作情况;当后台工作人员

将S置于Vcc,LT=1,使灯测试输入端(图中3号)=1,这时正常译码。(74LS48为4线-七段译码器/驱动器,下图3.11为逻辑图)

** 基于VHDL语言的8路抢答器设计 第 12页 共29页

VCCSGND4537126&CT=0V201248BIN/7-SEG[T2]1G21a 20,21b 20,21c 20,21d 20,21e 20,21f 20,21g 20,211312111091514764219105DPYaabcfbgdeecdfdpgdp 图3.10 7段显示译码器与数码管

图3.11 74LS48逻辑图

(3) 基于VHDL的实体设计: 1、程序设计 编码程序: LIBRARY ieee;

USE ieee.std_logic_1164.ALL; ENTITY change IS

PORT(q1,q2,q3,q4,q5,q6,q7,q8: IN STD_LOGIC; clr : IN STD_LOGIC;

m: OUT STD_LOGIC_vector(3 downto 0); en: OUT STD_LOGIC);

** 基于VHDL语言的8路抢答器设计 第 13页 共29页

END change;

ARCHITECTURE a OF change IS BEGIN

process(q1,q2,q3,q4,q5,q6,q7,q8,clr) variable temp:STD_LOGIC_vector(7 downto 0); begin

temp:=q1&q2&q3&q4&q5&q6&q7&q8; case temp is

when\when\when\when\when\when\when\when\when others=>m<=\end case;

en <= temp(7) AND temp(6) AND temp(5) AND temp(4) AND temp(3) AND temp(2) AND temp(1) AND temp(0) AND clr;

end process; END a;

对应的管脚图和仿真图如下:

** 基于VHDL语言的8路抢答器设计 第 14页 共29页

图3.12 编码模块管脚图

图3.13 编码模块仿真图

锁存程序:

LIBRARY ieee;

USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL; ENTITY lock IS PORT(s1: IN STD_LOGIC;

s2: IN STD_LOGIC; s3: IN STD_LOGIC; s4: IN STD_LOGIC; s5: IN STD_LOGIC; s6: IN STD_LOGIC; s7: IN STD_LOGIC; s8: IN STD_LOGIC; clr: IN END lock;

ARCHITECTURE a OF lock IS BEGIN

process(s1,s2,s3,s4,s5,s6,s7,s8,clr) begin

if(clr ='0') then q1<='1';q2<='1'; q3<='1';q4<='1'; q5<='1';q6<='1'; q7<='1';q8<='1'; else

q1<=s1;q2<=s2;

STD_LOGIC;

q1,q2,q3,q4,q5,q6,q7,q8: OUT STD_LOGIC);

** 基于VHDL语言的8路抢答器设计 第 15页 共29页

q3<=s3;q4<=s4; q5<=s5;q6<=s6; q7<=s7;q8<=s8; end if; end process; END a;

对应的管脚图和仿真图如下:

图3.14 锁存模块管脚图

图3.15 锁存模块仿真图

抢答成功扬声器发声相关程序:

** 基于VHDL语言的8路抢答器设计 第 16页 共29页

LIBRARY ieee;

USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL; ENTITY cnt IS

PORT(clk,en: in STD_LOGIC; sound1:out STD_LOGIC); END cnt;

ARCHITECTURE a OF cnt IS BEGIN process(en,clk) begin

if(clk'event and clk='1') then if(en='1') then sound1<='1'; else

sound1<='0'; end if;end if; end process; END a;

对应的管脚图和仿真图如下:

图3.16 抢答成功扬声器发声模块管脚图

** 基于VHDL语言的8路抢答器设计 第 17页 共29页

图3.17 抢答成功扬声器发声模块仿真图

数码管显示管相关程序:

LIBRARY ieee;

USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL; ENTITY display IS

PORT(m: IN STD_LOGIC_VECTOR(3 downto 0); BCD: out STD_LOGIC_VECTOR(7 downto 0)); END display;

ARCHITECTURE a OF display IS BEGIN

PROCESS(m) BEGIN CASE m IS

WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \

WHEN OTHERS => BCD <=\END CASE; END PROCESS; END a;

对应的管脚图和仿真图如下:

** 基于VHDL语言的8路抢答器设计 第 18页 共29页

图3.18 数码管显示管模块管脚图

图3.19 数码管显示管模块仿真图

2、编译管脚设置:

程序输入完成后然后选择用于编程的目标芯片:选择菜单 “Assign”→“Device”, 窗口中的 Device Family 是器件序列栏, 先在此栏中选择 MAX7000S。然后选择 EMP7128SLC84- 15 器件, 按 OK,就可以进行编译了,经“MAX+PLUSE II”中的“Compiler”菜单编译,以验证设计结果是否符合要求,如果有问题,则返回原设计文件再次进行修改, 直到正确为止。

图3.20 编码管脚

编译无误后经“MAX+PLUSE II”中的“FLOORPLAN EDITOR” 菜单,进行输入、输出管脚设置,将元件端口放置到 EPM7128SLC84- 15芯片适当的I/O 口,并用手工调整按上图所示设置。

** 基于VHDL语言的8路抢答器设计 第 19页 共29页

4 系统仿真

4.1 顶层模块及管脚介绍

编译成功后进行仿真。首先建立波形文件。波形文件建好 并存盘后。选择菜单“Max plusII”→“simulator”,启动仿真操作,结束后观察仿真波形如图4.2所示。从仿真波形看, 符合设计要求(对应的管脚图和仿真图如下)。

图4.1 顶层文件管脚图

图4.2 顶层仿真波形图

s1,s2,s3,s4,s5,s6,s7,s8输入 q1,q2,q3,q4,q5,q6,q7,q8锁存输出 M编码输出和BCD显示输入 clk时钟控制信号 clr 0,清零 1为开始抢答 en抢答成功

** 基于VHDL语言的8路抢答器设计 第 20页 共29页

BCD数码管显示输出

4.2 仿真结果分析

抢答必须发声在一个时钟周期里且保证clr=1时才有效,而对应数码显示管模块可得知,若当“s1”抢答则数码管为\对应显示“06”,s1抢答成功且扬声器发声,抢答完成,其他号码抢答同理。

图4.2的仿真图表示为:在第一个有效时钟周期里为s3抢答成功,第二个有效时钟周期为s6抢答成功,第三个有效时钟周期为s8抢答成功,第四个有效时钟周期为s2抢答成功,第五个有效时钟周期为s7抢答成功。则数码管显示分别为4F、7D、7F、5B、07。仿真无误,由本次仿真结果可知该设计成功的实现了8路抢答器的抢答功能。

** 基于VHDL语言的8路抢答器设计 第 21页 共29页

小结

本次设计是在指导老师陈沅涛的指导下完成的。陈老师是带我们进入VHDL世界的人,仅仅3个星期让我们了解VHDL的世界,这是我这次课程设计能成功的最主要原因。在设计的过程中,陈老师还给予了指导,并提供了很多与该设计相关的重要信息,培养了我们对课程设计的兴趣,丰富了我们的知识。这都将非常有利于我们今后的学习和工作。在此表示衷心的感谢!

在课程设计的这段时间里,我认为收获还是很多的,不但进一步掌握了数字电子技术的基础知识及一门专业仿真软件的基本操作,还提高了自己的设计能力及动手能力,同时对于抢答器来了个系统的总结。更多的是让我看清了自己,明白了凡事需要耐心,实践是检验学习的唯一标准。本次设计在程序上花费的时间是最久的,我们上网找资料,上图书馆,尽可能的了解关于八路抢答器的知识,在设计的过程中也遇到了很多问题,理论知识的不足在这次课设中表现的很明显。但这都将有助于我今后的学习,端正自己的学习态度,从而更加努力的学习。总之,通过本次课程设计不但让我不仅学到了一些知识,而且也提高了我的综合能力。使我在各方面都得到了锻炼,非常感谢给予帮助的同学,也非常感谢我们的陈老师和单老师,使我们这次的课程设计任务圆满完成。

** 基于VHDL语言的8路抢答器设计 第 22页 共29页

参考文献

[1]邢建平,曾繁泰.VHDL程序设计教程[M].北京:清华大学出版社,2005年,11月. [2]甘登岱,田富鹏,朱利娜. EDA培训教程[M].北京:机械工业出版社,2005年,3月. [3] 杨颂华. 电子线路EDA仿真技术[M].西安:西安交通大学出版社,2008年,2月. [4] 蒋小燕,俞伟均,张立臣.EDA技术及VHDL [M].南京:东南大学出版社,2008年,12月.

[5] 刘欲晓.EDA技术与VHDL电路开发应用实践[M].北京:电子工业出版社,2009年,4月.

[6] 王冬梅,张建秋.《八路抢答器设计与实现》[J]. 佳木斯大学学报(自然科学版), 2009,(06).22-26.

[7] 丁建伟.《抢答器电路设计》[J].兰州工业高等专科学校学报,2008,(04).13-17.

** 基于VHDL语言的8路抢答器设计 第 23页 共29页

附录1:程序 元器件清单: 74LS48 74LS121 74LS148 74LS192 74LS279 NE555 电阻1 KΩ 电阻10 KΩ 电阻15 KΩ 电阻4.7 KΩ 电阻5.1 KΩ 电阻100 KΩ 编码模块程序: LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

ENTITY change IS // 程序名称:change

PORT(q1,q2,q3,q4,q5,q6,q7,q8: IN STD_LOGIC; // 定义出入端q1~q8 clr : IN STD_LOGIC; // 定义输入端clr m: OUT STD_LOGIC_vector(3 downto 0); // 定义输出端m en: OUT STD_LOGIC); // 定义输出端en END change;

ARCHITECTURE a OF change IS BEGIN

process(q1,q2,q3,q4,q5,q6,q7,q8,clr)

variable temp:STD_LOGIC_vector(7 downto 0); begin

temp:=q1&q2&q3&q4&q5&q6&q7&q8; case temp is

when\ // 当temp=01111111时对应的q1抢答,m显示1 when\ // 当temp=10111111时对应的q2抢答,m显示2 when\ // 当temp=11011111时对应的q3抢答,m显示3 when\ // 当temp=11101111时对应的q4抢答,m显示4 when\ // 当temp=11110111时对应的q5抢答,m显示5 when\ // 当temp=11111011时对应的q6抢答,m显示6 when\ // 当temp=11111101时对应的q7抢答,m显示7

3个 1个 1个 2个 1个 2个 1个 9个 1个 1个 1个 1个 电阻68 KΩ 电阻510Ω 电容10uF 电容0.1uF 电容100uF 发光二极管 按键开关 共阴数码管 74LS00 74LS11 三极管3DG12 1个 2个 2个 1个 1个 2个 9个 3个 1个 1个 1个

** 基于VHDL语言的8路抢答器设计 第 24页 共29页

when\ // 当temp=11111110时对应的q8抢答,m显示8 when others=>m<=\ // 当temp为其他情况则m显示F end case;

en <= temp(7) AND temp(6) AND temp(5) AND temp(4) AND temp(3) AND temp(2) AND temp(1) AND temp(0) AND clr; end process; END a; 锁存模块程序: LIBRARY ieee;

USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL;

ENTITY lock IS // 程序名称:lock PORT(s1: IN STD_LOGIC; // 定义输入端s1 s2: IN STD_LOGIC; // 定义输入端s2 s3: IN STD_LOGIC; // 定义输入端s3 s4: IN STD_LOGIC; // 定义输入端s4 s5: IN STD_LOGIC; // 定义输入端s5 s6: IN STD_LOGIC; // 定义输入端s6 s7: IN STD_LOGIC; // 定义输入端s7 s8: IN STD_LOGIC; // 定义输入端s8 clr: IN STD_LOGIC;

q1,q2,q3,q4,q5,q6,q7,q8: OUT STD_LOGIC); // 定义输出端q1~q8 END lock;

ARCHITECTURE a OF lock IS

BEGIN

process(s1,s2,s3,s4,s5,s6,s7,s8,clr) begin

if(clr ='0') then // 整个if语句实现锁存功能,当clr=0时,s1~s8锁住;当clr=1q

时,s1~s8解锁,q1~q8对应输出s1~s8的值

q1<='1';q2<='1'; q3<='1';q4<='1'; q5<='1';q6<='1'; q7<='1';q8<='1'; else

q1<=s1;q2<=s2; q3<=s3;q4<=s4; q5<=s5;q6<=s6;

** 基于VHDL语言的8路抢答器设计 第 25页 共29页

q7<=s7;q8<=s8; end if; end process; END a;

抢答成功扬声器发声模块程序: LIBRARY ieee;

USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL;

ENTITY cnt IS // 程序名称:cut PORT(clk,en: in STD_LOGIC; // 定义输入:clk,en sound1:out STD_LOGIC); // 定义输出:sound1 END cnt;

ARCHITECTURE a OF cnt IS

BEGIN process(en,clk) begin

if(clk'event and clk='1') then // 当抢答控制开关打开即:clk=1时 if(en='1') then // 当en=1抢答成功 sound1<='1'; // 扬声器sound1<='1' 发声 else

sound1<='0'; // 否则不发声 end if;end if; end process; END a;

数码管显示管对应程序: LIBRARY ieee;

USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL;

ENTITY display IS // 程序名称:display

PORT(m: IN STD_LOGIC_VECTOR(3 downto 0); // 定义输入端m BCD: out STD_LOGIC_VECTOR(7 downto 0)); // 定义输出端 BCD END display; BEGIN

ARCHITECTURE a OF display IS PROCESS(m) BEGIN

CASE m IS

** 基于VHDL语言的8路抢答器设计 第 26页 共29页

WHEN \ // 当m=0时,输出BCD=3F WHEN \ // 当m=1时,输出BCD=06 WHEN \ //当m=2时,输出BCD=5B WHEN \ //当m=3时,输出BCD=4F WHEN \ //当m=4时,输出BCD=66 WHEN \ //当m=5时,输出BCD=6D WHEN \ //当m=6时,输出BCD=7D WHEN \ //当m=7时,输出BCD=07 WHEN \ //当m=8时,输出BCD=7F WHEN \ //当m=9时,输出BCD=6F WHEN OTHERS => BCD <=\ //当m为其他数时,输出BCD=00 END CASE; END PROCESS; END a;

顶层文件模块对应程序: LIBRARY ieee;

USE ieee.std_logic_1164.all; LIBRARY work;

ENTITY qiangdaqi IS // 程序名称:qiangdaqi

PORT (

clr : IN STD_LOGIC; // 定义输入端 clr

clk : IN STD_LOGIC; // 定义输入端时钟信号 clk s1 : IN STD_LOGIC; // 定义抢答信号输入端 s1 s2 : IN STD_LOGIC; // 定义抢答信号输入端 s2 s3 : IN STD_LOGIC; // 定义抢答信号输入端 s3 s4 : IN STD_LOGIC; // 定义抢答信号输入端 s4 s5 : IN STD_LOGIC; // 定义抢答信号输入端 s5 s6 : IN STD_LOGIC; // 定义抢答信号输入端 s6 s7 : IN STD_LOGIC; // 定义抢答信号输入端 s7 s8 : IN STD_LOGIC; // 定义抢答信号输入端 s8

BCD : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); // 定义输出端数码显示管BCD SOUND : OUT STD_LOGIC // 定义输出端扬声器SOUND

);

END qiangdaqi;

ARCHITECTURE bdf_type OF qiangdaqi IS COMPONENT change

** 基于VHDL语言的8路抢答器设计 第 27页 共29页

PORT(q1 : IN STD_LOGIC; // 定义输入端q1 );

q2 : IN STD_LOGIC; // 定义输入端q2 q3 : IN STD_LOGIC; // 定义输入端q3 q4 : IN STD_LOGIC; // 定义输入端q4 q5 : IN STD_LOGIC; // 定义输入端q5 q6 : IN STD_LOGIC; // 定义输入端q6 q7 : IN STD_LOGIC; // 定义输入端q7 q8 : IN STD_LOGIC; // 定义输入端q8 clr : IN STD_LOGIC; // 定义输入端clr en : OUT STD_LOGIC; // 定义输出端en

m : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) //定义输出端m

END COMPONENT; COMPONENT cnt

PORT(clk : IN STD_LOGIC; // 输入端clk );

en : IN STD_LOGIC; // 输入端en sound1 : OUT STD_LOGIC // 输出端sound1

END COMPONENT; COMPONENT display

PORT(m : IN STD_LOGIC_VECTOR(3 DOWNTO 0); // 定义输入端m );

BCD : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) // 定义输出端BCD

END COMPONENT; COMPONENT lock

PORT(s1 : IN STD_LOGIC; // 输入端s1

s2 : IN STD_LOGIC; s3 : IN STD_LOGIC; s4 : IN STD_LOGIC; s5 : IN STD_LOGIC; s6 : IN STD_LOGIC; s7 : IN STD_LOGIC; s8 : IN STD_LOGIC; clr : IN STD_LOGIC;

q1 : OUT STD_LOGIC; // 输出端q1 q2 : OUT STD_LOGIC; q3 : OUT STD_LOGIC;

** 基于VHDL语言的8路抢答器设计 第 28页 共29页

);

q4 : OUT STD_LOGIC; q5 : OUT STD_LOGIC; q6 : OUT STD_LOGIC;

q7 : OUT STD_LOGIC; // 输出端q7 q8 : OUT STD_LOGIC // 输出端q8

END COMPONENT; SIGNAL SIGNAL SIGNAL SIGNAL SIGNAL SIGNAL SIGNAL SIGNAL SIGNAL SIGNAL BEGIN u1: change

PORT MAP(q1 => SYNTHESIZED_WIRE_0,

q2 => SYNTHESIZED_WIRE_1, q3 => SYNTHESIZED_WIRE_2, q4 => SYNTHESIZED_WIRE_3, q5 => SYNTHESIZED_WIRE_4, q6 => SYNTHESIZED_WIRE_5, q7 => SYNTHESIZED_WIRE_6, q8 => SYNTHESIZED_WIRE_7, clr => clr,

en => SYNTHESIZED_WIRE_8, m => SYNTHESIZED_WIRE_9);

SYNTHESIZED_WIRE_0 : STD_LOGIC; SYNTHESIZED_WIRE_1 : STD_LOGIC; SYNTHESIZED_WIRE_2 : STD_LOGIC; SYNTHESIZED_WIRE_3 : STD_LOGIC; SYNTHESIZED_WIRE_4 : STD_LOGIC; SYNTHESIZED_WIRE_5 : STD_LOGIC; SYNTHESIZED_WIRE_6 : STD_LOGIC; SYNTHESIZED_WIRE_7 : STD_LOGIC; SYNTHESIZED_WIRE_8 : STD_LOGIC;

SYNTHESIZED_WIRE_9 : STD_LOGIC_VECTOR(3 DOWNTO 0);

u2: cnt

PORT MAP(clk => clk,

en => SYNTHESIZED_WIRE_8, sound1 => SOUND);

u3: display

PORT MAP(m => SYNTHESIZED_WIRE_9,

BCD => BCD);

** 基于VHDL语言的8路抢答器设计 第 29页 共29页

u4: lock

PORT MAP(s1 => s1,

s2 => s2, s3 => s3, s4 => s4, s5 => s5, s6 => s6, s7 => s7, s8 => s8, clr => clr,

q1 => SYNTHESIZED_WIRE_0, q2 => SYNTHESIZED_WIRE_1, q3 => SYNTHESIZED_WIRE_2, q4 => SYNTHESIZED_WIRE_3, q5 => SYNTHESIZED_WIRE_4, q6 => SYNTHESIZED_WIRE_5, q7 => SYNTHESIZED_WIRE_6, q8 => SYNTHESIZED_WIRE_7);

END bdf_type;

** 基于VHDL语言的8路抢答器设计 第 29页 共29页

u4: lock

PORT MAP(s1 => s1,

s2 => s2, s3 => s3, s4 => s4, s5 => s5, s6 => s6, s7 => s7, s8 => s8, clr => clr,

q1 => SYNTHESIZED_WIRE_0, q2 => SYNTHESIZED_WIRE_1, q3 => SYNTHESIZED_WIRE_2, q4 => SYNTHESIZED_WIRE_3, q5 => SYNTHESIZED_WIRE_4, q6 => SYNTHESIZED_WIRE_5, q7 => SYNTHESIZED_WIRE_6, q8 => SYNTHESIZED_WIRE_7);

END bdf_type;

本文来源:https://www.bwwdw.com/article/pbtp.html

Top