您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > EDA模可变计数器设计
1南昌大学实验报告学生姓名:邱永洪学号:6100210026专业班级:中兴101班实验类型:□验证□综合■设计□创新实验日期:2012.10.19实验二模可变计数器的设计一、实验目的1、学习设计脉冲分频程序的设计,掌握分频的作用。2、学会利用控制位M来控制计数器的模值。二、实验内容与要求1、计设置一位控制模的位M,要求M=0,模23计数;当M=1,模109计数;2、计数结果用三位数码管显示,显示BCD码;3、利用Quartus软件实现波形仿真;4、应用实验箱验证此计数器的功能。三、实验思路1、要求分别实现模23和模109的计数,因些我分别用GW、SW、BW代表个位,十位和百位。还有一个控制模的位M,当M为0时实现模23计数,只用到GW和SW分别为个位和十位;当M为1时实现模109计数,用GW、SW、BW分别为个位,十位和百位计数。2、由于要求用三个数码管显示,由于每次只能只能选中一个数码管显示管,因此我使用了数码管的动态扫描来实现视觉上多个数码管显示管同时显示的效果,这个步骤中分频计的作用很重要。我使用了一个可变的R作为分频计的初值。3、计数时分两种情况1)、当M为0时,实现模23计数,当个位为9则向十位进位,并个位清0,当个位小于9,则个位自身加1;计数到22时当下一个时钟上升沿到来时就清0重计。2)、当M为1时,实现模109计数,当个位为9则向十位进位,并个位清0,当个位小于9,则个位自身加1;当个位和十位均为9时,就向百位进位,同时个位和十位自身清0;计数到108时当下一个时钟上升沿到来时就清0重计。四、实验程序LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYcountIS2PORT(CLK,M,EN,RST:INSTD_LOGIC;R:INSTD_LOGIC_VECTOR(7DOWNTO0);---分频计数初值sel0,sel1,sel2:bufferSTD_LOGIC;SG:OUTSTD_LOGIC_VECTOR(7DOWNTO0);--数码管八段CLK1:bufferSTD_LOGIC;GW,SW,BW:bufferSTD_LOGIC_VECTOR(3DOWNTO0);--计数器的个,十,百位COUT:OUTSTD_LOGIC;--溢出信号SEL:OUTSTD_LOGIC_VECTOR(7DOWNTO0)--位选信号);ENDcount;ARCHITECTUREbehavOFcountISSIGNALCNT,X:STD_LOGIC_VECTOR(7DOWNTO0);--数码管分频计数SIGNALJ:STD_LOGIC_VECTOR(11DOWNTO0);--12位BCD计数值SIGNALCNT8:STD_LOGIC_VECTOR(2DOWNTO0);--数码管选择SIGNALA:STD_LOGIC_VECTOR(3DOWNTO0);--数码管显示值SIGNALMODEL:STD_LOGIC_VECTOR(11DOWNTO0);--模长信号BEGINP1:PROCESS(CLK,R)--进程P1分出的频率用来数码管的位BEGINX=R;IFCLK'EVENTANDCLK='1'THENCNT=CNT+1;IFCNT=X-1THENCLK1='1';CNT=00000000;--R分频:R是一个八位的二进制数ELSECLK1='0';ENDIF;ENDIF;ENDPROCESS;P2:PROCESS(EN,RST,M,CLK1)--计数BEGINCASEMISWHEN'0'=MODEL=000000100010;--23WHEN'1'=MODEL=000100001000;--109ENDCASE;GW=J(3downto0);SW=J(7downto4);3BW=J(11downto8);IFRST='1'THENJ=(others='0');ELSIFCLK1'EVENTANDCLK1='1'THENIFEN='1'THENIFJMODELTHENIFGW=9THEN--个位为9时加7调整J=J+7;IFSW=9THEN--十位为9时加103调整J=J+103;ENDIF;ELSEJ=J+1;ENDIF;ELSEJ=(others='0');ENDIF;ENDIF;ENDIF;ENDPROCESS;P3:PROCESS(CLK)--数码管控制BEGINIFCLK'EVENTANDCLK='1'THENIFCNT8010THENCNT8=CNT8+1;ELSECNT8=(OTHERS='0');ENDIF;ENDIF;SEL(0)=sel0;SEL(1)=sel1;SEL(2)=sel2;CASECNT8IS--个、十、百分别送数码管动态显示WHEN000=sel2='0';sel1='1';sel0='0';A=GW;WHEN001=sel2='0';sel1='0';sel0='1';A=SW;WHEN010=sel2='0';sel1='0';sel0='0';A=BW;WHENOTHERS=NULL;ENDCASE;ENDPROCESS;P4:PROCESS(A)--七段译码程序4BEGINCASEAISWHEN0000=SG=00111111;WHEN0001=SG=00000110;WHEN0010=SG=01011011;WHEN0011=SG=01001111;WHEN0100=SG=01100110;WHEN0101=SG=01101101;WHEN0110=SG=01111101;WHEN0111=SG=00000111;WHEN1000=SG=01111111;WHEN1001=SG=01101111;WHENOTHERS=NULL;ENDCASE;ENDPROCESS;COUT='1'WHENJ=MODELELSE'0';ENDbehav;五、仿真波形的建立与分析1)、仿真波形的建立如下52)、仿真结果如下图所示仿真结果图下面分各种情况一一对其分析1)、EN、REST键的功能检验,COUNT键的进位溢出脉冲:2)当M=0时,实现模23计数功能:REST脉冲使各位清零63)当M=1时,实现模109计数功能:计数满22个位,十位清零计数满22产生进位脉冲7六、引脚锁定在这里我设置了八个用户开关K0-K7用来设置初值R,三个用户按键S1、S2、S3,其中S1控制EN,S2控制M,S3控制REST。1.Assignments-.device-引脚锁定,参照下载实验板1K100的引脚号说明书,选择适当的引脚2.引脚锁定后,保存,必须重新进行一次全程编译,编译通过后才能编程下载。3、编程下载,用下载线将计算机并口和试验箱上的JTAG口接起来,接通电源。选择Tools—Programmer菜单,打开programmer窗口。在mode中选中JTAG,将Program/Configure下的笑方框选中4在开始编程之前,必须正确设置编程硬件。点击“HardwareSetup”按钮,打开硬件设置口。点击“AddHardware”打开硬件添加窗口,在“Hardwaretype”下拉框中选择“ByteBlasterMVorByteBlasterII”,“Port”下拉框中选择“LPT1”,点击OK按钮确认,关闭HardwareSetup窗口,完成硬件设置。计数满108个位,十位,百位清零。85、点击“Start”按钮,开始编程下载图(14)下载成功七、硬件测试结果下载成功后,开始在实验箱上检验结果,我设置的CLK=1KHz(1)clk为时钟信号,由时钟信号的上升沿触发计数(2)m为模值输入端,当其变化时,计数容量相应发生变化;(3)rest为清零控制端,当其为高电平时清零;(4)en为使能控制端,当其为高电平时正常计数,当其为低电平时暂停计数;(5)、当按下S3时,使M=0数码管计数到22后开始清0,实现了模23计数;再次按下S3,M为1时,数码管计数到108后,开始清0,实现了模109计数。而且当数码管计数到45,我把电平2置为低电平,即M为0时,个位,十位都清0,转向模22计数。因此实验硬件测试结果与程序要实现的功能相符合。(6)、通过八个电平开关K0-K7设置R的初值为R=250;当按下用户按键S3时,使REST产生一个脉冲,实现清零,在数码管上看到全显示0;实验成功。八、试验心得(1)、在建立波形文件时,ENDTIME设置非常重要,一开始没有设置好,在仿真波形图上看不到个位、十位和百位的计数情况,本实验ENDTIME=1ms,波形仿真中模23中,CLK为周期100s;形仿真中模109中,CLK为周期10s。硬件测试时,当CLK脉冲很低时,可以看到动态扫描数码管的扫描情况,八个数码管依次显示。(2)数码管动态显示时,要注意选通位的设置。九、参考资料《EDA技术实用教程》潘松黄继业《EDA实验指导书》丁杰朱启标
本文标题:EDA模可变计数器设计
链接地址:https://www.777doc.com/doc-3516107 .html