课程设计(论文)基于VHDL的秒表设计.doc
1引言EDA(Electronic Design Automation,电子设计自动化)技术是现代电子工程领域的一门新技术。它提供了基于计算机和信息技术的电路系统设计方法。EDA技术的发张和推广应用极大地推动了电子工业的发展。EDA技术就是以计算机为工具,在EDA软件平台上,对以硬件描述语言VHDL为系统逻辑描述手段完成的设计文件自动地完成逻辑编译,逻辑化简,逻辑分割,逻辑综合及优化,逻辑布局布线,逻辑仿真,直至对于特定目标芯片的适配编译,逻辑映射和编程下载等工作。设计者的工作仅限于利用软件的方式,即利用硬件描述语言来完成对系统硬件功能的描述,在EDA工具的帮助下就可以得到最后的设计结果1。近年来,集成电路制造技术的快速发展, 一方面促进了相应设计技术的发展, 另一方面也对设计技术提出了更高的要求。当前集成电路设计, 面临着功能强、性能好、规模大、成本低、设计周期短等一系列要求和挑战, 这些要求和挑战引起了集成电路设计方法的全面革新。当今, 以行为设计为主要标志的新一代数字系统设计理论已形成并得到发展。在集成电路的数字系统的系统级设计中, VHDL 硬件描述语言构造的描述模型优化设计, 有利于高效利用设计空间, 实现设计结构的精确分析, 使芯片资源得以充分利用。1.1课题的背景、目的在新世纪,电子技术获得了飞速的发展,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。随着科学技术的不断发展人们在秒表的设计上功能不断完善,各类秒表都发挥出自己的特点。数字秒表在各类大小比赛中的应用也越来越广泛。除了时间的设计精确外,秒表还具有启动、复位、停止功能。而现在许多的公司生产的秒表不仅仅具有计时功能,还有多次计时功能。本次设计秒表适用于各类时间比赛,具有灵敏度高,电路简单,操作方便的特点,适合一次计时比赛用。现今电子信息类产品的开发明显地出现了两个特点:一是开发产品的复杂程度加深;二是开发产品的上市时限紧迫。而伴随着如上两个特点的产生,相应的出现了设计上的两个问题。其一,在电子系统日趋数字化、复杂化和大规模集成化的今天,电子厂商们越加迫切地追求电子产品的高功能、优品质、低成本、微功耗和微小封装尺寸,从而使得电子设计日趋复杂。那么如何去完成这些高复杂度的电子设计呢?其二,电子产品设计周期短和上市快是电子厂商们坚持不懈的追求,那么面对日趋复杂的设计,又如何能够缩短开发时间呢?解决以上两个问题的唯一途径是电子设计自动化(EDA),即用计算机帮助设计人员完成繁琐的设计工作。1.2课题设计主要内容 秒表的逻辑结构比较简单,它主要由显示译码器、分频器、十进制计数器、报警器和六进制计数器组成。在整个秒表中最关键是如何获得一个精确的100Hz计时脉冲,除此之外,整个秒表还需要一个启动信号和一个归零信号,以便能够随时启动及停止。秒表有六个输出显示,分别为百分之一秒,十分之一秒、秒、十秒、分、十分,所以共有6个计数器与之对应,6个计数器全为BCD码输出,这样便于同时显示译码器的连接。当计时达60分钟后,蜂鸣器鸣响10声。2 开发工具简介2.1MAX+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(定时分析程序)可分析设计的定时和延时情况。器件编程 MAX+plus II Programmer是使用Compiler生成的编程文件对Altera器件进行编程的。它可以用来对器件编程、校验和试验,是对设计功能进行的测试。Altera公司器件的编程方法有许多种,可根据具体情况选择使用。编译生成的配置文件经计算机并行通信口接到Altera专用编程电缆上,再接到器件的编程接口6,利用应用软件提供的编程软件,Programmer即可对器件进行配置。这种方法的优点是配置方便、迅速,便于修改。MAX+plus2在Windows 2000/XP上一旦安装完毕,经过设置即可使用硬件下载功能。在Windows 2000上除了安装软件外,为了使用ByteBlaster(MV)下载功能,还必须安装硬件驱动(Drivers)以支持MAX+plus2对PC机并行口的操作。2.2EDA技术一、什么是EDAEDA在通信行业(电信)里的另一个解释是企业数据架构,EDA给出了一个企业级的数据架构的总体视图,并按照电信企业的特征,进行了框架和层级的划分。EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。现在对EDA的概念或范畴用得很宽。包括在机械、电子、通信、航空航天、化工、矿产、生物、医学、军事等各个领域,都有EDA的应用。目前EDA技术已在各大公司、企事业单位和科研教学部门广泛使用。例如在飞机制造过程中,从设计、性能测试及特性分析直到飞行模拟,都可能涉及到EDA技术。二、设计方法 (1) 前端设计(系统建模RTL 级描述)后端设计(FPGAASIC)系统建模(2) IP 复用(3) 前端设计(4) 系统描述:建立系统的数学模型。(5) 功能描述:描述系统的行为或各子模块之间的数据流图。(6) 逻辑设计:将系统功能结构化,通常以文本、原理图、逻辑图、布尔表达式来表示设计结果。(7) 仿真:包括功能仿真和时序仿真,主要验证系统功能的正确性及时序特性。三、EDA工具软件 EDA工具软件可大致可分为芯片设计辅助软件、可编程芯片辅助设计软件、系统设计辅助软件等三类。目前进入我国并具有广泛影响的EDA软件是系统设计软件辅助类和可编程芯片辅助设计软件:Protel、PSPICE、multiSIM10(原EWB的最新版本)、OrCAD、PCAD、LSIIogic、MicroSim,ISE,modelsim等等。这些工具都有较强的功能,一般可用于几个方面,例如很多软件都可以进行电路设计与仿真,同进还可以进行PCB自动布局布线,可输出多种网表文件与第三方软件接口。EDA工具软件厂商三巨头:Synopsys、Mentor Graphics、Cadence。2.3硬件描述语言VHDLVHDL的英文全名是Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于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(Very High Speed Integrated Circuit)Hardware Descriptiong Language.翻译成中文就是超高速集成电路硬件描述语言。因此它的应用主要是应用在数字电路的设计中。目前,它在中国的应用多数是用在FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点 VHDL系统设计的基本点与其他硬件描述语言相比,VHDL具有以下特点:功能强大、设计灵活。VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言虽不能比拟的。VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。支持广泛、易于修改。由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计。强大的系统硬件描述能力。VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。独立于器件的设计、与工艺无关。设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。当设计描述完成后,可以用多种不同的器件结构来实现其功能。很强的移植能力。VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。易于共享和复用。VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。3设计方案3.1秒表的设计思路通过分频器将2.5MHz脉冲变成100Hz,用分频率器来产生频率为100Hz的脉冲信号使得计数器进行计数;用四个十进制计数器来分别对百分之一秒、十分之秒、秒和分进行计数,用两个6进制计数器来分别对秒和时分进行计数;将计数器所输出的数据用数据选择器选择,选择各个计数端口来的数据,当相应的数据到来时数据选择器选择器数据后输出给数码管,并由数码管显示。然后以数码管驱动电路,驱动数码管发光。通过对脉冲信号的控制,以此来控制计数器计数,最终实现秒表的启动与停止功能。对计数器进行清零来完成秒表的复位功能。3.2秒表各模块的代码设计1.分频器代码:library ieee;use ieee.std_logic_1164.all;entity div is port(clr,clk: in bit;q: buffer bit);end div;architecture a of div is signal counter:integer range 0 to 5;begin process(clr,clk) begin if (clk='1' and clk'event) then if clr='1' then counter<=0; elsif counter=5 then counter<=0; q<= not q; else counter<=counter+1; end if; end if; end process;end a;分频器的功能是把2.5MHz脉冲变成100Hz的脉冲信号,使得计数器进行计数。2.十进制计数器代码:library ieee; use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count10 is port(clr,start,clk: in bit; cout: out bit; daout: out std_logic_vector(3 downto 0);end count10;architecture a of count10 is signal temp:std_logic_vector(3 downto 0);begin process(clk,clr) begin if clr='1' then temp<="0000" cout<='0' elsif (clk'event and clk='1') then if start='1' then if temp>="1001" then temp<="0000" cout<='1' else temp<=temp+1; cout<='0' end if; end if; end if; daout<=temp; end process;end a;原理为加法计数器,计数十时由cout进位3.六进制计数器代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity c6 is port(clr,start,clk: in bit; daout: out std_logic_vector(3 downto 0); cout: out std_logic);end c6;architecture a of c6 is signal temp:std_logic_vector(3 downto 0);begin process(clk,clr) begin if clr='1' then temp<="0000" cout<='0' elsif (clk'event and clk='1') then if start='1' then if temp>="0101" then temp<="0000" cout<='1' else temp<=temp+1; cout<='0' end if; end if; end if; end process; daout<=temp; end a;原理为加法计数器,计数六时由cout进位。4.报警器代码:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity alarm1 isport(clk, I:in std_logic; q:out std_logic);end alarm1;ARCHITECTURE a OF alarm1 IS signal n:integer range 0 TO 20; signal q0 :std_logic;begin process(clk) begin if(clk='1'and clk'event) then if i='0' then q0<='0' n<=0; elsif (n<=19 and i='1') then q0<=not q0; n<=n+1; else q0<='0' end if; end if;end process;q<=q0;END a;当记时到一小时时,报警器报警,并响十声。5.数据选择和数码管选择模块代码:library ieee;use ieee.std_logic_1164.all;USE ieee.std_logic_UNSIGNED.all;entity seltime is port(clr,clk: in bit; dain0,dain1,dain2,dain3,dain4,dain5: in std_logic_vector(3 downto 0); sel: out std_logic_vector(2 downto 0); daout: out std_logic_vector(3 downto 0);end seltime;architecture a of seltime is signal temp:integer range 0 to 5;begin process(clk) begin if (clr='1') then daout<="0000" sel<="000" temp<=0; elsif (clk='1'and clk'event) then if temp=5 then temp<=0; else temp<=temp + 1; end if; case temp is when 0=>sel<="000"daout<=dain0; when 1=>sel<="001"daout<=dain1; when 2=>sel<="010"daout<=dain2; when 3=>sel<="011"daout<=dain3; when 4=>sel<="100"daout<=dain4; when 5=>sel<="101"daout<=dain5; end case; end if; end process;end a;数据选择和数码管的功能是选择个计数端口来的数据,当相应的数据到来时数据选择器选择器数据后输出给数码管,并由数码管显示。6.数码管驱动模块代码:library ieee; use ieee.std_logic_1164.all; entity deled is port(num:in std_logic_vector(3 downto 0); led:out std_logic_vector(6 downto 0); end deled ; architecture a of deled is begin process(num) begin case num is when"0000"=>led<="0111111"-3FH when"0001"=>led<="0000110"-06H when"0010"=>led<="1011011"-5BH when"0011"=>led<="1001111"-4FH when"0100"=>led<="1100110"-66H when"0101"=>led<="1101101"-6DH when"0110"=>led<="1111101"-7DH when"0111"=>led<="0100111"-27H when"1000"=>led<="1111111"-7FH when"1001"=>led<="1101111"-6FH when others=>led<="0000000"-00H end case; end process; end a;数码管驱动电路,驱动数码管发光。3.3设计硬件要求1、主芯片EP1K100QC2083;2、6位八段扫描共阴极数码显示管;3、二个按键开关(归零,启动)。3.4数据选择和数码管选择模块的设计数据选择和数码管选择模块是秒表设计模块中的核心模块,它承担的任务是选择各个计数端口来的数据,当相应的数据到来时数据选择器选择器数据后输出给数码管,并由数码管显示。其VHDL构造体代码如下:architecture a of seltime is signal temp:integer range 0 to 5;begin process(clk) begin if (clr='1') then daout<="0000" sel<="000" temp<=0; elsif (clk='1'and clk'event) then if temp=5 then temp<=0; else temp<=temp + 1; end if; case temp is when 0=>sel<="000"daout<=dain0; when 1=>sel<="001"daout<=dain1; when 2=>sel<="010"daout<=dain2; when 3=>sel<="011"daout<=dain3; when 4=>sel<="100"daout<=dain4; when 5=>sel<="101"daout<=dain5; end case; end if; end process;end a;利用clr,clk控制程序的运行,以if-case语句控制clr,clk条件及信号temp,当temp从0到5变化时,将dain(n)的信号赋给dout,从而完成数据的选择和时间数据的显示。3.5编译和波形仿真3.51 分频器图3.51(a)为分频器代码编译后的波形仿真图,将clk以周期信号输入,这样就可以验证从2.5MHz到100Hz的脉冲转换。波形仿真图如下:图3.51(a)分频器元件符号如图3.51(b)所示:图3.51(b)3.52十进制计数器图3.52(a)为十进制计数器波形仿真图: 图3.52(a)十进制计数器元件符号如图3.52(b)所示: 图3.52(b)3.53六进制计数器图3.53(a)为六进制计数器波形仿真图: 图3.53(a)六进制计数器元件符号如图3.53(b)所示: 图3.53(b)3.54报警器图3.54(a)为报警器波形仿真图: 图3.54(a)报警器元件符号如图3.54(b)所示: 图3.54(b)3.55数据选择和数码管图3.55(a)为数据选择和数码管波形仿真图: 图3.55(a)数据选择和数码管元件符号如图3.55(b)所示: 图3.55(b)3.56数码管驱动图3.56(a)为数码管驱动波形仿真图: 图3.56(a) 数码管驱动元件符号如图3.56(b)所示: 图3.56(b)3.6各模块的GDF图连接将讲各个模块利用VHDL语言编译成功后,以此得到分频器、十进制计数器、六进制计数器、报警器、数据选择和数码管选择、数码管驱动这六个模块,根据设计思路,用四个十进制计数器,两个六进制计数器,分频器、报警器、数据选择和数码管选择、数码管驱动各一个组合,然后将这十个器件连接起来得到秒表的GDF图(如图3.61)如下: 图3.61将秒表的GDF图编译成功,然后得到其波形仿真图如图3.62(a)与3.62(b)所示:图3.62(a)图3.62(b)结束语 在秒表的设计中,重要体现了数据选择和显示的VHDL设计以及六进制和十进制计数器的设计,然后通过各个模块的联结而完成秒表的功能。通过分频器将2.5MHz脉冲变成100Hz,用分频率器来产生频率为100Hz的脉冲信号使得计数器进行计数;用四个十进制计数器来分别对百分之一秒、十分之秒、秒和分进行计数,用两个6进制计数器来分别对秒和时分进行计数;将计数器所输出的数据用数据选择器选择,选择各个计数端口来的数据,当相应的数据到来时数据选择器选择器数据后输出给数码管,并由数码管显示。然后以数码管驱动电路,驱动数码管发光。通过对脉冲信号的控制,以此来控制计数器计数,最终实现秒表的启动与停止功能。对计数器进行清零来完成秒表的复位功能。由于本人时间及能力有限,该设计还存在诸多缺陷,一个是按键设计问题,如何让按键设计适合秒表外型以及延长秒表的使用寿命;另一个就是秒表多功能显示问题,如何设计可以让秒表最大化展现其商业价值,关于这些我并未深入研究,我将在今后的学习工作中进一步研究。 致谢本次设计是在指导老师郑斌的指导下完成的。郑老师是带我们进入VHDL世界的人,仅仅一次课让我们了解VHDL的世界,这是我这次课程设计能成功的最主要原因。在设计的过程中,郑老师还给予了指导,并提供了很多与该设计相关的重要信息,培养了我们对课程设计的兴趣,丰富了我们的知识。这都将非常有利于我们今后的学习和工作。在此表示衷心的感谢!在这里还要感谢蔡烁老师,是他教会了我们如何使用MAX+PLUS工具,熟练操作MAX+PLUS对VHDL语言的编译及其后波形的仿真非常重要,在这深深表示感谢。另外,在课程设计过程中,我更深刻的了解到计算机是一门很精深的课程,与通信工程专业紧密相连,要想学好它,还必须投入更多时间与热情。在课程设计中我还明白了一个道理,那就是很多内容不是光看就可以学到的,必须高强度的提高动手能力,多去尝试,只有自己做了才能发现错误,改正错误,取得最后的成功。这些都对我以后的学习有很大的帮助。还有,在课程设计过程中遇到的种种问题,我都会和班上的同学一起讨论,班上同学同样给与我很大帮助,在这里一并表示感谢。参考文献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月