课程设计任务书学生姓名:黄思羽专业班级:自动化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设计内容与要求12VHDL语言介绍23计数器设计43.1设计原理43.2程序设计框图43.3程序代码设计54程序仿真94.1仿真软件介绍94.2仿真结果94.3仿真结果分析115心得体会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(清零信号)XX1异步清零上升沿10计数X00保持输出总线信号是二进制—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;--*******************************************--结构体architecturesun1ofcnt10isbeginProcess(Cn,Rest,En)VariableCqi:std_logic_VECTOR(3Downto0);BeginIfRest='1'ThenCqi:=(Others='0');Cy='0';ElsifCn'EventandCn='1'thenIfEn='1'thenIfCqi1001thenCqi:=Cqi+1;Cy='0';elsifcqi=1001thenCy='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等多种数据类型,以