您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 100进制同步计数器设计
1课程名称:可编程逻辑器件应用实验名称:100进制同步计数器设计专业班级:姓名:学号:实验日期:一、实验目的:1、掌握计数器的原理及设计方法;2、设计一个0~100的计数器;3、利用实验二的七段数码管电路进行显示;二、实验要求:1、用VHDL语言进行描写;2、有计数显示输出;3、有清零端和计数使能端;三、实验结果:1.VHDL程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEmy_pkgISComponentnd2--或门PORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDComponent;Componentled_decoderPORT(din:instd_logic_vector(3downto0);--四位二进制码输入seg:outstd_logic_vector(6downto0));--输出LED七段码ENDComponent;成绩:教师:2ComponentCNT60--2位BCD码60进制计数器PORT(CR:INSTD_LOGIC;EN:INSTD_LOGIC;CLK:INSTD_LOGIC;OUTLOW:BUFFERSTD_LOGIC_VECTOR(3DOWNTO0);OUTHIGH:BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));ENDComponent;ComponentCNT100--带使能和清零信号的100进制计数器PORT(CLK:INSTD_LOGIC;EN:INSTD_LOGIC;CLR:INSTD_LOGIC;OUTLOW:BUFFERSTD_LOGIC_VECTOR(3DOWNTO0);OUTHIGH:BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));ENDComponent;Componentfreq_div--50MHZ时钟分频出1HzPORT(clkinput:INSTD_LOGIC;output:OUTSTD_LOGIC);ENDComponent;3Componentjtd--交通灯控制器PORT(CLKIN:INSTD_LOGIC;--50MHZR1,G1,R2,G2,R3,G3,R4,G4:OUTSTD_LOGIC;--红绿灯信号输出GAO,DI:BUFFERSTD_LOGIC_VECTOR(3DOWNTO0)--倒计时输出);ENDComponent;ENDmy_pkg;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEwork.my_pkg.ALL;--打开程序包ENTITYDemo3ISPORT(CRl:INSTD_LOGIC;ENl:INSTD_LOGIC;CLKIN:INSTD_LOGIC;LEDLOW,LEDHIGH:OUTSTD_LOGIC_VECTOR(6downto0));ENDDemo3;ARCHITECTUREbehvOFDemo3ISSIGNALCLKTEMP:STD_LOGIC;--定义中转信号SIGNALLEDLOWTEMP,LEDHIGHTEMP:STD_LOGIC_VECTOR(3downto0);BEGINu1:freq_divPORTMAP(CLKIN,CLKTEMP);--位置关联方式u2:CNT60PORTMAP(CR=CRl,EN=ENl,CLK=CLKTEMP,OUTLOW=LEDLOWTEMP,OUTHIGH=LEDHIGHTEMP);--名字关联方式4u3:led_decoderPORTMAP(LEDLOWTEMP,LEDLOW);--低位数码管输出u4:led_decoderPORTMAP(LEDHIGHTEMP,LEDHIGH);--高位数码管输出ENDbehv;LIBRARYieee;USEieee.std_logic_1164.all;ENTITYfreq_divISPORT(clkinput:INSTD_LOGIC;output:OUTSTD_LOGIC);ENDfreq_div;ARCHITECTURErtOFfreq_divISSIGNALcount_signal:INTEGERRANGE0TO25000000;signalmid1:STD_LOGIC;BEGINPROCESS(clkinput)BEGINIF(clkinput'EVENTANDclkinput='1')THENifcount_signal=24999999then--50MHzdivisionto1Hzcount_signal=0;mid1=notmid1;elsecount_signal=count_signal+1;endif;output=mid1;endif;5ENDPROCESS;endrt;--文件名:decoder.vhdlibraryIEEE;useIEEE.STD_LOGIC_1164.ALL;entityled_decoderisPort(din:instd_logic_vector(3downto0);--四位二进制码输入seg:outstd_logic_vector(6downto0));--输出LED七段码endled_decoder;architectureBehavioralofled_decoderisbeginprocess(din)begincasediniswhen0000=seg=1000000;--0when0001=seg=1111001;--1when0010=seg=0100100;--2when0011=seg=0110000;--3when0100=seg=0011001;--4when0101=seg=0010010;--5when0110=seg=0000010;--6when0111=seg=1011000;--7when1000=seg=0000000;--8when1001=seg=0010000;--9whenothers=seg=0000110;--Eendcase;endprocess;6endBehavioral;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT60ISPORT(CR:INSTD_LOGIC;EN:INSTD_LOGIC;CLK:INSTD_LOGIC;OUTLOW:BUFFERSTD_LOGIC_VECTOR(3DOWNTO0);OUTHIGH:BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));ENDCNT60;ARCHITECTUREbehavOFCNT60ISBEGINPROCESS(CLK,CR,EN)BEGINifCR='1'thenOUTHIGH=0000;OUTLOW=0000;elsifEN='1'thenIFCLK'EVENTANDCLK='1'THENIFOUTHIGH=1001ANDOUTLOW=1001THENOUTHIGH=0000;OUTLOW=0000;ELSIFOUTLOW=1001THEN7OUTHIGH=OUTHIGH+1;OUTLOW=0000;ELSEOUTLOW=OUTLOW+1;ENDIF;ENDIF;ENDIF;ENDPROCESS;ENDbehav;2.仿真结果以及说明①.分频器仿真结果:经过多次仿真,发现按照实验要求分频出1HZ的频率是无法仿真出需要的结果的,因为时钟脉冲太多,QuartusII显示不了。因此我在代码中修改了下,改成每25次高电平计数器加一,实现分频后为1MHZ的频率,仿真出上图的波形。仿真结果与分频后的频率一致。②.计数器仿真结果:8计数器代码仿真波形如上图,实现了实验要求的功能,实现了100进制的自加计数器。当使能EN=1时,计数器开始自动增加;当CLR=1时,计数器清零;当各位计数到9的时候,十位自动增加1;当计数到99之后,计数器自动清零,开始重新的自加;仿真结果与计数器功能一致。3.程序下载及运行情况说明四、实验总结:通过这次的可编程逻辑器件应用课,我对QuartusⅡ软件的使用与CPLD/FPGA设计有进一步了解与掌握。实验通过一个简单的实例来演示如何使用QuartusII在做一个0~100的计数器。虽然有许多不懂,但经过查询资料,使我克服困难,同时加深了对可编程逻辑器件应用与开发这门课的兴趣,我相信,以后能更好运用其中知识。9
本文标题:100进制同步计数器设计
链接地址:https://www.777doc.com/doc-3832994 .html