您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > cpld 秒表 电子综合系统设计
电子综合系统设计论文题目基于CPLD的秒表设计学生姓名学号院系电子与信息工程学院专业电子信息工程指导教师刘建成二〇一一年六月四日基于CPLD的秒表设计一、课程任务:随着大规模集成电路加工技术即半导体工艺技术的发展上,使得表征半导体工艺水平的线宽已经达到了纳米级。所以,集成电路设计正在不断地向超大规模、极低功耗和超高速的方向发。而现代电子设计技术的核心已日趋转向基于计算机的电子设计自动化展技术,即EDA技术。EDA技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言HDL为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。通过学习电子综合系统设计这门课程使得我们队EDA技术及其运用有了个基本的认识,通过设计一个简单的秒表系统,熟悉CPLD设计的相关的设计步骤和相应软件MAXPLUS2的使用,以及VHDL语言的设计,为以后的学习打下一定的基础。1、会使用MAXPLUS2,会使用VHDL编程。2、设计秒表,微秒位为100进制,输入为1MHz,能够显示到分位。3、有简单的控制按键,开始键和清零键和停止键。二、设计框图本系统设计采用自顶向下的设计方案,系统的整体组装设计原理图如图1所示,它主要由控制模块、时基分频模块,计时模块和显示模块四部分组成。各模块分别完成计时过程的控制功能、计时功能与显示功能。我们利用CPLD设计一个简单的秒表,经过一个1000分频和10分频,得到100Hz计时脉冲由Q10输出,将Q10经过MIAOMIAO模块得到0.00~0.99秒输出,并产生1秒的进位信号。1秒的进位输出经过由十进制和六进制构成的秒模块,得到00~59秒的输出,并且产生1分钟进位输出。1分钟的进位输出经过由十进制和六进制构成的分模块,得到0~59分的输出。另外秒表电路用ENA作为计时允许信号,当ENA等于1,计时开始;当ENA=0时,计时结束,CLR为清除信号,当CLR=1,秒表的记录的时间被清除。STOP为计时暂停信号,当STOP=1时,秒表计时暂停。三、原理图我们通过设计相应模块来实现秒表的各项功能,秒表电路的逻辑图如下:四、各模块的软件设计及仿真波形4.11000分频模块的设计,模块名称为F1000。由于我们采用的是1Mz的有源晶振,为了获得100Hz,应该进行10000分频,所以我们采用一个1000分频和一个10分频级联方式来产生。每来500个时钟信号,输出信号取反了一次,从而实现1000分频。程序如下:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYf1000ISPORT(CLK:inSTD_LOGIC;q1000:OUTSTD_LOGIC);ENDf1000;ARCHITECTUREoneOFf1000ISSIGNALX:STD_LOGIC;BEGINPROCESS(CLK)variableCNT:INTEGERRANGE0TO499;BEGINIFCLK'EVENTANDCLK='1'thenIFCNT499thenCNT:=CNT+1;ELSECNT:=0;X=NOTX;ENDIF;ENDIF;q1000=X;ENDPROCESS;ENDone;波形仿真如才所示:由1图2对比可得此模块确实实现了1000分频。4.2每来5个时钟信号,输出信号取反了一次,从而实现10分频。程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useIEEE.std_logic_arith.all;entityf10isport(clk:instd_logic;q10:outstd_logic);endf10;architectureccc_arcoff10issignalf:std_logic;beginprocess(clk)variablecnt:integerrange0to4;beginifclk'eventandclk='1'thenifcnt4thencnt:=cnt+1;elsecnt:=0;f=notf;endif;endif;q10=f;endprocess;endccc_arc;仿真波形如下4、微妙模块:微秒模块是由两个十进制级联的而成的,当微妙的个位数值大于9时产生进位,使得微妙的十位数字加1,当微妙的十位值大于9时,产生1秒的进位输出。当ENA=0则计数不开始,等STOP=1时计数暂停,当CLR=1时,计数值全部归零。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitymiaomiaoisport(clk,clr,ENA,STOP:instd_logic;----时钟/清零信号sec1,sec0:outstd_logic_vector(3downto0);----秒高位/低位co:outstd_logic);-------输出/进位信号endmiaomiao;architectureSECofmiaomiaoisbeginprocess(clk,clr)variablecnt1,cnt0:std_logic_vector(3downto0);---计数beginifclr='1'then----当ckr为1时,高低位均为0cnt1:=0000;cnt0:=0000;elsifclk'eventandclk='1'thenIFENA='1'THENifstop='1'thencnt0:=cnt0;cnt1:=cnt1;elsifcnt1=1001andcnt0=1000thenco='1';----进位cnt0:=1001;----低位为9elsifcnt01001then----小于9时cnt0:=cnt0+1;----计数elsecnt0:=0000;ifcnt11001then----高位小于5时cnt1:=cnt1+1;elsecnt1:=0000;co='0';endif;endif;endif;endif;sec1=cnt1;sec0=cnt0;endprocess;endSEC;仿真波形如下:5、秒模块:秒模块主要由十进制和六进制组成,当秒的个位大于9时产生进位,使秒的十位数值加1,当秒的数值大于5时,则产生1分钟的进位。程序如下:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitySECONDisport(clk,clr:instd_logic;----时钟/清零信号sec1,sec0:outstd_logic_vector(3downto0);----秒高位/低位co:outstd_logic);-------输出/进位信号endSECOND;architectureSECofSECONDisbeginprocess(clk,clr)variablecnt1,cnt0:std_logic_vector(3downto0);---计数beginifclr='1'then----当ckr为1时,高低位均为0cnt1:=0000;cnt0:=0000;elsifclk'eventandclk='1'thenifcnt1=0101andcnt0=1000then----当记数为58(实际是经过59个记时脉冲)cnt0:=1001;----低位为9co='1';----进位elsifcnt01001then----小于9时cnt0:=cnt0+1;----计数elsecnt0:=0000;ifcnt10101then----高位小于5时cnt1:=cnt1+1;elsecnt1:=0000;Co='0';endif;endif;endif;sec1=cnt1;sec0=cnt0;endprocess;endSEC;波形仿真图如下6、段译码我们通过设计一个简单的译码器,把8421码转换成数码管对应显示的二进制的值。libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityDECODERisPORT(SUM:INstd_logic_vector(3downto0);LED7S:OUTstd_logic_vector(6downto0));ENDENTITY;architectureARTOFDECODERISBEGINLED7S=1000000WHENSUM=0000ELSE1111001WHENSUM=0001ELSE0100100WHENSUM=0010ELSE0110000WHENSUM=0011ELSE0011001WHENSUM=0100ELSE0010010WHENSUM=0101ELSE0000010WHENSUM=0110ELSE1111000WHENSUM=0111ELSE0000000WHENSUM=1000ELSE0010000WHENSUM=1001ELSE0111111WHENSUM=1111;endarchitecture;3、扫描程序:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityseltimeisport(clk:instd_logic;count1:instd_logic_vector(3downto0);count2:instd_logic_vector(3downto0);count3:instd_logic_vector(3downto0);count4:instd_logic_vector(3downto0);count5:instd_logic_vector(3downto0);count6:instd_logic_vector(3downto0);sel:outstd_logic_vector(7downto0);YIMA:outstd_logic_vector(3downto0));endentityseltime;architectureartofseltimeissignaldaout:std_logic_vector(3downto0);signalsum:std_logic_vector(3downto0);beginYIMA=DAOUT;process(clk)isbeginifclk'eventandclk='1'thenifsum=0111thensum=0000;elsesum=sum+1;ENDIF;ELSENULL;ENDIF;casesumiswhen0000=daout=count1;sel=00000001;when0001=daout=count2;sel=00000010;when0010=daout=1111;sel=00000100;when0011=daout=count3;sel=00001000;when0100=daout=count4;sel=00010000;when0101=daout=1111;sel=00100000;when0110=daout=count5;sel=01000000;when0111=daout=count6;sel=10000000;WHENOTHERS=daout=1111;endcase;endprocess;endarchitecture;五、硬件电路:1、下载口部分:TDI/IO14TDO/IO71TCK/IO62TMS/IO23U1JEPM7128SLC84-151KR2100KR41KR31KR5GND+52、1MHz晶振的输入口:INPUT/GC
本文标题:cpld 秒表 电子综合系统设计
链接地址:https://www.777doc.com/doc-3611718 .html