3位十进制循环计数器
- 格式:doc
- 大小:166.50 KB
- 文档页数:23
班级09111学号09111008本科毕业设计论文题目基于CD4553三位数显计数器的设计学院长安学院专业通信工程学生姓名李凡导师姓名陈晓毕业设计(论文)诚信声明书本人声明:本人所提交的毕业设计论文《基于CD4553三位数显计数器的设计》是本人在指导教师指导下独立研究、写作的成果,论文中所引用他人的无论以何种方式发布的文字、研究成果,均在论文中加以说明:有关教师、同学和其他人员的写作、修订提出过并为我在论文中加以采纳的意见、建议,均已在我的致谢辞中加以说明并深致谢意。
本论文和资料若有不实之处,本人承担一切相关责任。
论文作者:(签字)时间:2013年5月25日指导教师已阅:(签字)时间:2013年5月25日西安电子科技大学长安学院毕业设计(论文)任务书学生姓名李凡学号09111008指导教师陈晓职称副教授学院长安学院专业通信工程题目名称基于CD4553三位数显计数器的设计任务与要求:任务:1、围绕毕业设计任务调研、查资料;2、汇总资料,完成调研报告;3、设计固态源。
要求:1、windows2000以上为计算机平台必须;2、论文立论,设计过程要求明晰;3、书写美观大方。
开始日期2013年1月10日完成日期2013年5月25日院长(签字)2013年月日注:本任务书一式两份,一份交学院,一份学生自己保存。
西安电子科技大学长安学院毕业设计(论文)工作计划学生姓名李凡学号09111008指导教师陈晓职称副教授学院长安学院专业通信工程题目名称基于CD4553三位数显计数器的设计一、毕业设计(论文)进度起止时间工作内容2013.1.10~2013.3.10 调研目前计数器的内外状况,查资料2013.3.11~2013.4.10 构建系统模型,画框图,流程图,进行初步设计,准备材料2013.4.1~2013.4.30 设计具体电路,进行装备、调试2013.5.1~2013.5.15 整理文档,撰写论文,送审论文初稿2013.5.15~2013.5.25 修改完成论文、幻灯片,准备答辩二、主要参考书目(资料)[1] 康华光,电子技术基础:模电部分(第四版)[M],北京:高等教育出版社;[2] 何东健,耿楠,张一宽,《数字图像处理》,西安电子科技大学出版社,2008;[3] 江晓安,董秀峰,《模拟电子技术》,西安电子科技大学出版社,2008;[4] 江晓安,董秀峰,杨颂华,《数字电子技术》,西安电子科技大学出版社,2008;三、主要仪器设备及材料硬件:计算机、三用表、电烙铁等四、教师的指导安排情况(场地安排、指导方式等)每周指导、汇报一次工作西电C教学楼,C-523教室五、对计划的说明注:本计划一式两份,一份交学院,一份学生自己保存(计划书双面打印)。
目录1课程设计的目的与作用...................................... 错误!未定义书签。
2设计任务.................................................. 错误!未定义书签。
2.1加法计数器........................................... 错误!未定义书签。
2.2序列信号发生器....................................... 错误!未定义书签。
2.3 256进制的加法器..................................... 错误!未定义书签。
3设计原理.................................................. 错误!未定义书签。
3.1加法计数器........................................... 错误!未定义书签。
3.2序列信号发生器 (2)3.3用集成芯片设计一个256进制的加法器 (2)4实验步骤 (3)4.1加法计数器 (3)4.2序列信号发生器 (7)4.3用集成芯片设计一个256进制的加法器 (9)5仿真结果与分析 (11)6设计总结与体会 (11)7参考文献.................................................. 错误!未定义书签。
1课程设计的目的与作用1.了解同步计数器及序列信号发生器工作原理;2.掌握计数器电路的分析,设计方法及应用;3.掌握序列信号发生器的分析,设计方法及应用2 设计任务2.1加法计数器1.设计一个循环型3位2进制加法计数器,其中无效状态为(000,001),组合电路选用与门和与非门等。
2.根据自己的设计接线。
3.检查无误后,测试其功能。
2.2序列信号发生器1.设计一个能循环产生给定序列的序列信号发生器,其中发生序列(0001),组合电路选用与门和与非门等。
十进制计数器简介十进制计数器是一种常见的计数器类型,用于在电子设备和计算机中记录和显示数字。
它由一组数字显示单元和逻辑电路构成,能够按照十进制系统的规则进行计数。
本文将介绍十进制计数器的工作原理、应用领域以及常见的实现方法。
工作原理十进制计数器的工作原理基于十进制数字系统。
十进制系统是一种计数和计量的方法,使用0-9这10个数字,每个数字的值代表了一定的数量。
十进制计数器通过逐个增加计数器中的数字,从0递增到9,然后再回到0,形成一个循环。
十进制计数器通常由多个数字显示单元组成,每个显示单元可以显示一个数字。
例如,一个四位的十进制计数器可以显示0至9999的数值。
计数器中的逻辑电路能够根据当前的计数值控制各个显示单元的状态,使其按照正确的顺序显示相应的数字。
应用领域十进制计数器在很多领域都有广泛的应用,特别是在计算机技术和电子设备中。
以下是一些常见的应用领域:1. 计算机在计算机中,十进制计数器用于记录和控制程序的执行次数、计时器和时钟。
例如,计算机中的时钟电路经常使用十进制计数器来实现时间的计算和显示。
2. 电子设备在许多电子设备中,如数字电子表、计算器、计数器、时钟等,都使用了十进制计数器。
它们能够以人类可读的方式显示数字,方便用户进行数值的输入和查看。
3. 工业自动化在工业自动化领域,十进制计数器可以用于对生产线上的产品数量进行计数和控制。
当计数器达到预设的数量时,可以触发相应的操作,如停止生产线或自动分拣产品。
4. 计量仪器在科学实验和工程测量中,十进制计数器被广泛用于记录和显示测量结果。
例如,在温度计、压力计、计时器等仪器中,都使用了十进制计数器来显示测量的数值。
实现方法十进制计数器可以使用不同的电子元件和逻辑电路进行实现。
以下是一些常见的实现方法:1. 逻辑门电路通过组合逻辑门电路,可以实现简单的十进制计数器。
例如,使用4个D型触发器和若干个与、或、非门,可以构建一个四位的十进制计数器。
EDA实验报告实验三、4位十进制的频率计设计班级115学号姓名日期2010.11.2一、实验目的1、设计4位十进制频率计,学习较复杂的数字系统设计方法,熟悉对Quartus II 软件的使用。
2、用4位十进制计数器对用户输入时钟UCLK进行记数二、实验原理:根据频率的定义和频率测量的基本原理,测定信号的频率必须有一个脉宽为1秒的对输入信号脉冲计数允许的信号;1秒计数结束后,计数值被锁入锁存器,计数器清零,为下一测频计数周期作准备。
这3个信号可以由一个测频控制信号发生器产生下图中的TESTCTL,它的设计要求是:TESTCTL的计数使能信号CNT_EN能产生一个1秒脉宽的周期信号,并对频率计的每一计数器CNT10的ENA使能端进行同步控制。
当CNT_EN高电平时,允许计数;低电平时停止计数,并保持其所计的脉冲数。
在停止计数期间,首先需要一个锁存信号LOAD的上跳沿将计数器在前1秒钟的计数值锁存进各锁存器REG4B中,并由外部的7段译码器译出,显示计数值。
设置锁存器的好处是:显示的数据稳定,不会由于周期性的清零信号而不断闪烁。
锁存信号之后,必须有一清零信号RST_CNT对计数器进行清零,为下1秒钟的计数操作作准备。
4位十进制频率计设计的原理框图四、实验步骤及结果五、1破解软件2、新建工程3、程序输入及编译新建文件并输入程序并进行编译。
实验VHDL程序代码:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY EX10 ISPORT (clk1Hz : IN STD_LOGIC; -- 1 Hz clockuclk : IN STD_LOGIC; -- user clock inputled0 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); led1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); led2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); led3 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);p_cnt_en : OUT STD_LOGIC; -- IO01p_rst_cnt: OUT STD_LOGIC; -- IO00p_load : OUT STD_LOGIC -- IO02);END EX10;ARCHITECTURE behv OF EX10 ISCOMPONENT cnt10PORT (clk : IN STD_LOGIC;rst : IN STD_LOGIC;ena : IN STD_LOGIC;outy: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);cout: OUT STD_LOGIC);END COMPONENT;COMPONENT reg4bPORT (load: IN STD_LOGIC;din : IN STD_LOGIC_VECTOR(3 DOWNTO 0);dout: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END COMPONENT;COMPONENT testctlPORT (clkk : IN STD_LOGIC;cnt_en : OUT STD_LOGIC;rst_cnt: OUT STD_LOGIC;load : OUT STD_LOGIC);END COMPONENT;SIGNAL cnt_en : STD_LOGIC;SIGNAL rst_cnt : STD_LOGIC;SIGNAL load : STD_LOGIC;SIGNAL dout0, dout1, dout2, dout3: STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL cout0, cout1, cout2, cout3: STD_LOGIC;BEGINp_cnt_en <= cnt_en ;p_rst_cnt <= rst_cnt;p_load <= load ;u_testctl:testctl PORT MAP (clkk => clk1Hz ,cnt_en => cnt_en ,rst_cnt => rst_cnt,load => load); u_cnt10_0:cnt10 PORT MAP (clk => uclk ,rst => rst_cnt,ena => cnt_en ,outy => dout0 ,cout => cout0 );u_cnt10_1:cnt10 PORT MAP (clk => cout0 ,rst => rst_cnt,ena => cnt_en ,outy => dout1 ,cout => cout1 );u_cnt10_2:cnt10 PORT MAP (clk => cout1 ,rst => rst_cnt,ena => cnt_en ,outy => dout2 ,cout => cout2 );u_cnt10_3:cnt10 PORT MAP (clk => cout2 ,rst => rst_cnt,ena => cnt_en ,outy => dout3 ,cout => cout3 );u_reg4b_0:reg4b PORT MAP (load => load ,din => dout0, dout => led0);u_reg4b_1:reg4b PORT MAP (load => load ,din => dout1,dout => led1);u_reg4b_2:reg4b PORT MAP (load => load ,din => dout2,dout => led2);u_reg4b_3:reg4b PORT MAP (load => load ,din => dout3,dout => led3);END behv;TESTCTL.VHD 程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY testctl ISPORT (clkk : IN STD_LOGIC;cnt_en : OUT STD_LOGIC;rst_cnt: OUT STD_LOGIC;load : OUT STD_LOGIC);END testctl;ARCHITECTURE behv OF testctl IS SIGNAL div2clk: STD_LOGIC;BEGINPROCESS(clkk)BEGINIF clkk'EVENT AND clkk = '1' THENdiv2clk <= NOT div2clk;END IF;END PROCESS;PROCESS(clkk, div2clk) BEGINIF clkk = '0' AND div2clk = '0' THENrst_cnt <= '1';ELSErst_cnt <= '0';END IF;load <= NOT div2clk;cnt_en <= div2clk;END PROCESS;END behv;LIBRARY IEEE;USEIEEE.STD_LOGIC_1164.ALL; USEIEEE.STD_LOGIC_UNSIGNED. ALL;ENTITY cnt10 ISPORT (clk : IN STD_LOGIC;rst : IN STD_LOGIC;ena : IN STD_LOGIC; outy: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);cout: OUT STD_LOGIC);END cnt10;ARCHITECTURE behv OF cnt10 ISSIGNAL cqi: STD_LOGIC_VECTOR(3 DOWNTO 0);BEGINPROCESS(clk, rst, ena) BEGINIF rst = '1' THENcqi <= "0000";cout <= '0';ELSIF clk'EVENT AND clk = '1' THENIF ena = '1' THENIF cqi = "1001" THENcqi <= "0000";cout <= '1';ELSEcqi <= cqi + 1;cout <= '0';END IF;END IF;END IF;outy <= cqi;END PROCESS;END behv;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY reg4b ISPORT (load: IN STD_LOGIC;din : IN STD_LOGIC_VECTOR(3 DOWNTO 0); dout: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END reg4b;ARCHITECTURE behv OF reg4b ISBEGINPROCESS(load)BEGINIF load'EVENT AND load = '1' THENdout <= din;END IF;END PROCESS;END behv;打开RTL图形时序仿真:打开“assignments”中的“assignments editor”打开EDA,装入模式10.根据EDA 管脚进行指定保存,并下载“sof”文件到EDA启动EDA软件。
在数字系统中,常需要对时钟脉冲的个数进行计数,以实现测量、运算和控制等功能。
具有计数功能的电路,称为计数器。
计数器是一种非常典型、应用很广的时序电路,计数器不仅能统计输入时钟脉冲的个数,还能用于分频、定时、产生节拍脉冲等。
计数器的类型很多,按计数器时钟脉冲引入方式和触发器翻转时序的异同,可分为同步计数器和异步计数器;按计数体制的异同,可分为二进制计数器、二—十进制计数器和任意进制计数器;按计数器中的变化规律的异同,可分为加法计数器、减法计数器和可逆计数器。
二进制加法计数器运用起来比较简洁方便,结构图和原理图也比其它进制的简单明了,但二进制表示一个数时,位数一般比较长。
十进制是我们日常生活中经常用到的,不用转换,所以设计十进制加法计数器比设计二进制加法计数器应用广泛,加法器是以数据的累加过程,日常生活中,数据的累加普遍存在,有时候需要一种计数器对累加过程进行运算处理,所以设计十进制加法计数器应广大人们生活的需要,对我们的生活有一个积极地促进作用,解决了生活中许多问题,所以会设计十进制加法计数器使我们对数字电路的理论和实践知识的充分结合,也使我们对电子技术基础有了深刻的了解,而且增强了我们对电子技术基础产生了浓厚的兴趣,这次课程设计使我受益匪浅!一、设计题目 (3)二、设计目的 (3)三、设计依据 (3)四、设计内容 (3)五、设计思路 (4)六、设计方案 (7)七、改进意见 (10)八、设计总结 (11)九、参考文献 (12)一、设计题目十进制加法计数器二、设计目的1.学习电子电路设计任务。
2.通过课程设计培养学生自学能力和分析问题、解决问题的能力。
3.通过设计使学生具有一定的计算能力、制图能力以及查阅手册、使用国家技术标准的能力和一定的文字表达能力。
三、设计依据1.用JK触发器组成。
2.实现同步或异步加法计数。
四、设计内容1.复习课本,收集查阅资料,选定设计方案;2.绘制电气框图、电气原理图;3.对主要元器件进行计算选择,列写元器件的规格及明细表;4.设计总结及改进意见;5.参考资料;6.编写说明书。
现代电子设计实验报告实验名称:3位十进制循环计数器的设计系(科):信息科学与技术系班级:学号:姓名:完成时间:2012年4月24日. 1 .一、实验内容(一)设计要求1.设计一个3位十进制循环计数器,从0加到999,再恢复到0,循环往复。
每秒计数器加1。
2.有复位功能,当复位端reset为高时,计数器清零,停止计数。
3.可以控制计数的开始start和停止stop。
当计数开始start信号有效时,计数器开始计数;当计数停止stop信号有效时,计数停止;当start信号再次有效时,继续计数。
4.计数器的计数值采用动态显示方式在数码管上显示出来。
5.进行设计,仿真并下载程序到实验箱的CPLD模块板进行验证。
(二)电路模块cyclecntsysclk reset startSE G[6. SCAN[7.★提示:reset信号可以使用拨动开关来产生。
start和stop信号使用按键来实现输入信号:sysclk:基准时钟,50MHz;reset:异步复位信号,高有效;start,stop:计数开始和计数停止信号输入;. 2 .输出信号:SEG[6..0]:段码信号输出。
SCAN[7..0]:位码信号输出。
二、实验原理此系统的核心为一个三位循环计数器,将此计数器的输出结果通过分位电路动态显示到三个数码管上面。
另外的辅助电路分别为四个不同频率的分频器和按键去抖电路。
三、设计方案四、原理图. 3 .. 4 .五、模块设计(一)分频电路1.设计原理分频器就是对较高频率的信号进行分频,得到较低频率的信号。
定义一个计数器对输入时钟进行计数,在计数的前一半时间里,输出高电平,在计数的后一半时间里,输出低电平,这样输出的信号就是占空比为50%的偶数分频信号。
例如,6分频,计数值为0~2输出高电平,计数值为3~5输出低电平。
2.VHDL程序代码输出为1HZ分频电路N=50MHZ/1HZ=50000000Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;Entity fdiv1 isgeneric(N: integer:=50000000); --rate=N,N是偶数port(clkin: IN std_logic;clkout: OUT std_logic);End fdiv1;Architecture a of fdiv1 is. 5 .signal cnt: integer range 0 to n-1;Beginprocess(clkin) --计数beginif(clkin'event and clkin='1') thenif(cnt<n-1) thencnt <= cnt+1;elsecnt <= 0;end if;end if;end process;process(cnt) --根据计数值,控制输出时钟脉冲的高、低电平beginif(cnt<n/2) thenclkout <= '1';elseclkout <= '0';end if;end process;End a;输出为10HZ分频电路N=50MHZ/10HZ=5000000. 6 .Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;Entity fdiv10 isgeneric(N: integer:=5000000); --rate=N,N是偶数port(clkin: IN std_logic;clkout: OUT std_logic);End fdiv10;Architecture a of fdiv10 issignal cnt: integer range 0 to n-1;Beginprocess(clkin) --计数beginif(clkin'event and clkin='1') thenif(cnt<n-1) thencnt <= cnt+1;elsecnt <= 0;end if;end if;end process;. 7 .process(cnt) --根据计数值,控制输出时钟脉冲的高、低电平beginif(cnt<n/2) thenclkout <= '1';elseclkout <= '0';end if;end process;End a;输出为200HZ分频电路N=50MHZ/200HZ=250000Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;Entity fdiv10 isgeneric(N: integer:=250000); --rate=N,N是偶数port(clkin: IN std_logic;clkout: OUT std_logic);End fdiv10;Architecture a of fdiv10 is. 8 .signal cnt: integer range 0 to n-1;Beginprocess(clkin) --计数beginif(clkin'event and clkin='1') thenif(cnt<n-1) thencnt <= cnt+1;elsecnt <= 0;end if;end if;end process;process(cnt) --根据计数值,控制输出时钟脉冲的高、低电平beginif(cnt<n/2) thenclkout <= '1';elseclkout <= '0';end if;end process;End a;输出为1000HZ分频电路N=50MHZ/1000HZ=50000Library ieee;. 9 .Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;Entity fdiv10 isgeneric(N: integer:=50000); --rate=N,N是偶数port(clkin: IN std_logic;clkout: OUT std_logic);End fdiv10;Architecture a of fdiv10 issignal cnt: integer range 0 to n-1;Beginprocess(clkin) --计数beginif(clkin'event and clkin='1') thenif(cnt<n-1) thencnt <= cnt+1;elsecnt <= 0;end if;end if;end process;process(cnt) --根据计数值,控制输出时钟脉冲的高、低电平. 10 .beginif(cnt<n/2) thenclkout <= '1';elseclkout <= '0';end if;end process;End a;(二)扫描电路1.设计原理当reset和stop信号起作用时,输出到计数器的信号为低电平,只有当start 和脉冲信号起作用时,输出才为高。
三位的十进制加法计数器的VHDL语言--VHDL程序如下:LIBRARY ieee;UsE ieee。
std_logic_1164。
all;ENTITY cnt1000 IsPORT(clk : IN STD_LOGIC;clr : IN STD_LOGIC;en : IN STD_LOGIC;count : OUT I NTEGER RANGE 0 TO 999; co :OUT STD_LOGIC);END cnt1000;ARCHITECTURE a OF cnt1000 IsSIGNAL s : INTEGER RANGE 0 TO 999;BEGINPROCESS (clk, clr)BEGINIF clr = '0’ THENs 〈= 0;ELSIF (clk'EVENT AND clk = '1’) THENIF en = '1' THENIF s<999 THENs <= s + 1;ELSE s<=0;END IF;ELSEs <= s;END IF;IF s = 999 THEN co 〈='1’;ELSE co <=’0';END IF;END IF;END PROCESS;count 〈= s;END a;摘要:根据教学实践, 介绍了VHDL 硬件描述语言进行工程设计的优点。
他既是一种与实际技术相独立的语言, 不束缚于某一特定的模拟程序或数字装置上,也不把设计方法强加于设计者,他允许设计者在其使用范围内选择工艺和方法,描述能力极强, 覆盖了逻辑设计的诸多领域和层次,并支持众多的硬件模型;也是一种在数字电路教学中全新的理论联系实际的教学方法和全新的培养学生实际动手能力的有效工具。
同时简要地说明VHDL 硬件描述语言的支撑软件M ax+ Plus.并结合实例详细阐明VHDL 语言在M ax+ Plus 软件的环境下对数字电路的设计、应用方法及使用时需注意的几个方面事项。
1~24循环的M=24分频器一、实验目的1、学会使用十进制计数器74LS161的方法;2、学会观察Q A 、Q B 、Q C 、Q D 的高低电平;3、掌握常用典型时序电路的工作原理;4、熟悉中规模集成计数器逻辑功能和使用方法以及拓展应用,提高综合能力。
二、虚拟实验仪器及器材 Multisim 软件,计算机等。
三、工作原理用4位二进制计数器74LS161完成二十四进制计数器需要两片芯片级联完成。
级联的方法有两种:一种是将24分解为4×6,然后用一个模4和一个模6计数器级联,可实现4×6的计数器;另一种将74LS161接成十进制计数器,两片级联先完成10×10=100进制计数器,然后再利用清零法或置数法实现二十四进制。
下面利用第二种方法进行设计和仿真。
74LS161引脚图4位二进制同步加法器74LS161N 的功能表如表所示:4位二进制同步加法器74LS161N 的功能表清零 预置 使能 时钟 预置数据输入 输出 工作 模式 R D L D E P E T CP A B C D Q A Q B Q C Q D 0 × × × × × × × × 0 0 0 0 异步清零 1 0 × × ↑ A B C D A B C D 同步置数 1 1 0 × × × × × × 保 持 数据保持 1 1 × 0 × × × × × 保 持 数据保持 1 11 1↑× × × ×计 数加法计数由表可知,74LS161具有以下功能:(1)异步清零。
当RD =0时,不管其他输入端的状态如何变化,不管有无时钟脉冲CP,计数器输出将被直接置0(QA QBQCQD=0000),称为异步清零。
现代电子设计实验报告实验名称:3位十进制循环计数器的设计系(科):信息科学与技术系班级:学号:姓名:完成时间:2012年4月24日. 1 .一、实验内容(一)设计要求1.设计一个3位十进制循环计数器,从0加到999,再恢复到0,循环往复。
每秒计数器加1。
2.有复位功能,当复位端reset为高时,计数器清零,停止计数。
3.可以控制计数的开始start和停止stop。
当计数开始start信号有效时,计数器开始计数;当计数停止stop信号有效时,计数停止;当start信号再次有效时,继续计数。
4.计数器的计数值采用动态显示方式在数码管上显示出来。
5.进行设计,仿真并下载程序到实验箱的CPLD模块板进行验证。
(二)电路模块cyclecntsysclk reset startSE G[6. SCAN[7.★提示:reset信号可以使用拨动开关来产生。
start和stop信号使用按键来实现输入信号:sysclk:基准时钟,50MHz;reset:异步复位信号,高有效;start,stop:计数开始和计数停止信号输入;. 2 .输出信号:SEG[6..0]:段码信号输出。
SCAN[7..0]:位码信号输出。
二、实验原理此系统的核心为一个三位循环计数器,将此计数器的输出结果通过分位电路动态显示到三个数码管上面。
另外的辅助电路分别为四个不同频率的分频器和按键去抖电路。
三、设计方案四、原理图. 3 .. 4 .五、模块设计(一)分频电路1.设计原理分频器就是对较高频率的信号进行分频,得到较低频率的信号。
定义一个计数器对输入时钟进行计数,在计数的前一半时间里,输出高电平,在计数的后一半时间里,输出低电平,这样输出的信号就是占空比为50%的偶数分频信号。
例如,6分频,计数值为0~2输出高电平,计数值为3~5输出低电平。
2.VHDL程序代码输出为1HZ分频电路N=50MHZ/1HZ=50000000Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;Entity fdiv1 isgeneric(N: integer:=50000000); --rate=N,N是偶数port(clkin: IN std_logic;clkout: OUT std_logic);End fdiv1;Architecture a of fdiv1 is. 5 .signal cnt: integer range 0 to n-1;Beginprocess(clkin) --计数beginif(clkin'event and clkin='1') thenif(cnt<n-1) thencnt <= cnt+1;elsecnt <= 0;end if;end if;end process;process(cnt) --根据计数值,控制输出时钟脉冲的高、低电平beginif(cnt<n/2) thenclkout <= '1';elseclkout <= '0';end if;end process;End a;输出为10HZ分频电路N=50MHZ/10HZ=5000000. 6 .Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;Entity fdiv10 isgeneric(N: integer:=5000000); --rate=N,N是偶数port(clkin: IN std_logic;clkout: OUT std_logic);End fdiv10;Architecture a of fdiv10 issignal cnt: integer range 0 to n-1;Beginprocess(clkin) --计数beginif(clkin'event and clkin='1') thenif(cnt<n-1) thencnt <= cnt+1;elsecnt <= 0;end if;end if;end process;. 7 .process(cnt) --根据计数值,控制输出时钟脉冲的高、低电平beginif(cnt<n/2) thenclkout <= '1';elseclkout <= '0';end if;end process;End a;输出为200HZ分频电路N=50MHZ/200HZ=250000Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;Entity fdiv10 isgeneric(N: integer:=250000); --rate=N,N是偶数port(clkin: IN std_logic;clkout: OUT std_logic);End fdiv10;Architecture a of fdiv10 is. 8 .signal cnt: integer range 0 to n-1;Beginprocess(clkin) --计数beginif(clkin'event and clkin='1') thenif(cnt<n-1) thencnt <= cnt+1;elsecnt <= 0;end if;end if;end process;process(cnt) --根据计数值,控制输出时钟脉冲的高、低电平beginif(cnt<n/2) thenclkout <= '1';elseclkout <= '0';end if;end process;End a;输出为1000HZ分频电路N=50MHZ/1000HZ=50000Library ieee;. 9 .Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Use ieee.std_logic_arith.all;Entity fdiv10 isgeneric(N: integer:=50000); --rate=N,N是偶数port(clkin: IN std_logic;clkout: OUT std_logic);End fdiv10;Architecture a of fdiv10 issignal cnt: integer range 0 to n-1;Beginprocess(clkin) --计数beginif(clkin'event and clkin='1') thenif(cnt<n-1) thencnt <= cnt+1;elsecnt <= 0;end if;end if;end process;process(cnt) --根据计数值,控制输出时钟脉冲的高、低电平. 10 .beginif(cnt<n/2) thenclkout <= '1';elseclkout <= '0';end if;end process;End a;(二)扫描电路1.设计原理当reset和stop信号起作用时,输出到计数器的信号为低电平,只有当start 和脉冲信号起作用时,输出才为高。
2.VHDL程序代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity saomiao isport (clk: in std_logic;reset: in std_logic;start,stop: in std_logic;seg: out std_logic);end saomiao;architecture behave of saomiao isbeginprocess(start,stop,reset,clk)beginif(reset = '1') thenseg <='0';elsif(clk'event and clk = '1') thenif(start='0') thenseg <= '1';elsif(stop='0') thenseg <= '0';end if;end if;end process;end behave;(三)计数器电路1.设计原理复位信号起作用时,输出数值为0,时钟信号为上升沿且为有效的计数状态时(计数器的输入seg值为高电平),加一循环计数。
2.VHDL程序代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity count isport(reset: in std_logic;seg: in std_logic;clk1000: in std_logic;q: out integer range 0 to 999);end count;architecture a of count isbeginprocess (clk1000,reset,seg)variable temp:integer range 0 to 999;beginif (reset = '1') thentemp :=0;elsif(clk1000'event and clk1000 = '1') thenif(seg= '0') thentemp := temp;elseif(temp=999) thentemp := 0;elsetemp := temp + 1;end if;end if;end if;q <= temp;end process;end a;(四)分位电路1.设计原理对输入的一个三位数进行分位处理,取出他的个位、十位和白位。