3位十进制循环计数器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
现代电子设计
实验报告
实验名称:3位十进制循环计数器的设计
系(科):信息科学与技术系
班级:
学号:
姓名:
完成时间:2012年4月24日
. 1 .
一、实验内容
(一)设计要求
1.设计一个3位十进制循环计数器,从0加到999,再恢复到0,循环往复。每秒计数器加1。
2.有复位功能,当复位端reset为高时,计数器清零,停止计数。
3.可以控制计数的开始start和停止stop。当计数开始start信号有效时,计数器开始计数;当计数停止stop信号有效时,计数停止;当start信号再次有效时,继续计数。
4.计数器的计数值采用动态显示方式在数码管上显示出来。
5.进行设计,仿真并下载程序到实验箱的CPLD模块板进行验证。
(二)电路模块
cyclecnt
sysclk reset start
SE 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=50000000
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Use ieee.std_logic_arith.all;
Entity fdiv1 is
generic(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;
Begin
process(clkin) --计数
begin
if(clkin'event and clkin='1') then
if(cnt cnt <= cnt+1; else cnt <= 0; end if; end if; end process; process(cnt) --根据计数值,控制输出时钟脉冲的高、低电平begin if(cnt clkout <= '1'; else clkout <= '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 is generic(N: integer:=5000000); --rate=N,N是偶数 port( clkin: IN std_logic; clkout: OUT std_logic ); End fdiv10; Architecture a of fdiv10 is signal cnt: integer range 0 to n-1; Begin process(clkin) --计数 begin if(clkin'event and clkin='1') then if(cnt cnt <= cnt+1; else cnt <= 0; end if; end if; end process; . 7 . process(cnt) --根据计数值,控制输出时钟脉冲的高、低电平begin if(cnt clkout <= '1'; else clkout <= '0'; end if; end process; End a; 输出为200HZ分频电路 N=50MHZ/200HZ=250000 Library ieee; Use ieee.std_logic_1164.all; Use ieee.std_logic_unsigned.all; Use ieee.std_logic_arith.all; Entity fdiv10 is generic(N: integer:=250000); --rate=N,N是偶数 port( clkin: IN std_logic; clkout: OUT std_logic ); End fdiv10; Architecture a of fdiv10 is . 8 .