六人抢答器 eda
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计任务书
学生姓名:何海泉专业班级:电子科学与技术0903班指导教师:李成军工作单位:信息工程学院
题目: 六人抢答器
初始条件:
可用仪器:PC机(Quartus II软件)硬件:EDA-IV型实验箱。
要求完成的主要任务:
设计任务
抢答台数为6,具有抢答开始后20秒倒计时,20秒倒计时后六人抢答显示超时,并报警。
能显示超前抢答台号并显示犯规报警。
系统复位后进入抢答状态,当有一路抢答按键按下,该路抢答信号将其余各路抢答信号封锁,同时铃声响起,直至该路按键松开,显示牌显示该路抢答台号。
时间安排:
6.11 课程设计任务布置、选题、查阅资料
6.12~15 设计,软件编程、仿真和调试
6.16~6.18 实验室检查仿真结果,验证设计的可行性和正确性
6.19~6.20 设计的硬件调试
6.21 机房检查设计成果,提交设计说明书及答辩
指导教师签名:年月日系主任(或责任教师)签名:年月日
目录
摘要 (I)
Abstract (II)
绪论 (1)
1.VHDL发展史及特点 (2)
1.1VHDL语言的发展史以及应用前景 (2)
1.2VHDL语言特点 (2)
2. VHDL语言设计六人抢答器流程 (4)
2.1采用自顶向下的设计 (4)
3.六人抢答器设计要求及模块 (5)
3.1设计要求 (5)
3.2设计模块划分 (5)
4. 单元电路设计和原理说明 (6)
4.1项目建立 (6)
5.设计六人抢答器原理图 (10)
心得体会 (14)
参考文献 (16)
附录 (17)
摘要
现代生活中,数字电路产品与我们接触的是越来越平凡了,包括计算机、电子表、智能仪器表及其它很多领域中,它给我们带来的不仅是工作上的方便,而且也给我们的生活娱乐添滋加彩。
这次EDA课程设计中,我做的是六人抢答器,本文详细介绍了QuartusⅡ的使用方法和基于QuartusⅡ的六人抢答器的设计原理方法。
QuartusⅡ软件是由Altera公司推出的新一代CPLD/FPGA开发软件,本次课程设计采用VHDL硬件描述语言设计实现六人抢答器功能,主要实现常规的竞赛式抢答报警功能,在日常生活应用中较为常见,实用性高。
通过课程设计要求掌握VHDL语言程序的编写设计,以及对原理图符号的绘制,为以后的EDA相关项目开发打好基础。
关键词:QuartusⅡ;抢答器;VHDL;EDA;
Abstract
In modern life, digital circuit products and we contact is more and more common, including computer, electronic watch, intelligent instrument meter and many other fields, it brings us not only work convenient, but also give us life entertainment add zi add color. This course design of EDA, I do is six vies to implement,This paper introduces in detail Quartus Ⅱ use method and based on Quartus Ⅱsix vies to implement the design principle of the method. Quartus Ⅱsoftware is Altera company launched by the new generation of CPLD/FPGA development software, this course design uses VHDL designed and implemented six scare-answering device functional, main realization of conventional JingSaiShi scare-answering alarm functions, in daily life applications are common, practicability. Through the course design requires knowledge VHDL language program, and to write design principle chart drawing symbols for the future EDA related project development foundation fortomorrow.
Keywords: QuartusⅡ;calling implement;VHDL;EDA
绪论
EDA是电子设计自动化(Electronic Design Automation)的缩写。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB 版图的整个过程的计算机上自动处理完成。
现在对EDA的概念或范畴用得很宽。
包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA 的应用。
目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。
例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。
EDA工具软件可大致可分为芯片设计辅助软件、可编程芯片辅助设计软件、系统设计辅助软件等三类。
目前进入我国并具有广泛影响的EDA软件是系统设计软件辅助类和可编程芯片辅助设计软件:Protel、PSPICE、multiSIM10(原EWB的最新版本)、OrCAD、PCAD、LSIIogic、MicroSim、ISE、modelsim、Matlab等等。
这些工具都有较强的功能,一般可用于几个方面,例如很多软件都可以进行电路设计与仿真,同进还可以进行PCB自动布局布线,可输出多种网表文件与第三方软件接口。
本课程设计是采用VHDL硬件描述语言设计实现六人抢答器功能。
并采用QuartusⅡ软件进行对设计语言的时序仿真以及原理图的生成。
QuartusⅡ软件是由Altera公司推出的新一代CPLD/FPGA开发软件。
它允许第三方EDIF文件输入,并提供了很多EDA软件接口,QuartusⅡ支持层次化设计,可以在一个新的编辑输入环境中对不同的输入方式完成的模块进行调用,从而解决了原理图与VHDL混合输入设计的问题。
现在QuartusⅡ软件已经可以开发Altera公司以前推出的大部分器件以及新推出的器件。
根据时序仿真结果来判断所写程序是否符合设计要求,最后通过对其硬件语言进行原理图的生成,就此实现用VHDL语言设计六人抢答器功能。
1 VHDL发展史及特点
1.1 VHDL语言的发展史以及应用前景
VHDL诞生于1982年。
随后各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。
此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本[1],(简称93版)。
现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。
有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。
VHDL的英文全写是:VHSIC(Very High Speed Integrated Circuit)Hardware Descriptiong Language.翻译成中文就是超高速集成电路硬件描述语言[2]。
因此它的应用主要是应用在数字电路的设计中。
目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。
当然在一些实力较为雄厚的单位,它也被用来设计ASIC。
VHDL主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
1.2 VHDL语言特点
1)VHDL语言功能强大、设计灵活。
VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。
它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。
VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言虽不能比拟的。
VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。
2)支持广泛、易于修改。
由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。
在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计。
3)强大的系统硬件描述能力。
VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。
而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。
另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。
VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。
4)独立于器件的设计、与工艺无关。
设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。
当设计描述完成后,可以用多种不同的器件结构来实现其功能。
5)很强的移植能力。
VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。
6)易于共享和复用。
VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。
这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。
7)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
8)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。
符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
9)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
总之,由于VHDL语言有这么多优点和特点,因此它被广泛的应用在电路系统的设计和器件的设计仿真中。
2 VHDL语言设计六人抢答器流程
2.1采用自顶向下的设计
一、流程框图包括以下设计阶段[3]:
1)提出设计说明书。
即用自然语言表达系统项目的功能特点和技术参数等。
2)建立VHDL行为模型。
这一步是将设计说明书转化为VHDL行为模型,在此行为模型的建立基础上进行整体仿真。
3)VHDL行为仿真。
这一阶段是利用VHDL仿真器对顶层文件的行为模型进行仿真测试,检查模拟结果,继而进行修改和完善。
4)VHDL-RTL级建模。
5)前段功能仿真。
6)逻辑综合。
7)测试向量生成。
8)功能仿真。
9)结构综合。
10)门级时序仿真。
这一级中将使用仿真器或仍然使用VHDL仿真器进行门级时序仿真。
11)硬件测试,这是对最后完成的硬件系统进行检查和测试。
二、自上而下的设计流程图[4]:
图1:自顶向下的设计流程
3.六人抢答器设计要求及模块
3.1设计要求
本次设计的抢答器可六人操作,具有抢答开始后20秒倒计时,20秒倒计时后六人抢答显示超时,并报警。
能显示超前抢答台号并显示犯规报警。
系统复位后进入抢答状态,当有一路抢答按键按下,该路抢答信号将其余各路抢答信号封锁,同时铃声响起,直至该路按键松开,显示牌显示该路抢答台号。
3.2设计模块划分
根据六人抢答器功能的概述,可将抢答器划分为以下模块:
1)按键模块:包括主持人的控制的复位按键,以及各位选手的抢答按键。
2)报警模块:报警模块主要选手实现抢答时的鸣响和有人犯规及抢答时间到时的报警。
3)显示模块:包括20秒倒计时显示,强大选手号码显示。
4 单元电路设计和原理说明
4.1项目建立
1)启动Quartus II如下图所示:
图2: Quartus II启动界面
2)利用向导,建立一个新项目。
在File菜单中选择New Project Wizard...选项启动项目向导[5]。
如图3所示,分别指定创建工程的路径,工程名和顶层文件名。
工程名和顶层文件可以一致也可以不同。
一个工程中可以有多个文件,但只能有一个顶层文件。
这里我们将工程名取为:qiangdaqi,顶层文件名取为qiangdaqi。
图3: 利用New Project Wizard创建的工程qiangdaqi
3)根据图3点击NEXT按钮出现一下对话框如图4所示直接点Finish按钮再出现的界面中按File/new出现如图5所示界面点击创建VHDL编辑界面及点击VHDL File按钮即进入VHDL语言编辑区如图7所示:
图4: New Project Wizard Add File区
图5:创建VHDL File区域选择框图6: VHDL语言编辑框
4)在图6的程序编辑框中将本课程设计的VHDL语言输入其中。
5)对所设计的程序进行编译按下Processing/StartCompilation[6],编译结果如图7所示:
图7:显示编译结果图
6)如果显示有错误则根据错误提示进行逐个错误进行修改。
然后在进行编译,直到出现如7图所示的结果,说明此编译结果已经通过。
5 设计六人抢答器原理图
1)在编译成功的对话框如图7中点击File/Creat Symbol Files For Current File[7],编译通过后然后在点击如图5的Block Diagram出现如图8所示的编辑框。
图8:图形编辑窗口
2)在图8的编辑窗口点击右键Insert/Symbol…即出现下面窗口,图9所示为其动态显示模块的原理图符号。
图9:动态显示模块原理图符号
3)插入另外两个模块的原理图和一个或门和若干个输入输出引脚之后,按照设计要求连好线路并对相应的引脚改好名称
4将该pdf文件设为顶层,进行编译,若编译不成功检查前面的操作是否有误并修改,直到得到如图10所示的结果。
图10:编译成功图
5)编译好之后,根据具体的试验箱,设置好引脚。
得到原理图如图11。
图11:原理图
6)进入下载界面如图12,勾选program/configure,点击start,下载好之后在实验箱上检测,如果没有问题就说明设计成功。
图12:下载界面
心得体会
通过此次课程设计,我对VHDL语言描述器件有了新的认识。
虽然我们上过这门课,但是当时学的不是很深入。
在此次课程设计之前,许多东西自己还不是很清楚。
但最后还是克服重重困难,将此课程设计很好的完成了。
这次课程设计让我感触颇多,每天起床以后就坐在电脑前做课程设计,我做的课设题目虽然看似简单,但其实很复杂,需要对VHDL编程语言的基本格式以及对基本编程技巧熟练掌握,刚开始做课设的时候遇到了很多问题,自己对这些问题也是一头雾水,幸好的是我去学校图书馆借了基本关于EDA编程的书籍,经过对书籍的反复仔细阅读,自己对EDA 的基本知识也有了进一步的认识。
经过连续几天不停的奋斗,课程设计所有结果与要求终于达到一致。
我想说,只要你有一颗不服输的心,那么什么事情都能做成,信念会给你无穷的动力。
再者,此次课程设计的成功,我得到了同学们许多无私的帮助,在此我对他们表示深深的感谢。
可以说课程设计的过程是辛苦,枯燥,乏味的,但是成功的喜悦是无以言表的。
在进行此次课程设计时,我用的是QuartusⅡ软件,这个软件为我们电子学习爱好者提供了很好的平台,其操作方法简便,面向个人界面简单,直观。
通过这次课程设计,学到了不少知识,更重要的是培养了自己发现问题的同时能够解决问题的能力,这对以后的学习以及工作尤为重要。
最后,再次感谢老师的教导和同学们在我课设期间的帮助指导。
参考文献
[1]潘松黄继业. EDA技术与VHDL.北京:清华大学出版社,2005.7
[2]康华光.电子技术基础.北京:高等教育出版社.2006.1
[3]付家才. EDA工程实践技术.北京:化学工业出版社,2007.1
[4]汉泽西. EDA技术及其应用.北京:北京航空航天大学出版社,2004.5
[5]赵刚.EDA技术简明教程.成都:四川大学出版社,2004.6
[6]章彬宏周正林.EDA应用技术.北京:北京理工大学出版社,2007.7
[7]刘艳萍高振斌李志平.EDA实用技术及应用.北京:国防工业出版社,2006.
附录
1.动态显示模块程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity dongtaixianshi is
port(clk,rst,stop:in std_logic;
sel:buffer std_logic_vector(2 downto 0);
seg:out std_logic_vector(6 downto 0);
bell:out std_logic);
end dongtaixianshi;
architecture bhv of dongtaixianshi is
signal clk1:std_logic;-- 1KHZ
signal clk2:std_logic;-- 1HZ
signal wei0:std_logic_vector(3 downto 0);
signal wei1:std_logic_vector(3 downto 0);
signal en:std_logic:='0';
begin
process(clk)--1KHZ
variable mid1:integer:=0;
begin
if rising_edge(clk) then mid1:=mid1+1;
if mid1<=10000 then clk1<='0';
elsif mid1<20000 then clk1<='1';
else mid1:=0;
end if;
end process;
process(clk1)--1HZ
variable mid2:integer:=0;
begin
if rising_edge(clk1) then mid2:=mid2+1;
if mid2<=500 then clk2<='0';
elsif mid2<1000 then clk2<='1';
else mid2:=0;
end if;
end if;
end process;
process(clk2,rst,stop,wei0,en)
begin
if rst='1' then wei0<="0000";
elsif rising_edge(clk2) then
if stop='0' then
if en='0' then
if wei0="0000" then wei0<="1001";
else wei0<=wei0-1;
end if;
else wei0<="0000";
end if;
end if;
end if;
end process;
process(clk2,rst,stop,wei0,wei1,en)
if rst='1' then wei1<="0010";en<='0';
elsif rising_edge(clk2) then
if stop='0' then
if en='0' then
if wei1="0000" and wei0="0001" then en<='1';
elsif wei0="0000" then wei1<=wei1-1;
end if;
else wei1<="0000";
end if;
end if;
end if;
end process;
process(wei0,wei1)
begin
if wei0="0000" and wei1="0000" then
bell<=clk1;
else bell<='0';
end if;
end process;
process(clk1,sel,wei1,wei0)
begin
if rising_edge(clk1) then
if sel="000" then sel<="001";
case wei1 is
when "0000"=>seg<="0111111";
when "0001"=>seg<="0000110";
when "0010"=>seg<="1011011";
when "0011"=>seg<="1001111";
when "0100"=>seg<="1100110";
when "0101"=>seg<="1101101";
when "0110"=>seg<="1111101";
when "0111"=>seg<="0000111";
when "1000"=>seg<="1111111";
when "1001"=>seg<="1101111";
when others=>NULL;
end case;
elsif sel="001" then sel<="000";
case wei0 is
when "0000"=>seg<="0111111";
when "0001"=>seg<="0000110";
when "0010"=>seg<="1011011";
when "0011"=>seg<="1001111";
when "0100"=>seg<="1100110";
when "0101"=>seg<="1101101";
when "0110"=>seg<="1111101";
when "0111"=>seg<="0000111";
when "1000"=>seg<="1111111";
when "1001"=>seg<="1101111";
when others=>NULL;
end case;
end if;
end if;
end process;
end;
2.报警模块程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity baojing is
port(clk1,ring:in std_logic;
key1:in std_logic_vector(5 downto 0);
bell2:out std_logic);
end baojing;
architecture bhv of baojing is
signal clk3:std_logic;
begin
process(clk1)--1KHZ
variable mid3:integer:=0;
begin
if rising_edge(clk1) then mid3:=mid3+1;
if mid3<=5000 then clk3<='0';
elsif mid3<10000 then clk3<='1';
else mid3:=0;
end if;
end if;
end process;
process(clk1,ring,key1)
begin
if rising_edge(clk1) then
if ring='1' then
if key1/="000000" then bell2<=clk3;
else bell2<='0';
end if;
end if;
end if;
end process;
end;
3.抢答按键模块程序:
library ieee;
use ieee.std_logic_1164.all;
entity qingda is
port(key:in std_logic_vector(5 downto 0);
clk:in std_logic;
rst:in std_logic;
ring:out std_logic;
name:out std_logic_vector(5 downto 0));
end qingda;
architecture bhv of qingda is
signal mid:std_logic;
signal qout:std_logic_vector(5 downto 0);
begin
process(clk,key,rst,mid)
begin
if rst='1' then mid<='0';qout<="ZZZZZZ";
elsif rising_edge(clk) then
if mid='0' then
case key is
when "000001"=>qout<="000001";mid<='1';
when "000010"=>qout<="000010";mid<='1';
when "000100"=>qout<="000100";mid<='1';
when "001000"=>qout<="001000";mid<='1';
when "010000"=>qout<="010000";mid<='1';
when "100000"=>qout<="100000";mid<='1';
when others=>null;
end case;
end if;
end if;
name<=qout;
ring<=mid;
end process;
end bhv;
本科生课程设计成绩评定表
指导教师签字:
年月日。