基于CPLD的数字时钟设计【开题报告+文献综述+毕业论文】

基于CPLD的数字时钟设计【开题报告+文献综述+毕业论文】

ID:463533

大小:706.09 KB

页数:53页

时间:2017-08-05

上传者:U-944
基于CPLD的数字时钟设计【开题报告+文献综述+毕业论文】_第1页
基于CPLD的数字时钟设计【开题报告+文献综述+毕业论文】_第2页
基于CPLD的数字时钟设计【开题报告+文献综述+毕业论文】_第3页
基于CPLD的数字时钟设计【开题报告+文献综述+毕业论文】_第4页
基于CPLD的数字时钟设计【开题报告+文献综述+毕业论文】_第5页
资源描述:

《基于CPLD的数字时钟设计【开题报告+文献综述+毕业论文】》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

13本科毕业论文系列开题报告电气工程及其自动化基于CPLD的数字时钟电路设计一、课题研究意义及现状在电子设计技术领域可编程逻辑器件如CPLD的广泛应用为数字系统的设计带来极大的灵活性,由于该器件可以通过软件编程而对其硬件的结构和工作方式进行重构,使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法。设计过程乃至设计观念在传统的数字系统设计中用户能够通过编程方式改变器件逻辑功能只有两种途径即微处理器的软件编程如单片机和特定器件的控制字配置。在传统的设计概念中器件引脚功能的硬件方式的任意确定是不可能的,而对于系统构成的设计过程只能对器件功能和电路板图分别进行设计和确定通过设计电路板来规划系统功能。在此期间大量的时间和精力花在元件选配和系统结构的可行性定位上。但若采用可编程逻辑器件便可利用计算机软件的方式对目标器件进行设计,而以硬件的形式实现即定的系统功能。在设计过程中设计者可根据需要随时改变器件的内部逻辑功能和管脚的信号方式,借助于大规模集成的可编程逻辑器件和高效的设计软件用户不仅可通过直接对芯片结构的设计实现多种数字逻辑系统功能而且由于管脚定义的灵活性大大减轻了电路图设计和电路板设计的工作量和难度。同时这种基于可编程逻辑器件芯片的设计大大减少了系统芯片的数量,缩小了系统的体积提高了系统的可靠性。高集成度高速和高可靠是FPGA/CPLD,最明显的特点:时钟延迟可达纳秒级结合其并行工作方式在超高速应用领域和实时测控方面有非常广阔的应用前景。CPLD/FPGA的高可靠性还表现在几乎可将整个系统下载于同一芯片中实现所谓片上系统,从而大大缩小了体积易于管理和屏蔽。由于FPGA/CPLD的集成规模非常大,可利用先进的EDA工具进行电子系统设计和产品开发。由于开发工具的通用性,设计语言的标准化以及设计过程几乎与所用器件的硬件结构没有关系,所以设计成功的各类逻辑功能块软件有很好的兼容性和可移植性。它几乎可用于任何型号和规模的FPGA/CPLD中。从而使得产品设计效率大幅度提高。可以在很短时间内完成十分复杂的系统,设计这正是产品快速进入市场最宝贵的特征美国TI公司认为一个ASIC80% 13的功能可用IP核等现成逻辑合成,而未来大系统的CPLD/FPGA设计仅仅是各类再应用逻辑与IP核的拼装。其设计周期将更短与ASIC设计相比FPGA/CPLD显著的优势是开发周期短投资风险小。产品上市速度快市场适应能力强和硬件升级回旋余地大而且当产品定型和产量扩大后可将在生产中达到充分检验的VHDL设计迅速实现ASIC投产。二、课题研究的主要内容和预期目标1.主要内容本次课题,主要研究的是如何利用CPLD制系统的主控模块,该模块主要能实现如下几个功能:对初始频率信号的显示、分频、输入控制分频、分频后的显示。完成软件编程的同时,对CPLD开发板进行调试,实现功能的仿真显示。键盘DSPCPLD显示器2.预期目标1)预期设计一个奇偶分频器,利用CPLD软件编程实现数字时钟电路,主要由DSP,CPLD,键盘和显示器四部分组成。2)由于主要是对主控模块进行实现,那么利用CPLD设计分频器程序编译成功后,还需要对编译好的程序进行波形图的仿真,通过调节参数来观察程序能否实现数字时钟的显示。3)然后利用CPLD的开发板进行硬件调试。三、课题研究的方法及措施1.研究方法 13首先要对分频器的和COLD进行了解,这需要查阅一定的资料,清楚分频器的原理,各项功能的实现,CPLD的硬件功能和其内部的逻辑功能。因为本次研究完成的主要是对频率分频器的主控模块进行编程,其功能模块主要时分日的显示、日期的显示、秒表的显示,那么要根据相关的资料对这些模块进行编译。编译通过后,先用软件进行波形图的仿真,查看其结果。如果波形图软件仿真通过后,我设想是把程序下到CPLD开发板中,通过对按键和显示的设置,并用几次不同的购买情况来验证程序的正确性,到达预期的效果。2.研究措施1)收集查阅DSP以及CPLD的相关资料,对CPLD的应用设计情况进行了熟悉了解;了解不同的设计实现方法,比较现有的相关方案,确定本课题研究和实现方案,然后对方案中的各单元进行了必要的分析和研究。2)对所研究的频率分频器功能进行分类,具体分成输入分频,分频和显示功能,并对各个功能进行软件编程。3)完成了编程以后,要利用软件的仿真功能对编完的程序进行波形图仿真,通过波形的变化来初步判断程序是否满足预先所要求的功能。4)然后利用CPLD的开发板进行硬件调试。我将设置一个时间,然后根据其他计时工具校正。四、课题研究进度计划1.2010.9.13至2010.11.19分析任务,查阅DSP以及CPLD设计相关的资料;对资料进行消化,进行理论准备,方案的考虑和设计;基本完成开题报告、中、英文翻译和文献综述。2.2011.1.21至2011.3.10决定最佳设计方案;设计出总体实现电路的构架;确定所需要的元器件。3.2011.4.1至2011.4.22对功能模块进行软件编程,各单元模块通过调节参数进行软件仿真;然后利用CPLD开发板,调节各种参数对模块功能进行硬件调试,对结果进行对比分析。4.2011.4.22至2011.5.15完成毕业设计论文;做好答辩用的PPT,并作好答辩准备。五、参考文献[1]褚振勇,翁木云.FPGA设计及应用[M].西安:西安电子科技大学出版社,200.7[2]柯庚.PLD与SOPC系统设计技术[M].北京:国防工业出版社,2006.1 13[3]PeterJ.Ashenden.VHDL设计指南[M].北京:机械工业出版社,2005.6[4]曾繁泰等.EDA工程实践[M].北京:清华大学出版社,2004.7[5]徐志军,徐光辉.CPLD/FPGA的开发与应用[M].北京: 电子工业出版, 2002.1[6]王开军,姜宇柏等.面向CPLD/FPGA的VHDL设计[M].北京:机械工业出版社,2006,10.[7]邢建平,曾繁泰.VHDL程序设计教程[M].北京:清华大学出版社,2005,11.[1]黄正瑾,徐坚等.CPLD系统设计技术入门与应用[M].北京:电子工业出版社,2002,3.[2]宋万杰,罗丰等.CPLD技术及其应用[M].西安:西安电子科技大学出版社,1999,9.[3]俞一鸣,唐薇等.Altera可编程逻辑器件的应用与设计[M].北京:机械工业出版社,2007,7.[4]王道宪.CPLD/FPGA可编程逻辑器件应用与开发[M].北京:国防工业出版社,2004,1.[5]OperatingrequirementsforAlteraDevices[EB/OL],[2006-6].http://www.altera.com.cn/literature/ds/dsoprq.pdf[6]田瑞利,陈海滨等.基于CPLD的数控分频器及其应用[J].电子技术,2004,1:53-55.[7]MAX3000AProgrammableLogicDeviceFamily[EB/OL],[2004-3].http://www.altera.com.cn/literature/an/an294.pdf[8]彭丹,雷华明.基于CPLD的线阵CCD驱动电路设计与实现[J].光电子·激光,2007(7):803-807.[9]张红润,张亚凡等.FPGA/CPLD应用设计200例[M].北京:北京航空航天大学出版社,2009,1.[10]张丕状,李兆光.基于VHDL的CPLD/FPGA开发与应用[M].北京:国防工业出版社,2009,6.[11]子明.CPLD测试方法研究[J].电子测量,2010,1(1):38-43. 13毕业论文文献综述电气工程及自动化可编程逻辑器件摘要:描述可编程逻辑器件的发展历程,CPLD的构造原理以及CPLD/FPGA的开发系统的简介和可编程逻辑器件的发展方向。关键词:可编辑逻辑器件;CPLD的构造;应用领域;VHDL语言;发展方向1引言随着可编程逻辑电路和EDA技术的发展,现代电子设计技术进入一个全新的阶段,可编程逻辑器件已经是电子设计的一个重要技术基础,在逻辑电路设计及嵌入式系统设计方面,以CPLD/FPGA为代表的可编程逻辑器件已经逐步取代了传统的标准器件。2可编程逻辑器件的发展历程早期的的电子管、晶体管、小规模集成电路、中规模集成电路、大规模集成电路发展到超大规模集成电路以及许多具有特定功能的专用集成电路。随着半导体工艺的日益飞速发展,集成电路产业已经成为当今非常热门的产业之一。[1]集成电路包括专用集成电路(ASIC)和通用的可编程器件(PLD)[1][2]。虽然ASIC也能够实现将大量逻辑功能继承与单片IC之中,但是PLD具有更高的灵活性,同时能够缩短开发周期,加快产品的上市时间,因此PLD获得了广泛的应用。[2][3]随着技术的发展,早期的通用PLD慢慢的退出了历史舞台,复杂可编程逻辑器件(CPLD)和现场可编程门阵列(FPGA)渐渐成为主流产品。[1][2][3][4]FPGA是Xilinx公司于1985年首次推出的,它采用了CMOS-SRAM工艺,内部由多个独立可编程逻辑模块组成。CPLD是在20十几80年代末期在系统可编程技术出现以后,在可查出可编程逻辑器件的基础上发展起来的。[3][4]可见,CPLD和FPGA两种可编程逻辑器件鸽子具有自己的特点和逻辑功能,两者之间具有互补功能,因此两者之间能够相互发展,成为两只领导可编程逻辑器件技术发展的力量,缺一不可。[5]2.1CPLD的构造CPLD是具有固定输入和输出数目的任何组合逻辑汉书在可编程只读存储器中,以输出为输入的查找表方式来实现,能实现PCB板上几个简单PAL互连功能的器件的扩展。[1][6]CPLD是复杂的PLD,专指那些集成规模大于1000 13门的可编程逻辑器件,大多数采用浮栅型电可擦写可编程储存器(EEPROM),可反复编程,不用每次上电重新下载。[6]CPLD由可编程逻辑的功能块围绕一个可编程互连矩阵构成,由固定长度的金属线实现逻辑单元之间的互连,并增加了I/O控制模块的数量和功能。可以把CPLD的基本结构堪称由可编程逻辑阵列(LAB)、可编程I/O控制模块和可编程内部连线(PIA)等三部分组成,如图:I/O控制模块可编程逻辑阵列由若干个可编程逻辑宏单元组成,可编程逻辑宏单元内部主要包括与阵列、或阵列、可编程触发器和多路选择器等电路,能独立地配置为时序或组合工作方式。[7]在CPLD的宏单元内,通常含有两个或两个以上的触发器,其中一个触发器与输出端相连,其余触发器的输出可以通过相应的缓冲电路反馈到与阵列,从而与其他触发器一起构成较复杂的时序电路。[2][7]2.2CPLD和FPGA的应用领域随着成本、功耗和容量的不断改善,现在CPLD器件已经大面积渗透到消费电子和汽车电子应用市场。Altera展示的基于FPGA及CPLD开发的产品在消费电子、通信、汽车电子、数字电视领域的应用表明它们不断适应新市场需求使得CPLD的应用呈现多极化态势。[8][9]比如,Lionic公司的网络安全中应用的是Altera带有NiosⅡ处理器的CycloneⅡ,其作用是实现硬件加速包扫描,而NiosⅡ处理器则可以在现场进行病毒的升级更新,并在ASIC种应用NiosⅡ授权许可直接来开发ASSP,使得客户可以最低成本获得高速安全性能的解决方案,2.3CPLD和FPGA的开发系统 13CPLD的开发软件含有各种输入工具、仿真工具、版图设计工具和编程器等全线产品。因此电路设计人员无需专门的集成电路的深层知识,就可进行电路设计,可以用于设计用户所需要的数字逻辑电路,而且便于擦除修改,使用灵活。极大地缩短了开发周期,增强了可靠性,提高了灵活性。[10]Altera公司的MAX+plusⅡ开发系统是一个完全集成化、易学易用的可编程逻辑设计环境。应用该软件,就可以完成对CPLD的设计、校验、器件编程等工作。每个开发系统都有自己的描述语言,为了便于各系统之间的兼容,IEEE发布了几种标准语言,最常用的有CHDL和Verilog。VHDL是VeryHighSpeedIntegratedCircuitHDL,即超高速集成电路硬件描述语言,该语言曾于1987年和1993年两次被定为IEEE的标准,它可以快速地描述和综合FPGA的设计。[1][2][4][11]与其他硬件描述于洋相比,它在编程是更规范,程序结构更适合整个系统的硬件结构,复合各模块的信号时序关系以及数据的走向。它有以下几个特点:(1)、以VHDL语言从事设计工作,不需要考虑线路的布局问题,更加类似于软件商的高级语言,具备更强的模块化能力,并拥有良好的可读性以及程序的移植性。(2)、画原理图的设计方式需要由算法转换成硬件概念,再将硬件概念转变成一个个硬件单元,而VHDL比较接近算法的推演,可减少设计周期,加快产品的完成。(3)、拥有高效率的生成代码,能够节省大量的资源。3、总结目前,CPLD与FPGA逻辑器件正向着低电压、低功耗、系统内可重构和高速的可预测延时器件的方向发展,很多生产厂商不断采用多种新技术、新工艺来提高CPLD与FPGA逻辑器件的容量,增加软件的功能。相信在不久的将来,CPLD会成为系统级平台设计的首选,在通信、自动控制、信息处理等领域发挥更加重要的作用。参考文献[1]黄正瑾,徐坚等.CPLD系统设计技术入门与应用[M].北京:电子工业出版社,2002,3.[2]宋万杰,罗丰等.CPLD技术及其应用[M].西安:西安电子科技大学出版社,1999,9.[3]俞一鸣,唐薇等.Altera可编程逻辑器件的应用与设计[M].北京:机械工业出版社,2007,7.[4] 13王道宪.CPLD/FPGA可编程逻辑器件应用与开发[M].北京:国防工业出版社,2004,1.[5]OperatingrequirementsforAlteraDevices[EB/OL],[2006-6].http://www.altera.com.cn/literature/ds/dsoprq.pdf[6]田瑞利,陈海滨等.基于CPLD的数控分频器及其应用[J].电子技术,2004,1:53-55.[7]MAX3000AProgrammableLogicDeviceFamily[EB/OL],[2004-3].http://www.altera.com.cn/literature/an/an294.pdf[8]彭丹,雷华明.基于CPLD的线阵CCD驱动电路设计与实现[J].光电子·激光,2007(7):803-807.[9]张红润,张亚凡等.FPGA/CPLD应用设计200例[M].北京:北京航空航天大学出版社,2009,1.[10]张丕状,李兆光.基于VHDL的CPLD/FPGA开发与应用[M].北京:国防工业出版社,2009,6.[11]子明.CPLD测试方法研究[J].电子测量,2010,1(1):38-43. 13毕业设计(20__届)基于CPLD的数字时钟设计摘要 13随着电子技术的发展,当前数字系统的设计正朝着速度快、容量大、体积小、重量轻的方向发展。电子设计自动化的关键技术之一是要求用形式化方法来描述系统的硬件电路,即要用所谓硬件描述语言来描述电路。所以硬件描述语言及相关的仿真、综合等技术的研究是当今电子设计自动化领域的一个重要课题。CPLD具有编程灵活、集成度高、设计开发周期短、适用范围宽、开发工具先进、设计制造成本低、对设计者的硬件经验要求低、标准产品无需测试、保密性强、价格大众化等特点,可实现较大规模的电路设计,因此被广泛应用于产品的原型设计和产品生产之中。本系统采用Altera公司的CPLD芯片EPM3128A来完成具有计时、日历、秒表三种功能。编写VHDL语言程序下载到EPM3128A上。由EPM3128A实现对键盘和显示的控制。系统能显示年、月、日、时、分、秒,并具有秒表功能。计时结果通过6个8字型LED显示。通过4个设置键,可以对计时系统的参数进行调整。关键词:CPLD;EPM3128A;VHDL;QUARTUSII 13AbstractWiththedevelopmentofelectronictechnology,thecurrentdesignofdigitalsystemsismovingfast,largecapacity,smallsize,lightweightanddirection.Electronicdesignautomationisoneofthekeytechnologiesrequiredtouseformalmethodstodescribethehardwarecircuit,whichusetheso-calledhardwaredescriptionlanguagetodescribethecircuit.Sothehardwaredescriptionlanguageandassociatedsimulation,andintegrationoftechnologyintoday'selectronicdesignautomationisanimportantissue.CPLDhastheprogrammingflexibility,highintegration,designanddevelopmentcycleisshort,andwideapplication,developmenttools,advanceddesignandmanufacturingcostislow,theexperienceofthedesigner'shardwarerequirementslow,standardproductswithouttesting,confidentiality,sopopularprices,Canachievelarge-scalecircuitdesign,soitiswidelyusedinproductdesignandproductionprototypeinto.ThesystemusesAltera'sCPLDchipEPM3128Atocompleteatime,calendar,stopwatchthreefunctions.WriteVHDLlanguageprogramtotheEPM3128Aon.EPM3128Arealizedbythekeyboardanddisplaycontrol.Thesystemcandisplayyear,month,day,hour,minutes,seconds,andhasastopwatchfunction.TimingResults68fontsLEDdisplay.Through4settingsbutton,youcanadjustthetimingparametersofthesystem.KeyWords:CPLD;EPM3128A;VHDL;QUARTUSII 13目录摘要3ABSTRACT41引言12总体设计32.1系统设计要求32.1.1时钟功能32.1.2秒表功能32.2系统框图43硬件设计53.1时钟电路及DSP片内资源53.1.1时钟电路53.1.2DSP片内资源53.1.3双访问RAM(DRAM)63.1.4FLASH程序存储器63.2通用定时器概述63.2.1通用定时器结构73.2.2通用定时器输入83.2.3通用定时计数器的工作模式83.3键盘和显示模块103.3.1LED数码显示管结构113.3.2显示器工作原理123.3.3数码管,键盘的连接133.4JTAG仿真接口设计143.4.1F240仿真接口设计143.4.23128仿真接口设计154软件设计164.1VHDL语言的发展及特点164.2QuartusII开发软件使用说明174.3键盘和显示程序设计流程图204.4分频电路的设计234.4.1CPLD的介绍234.4.23128对10Mhz的晶振的分频234.4.33128对60进制的设计234.4.43128对24进制的设计244.4.53128对天的设计244.4.63128对月的设计244.4.73128对年的设计255结论26 13参考文献28附录1实验原理图29附录2软件设计程序30 1引言20世纪70年代,最早的可编程逻辑器件--PLD诞生了。其输出结构是可编程的逻辑宏单元,因为它的硬件结构设计可由软件完成,因而它的设计比纯硬件的数字电路具有很强的灵活性,但其过于简单的结构也使它们只能实现规模较小的电路[1]。为弥补PLD只能设计小规模电路这一缺陷,20世纪80年代中期,推出了复杂可编程逻辑器件——CPLD(ComplexProgrammableLogicDevice)。目前应用已深入网络、仪器仪表、汽车电子、数控机床、航天测控设备等方面[2]。当今社会是数字化的社会,是数字集成电路广泛应用的社会。数字集成电路本身在不断地进行更新换代。它由早期的电子管、晶体管、小中规模集成电路、发展到超大规模集成电路以及许多具有特定功能的专用集成电路。但是,随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担[1]。系统设计师们更愿意自己设计专用集成电路芯片,而且希望专用集成电路的设计周期尽可能短,最好是在实验室里就能设计出合适的专用集成电路芯片,并且立即投入实际应用之中,因而出现了县城可编程逻辑器件(FPLD),其中应用最广泛的当属县城可编辑门阵列(FPGA)和复杂可编程逻辑器件(CPLD)[3]。早期的可编程逻辑器件只由可编程只读存贮器、紫外线可按除存贮器和店可擦除只读存贮器三种。由于结构的限制,它们只能完成简单的数字逻辑功能。其后,出现了一类结构上稍复杂的可编程芯片,即可编程逻辑器件(PLD),它能够完成各种数字逻辑功能。典型的PLD由一个“与”门和一个“或”门阵列组成,而任意一个组合逻辑都可以用“与—或”表达式来描述,所以,PLD能以乘积和的形式完成大量的组合逻辑功能。这一阶段的产品主要有PAL(可编程阵列逻辑)和GAL(通用阵列逻辑)。PAL期间是现场可编程的,它的实现工艺有反熔丝技术、EPROM技术和EEPROM技术。还有一类结构更为灵巧的逻辑期间是可编程逻辑阵列(PLA),它也由一个“与”平面和一个“或”平面构成,但是这两个平面的连接关系是可编程的在PAL的基础上,又发展了一种通用阵列逻辑GAL(GenericArray Logic),它采用了EEPROM工艺,实现了电可擦除、电可改写,其输出结构是可编程的逻辑宏单元,因而它的设计具有很强的灵活性,但其过于简单的结构也使它们只能实现规模较小的电路。为了弥补这一缺陷,20世纪80年代中期,Altera和Xilinx分别推出了类似于PAL结构的扩展型CPLD(ComplexProgrammableLogicDevice)和与标准门阵列类似的FPGA(FieldProgrammableGateArray),它们都具有体系结构和逻辑单元灵活、集成度高以及使用范围宽等特点。[1]与门阵列等其他ASIC(ApplicationSpecificIntegratedCircuit)相比,它们又具有设计开发周期短、设计制造成本低、开发工具先进、标准产品无需测试、质量稳定以及可实时在线检验等优点,因此被广泛应用于产品的原型设计和产品生产之中。几乎所有应用门阵列、PLD和中小规模通用数字集成电路的场合均可应用FPGA和CPLD器件。CPLD/FPGA、硬件描述语言已成为设计复杂数字系统的重要手段。在用于设计、仿真数字系统的众多EDA(电子设计自动化)开发软件中,Altera公司的QuartusII软件以集成化成度高、界面友好、具有在线帮助功能、支持多种器件、易学易用等特点而得到广泛应用。本文以数字钟的设计为例介绍在QuartusII软件平台上,用VHDL语言在CPLD上设计数字时钟系统的过程。硬件描述语言(hardwaredescriptionlanguage,HDL)是电子系统硬件行为描述、结构描述、数据流描述的语言。目前,利用硬件描述语言可以进行数字电子系统的设计。随着研究的深入,利用硬件描述语言进行模拟电子系统设计或混合电子系统设计也正在探索中。国外硬件描述语言种类很多,有的从Pascal发展而来,也有一些从C语言发展而来。有些HDL成为IEEE标准,但大部分是企业标准。VHDL来源于美国军方,其他的硬件描述语言则多来源于民间公司。可谓百家争鸣,百花齐放。这些不同的语言传播到国内,同样也引起了不同的影响。在我国比较有影响的有两种硬件描述语言:VHDL语言和VerilogHDL语言。这两种语言已成为IEEE标准语言[4]。 2总体设计本次课题采用Altera公司的CPLD芯片EPM3128A来完成秒表和时钟功能。2.1系统设计要求设计一个综合性的计时系统,要求能实现年、月、日、时、分、秒及秒表等综合计时功能,同时将计时结果通过6个8段数码管显示,并且可通过4个设置键,对计时系统的有关参数进行调整。2.1.1时钟功能在时钟功能模式下能实现对时、分、秒和年、月、日的显示。6个8段数码管从左到右依次显示时、分、秒或年、月、日。这两种工作模式可以通过4个设置键来选择。由于本系统只有6个8段数码管,所以计年模块只对年份的后两位进行计数,计年的范围是2000-2099年。要求计时精度大于0.1s[5]。2.1.2秒表功能要求设置复位开关。当按下复位开关时,秒表清零并做好计时的准备。在任何情况下,只要按下复位开关,秒表都要无条件地进行复位操作,即使是在计时过程中也要无条件地进行清零操作[5]。1要求设置开始和停止开关。当按下开始开关后,将启动秒表并开始计时,当按下停止开关时,将终止秒表的计时操作,并显示计时结果。2要求计时精度大于0.01s。要求设计的计时器能够显示分(2位)、秒(2位)、0.01秒(2位)的时间。3要求秒表的最长计时时间为1小时。4输入信号复位开关信号rest_sw;启/停开关信号start_on_off;系统电源复位信号sysreset; 外部时钟信号clk;2.2系统框图本次设计可以分成CPLD、DSP以及键盘和显示3大模块。各模块的连接关系如图2-1所示。图2-1系统框图 3硬件设计本次设计用一片3128和一片F240来完成。F240实现对键盘输入信号的处理,控制显示部分,对CPLD的输入时钟进行计数。由于外加10Mhz晶振的频率超过了F240定时器的外部时钟能接收的最高外部频率。所以用3128对10Mhz的晶振进行分频并输出频率为1Khz和10hz的时钟。3.1时钟电路及DSP片内资源这里只介绍用10Mhz晶振作为外部时钟电路及部分DSP片内资源。3.1.1时钟电路DSP的时钟可以用内部时钟或外部时钟。用内部时钟时外接基准晶体和片内的PLL(锁相环)电路共同组成系统的内部时钟电路,用外部震荡器时钟时,一个独立的外部震荡器产生的时钟接到XTAL1/CLKIN引脚,此时内部的震荡器被旁路,XTAL2的引脚悬空。外部时钟的电路如图3-1所示[6]。图3-1外部震荡器时钟的连接3.1.2DSP片内资源F240具有16位地址线,可分别访问这三个独立的地址空间,每个空间的容量均为64K字。[7]1程序存储器空间为64K字。2数据存储器空间为64K字。3I/O空间为64K字。 3.1.3双访问RAM(DRAM)所有F240片内均有544字DRAM。DRAM在一个机器周期内可被访问2次,即在一个机器周期的主相写数据到DRAM;而在该周期的从相从DRAM读出数据,从而大大提高了运行速度。544字节双访问RAM分为三块:B0块、B1块、B2块,该存储器主要用来保存数据,但是B0块也可以用来保存程序。B0块配置成程序存储器空间还是数据存储器空间,要由寄存器ST1的CNF位来决定。1CNF=1,B0映射到程序存储器空间。2CNF=0,B0映射到程序存储器空间。3.1.4FLASH程序存储器片内的Flash存储器映射到程序存储器空间,对于F240,MP/引脚决定是访问片内的程序存储器(Flash)还是访问片外的程序存储器。Flash可以被编程(在2~20MHz的时钟频率范围内)或使用电擦除的方式多次使用,以便进行程序的修改和开发。Flash模块具有如下特点。1运行在3.3V电压模式下。2对Flash编程时需要在上有(5±5%)V电压供电。3Flash的编程是由CPU来实现的。3.2通用定时器概述F240有三个通用定时器。第一个定时器用于对键盘和显示部分的控制。另外的两个用于对1Khz和10hz的时钟进行计数。定时器是事件管理器的核心模块,每个事件管理器有两个通用定时器,这些定时器可以为以下应用提供独立的时间基准。1控制系统中采样周期基准。2为QEP电路和捕捉单元提供时间基准。3为比较单元和相应的PWM电路提供时间基准。 每个定时器模块除了具有定时/计数功能外,还可以用于输出电路PWM比较输出信号。3.2.1通用定时器结构通用定时器结构框图如图3-2所示。由图可知,通用定时器包括以下部分。一个可读写的TxCNT(x=1、2、3或4),它存储了计数器的当前值,并根据计数方向进行增计数或减计数。1一个可读写的16位定时器比较寄存器(双缓冲)TxCMPR(x=1、2、3或4),用于存储与通用定时器的计数器进行比较的值。2一个可读写的16位定时器周期寄存器(双缓冲)TxPR(x=1、2、3或4),周期寄存器的值决定了定时器的周期。当周期寄存器和定时计数器的值产生匹配时,根据计数器的计数模式,通用定时器复为0或开始递减计数。3一个可读写的16位定时器控制寄存器TxCON(x=1、2、3或4),TxCON决定了GP定时器的操作模式。4用于内部或外部时钟输入的可编程的时钟预定标器。5控制和中段逻辑,用于4个可屏蔽中断:上溢、下溢、定时器比较和周期中断。6一个GP定时器比较输出引脚,TxCMP(x=1、2、3或4)。7输出逻辑。8全局通用定时器控制寄存器GPTCONA/B,对不同的定时器事件,指定定时器采取的动作,指明GP定时器的计数方向,并定义ADC(模数转换)模块的启动信号。GPTCONA/B是可读写的,但对于其中的状态指示位写无效。注意:定时器2可以选择定时器1的周期寄存器,寄存器4可以选择寄存器3的周期寄存器作为它的寄存器。在图3-2中,当x=2或4是,MUX才可用。 图3-2GP定时器的结构框图3.2.2通用定时器输入通用定时器的输入包括以下几部分。1内部CPU时钟。2外部时钟TCLKINA/B,最高频率的1/4。3方向输入TDIRA/B,当定时器处于定向的增/减计数模式时用于控制定时器的计数方向。当TDIRA/B引脚置为高电平时,定义为递增计数;当TDIRA/B引脚置为低电平时,定义为递减计数。4复位信号RESET3.2.3通用定时计数器的工作模式每个通用定时器主要有4种可选的计数模式。1停止/保持模式。2连续递增计数模式。3定向的增/减计数模式。 4连续增/减计数模式。本次设计采用定向的增/减计数模式。(1)停止/保持模式在这种模式下,通用定时器的计数操作保持其当前状态,定时器的计数器、比较输出和预定标计数器都保持不变。(2)连续递增计数模式在这种计数模式下,通用定时器将按照已定标的输入时钟计数,直到定时器计数器的值和周期寄存器的值匹配为止。产生匹配之后,在下一个输入时钟的上升沿,通用定时器复位为0,并开始另一个计数周期。(3)定向的增/减计数模式图3-3为通用定时器的增/减记数模式(TxPR=3)示意图。在定向的增/减记数模式中,通用定时器将根据TDIRA/B引脚的输入,对定标的时钟进行递增或递减的计数模式。当引脚TDIRA/B保持为高电平时,通用定时器递增计数,直到计数值达到周期寄存器的值或FFFFFh(当计数器初值大于周期寄存器的值)。当定时器的值等于周期寄存器的值或FFFFh,并且引脚TDIRA/B保持为高电平时,定时器的计数器复位到0并进行递增计数到周期寄存器的值。当引脚TDIRA/B保持为低电平时,通用定时器将递减计数直到计数值为0。当定时器递减计数到0,并且引脚TDIRA/B保持为低电平时,定时器的计数器重新载入周期寄存器的值,再次开始递减计数。定时器的初始值可以为0000h~FFFFh(包括0000h和FFFFh)之间的任何值。当定时器的初始值大于周期寄存器的值时,如果引脚TDIRA/B保持为高电平,定时器递增计数到FFFFh后,复位到0,并继续计数直到周期寄存器的值;如果引脚TDIRA/B保持为低电平,当定时器的初始值大于周期寄存器的值时,定时器将递减计数到周期寄存器的值后,继续递减计数直到0,而后定时器计数器重新载入周期寄存器的值并开始新的递减计数。周期、上溢和下溢中断标志位、中断以及相应的动作都根据相应的事件产生,这一点与连续递增计数模式一样。引脚TDIRA/B的变化到计数方向的变化之间的延迟为当前计数结束后的一个CPU时钟周期(即当前预定标的计数器周期结束之后的一个CPU时钟周期)。在这种模式下,定时器的计数方向由GPCONA/B 寄存器中相应的方向指示位指示:1表示递增计数,0表示递减计数。无论从TCLKINA/B引脚输入的外部时钟还是内部时钟CPU时钟都可作为该模式下的定时器输入时钟。图3-3通用定时计数器的定向增/减模式示意图(4)连续增/减计数模式这种工作模式与定向的增/减计数模式一样,但是在连续增/减计数模式下,引脚TDIRA/B的状态对计数方向没有影响。定时器的计数方向在定时器的值达到周期积存器的值时(或FFFFh,如果定时器的初始值大于周期寄存器的值),从递增计数变为递减计数;当计数器的值为0时定时器的计数方向从减计数变为增计数。3.3键盘和显示模块对DSP进行外部I/O扩展。DSP的14位数据线与CPLD的14个I/O口连接。3位地址线与3个I/O口连接。3位地址线实现对I/O口的译码。为外部I/O空间选通,低有效。为读/写选通,指明与外围器件通信期间信号的传送方向。为写使能,的下降沿表示DSP正在驱动外部数据总线D0~D13。对外部I/O空间写时有效DSP与CPLD的连接如图3-4所示。 图3-4DSP与CPLD的连接关系图3.3.1LED数码显示管结构LED显示器是硬件系统中常用的输出器件。它是由若干个发光二级管组成的,当发光二级管导通时,相应的一个点或一个笔画发亮。控制不同组合的二级管导通,就能显示出各中字符。常用的LED显示器有8段和“米”字段之分。这种显示器有共阳极和共阴极两种。如图3-5所示,共阴极LED显示器的发光二级管的阴极连接在一起,通常此公共阴极接地。当某个发光二级管的阳极为高电平时,发光二级管点亮,相应的段被显示。同样,共阳极LED显示器的发光二级管的阳极连接在一起,通常此公共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二级管被点亮,相应的段被显示[8]。图3-5所示的三个显示器都有dp显示段,用于显示小数点。由于只有8个段发光二级管,所以字型码为一个字节。“米”字段的LED由于有15个发光二级管,所以字型码为两字节。设计所采用的数码显示管是3位8段式共阴极高亮度数码显示管3631AS,其内部的连接如图3-5所示。图3-53631AS内部连接图 3.3.2显示器工作原理点亮显示器有静态和动态两种方法。所谓静态显示,就是当显示器显示某个字符时,相应的发光二极管恒定的导通或截止,例如8段显示器a、b、c、d、e、f导通,g,dp截止,显示0。这种显示方式每一位都需要有一个8位输出口控制。三位显示器的接口逻辑,如图3-5所示。图中采用共阴极显示器。静态显示时,较小的电流能得到较高的亮度且字符不闪烁。当显示器位数较少时,采用静态显示的方法是适合的。当位数较多时,用静态显示所需的I/O太多,所需电流太大。故一般采用动态显示方法。通过一个扫描电路对LED进行逐个扫描。这次设计的电路用6个位选信号8个段选信号来控制显示该位和该位的段。只要每个扫描频率超过人的视觉暂留频率24Hz,就可以达到所有8个段选信号同时点亮的效果。一位LED数码管如图3-6所示。图3-6LED数码管DSP与CPLD连接时CPLD内部的逻辑关系如图3-7所示。图中的锁存器、4位缓冲器、5输入与门和非门都是3128的内部逻辑。LD6中D0-D5是由DSP输入到CPLD的6位数据总线信号。SL0-SL5是6个片选信号。选择相应的数码管。LD8中D0-D7是由DSP输入到CPLD的8位数据总线信号。MM0-MM7是八个段选信号。在位选信号选中某位数码管并且该位有段选信号输入时那么这个数码管的对应段被点亮。 图3-7CPLD内部的逻辑关系3.3.3数码管,键盘的连接1CPLD与一个数码管如图3-8所示。图3-8中DISP信号是两个锁存器LD6和LD8的使能信号。由DSP的3位地址线A2、A1、A0以及,编码得到。M0~M8分别与数码管的a、b、c、d、e、f、dp段连接。SL为片选信号。 图3-8CPLD与一个数码管的连接2键盘与CPLD的连接如图3-9所示。图中的4个键未按下时,I/O口的电平为高。当按下某个键,该键对应的I/O口电平变低,CPLD循检到该信号并通过缓冲器传送到DSP的数据位上。由DSP读入键盘的信号并处理。图3-9键盘与CPLD的连接3.4JTAG仿真接口设计3.4.1F240仿真接口设计DSP仿真头用14根信号线,并符合JTAGIEEE1149.1标准。图3-10给出了F240的JTAG仿真接口电路。在该图中,XS9是用于与DSP 仿真器相连的仿真头。其中第5脚所接为5V,该信号用于点亮仿真器上的Targetpower灯。第6脚悬空。仿真头相邻两个引脚的距离是100mil。图3-10F240的JTAG仿真接口电路3.4.23128仿真接口设计JTAG模式下对单个器件的配置是经过引脚TCK、TMS、TDI和TDO完成的。仿真头如图3-11所示。仿真头相邻两个引脚的距离是100mil[9]。图3-113128的JTAG仿真接口电路 4软件设计4.1VHDL语言的发展及特点VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年[10]。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。应用VHDL进行工程设计的优点是多方面的。1利用VHDL语言设计硬件电路的优点(1)设计技术齐全、方法灵活、支持广泛VHDL语言可以支持自上至下(TopDown)和基于库(Library-Based)的设计方法,而且还支持同步电路、异步电路、FPGA以及其它随机电路的设计。其范围之广是其它HDL语言所不能比拟的[11]。例如,SFL语言和UDL/I语言,它们只能描述同步电路。另外,由于VHDL语言早在1987年12月已作为IEEE——STD——1076标准公开发布。因此,目前大多数EDA工具差不多都能支持VHDL语言。这样给VHDL语言进一步推广和应用创造了良好的环境。(2)系统硬件描述功能强 如前所述,VHDL语言具有多层次描述系统硬件功能的能力,可以从系统的数学模型直到门级电路。另外,高层次的行为描述可以与低层次的RTL描述和结构描述混合使用。例如,在PC机扩展槽上要设计一块接口卡,该接口卡的硬件设计应满足主机的接口要求。此时,主机部分功能可以用行为方式描述,而接口卡可以采用RTL方式描述。在系统仿真是就可以验证接口卡是否正确。这样,在接口卡设计出来以前就可以知道接口卡的工作是否满足系统要求。再如,VHDL语言可以自定义数据类型,这样也给编程人员带来较大的自由和方便。(3)VHDL语言可以与工艺无关编程在用VHDL语言设计系统硬件时,没有嵌入与工艺有关的信息。当然,这样的信息是可以用VHDL语言来编写的。与大多说HDL语言不同之处是,当门级或门级以上层次的描述通过仿真验证以后,再用相应的工具将设计映射成不同的工艺(如MOS、CMOS等)。这样,在工艺更新时,就无须修改原设计程序,只要改变相应的映射工具就行了。由此可见,无论修改电路还是修改工艺相互之间不会产生什么不良影响。(4)VHDL语言标准、规范、易于共享和复用由于VHDL语言已作为一种IEEE的工业标准,这样,设计成果便于复用和交流,反过来就能更进一步推动VHDL语言的推广及完善。另外,VHDL语言的语法比较严格。2VHDL语言程序的基本结构一个完整的VHDL语言程序通常由实体(Entity)、构造体(Architecture)、配置(Configuration)、包集合(Package)、和库(Library)5部分构成。前4种是可分别编译的源设计单元。实体用于描述所设计的系统的外部接口信号;构造体用于描述系统内部的结构和行为;包集合存放各设计模块都能共享的数据类型、常数和子程序等;配置用于从库选取所需单元来组成或由ASIC芯片制造商提供,以便于在设计中为大家所共享。4.2QuartusII开发软件使用说明1推荐的PC机系统配置奔腾II或更好的PC机。256MB以上的有效内存,不低于128MB的物理内存。1.5GB以上的硬盘空间。Windows98、Windows2000或Windows NT3.51、WindowsNT4.0操作系统。2设计输入QuartusII支持多种设计输入方法,QuartusII的软件设计流程如图4-1所示。图4-1QuartusII软件的设计流程(1)QuartusII本身具有的编辑器,原理图形设计输入,文本编辑输入(如AHDL、VHDL、Verilog)和内存编辑输入(如Hex、Mif)。(2)第三方EDA工具编辑的标准格式文件,如EDIF、HDL、VQM。(3)采用一些别的方法优化和提高输入的灵活性,如混合设计格式,它利用LPM和宏功能模块来加速设计输入。3建立新设计项目由于QuartusII编译器的工作对象是项目,所以在进行一个逻辑设计时,首先要指定该设计的项目名称,对于每个新项目应该建立一个单独的子目录。QuartusII软件的项目包括所有的设计文件、仿真文件、系统设置及该设计的层次信息。单击File菜单中的NewProjectWizard或者运行quartus_map可执行文件建立新工程。建立新工程时,指定工程工作目录,分配工程名称,指定顶层设计实体的名称。还可以指定在工程中使用的设计文件、其它源文件、用户库和EDA工具,以及目标器件。4使用QuartusII文本编辑器QuartusII文本编辑器是一个灵活的工具,用于以AHDL、VHDL和VerilogHDL语言以及Tcl脚本语言输入文本型设计。还可以使用文本编辑器输入、编辑和查看其它ASCII文本文件,包括为QuartusII软件或由QuartusII软件建立的文本文件。还可以用TextEditor将任何AHDL声明或节段模板、Tcl命令或所支持的VHDL以及VerilogHDL构造模板插入到当前文件中。AHDL、VHDL和VerilogHDL模板为你输入 HDL语法提供了简便方法,提高了设计输入的速度和准确度。还可获取有关所有AHDL单元、关键字和声明以及宏功能模块和基本单元的上下文敏感词帮助。5使用QuartusII仿真器进行仿真设计使用QuartusII仿真器进行仿真设计可以使用QuartusIISimulator仿真任何设计[11]。根据所需的信息类型,可以进行功能仿真以测试设计的逻辑功能,也可以进行时序仿真,在目标器件中测试设计的逻辑功能和最坏情况下的时序,或者采用FastTiming模型进行时序仿真,在最快的器件速率等级上仿真尽可能快的时序条件。QuartusII软件可以仿真整个设计,也可以仿真设计的任何部分。你可以指定工程中的任何设计实体为顶层设计实体,并仿真顶层实体及其所有附属设计实体。通过使用Settings对话框(Assignments菜单)或SimulatorTool窗口下的SimulatorSettings页面,你可以指定要执行的仿真类型,仿真所需的时间周期,向量激励源,以及其他仿真选项。开始仿真之前,必须通过时序仿真编译设计,或者通过单击用于功能仿真的GenerateFunctionalSimulationNetlist命令(Processing菜单),来生成合适的仿真网表。此外,必须建立并指定一个向量源文件为仿真输入向量的源。Simulator使用向量源文件所包含的输入向量,来仿真同一条件下编程器件将要产生的输出信号。以下步骤说明在QuartusII软件中进行功能或时序仿真的基本流程:① 指定Simulator设置。② 如果正在执行功能仿真,则选择GenerateFunctionalSimulationNetlist命令。如果正在执行时序仿真,则编译设计。③ 建立并指定向量源文件。④ 指向Processing菜单中的Start,单击StartSimulation,运行仿真[13]。6建立波形文件QuartusIIWaveformEditor可以建立和编辑用于波形或文本格式仿真的输入向量。使用WaveformEditor,可以将输入向量添加到波形文件中,此文件描述设计中的逻辑行为QuartusII软件支持Vector波形文件(.vwf)、Vector表输出文件(.tbl)、Vector文件(.vec)和SimulatorChannel文件(.scf)格式的波形文件。不能在WaveformEditor中编辑SimulatorChannel文件或者Vector文件,但可以将其保存为VectorWaveform文件。 7建立项目,用VHDL语言设计输入并编译,仿真及生成波形文件的例子。选择File>NewProjectWizard建立名为light的项目。选择File>New在DeviceDesignFiles下选择VHDLFILE。保存文件。输入以下程序:LIBRARYieee;USEieee.std_logic_1164.all;ENTITYlightISPORT(x1,x2INSTD_LOGIC;f:OUTSTD_LOGIC);ENDlight;ARCHITECTURELogicFunctionOFlightISBEGINf<=(x1ANDNOTx2)OR(NOTx1ANDx2);ENDLogicFunction;选择Processing>StartCompilation或直接点击来编译程序。用WaveformEditor来仿真。选择File>New>OtherFiles>VectorWaveformEditor。再选择Edit>Insert>NodeorBus中的nodefinder单击list再单击ok选择x1,x2的波形。保存。单击工具栏中的开始仿真图标。波形如图4-2所示。图4-2light的波形4.3键盘和显示程序设计流程图1键盘程序设计流程如图4-3所示。 图4-3键盘程序设计流程2显示程序设计流程如图4-4所示 图4-4显示程序设计流程 4.4分频电路的设计利用VHDL语言写出分频程序下载到3128上实现对10Mhz的晶振的分频。4.4.1CPLD的介绍CPLD是结构比较复杂的可编程逻辑器件,逻辑宏单元内部主要包括与或阵列、可编程触发器和多路选择器等电路,能独立地配置为时序或组合逻辑工作方式。CPLD与GAL器件相似,其逻辑宏单元与I/O做在一起,称为输出逻辑宏单元,但其宏单元及其与阵列数目比GAL大得多。CPLD器件的宏单元在内部称为内部逻辑宏单元。CPLD除了密度高之外,许多优点都反映在逻辑单元上。它包括以下输出宏单元结构和特点。寄存器输出和反馈,可用于实现计数器和移位寄存器等。1多触发器结构和“隐埋”触发器结构。2可编程I/O单元,允许用户对这些引脚编程,作为输入或输出。3异或门输出结构,可用于一般用户的多功能计数,能十分有效地建立大的计数器。4乘积项共享结构。5异步时钟和时钟选择。4.4.23128对10Mhz的晶振的分频由于对10Mhz进行分频时分频系数太大为便于观察将分频系数分别设为4和10。仿真的波形如图4-5。图4-54分频和10分频的输出波形4.4.33128对60进制的设计 数字时钟的秒和分都是60进制。仿真的波形如图4-6。图4-660进制输出波形4.4.43128对24进制的设计数字时钟是24小时制的。仿真的波形如图4-7。图4-724进制输出波形4.4.53128对天的设计数字时钟的日期是根据月份显示的,一个月可能有31天或者30天;当该年为闰年,二月有29天,否则二月有28天。仿真图如4-8。图4-8天的输出波形4.4.63128对月的设计数字时钟的月份 一,三,五,七,八,十,十二月有31;四,六,九,十一月有30天;当该年为闰年,二月有29天,否则二月有28天。仿真图如4-9。图4-9月的输出波形4.4.73128对年的设计年:由于年号只显示最后两位,故为0~99,是100进制。但每四年为一闰年。仿真图如4-10。图4-10年的输出波形 5结论本次设计方案按照任务书的要求完成了各项功能。基本达到了毕业设计的目的。对VHDL语言编程一定的提高。查找资料,利用资料,阅读外文资料的能力有所提高。在做毕业设计的过程中遇到了许多困难。如查找外文资料、翻译外文资料甚至用word2003时也遇到了许多难题。经过老师的指导和自己的努力基本上能解决所遇到的困难。通过做毕业设计自己有一定的收获。 参考文献[1]曾繁泰等.EDA工程实践[M].北京:清华大学出版社,2004.7[2]柯庚.PLD与SOPC系统设计技术[M].北京:国防工业出版社,2006.1[3]李可为.数字钟电路及应用[M].北京:电子工业大学出版社,1996.1[4]褚振勇,翁木云.FPGA设计及应用[M].西安:西安电子科技大学出版社,200.7[5]侯伯亨,顾新.VHDL硬件VHDL描述语言与数字逻辑电路设计[M].西安:西安电子科技大学出版社,1997.9[6]刘旄光,李玲.基于CPLD的单片多功能数字钟[J].工程技术,2005VOL34NO.10[7]张毅刚等.TMS320LF240X系列DSP原理、开发与应用[M].哈尔滨:哈尔滨工业大学出版社,2006.8[8]张雄伟等.DSP芯片原理与应用[M].北京:机械工业出版社,2005.5[9]达正花.基于EDA技术设计数字钟[J].甘肃科技,2004,10.VOL20NO.10[10]徐志军,徐光辉.CPLD/FPGA的开发与应用[M].北京:电子工业出版,2002.1[11]DigitalSystemDesignwithVHDL[M].北京:电子工业出版,2002.10[12]IntroductionToQuartusIIManualwww.altera.com/literature/manual/intro_to_quartus2.pdf[13]潘松,黄继.EDA技术与VHDL[M].北京:清华大学出版社,2009.9 附录1实验原理图 附录2软件设计程序分频电路的VHDL程序libraryieee;useieee.std_logic_1164.all;entityfpqisport(clk:instd_logic;x,y:outstd_logic);endentityfpq;architecturefpqoffpqisconstantt1:integer:=4;constantt2:integer:=10;beginprocess(clk)variablecnt1:integerrange0tot1-1;beginifrising_edge(clk)thenif(cnt1ifq2=3andq1=1thenq2<="0000";q1<="0001";cout<='1';elsecout<='0';endif;when"01"=>ifq2=3andq1=0thenq2<="0000";q1<="0001";cout<='1';elsecout<='0';endif;when"10"=>ifq2=2andq1=8thenq2<="0000";q1<="0001";cout<='1';elsecout<='0';endif;when"11"=>ifq2=2andq1=9thenq2<="0000";q1<="0001";cout<='1';elsecout<='0';endif;whenothers=>null; endcase;endif;endprocess;T1<=q1;T2<=q2;end;天的程序如下libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitytianisport(clk:instd_logic;pan:instd_logic_vector(1downto0);T1,T2:outstd_logic_vector(3downto0);cout:outstd_logic);endtian;architectureoneoftianissignalq1,q2:std_logic_vector(3downto0);signalab:std_logic_vector(1downto0);beginprocess(clk,pan)beginifclk'eventandclk='1'––检测时钟上升沿thenq1<=q1+1;––q1开始计数ifq1=9thenq1<="0000";q2<=q2+1;––q1=9时,q2开始计数且q1清零endif;casepaniswhen"00"=>ifq2=3andq1=1thenq2<="0000";q1<="0001";cout<='1';elsecout<='0';––当pan=“00”时,如果q2=3,q1=1,q2清零,q1从1开始计数,并输出进位信号endif; when"01"=>ifq2=3andq1=0thenq2<="0000";q1<="0001";cout<='1';elsecout<='0';––当pan=“01”时,如果q2=3,q1=0,q2清零,q1从1开始计数,并输出进位信号endif;when"10"=>ifq2=2andq1=8thenq2<="0000";q1<="0001";cout<='1';elsecout<='0';––当pan=“10”时,如果q2=2,q1=9,q2清零,q1从1开始计数,并输出进位信号endif;when"11"=>ifq2=2andq1=9thenq2<="0000";q1<="0001";cout<='1';elsecout<='0';––当pan=“11”时,如果q2=2,q1=8,q2清零,q1从1开始计数,并输出进位信号endif;whenothers=>null;endcase;endif;endprocess;T1<=q1;T2<=q2;end;月的程序如下libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityyueisport(clk,run:instd_logic;cout:outstd_logic;pan:outstd_logic_vector(1downto0);Y1,Y2:outstd_logic_vector(3downto0));endyue;architecturebehavofyueis signalq1,q2:std_logic_vector(3downto0);signalq3:std_logic_vector(7downto0);beginprocess(clk,run)beginifclk'eventandclk='1'then––检测时钟上升沿q1<=q1+1;––q1开始计数ifq1=9thenq1<="0000";q2<=q2+1;endif;––q1=9时,q2开始计数且q1清零ifq1=2andq2=1thenq1<="0001";q2<="0000";cout<='1';elsecout<='0';––q1=2,q2=1时,q2清零,q1从1开始计数并输出进位信号endif;q3<=q2&q1;caseq3iswhen"00000001"=>pan<="00";––当q3为1月时pan=“00”可知1月为31天when"00000010"=>ifrun='1'thenpan<="11";elsepan<="10";endif;––当q3为2月时,若输入信号run=‘1’为闰年则pan=“11”即2月是29天;否则2月为28天when"00000011"=>pan<="00";––当q3为3月时pan=“00”可知3月为31天when"00000100"=>pan<="01";when"00000101"=>pan<="00";when"00000110"=>pan<="01";––当q3为6月时pan=“01”可知6月为30天when"00000111"=>pan<="00";when"00001000"=>pan<="00";when"00001001"=>pan<="01";when"00001010"=>pan<="00";when"00001011"=>pan<="01";when"00001100"=>pan<="00";whenothers=>null; endcase;endif;Y1<=q1;Y2<=q2;endprocess;endbehav;年的程序如下libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitynianisport(clk:instd_logic;q1,q2:outstd_logic_vector(3downto0);run:outstd_logic);endentity;architectureoneofnianissignalcq1,cq2:std_logic_vector(3downto0);signalq3:std_logic_vector(3downto0);beginPRO1:process(clk)beginifclk'eventandclk='1'then––检测时钟上升沿cq1<=cq1+1;––cq1开始计数ifcq1=9thencq2<=cq2+1;cq1<="0000";endif;––cq1=9时,cq2开始计数且cq1清零ifcq1=9andcq2<=9thencq1<="0000";cq2<="0000";endif;––cq1=9,cq2=1时,cq1,cq2清零endif;endprocess;PRO2:process(clk)begin ifclk'eventandclk='1'then––检测时钟上升沿q3<=q3+1;––q3开始计数ifq3=3thenq3<="0000";run<='1';elserun<='0';endif;endif;––q3=3后q3清零且输出信号run=‘1’endprocess;q1<=cq1;q2<=cq2;end;调时libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitytiaoshiisport(k1,k2:instd_logic;m1,m2,m3,m4,m5:instd_logic;n1,n2,n3,n4,n5:outstd_logic;l1,l2,l3,l4,l5:outstd_logic);endentity;architectureoneoftiaoshiissignalq:std_logic_vector(3downto0);beginprocess(k1)beginifk1'eventandk1='1'thenq<=q+1;––检测时钟上升沿,q开始计数ifq=5thenq<="0000";––q=5后q清零endif;endif;caseqiswhen"0000"=>n1<=m1;n2<=m2;n3<=m3;n4<=m4;n5<=m5;l1<='0';l2<='0';l3<='0';l4<='0';l5<='0';––当q=“0000” 时,把miao的输出给fen的输入,fen的输出给shi的输入,shi的输出给tian的输入,tian的输出给yue的输入,yue的输出给nian的输入,此时灯全灭,正常走时when"0001"=>n1<=k2;n2<='0';n3<='0';n4<='0';n5<='0';l1<='1';l2<='0';l3<='0';l4<='0';l5<='0';––当q=“0001”时,控制fen的变化,灯l1亮when"0010"=>n1<='0';n2<=k2;n3<='0';n4<='0';n5<='0';l1<='0';l2<='1';l3<='0';l4<='0';l5<='0';––当q=“0010”时,控制shi的变化,灯l2亮when"0011"=>n1<='0';n2<='0';n3<=k2;n4<='0';n5<='0';l1<='0';l2<='0';l3<='1';l4<='0';l5<='0';––当q=“0011”时,控制tian的变化,灯l3亮when"0100"=>n1<='0';n2<='0';n3<='0';n4<=k2;n5<='0';l1<='0';l2<='0';l3<='0';l4<='1';l5<='0';––当q=“0100”时,控制yue的变化,灯l4亮when"0101"=>n1<='0';n2<='0';n3<='0';n4<='0';n5<=k2;l1<='0';l2<='0';l3<='0';l4<='0';l5<='1';––当q=“0101”时,控制nian的变化,灯l5亮whenothers=>NULL;endcase;endprocess;end;显示libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityxianshiisport(k3:instd_logic;ns,ng,ts,tg,ys,yg,ss,sg,fs,fg,ms,mg:instd_logic_vector(3downto0);q1,q2,q4,q5,q7,q8:outstd_logic_vector(3downto0);l:outstd_logic);endentity;architectureoneofxianshiisbeginprocess(k3)beginifk3='1'thenq8<=ns;q7<=ng;q5<=ys;q4<=yg;q2<=ts;q1<=tg;l<='1';––k3=‘1’时,三部分数码管从左至右分别显示年、月、日,l输出信号为1 elseq8<=ss;q7<=sg;q5<=fs;q4<=fg;q2<=ms;q1<=mg;l<='0';––k3=‘0’时,三部分数码管从左至右分别显示时、分、秒,l输出信号为1endif;endprocess;endone;秒表libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityMINSECONDbisport(clk,clrm,stop:instd_logic;----时钟/清零信号secm1,secm0:outstd_logic_vector(3downto0);----秒高位/低位co:outstd_logic);-------输出/进位信号endMINSECONDb;architectureSECofMINSECONDbissignalclk1,DOUT2:std_logic;beginprocess(clk,clrm)variablecnt1,cnt0:std_logic_vector(3downto0);---计数variablecount2:integerrangeto10beginifclk'eventandclk='1'thenifcount2>=0andcount2<10thencount2:=count2+1;elsecount2:=0;dout2<=notdout2;endififclrm='1'then----当clr为1时,高低位均为0cnt1:="0000";cnt0:="0000";elsifclk'eventandclk='1'then ifstop='1'thencnt0:=cnt0;cnt1:=cnt1;endif;ifcnt1="1001"andcnt0="1000"then----当记数为98(实际是经过59个记时脉冲)co<='1';----进位cnt0:="1001";----低位为9elsifcnt0<"1001"then----小于9时cnt0:=cnt0+1;----计数--elsifcnt0="1001"then--clk1<=notclk1;elsecnt0:="0000";ifcnt1<"1001"then----高位小于9时cnt1:=cnt1+1;elsecnt1:="0000";co<='0';endif;endif;endif;secm1<=cnt1;secm0<=cnt0;endprocess;endSEC;

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
关闭