基于CPLD的秒表设计_第1页
基于CPLD的秒表设计_第2页
基于CPLD的秒表设计_第3页
基于CPLD的秒表设计_第4页
基于CPLD的秒表设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计说明书(本科) 题 目: 基于CPLD/FPDA数字秒表设计 姓 名: 赵 超 尚晓亮 王 浩 专 业: 电子信息工程 班 级: 08级2班 2011年 6 月 21 日目录摘要 3第一章 设计任务和目的 31.1 设计任务 31.2 设计目的 31.3 设计中所用工具 3第二章 EDA、CPLD及VHDL语言概述 42.1 EDA概述及开发工具 42.1.1 EDA技术概述 42.1.2 EDA技术工具 42.1.3 PCB设计软件 52.2 CPLD概述及开发工具 52.2.1 CPLD技术概述 52.2.2 CPLD开发工具 52.3 VHDL语言概述及特点 62.3.1 语言概

2、述 62.3.2 VHDL语言特点 7第三章 总体设计的方案 73.1 总体设计思想 73.2 总体硬件设计方案 83.3 总体软件设计方案 9第四章 软件设计及仿真 104.1 10分频模块程序设计及仿真 104.2 1000分频模块程序设计及仿真 114.3 七段数码译码程序及仿真 124.4 100分之1秒模块程序设计及仿真 144.5 输出扫描模块程序设计及仿真 164.6 分钟模块程序设计及仿真 184.7 分钟模块程序设计及仿真 19第五章 基于AT89C51单片机的表设计 215.1 秒表硬件总电路 215.2 系统仿真及调试 22第六章 总结 246.1 总结 246.2 收获

3、 24参考文献 25附录一: 单片机秒表汇编源程序 25 基于CPLD/FPDA数字秒表设计摘要: 本次EDA课程设计硬件器件基于CPLD,软件程序基于VHDL语言,仿真采用Quartus 5.0,制作一个秒表。电路原理图的制作使用了Protel 99 se,软件设计思想从底层到顶层依次调试仿真。并写出了每一部分的源程序和时序仿真图。另外本设计中还基于Protues用AT89C51制作了一个秒表,将CPLD和单片机进行比较。关键词: EDA CPLD VHDL Quartus 5.0 Protues AT89C51 秒表第一章 设计任务的目的1.1 设计任务 设计并实现数字秒表。下载芯片:Al

4、tera的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熟悉实际工程项目开发的流程与设计思想

5、;1.3 设计中所用工具 本设计硬件是基于CPLD/FPGA芯片制作一个简单的数字秒表,具体实现是用CPLD/FPGA开发硬件实验系统上的EPM3254ATC144-10芯片作主控模块,显示模块用8个七段数码管显示,实验开发板一有很多的时钟信号,本实验中所用的1MHz时钟可从开发板上很容易获得。开发软件是基于Quartus5.0,它继承了MAX-plus所有优点,是更加完善的PLD设计工具。它提供了完整的多平台设计环境,能够直接满足特定设计需要,为可编程芯片系统(SOPC)提供全面的设计环境,将为Altera的DSP模块进行系统模型设计提供了集成综合环境。它可以完成VHDL语言的编译、时序的仿

6、真和程序的调试烧写工作等工作。本设计中所用语言为VHDL(Very-High-Speed Integrated Circuit HDL),设计思想是从底层到顶层依次调试、仿真。VHDL是以高级语言为甚而,能够以形式化方式描述电路的结构和行为并用于模拟和综合的高级描述方法。目的是用软件的方法实现硬件电路的设计,实现RTL级仿真,验证设计的正确性,而不必像在传统的手工设计过程中那样,必须等到完成后才能进行实测和调试。第三章 总体设计方案3.1 总体设计思想 要产生准确的时钟信号必须要一个很高频率的信号进行分频后得到想要的时钟信号才能确保时钟的精度,本设计中使用1MHz时钟信号先进行10分频得到10

7、0KHz的信号为数码管扫描信号,再将1KHz信号进行1000分频得到100Hz信号,此信号作为秒表的百分之一秒为,然后每100码元产生一个进为从后得到1秒钟的信号,再每60秒产生一个分钟信号作为分钟信号。总体设计方案如图3-1所示。 图3-1 秒表总体设计方案3.2 总体硬件设计方案 硬件使用EPM3254ATC144-10(引脚如图3-2)作主控制,8个七段数码管作显示部分,三个开关分别起:开始、暂停、清零作用,总电路图如图3-4图3-2 EPM3254ATC144-10引脚图 3-3 总硬件电路图3.3 总体软件设计方案 软件设计思想是从底层往顶层设计,将一个比较复杂的程序划分成7个小的模

8、块,再通过一个顶层电路将七个子程序连接起来。本设计中分为七个子模块分别为:10分频、1000分频、一百分之一秒模块、秒钟模块、分钟模块、译码模块和显示模块。具体电路图如图 3-4所示,体仿真结果如图 3-5所示。 图 3-4 软件总电路图图 3-5 软件总电路仿真结果第四章 软件设计及仿真4.1 10分频模块程序设计及仿真library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity f10 isport(clk:in std_logic; clk_out:out std_logic);end;ar

9、chitecture art of f10 issignal count:integer range 0 to 9;-改X值,signal clk_data:std_logic;beginprocess(clk,count)begin if clk'event and clk='1' then if count=9 then -X值决定分频倍数 count<=0; clk_data<=not clk_data; else count<=count+1; end if;end if;clk_out<=clk_data;end process;end

10、 art;图 4-14.2 1000分频模块程序设计及仿真library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity f1000 isport(clk:in std_logic; clk_out:out std_logic);end;architecture art of f1000 issignal count:integer range 0 to 999;-改X值,signal clk_data:std_logic;beginprocess(clk,count)begin if clk

11、9;event and clk='1' then if count=999 then -X值决定分频倍数 count<=0; clk_data<=not clk_data; else count<=count+1; end if;end if;clk_out<=clk_data;end process;end art;图 4-24.3 七段数码译码程序及仿真 说明:本程序适用于共阳极七段数码管。其硬件如下图所示:硬件描述语言如下:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_uns

12、igned.all;entity deled is port( num: in std_logic_vector(3 downto 0 ); led: out std_logic_vector(6 downto 0) ); end deled;architecture fun of deled is beginled<= "1000000"WHEN num="0000" ELSE -显示“0” "1111001"WHEN num="0001" ELSE -显示“1” "0100100"WH

13、EN num="0010"ELSE -显示“2” "0110000"WHEN num= "0011"ELSE -显示“3” "0011001"WHEN num= "0100"ELSE -显示“4” "0010010"WHEN num= "0101"ELSE -显示“5” "0000010"WHEN num="0110" ELSE -显示“6” "1111000"WHEN num="011

14、1" ELSE -显示“7” "0000000"WHEN num= "1000"ELSE -显示“8” "0010000"WHEN num= "1001" ELSE -显示“9” "0111111"WHEN num="1111" -显示“-” end fun;图 4-3注: 从图中可看出当num=”0000”时,led=“1000000”所以显示的是“0”,又如当num=”0111”时,led=”1111000”所以显示为“7”。4.4 100分之1秒模块程序设计及

15、仿真百分之一秒硬件如下图所示,clk为时钟脉冲输入端,实际中脉冲频率为100Hz,clr为清零端,当clr=1时归“00”En为使能端,当En=1时,芯片使能Stop为停止计数端,当stop=1时停止计数Co 为分钟进位端,每100个clk产生一个进位信号Sec1 百分之一秒的十位Sec0 百分之一秒的个位硬件描述语言:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity miao100 isport(clk,clr,En,STOP:in std_logic;-时钟/清零信号 sec1,s

16、ec0:out std_logic_vector(3 downto 0);-秒高位/低位 co:out std_logic);-输出/进位信号end miao100 ;architecture SEC of miao100 isbeginprocess(clk,clr)variable cnt1,cnt0:std_logic_vector(3 downto 0);-计数beginif clr='1' then-当ckr为1时,高低位均为0cnt1:="0000"cnt0:="0000"elsif clk'event and clk

17、='1' then IF En='1'THEN if stop='1' then cnt0:=cnt0; cnt1:=cnt1; elsif cnt1="1001" and cnt0="1000" thenco<='1'-进位cnt0:="1001"-低位为9elsif cnt0<"1001" then-小于9时cnt0:=cnt0+1;-计数elsecnt0:="0000"if cnt1<"1001&q

18、uot; then-高位小于5时cnt1:=cnt1+1;elsecnt1:="0000"co<='0'end if;end if;end if;end if;sec1<=cnt1;sec0<=cnt0;end process;end SEC;图4-4从图中可以看出如下: 在1个clk处sec0每1个clk自增1,当clk=100Hz时,每个sec0为一百分之一秒 在10个clk处sec1 每10个clk自增1为100分之一秒的十位 在100个clk处co产生一个进位,为1S信号4.5 输出扫描模块程序设计及仿真动态扫描显示程序硬件模拟图l

19、ibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity seltime isport(clk:in std_logic; count1:in std_logic_vector(3 downto 0); count2:in std_logic_vector(3 downto 0); count3:in std_logic_vector(3 downto 0); count4:in std_logic_vector(3 downto 0); count5:in std_logic_vector(3

20、 downto 0); count6:in std_logic_vector(3 downto 0); sel:out std_logic_vector(7 downto 0); YIMA:out std_logic_vector(3 downto 0); end entity seltime;architecture art of seltime is signal daout:std_logic_vector(3 downto 0); signal sum:std_logic_vector(3 downto 0); begin YIMA<=DAOUT; process(clk) is

21、 begin if clk'event and clk='1'then if sum>="0111" then sum<="0000" else sum<=sum+1; END IF; ELSE NULL;END IF;case sum is when "0000"=>daout<=count1;sel<="00000001" when "0001"=>daout<=count2;sel<="00000010

22、" when "0010"=>daout<="1111"sel<="00000100" when "0011"=>daout<=count3;sel<="00001000" when "0100"=>daout<=count4;sel<="00010000" when "0101"=>daout<="1111"sel<="00

23、100000" when "0110"=>daout<=count5;sel<="01000000" when "0111"=>daout<=count6;sel<="10000000" WHEN OTHERS=>daout<="1111" end case; end process;end architecture;图 4-54.6 秒模块程序设计及仿真library ieee;use ieee.std_logic_1164.all;u

24、se ieee.std_logic_unsigned.all;entity SECOND isport(clk,clr:in std_logic;-时钟/清零信号 sec1,sec0:out std_logic_vector(3 downto 0);-秒高位/低位 co:out std_logic);-输出/进位信号end SECOND;architecture SEC of SECOND isbeginprocess(clk,clr)variable cnt1,cnt0:std_logic_vector(3 downto 0);-计数beginif clr='1' then-

25、当ckr为1时,高低位均为0cnt1:="0000"cnt0:="0000"elsif clk'event and clk='1' then if cnt1="0101" and cnt0="1000" then-当记数为58(实际是经过59个记时脉冲) cnt0:="1001"-低位为9 co<='1'-进位elsif cnt0<"1001" then-小于9时cnt0:=cnt0+1;-计数elsecnt0:="

26、;0000" if cnt1<"0101" then-高位小于5时cnt1:=cnt1+1;elsecnt1:="0000"Co<='0'end if;end if;end if;sec1<=cnt1;sec0<=cnt0;end process;end SEC;图 4-64.7 分钟模块程序设计及仿真library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity MINUTE isport(clk,clr:i

27、n std_logic; min1,min0:out std_logic_vector(3 downto 0); co:out std_logic);end MINUTE;architecture MIN of MINUTE isbeginprocess(clk,clr)variable cnt1,cnt0:std_logic_vector(3 downto 0);beginif clr='1' then-当ckr为1时,高低位均为0cnt1:="0000"cnt0:="0000"elsif clk'event and clk='1' then if cnt1="0101" and cnt0="1000" thenco<='1'cnt0:="1001"elsif cnt0<"1001" thencnt0:=cnt0+

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论