基于FPGA的计数器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FPGA课程设计
题目:基于FPGA的计数显示控制设计
班级:微电子学1001班
姓名:李蓓
学号: 1006080101
一:设计任务
1.基于VHDL 语言完成十进制加法计数器设计
2.基于VHDL 语言完成分频器的设计
3.基于VHDL 语言完成数码管动态扫描显示设计
4.将上述设计按一定的连接关系连接起来,使其实现如下功能:指定输入时钟频率为50HZ 。
a 在数码管上显示0—9十进制数;
b 数字跳变时间为1s ;
c 可以通过按键实现显示开启、停止、复位功能。
二、总体设计方案
1.基于QuartusII 软件完成十进制加法计数器、分频器、数码管动态扫描显示设计;
2.采用Modelsim 仿真软件对上述设计进行仿真验证;
3.将上述各模块按照一定的连接关系连接,使其实现功能。
此次试验共分为三个模块进行,分别是分频计,计数器,和译码显示电路。这几个部分的完成都必须靠QuartusII 和Modelsim 完成。
本设计采用数控分频计,可以对信号实现不同分频比,输出信号作为计数器输入。当系统正常工作时,输入信号标提供频率,经过分频器分频,产生计数信号送入计数器模块,计数模块对输入的脉冲个数进行计数数结束后,将计数结果送入锁存器中,保证系统可以稳定显示数据,计数结果能够显示在七段数码显示管上。
图1:设计方案
输入clk
复位端cr
使能端en
三、各功能模块设计
1.十进制加法计数器的设计
分频器
计数器
数码管显示
1.1工作原理
计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能,计数器是由基本的计数单元和一些控制门所组成,计数单元则由一系列具有存储信息功能的各类触发器构成,这些触发器有RS触发器、T 触发器、D触发器及JK触发器等。计数器在数字系统中应用广泛。
十进制加数的合法设计范围为0到9,故当输入的加数大于9的时候要将其统一变换成0。本实验采用一个带有异步复位和使能端的十进制加法计数器,这种计数器有许多实际的用处。
1.2源程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity add10 is
port(clk,cr,en:in std_logic;
Q:out std_logic_vector(3 downto 0));
end entity add10;
architecture arch of add10 is
begin
process(clk,cr,en)
variable Q1:std_logic_vector(3 downto 0);
begin
if(cr='1')then
Q1:="0000";
elsif(clk'event and clk='1')then
if(en='1')then
if(Q1<9)then
Q1:=Q1+1;
else
Q1:="0000";
end if;
end if;
end if;
Q<=Q1;
end process;
end architecture arch;
1.3仿真波形
2.分频器的设计
2.1工作原理
分频器是指使输出信号频率为输入信号频率整数分之一的电子电路。本实验中采用五十分频和一百分频。
2.2.1五十分频
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY divclk50 IS
PORT(clk:IN std_logic;
fout:OUT std_logic);
END divclk50;
ARCHITECTURE bhv OF divclk50 IS
signal counter :std_logic_vector(4 DOWNTO 0):="00000";
signal tem:std_logic:='0';
BEGIN
PROCESS(clk)
BEGIN
IF(clk'event AND clk='1') THEN
IF(counter >="11000")THEN
counter <="00000";
tem<=not tem;
else
counter <=counter +'1';
end if;
end if;
end process ;
fout<=tem;
END bhv;
2.3.2一百分频
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.std_logic_unsigned.ALL;
ENTITY divclk100 IS
PORT(clk:IN std_logic;
fout:OUT std_logic);
END divclk100;
ARCHITECTURE bhv OF divclk100 IS
signal counter :std_logic_vector(5 DOWNTO 0):="000000";
signal tem:std_logic:='0';
BEGIN
PROCESS(clk)
BEGIN
IF(clk'event AND clk='1') THEN
IF(counter >="110001")THEN
counter <="000000";
tem<=not tem;
else
counter <=counter +'1';
end if;
end if;
end process ;
fout<=tem;
END bhv;
2.3仿真波形
2.3.1五十分频
2.3.2一百分频
3.数码管动态扫描显示设计
数码管数码管的一种是半导体发光器件,数码管可分为七段数码管和八段数码管,区别在于八段数码管比七段数码管多一个发光二极管单元,其基本单元是发