10进制计数器.docx
《10进制计数器.docx》由会员分享,可在线阅读,更多相关《10进制计数器.docx(15页珍藏版)》请在冰豆网上搜索。
10进制计数器
课程设计任务书
学生姓名:
黄思羽专业班级:
自动化0607
指导教师:
李向舜工作单位:
自动化学院
题目:
10进制计数器
初始条件:
1.Quartus4.1以上版本软件;
2.课程设计辅导资料:
“数字电路EDA入门”、“VHDL程序实例集”、“EDA技术与VHDL”、“EDA与数字系统设计”等;
3.先修课程:
电路、电子设计EDA、电子技术基础等。
4.主要涉及的知识点:
门电路、组合逻辑电路、时序逻辑电路等。
要求完成的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1.课程设计时间:
1周;
2.课程设计内容:
根据指导老师给定的题目,按规定选择其中1套完成;
3.本课程设计统一技术要求:
研读辅导资料对应章节,对选定的设计题目进行理论分析,针对具体设计部分的原理分析、建模、必要的推导和可行性分析,画出程序设计框图,编写程序代码(含注释),上机调试运行程序,记录实验结果(仿真结果),并对实验结果进行分析和总结。
具体设计要求包括:
1复习EDA的相关技术与方法;
2掌握VHDL或者Verilog语言,并要求能编写程序。
3Quartus软件的使用:
掌握程序编辑、编译、调试、仿真方法。
4设计相关简单的电路,完成既定的功能。
4.课程设计说明书按学校“课程设计工作规范”中的“统一书写格式”撰写,具体包括:
1目录;
2计数器相关的理论分析、归纳和总结;
310进制计数器的结构组成及原理分析。
4程序设计框图、程序代码(含注释);
5给出程序中主要函数或者语句的功能说明和使用说明;
6给出程序仿真运行结果和图表、以及实验结果分析和总结;
7课程设计的心得体会(至少500字);
8参考文献;
9其它必要内容等。
时间安排:
具体时间
设计内容
8月3日
指导老师就课程设计内容、设计要求、进度安排、评分标准等做具体介绍。
学生确定选题,明确设计要求
8月4日
开始查阅资料,完成相关电路原理分析、代码或原理图设计。
8月5日
采用VHDL或Verilog语言编程,上机调试,得出实验结果
8月6日
撰写课程设计说明书
8月7日
上交课程设计说明书,并进行答辩
指导教师签名:
年月日
系主任(或责任教师)签名:
年月日
摘要
本次能力拓展训练是作出一个十进制加法计数器,递增计数,有进位、清零、保持功能。
需要按要求编写出十进制计数器的VHDL程序,调试、编译程序并绘制出仿真波形图,结果应能实现计数功能。
本次能力拓展训练意义在于复习EDA的相关技术与方法;掌握VHDL或者Verilog语言,并要求能编写程序。
Quartus软件的使用:
掌握程序编辑、编译、调试、仿真方法。
关键词:
十进制计数器VHDLQuartusII9.0
目录
1设计内容与要求1
2VHDL语言介绍2
3计数器设计4
3.1设计原理4
3.2程序设计框图4
3.3程序代码设计5
4程序仿真9
4.1仿真软件介绍9
4.2仿真结果9
4.3仿真结果分析11
5心得体会12
参考文献13
十进制计数器
1设计内容与要求
设计一个10进制计数器,对计数器相关的理论进行分析、归纳和总结;10进制计数器的结构组成及原理分析。
程序设计框图、程序代码(含注释);给出程序中主要函数或者语句的功能说明和使用说明;给出程序仿真运行结果和图表、以及实验结果分析和总结。
具体设计要求包括:
复习EDA的相关技术与方法;
掌握VHDL或者Verilog语言,并要求能编写程序。
Quartus软件的使用:
掌握程序编辑、编译、调试、仿真方法。
设计相关简单的电路,完成既定的功能。
2VHDL语言介绍
VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年。
1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。
自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。
此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。
1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。
现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。
有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。
VHDL语言是一种用于电路设计的高级语言。
它在80年代的后期出现。
最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。
VHDL的英文全写是:
VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptiongLanguage.翻译成中文就是超高速集成电路硬件描述语言。
因此它的应用主要是应用在数字电路的设计中。
目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。
当然在一些实力较为雄厚的单位,它也被用来设计ASIC。
VHDL主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点
与其他硬件描述语言相比,VHDL具有以下特点:
功能强大、设计灵活。
VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。
它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。
VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言虽不能比拟的。
VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。
支持广泛、易于修改。
由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。
在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计。
强大的系统硬件描述能力。
VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。
而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。
另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。
VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。
独立于器件的设计、与工艺无关。
设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。
当设计描述完成后,可以用多种不同的器件结构来实现其功能。
很强的移植能力。
VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。
易于共享和复用。
VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。
这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。
3计数器设计
3.1设计原理
计数器的输入信号是计数信号(Clk),门控信号是手动清零信号(Rest)、手动允许计数(En)。
清零信号Rest为1时,保持在异步清零状态,计数脉冲上升沿无效;允许计数端为0时,为保持状态,这时保持至最后一个计数,计数脉冲上升沿无效;清零信号为0,允许计数信号为1时,计数器上升沿脉冲计数。
计数器的逻辑功能表如表3-1所示:
表3-1计数器的逻辑功能表
控制端
工作状态
Clk(计数脉冲)
En(允许计数信号)
Rest(清零信号)
X
X
1
异步清零
上升沿
1
0
计数
X
0
0
保持
输出总线信号是二进制—BCD码输出(Dout)一个进位输出端Cy。
当计数器输出0000~1000时,Cy=0,只有当计数器输出1001时,Cy=1。
以上分析可知,可以完全完成10进制计数功能。
3.2程序设计框图
10进制计数器程序的流程可以这样叙述:
首先判断是否处于异步清零状态,若是,则计数位和进位信号都是0;若不是,则继续判断计数脉冲是否达到上升沿,并判断手动允许计数信号是否为1,若是,则可开始计数,计数信号达到9之前,连续累加1,达到9之后,清零并进位1。
接着继续进入程序进行运算。
10进制计数器程序的流程图如图3-1所示:
图3-110进制计数器程序流程图
3.3程序代码设计
一个VHDL语言的设计程序描述的是一个电路单元,这个电路单元可以是一个门电路,或者是一个计数器,也可以是一个CPU。
一段完整的VHDL代码主要由以下几部分组成:
第一部分是程序包,程序包是用VHDL语言编写的共享文件,定义在设计结构体和实体中将用到的常数、数据类型、子程序和设计好的电路单元等,放在文件目录名称为IEEE的程序包库中。
第二部分是程序的实体,定义电路单元的输入/输出引脚信号。
程序的实体名称是任意取的,但是必须与VHDL程序的文件名称相同。
实体的标识符是ENTITY,实体以ENTITY开头,以END结束。
第三部分是程序的结构体,具体描述电路的内部结构和逻辑功能。
结构体有三种描述方式,分别是行为(BEHAVIOR)描述方式、数据流(DATAFLOW)描述方式和结构(STRUCTURE)描述方式。
其中数据流(DATAFLOW)描述方式又称为寄存器描述方式。
结构体以标识符ARCHITECTURE开头,以END结尾。
根据上述原则编写程序代码如下所示:
--*******************************************
--程序包
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
--*******************************************
--实体
ENTITYcnt10is
--Cn计数脉冲
--Rest清零信号
--En允许计数信号
--Dout[3..0]十进制BCD码
--Cy进位码
●port(Cn,Rest,En:
instd_logic;
Dout:
outstd_logic_VECTOR(3Downto0);
Cy:
outstd_logic);
endcnt10;
--*******************************************
--结构体
architecturesun1ofcnt10is
begin
Process(Cn,Rest,En)
VariableCqi:
std_logic_VECTOR(3Downto0);
Begin
IfRest='1'ThenCqi:
=(Others=>'0');
Cy<='0';
ElsifCn'EventandCn='1'then
IfEn='1'then
IfCqi<"1001"then
Cqi:
=Cqi+1;
Cy<='0';
elsifcqi="1001"
thenCy<='1';
Cqi:
=(others=>'0');
endIf;
endIf;
endIf;
Dout<=Cqi;
ENDProcess;
Endsun1;
--*******************************************
IEEE标准库是存放用VHDL语言编写的多个标准程序包的目录,IEEE库中的程序包有:
STD_LOGIC_1164,
STD_LOGIC_ARITH,
STD_LOGIC_UNSIGNED,其中STD_LOGIC_1164是IEEE标准的程序包,定义了STD_LOGIC和STD_LOGIC_VECTOR等多种数据类型,以及多种逻辑运算符子程序和数据类型转换子程序等。
STD_LOGIC_ARITH和STD_LOGIC_UNSIGNED等程序包是SYNOPSYS公司提供的,包中定义了SIGNED和UNSIGNED数据类型以及基于这些数据类型的运算符子程序。
用户在用到标准程序包中内容时,除了STANDARD程序包以外,都要在设计程序中加以说明,首先用LIBRARY语句说明程序包所在的库名,再用USE语句说明具体使用哪一个程序包和具体的子程序名。
实体是VHDL程序设计中最基本的组成部分,在实体中定义了该设计芯片中所需要的输入/输出信号引脚。
端口信号名称表示芯片的输入/输出信号的引脚名,这种端口信号通常被称为外部信号,信号的输入/输出状态被称为端口模式,在实体中还定义信号的数据类型。
端口信号名称可以表示一个信号,也可以表示一组信号(BUS),由数据类型定义。
EN,REST,CN,Cy分别表示计数允许信号、异步清零信号、时钟输入信号和进位输出信号。
Dout是一组输出信号,用来表示四位同步二进制计数器的四位计数输出信号。
端口信号输入/输出状态IN/OUT分别表示信号进入电路单元和信号从电路单元输出。
结构体是VHDL程序设计中的最主要组成部分,是描述设计单元的具体结构和功能,程序中,结构体放在实体的后面。
每一个结构体都有名称,结构体的名称是由设计者任取的,结构体是以标识符ARCHITECTURE开头,以END结尾。
不同的结构体采用不同的描述语句。
ARCHITECTURE结构体名OF实体名称IS
说明语句
BEGIN
电路描述语句
END结构体名;
结构体说明语句是对结构体中用到的数据对象的数据类型、元件和子程序等加以说明。
电路描述语句用并行语句来描述电路的各种功能,这些并行语句包括并行信号赋值语句、条件赋值(WHEN-ELSE)语句、进程(PROCESS)语句和子程序调用语句等。
结构体的名称是sun1,该结构体属于行为描述方式,采用多种描述语句,如进程(PROCRESS)语句、条件赋值语句(WHEN-ELSE)、顺序语句(IF-ELSE)等。
4程序仿真
4.1仿真软件介绍
AlteraQuartusII作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。
QuartusIIdesign是最高级和复杂的,用于systemonaprogrammablechip(SOPC)的设计环境。
QuartusIIdesign提供完善的timingclosure和LogicLock™基于块的设计流程。
QuartusIIdesign是唯一一个包括以timingclosure和基于块的设计流为基本特征的programmablelogicdevice(PLD)的软件。
QuartusII设计软件改进了性能、提升了功能性、解决了潜在的设计延迟等,在工业领域率先提供FPGA与mask-programmeddevices开发的统一工作流程。
AlteraQuartusII(3.0和更高版本)设计软件是业界唯一提供FPGA和固定功能HardCopy器件统一设计流程的设计工具。
工程师使用同样的低价位工具对StratixFPGA进行功能验证和原型设计,又可以设计HardCopyStratix器件用于批量成品。
系统设计者现在能够用QuartusII软件评估HardCopyStratix器件的性能和功耗,相应地进行最大吞吐量设计。
Altera的QuartusII可编程逻辑软件属于第四代PLD开发平台。
该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。
Quartus平台与Cadence、ExemplarLogic、MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。
改进了软件的LogicLock模块设计功能,增添了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。
4.2仿真结果
打开QuartusII9.0,建立新工程,再新建一个VHDL文件,在该窗口输入源程序,然后对源程序进行编译运行。
新建一个波形文件,在波形文件中加入所需观察波形的管脚,给输入管脚指定仿真波形,编辑待仿真波形文件,如图4-1所示,点击按钮,进行波形仿真。
图4-1带仿真波形图
仿真后的10进制计数器波形如图4-2所示:
图4-2十进制计数器仿真波形
自动得到十进制计数器的电路图的图形文件,如图4-3所示:
图4-3十进制计数器的电路图
4.3仿真结果分析
由仿真结果可知,手动允许计数信号为1,清零信号为0,计数开始。
十进制BCD码从0000开始计数,Rest清零信号有效后,计数为7,BCD码为0111,之后计数清零。
Rest清零信号为0后,计数再次开始,BCD码由0000到1001,计数由0到9,完成一次计数,之后进位并清零,再次开始。
手动计数信号无效后,停止计数,保持最后一位计数值。
由上述分析可知,仿真结果完全符合真值表内容,结果正确。
5心得体会
这次能力拓展训练历时一个星期左右,通过这一个星期的学习,发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。
在一开始题目发下来的时候,本来以为是比较容易的一道题,但是真正做起来才发现一系列的比较分析其实更具挑战性。
在学习EDA这门课的时候,我已经学会了使用MaxplusII软件,本以为在做本次训练会简单许多,但事实和想象总是有差距的。
编程都是一样,这给我减轻了许多负担,但是在绘制仿真波形图时,却出现了问题,程序编译无错误,但是仿真却不能计数,在仔细查阅了相关书籍并调试了多次后,终于出来了结果。
经过不断的摸索,终于还是解决了问题。
这次能力拓展训练终于完成了,在设计的过程中,可以说算是困难重重。
回顾此次能力拓展训练,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
这毕竟第一次做的,难免会遇到过各种各样的问题,比如有时候被一些小的,细的问题挡住前进的步伐,让我总是为了解决一个小问题而花费很长的时间。
最后还要查阅其他的书籍才能找出解决的办法。
并且我在做设计的过程中发现有很多东西,也知道了自己的不足之处,知道自己对以前所学过的知识理解得不够深刻,掌握得不够牢固。
通过本次十进制计数器的设计,我对QuartusII9.0的功能有了更深刻的认识。
同时,一方面认识到了自己这学期来学习电子设计自动化这门课有所得,但掌握地并不全面,不透彻,对于完成训练来说还远远不够;同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,以后我会更加努力。
今后,在学习中,我要端正自己的态度努力学习,只有这样我们才能真正的掌握好知识。
与此同时在设计的过程中得到了指导老师和同学们的关心和帮助,才能顺利完成本次课程设计,在此表示感谢。
参考文献
[1]侯伯亨、顾新.VHDL硬件描述语言与数字逻辑电路设计.西安电子科技大学出版社,2001.2
[2]卢毅等.VHDL与数字电路设计.北京:
科学出版社,2001.4
[3]李景华、杜玉远.可编程逻辑器件与EDA技术.东北大学出版社,2001.3
[4]谭会生、张昌志.EDA技术及应用.西安电子科技大学出版,2001.7
[5]王锁平.电子设计自动化(EDA)教程.电子科技大学出版社,2000.3
[6]潘松,黄蛀生.EDA技术实用教程.北京:
科学出版社,2002.10