3位十进制循环计数器

  • 格式:doc
  • 大小:166.50 KB
  • 文档页数:23

下载文档原格式

  / 23
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 .