1课程设计说明书(本科)题目:基于CPLD/FPDA数字秒表设计姓名:赵超尚晓亮王浩专业:电子信息工程班级:08级2班2011年6月21日2目录摘要………………………………………………………………………………3第一章设计任务和目的…………………………………………………………31.1设计任务……………………………………………………………31.2设计目的……………………………………………………………31.3设计中所用工具……………………………………………………3第二章EDA、CPLD及VHDL语言概述……………………………………………42.1EDA概述及开发工具………………………………………………42.1.1EDA技术概述……………………………………………42.1.2EDA技术工具……………………………………………42.1.3PCB设计软件…………………………………………52.2CPLD概述及开发工具……………………………………………52.2.1CPLD技术概述…………………………………………52.2.2CPLD开发工具…………………………………………52.3VHDL语言概述及特点………………………………………………62.3.1语言概述…………………………………………………62.3.2VHDL语言特点……………………………………………7第三章总体设计的方案…………………………………………………………73.1总体设计思想………………………………………………………73.2总体硬件设计方案…………………………………………………83.3总体软件设计方案…………………………………………………9第四章软件设计及仿真…………………………………………………………104.110分频模块程序设计及仿真………………………………………104.21000分频模块程序设计及仿真………………………………………114.3七段数码译码程序及仿真……………………………………………124.4100分之1秒模块程序设计及仿真……………………………………144.5输出扫描模块程序设计及仿真…………………………………………164.6分钟模块程序设计及仿真………………………………………………184.7分钟模块程序设计及仿真………………………………………………19第五章基于AT89C51单片机的表设计……………………………………………215.1秒表硬件总电路……………………………………………………215.2系统仿真及调试………………………………………………………22第六章总结…………………………………………………………………………246.1总结…………………………………………………………………246.2收获…………………………………………………………………24参考文献……………………………………………………………………………25附录一:单片机秒表汇编源程序…………………………………………………253基于CPLD/FPDA数字秒表设计摘要:本次EDA课程设计硬件器件基于CPLD,软件程序基于VHDL语言,仿真采用QuartusⅡ5.0,制作一个秒表。电路原理图的制作使用了Protel99se,软件设计思想从底层到顶层依次调试仿真。并写出了每一部分的源程序和时序仿真图。另外本设计中还基于Protues用AT89C51制作了一个秒表,将CPLD和单片机进行比较。关键词:EDACPLDVHDLQuartusⅡ5.0ProtuesAT89C51秒表第一章设计任务的目的1.1设计任务设计并实现数字秒表。下载芯片:Altera的MAX3000系列EPM3256ATC144-10。电子秒表具有以下基本功能:1.具有秒表计时显示功能,最大计数99.9,分辨率0.1秒(基本功能);2.具有计时启动与停止功能(基本功能);3.可以实现上次计时数据的调出显示功能(扩展功能);1.2设计目的1.掌握可编程逻辑器件的基本原理及利用EDA开发工具QuartusII5.0(Max+plusII)进行可编程逻辑器件设计的方法;2.熟练掌握可编程逻辑器件的原理图层次化设计方法;3.掌握利用QuartusII5.0(Max+plusII10.2)进行软件仿真及对可编程逻辑器件进行硬件下载的方法。4.熟悉实际工程项目开发的流程与设计思想;1.3设计中所用工具本设计硬件是基于CPLD/FPGA芯片制作一个简单的数字秒表,具体实现是用CPLD/FPGA开发硬件实验系统上的EPM3254ATC144-10芯片作主控模块,显示模块用8个七段数码管显示,实验开发板一有很多的时钟信号,本实验中所用的1MHz时钟可从开发板上很容易获得。开发软件是基于QuartusⅡ5.0,它继承了MAX-plusⅡ所有优点,是更加完善的PLD设计工具。它提供了完整的多平台设计环境,能够直接满足特定设计需要,为可编程芯片系统(SOPC)提供全面的设计环境,将为Altera的DSP模块进行系统模型设计提供了集成综合环境。它可以完成VHDL语言的编译、时序的仿真和程序的调试烧写工作等工作。本设计中所用语言为VHDL(Very-High-SpeedIntegratedCircuitHDL),设计思想是从底层到顶层依次调试、仿真。VHDL是以高级语言为甚而,能够以形式化方式描述电路的结构和行为并用于模拟和综合的高级描述方法。目的是用软件的方法实现硬件电路的设计,实现RTL级仿真,验证设计的正确性,而不必像在传统的手工设计过程中那样,必须等到完成后才能进行实测和调试。4第三章总体设计方案3.1总体设计思想要产生准确的时钟信号必须要一个很高频率的信号进行分频后得到想要的时钟信号才能确保时钟的精度,本设计中使用1MHz时钟信号先进行10分频得到100KHz的信号为数码管扫描信号,再将1KHz信号进行1000分频得到100Hz信号,此信号作为秒表的百分之一秒为,然后每100码元产生一个进为从后得到1秒钟的信号,再每60秒产生一个分钟信号作为分钟信号。总体设计方案如图3-1所示。图3-1秒表总体设计方案3.2总体硬件设计方案硬件使用EPM3254ATC144-10(引脚如图3-2)作主控制,8个七段数码管作显示部分,三个开关分别起:开始、暂停、清零作用,总电路图如图3-45图3-2EPM3254ATC144-10引脚图3-3总硬件电路图3.3总体软件设计方案软件设计思想是从底层往顶层设计,将一个比较复杂的程序划分成7个小的模块,再通过一个顶层电路将七个子程序连接起来。本设计中分为七个子模块分别为:10分频、1000分频、一百分之一秒模块、秒钟模块、分钟模块、译码模块和显示模块。具体电路图如图3-4所示,体仿真结果如图3-5所示。6图3-4软件总电路图图3-5软件总电路仿真结果第四章软件设计及仿真4.110分频模块程序设计及仿真libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityf10isport(clk:instd_logic;clk_out:outstd_logic);end;architectureartoff10issignalcount:integerrange0to9;---改X值,7signalclk_data:std_logic;beginprocess(clk,count)beginifclk'eventandclk='1'thenifcount=9then---X值决定分频倍数count=0;clk_data=notclk_data;elsecount=count+1;endif;endif;clk_out=clk_data;endprocess;endart;图4-14.21000分频模块程序设计及仿真libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityf1000isport(clk:instd_logic;clk_out:outstd_logic);end;architectureartoff1000issignalcount:integerrange0to999;---改X值,signalclk_data:std_logic;beginprocess(clk,count)begin8ifclk'eventandclk='1'thenifcount=999then---X值决定分频倍数count=0;clk_data=notclk_data;elsecount=count+1;endif;endif;clk_out=clk_data;endprocess;endart;图4-24.3七段数码译码程序及仿真说明:本程序适用于共阳极七段数码管。其硬件如下图所示:硬件描述语言如下:LIBRARYieee;useieee.std_logic_1164.all;9useieee.std_logic_unsigned.all;entitydeledisport(num:instd_logic_vector(3downto0);led:outstd_logic_vector(6downto0));enddeled;architecturefunofdeledisbeginled=1000000WHENnum=0000ELSE–-显示“0”1111001WHENnum=0001ELSE–-显示“1”0100100WHENnum=0010ELSE–-显示“2”0110000WHENnum=0011ELSE–-显示“3”0011001WHENnum=0100ELSE–-显示“4”0010010WHENnum=0101ELSE–-显示“5”0000010WHENnum=0110ELSE–-显示“6”1111000WHENnum=0111ELSE–-显示“7”0000000WHENnum=1000ELSE–-显示“8”0010000WHENnum=1001ELSE–-显示“9”0111111WHENnum=1111;–-显示“-”endfun;图4-3注:从图中可看出当num=”0000”时,led=“1000000”所以显示的是“0”,又如当num=”0111”时,led=”1111000”所以显示为“7”。104.4100分之1秒模块程序设计及仿真百分之一秒硬件如下图所示,clk为时钟脉冲输入端,实际中脉冲频率为100Hz,clr为清零端,当clr=‘1’时归“00”En为使能端,当En=‘1’时,芯片使能Stop为停止计数端,当stop=‘1’时停止计数Co为分钟进位端,每100个clk产生一个进位信号Sec1百分之一秒的十位Sec0百分之一秒的个位硬件描述语言:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitymiao100isport(clk,clr,En,STOP:instd_logic;----时钟/清零信号sec1,sec0:outstd_logic_vector(3downto0);----秒高位/低位co:outstd_logic);-------输出/进位信号endmiao100;architectureSECofmiao100isbeginprocess(clk,clr)11variablecnt1,cnt0:std_logic_vector(3downto0);---计数beginifclr='1'then----当ckr为1时,高低位均为0cnt1:=0000;cnt0:=0000;elsifclk'eventandclk='1'thenIFEn='1'THENifstop='1'thencnt0:=cnt0;cnt1:=cnt1;elsifcnt1=1001andcnt0=1000thenco='1';-