100进制同步计数器设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
浙江万里学院实验报告
实验名称:100进制同步计数器设计
专业班级:电子103姓名:徐强学号: 2010014092 实验日期:2011.5.10
一、实验目的:
1、掌握计数器的原理及设计方法;
2、设计一个0~100的计数器;
3、利用实验二的七段数码管电路进行显示;
二、实验要求:
1、用VHDL 语言进行描写;
2、有计数显示输出;
3、有清零端和计数使能端;
三、实验结果:
1. VHDL程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
PACKAGE my_pkg IS
Component nd2 -- 或门
PORT (a,b: IN STD_LOGIC;
c: OUT STD_LOGIC);
END Component;
Component led_decoder
PORT (din:in std_logic_vector(3 downto 0 ); --四位二进制码输入
seg:out std_logic_vector(6 downto 0) ); --输出LED七段码
END Component;
1
Component CNT60 --2位BCD码60进制计数器
PORT
( CR:IN STD_LOGIC;
EN:IN STD_LOGIC;
CLK:IN STD_LOGIC;
OUTLOW:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);
OUTHIGH:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) );
END Component;
Component CNT100 --带使能和清零信号的100进制计数器PORT
(
CLK:IN STD_LOGIC;
EN:IN STD_LOGIC;
CLR:IN STD_LOGIC;
OUTLOW:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);
OUTHIGH:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) ); END Component;
Component freq_div --50MHZ时钟分频出1Hz
PORT
(
clkinput : IN STD_LOGIC;
output : OUT STD_LOGIC
);
END Component;
Component jtd --交通灯控制器
PORT
(
CLKIN:IN STD_LOGIC; --50MHZ
R1,G1,R2,G2,R3,G3,R4,G4:OUT STD_LOGIC; --红绿灯信号输出
GAO,DI:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0) --倒计时输出);
END Component;
END my_pkg;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE work.my_pkg.ALL; --打开程序包
ENTITY Demo3 IS
PORT (CRl:IN STD_LOGIC;
ENl:IN STD_LOGIC;
CLKIN: IN STD_LOGIC;
LEDLOW,LEDHIGH: OUT STD_LOGIC_VECTOR(6 downto 0));
END Demo3;
ARCHITECTURE behv OF Demo3 IS
SIGNAL CLKTEMP: STD_LOGIC; --定义中转信号
SIGNAL LEDLOWTEMP,LEDHIGHTEMP:STD_LOGIC_VECTOR(3 downto 0);
BEGIN
u1:freq_div PORT MAP(CLKIN,CLKTEMP); --位置关联方式
u2:CNT60 PORT
MAP(CR=>CRl,EN=>ENl,CLK=>CLKTEMP,OUTLOW=>LEDLOWTEMP,OUTHIGH=>LEDHIGHTE MP); --名字关联方式
u3:led_decoder PORT MAP(LEDLOWTEMP,LEDLOW); --低位数码管输出u4:led_decoder PORT MAP(LEDHIGHTEMP,LEDHIGH); --高位数码管输出END behv;
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY freq_div IS
PORT
(
clkinput : IN STD_LOGIC;
output : OUT STD_LOGIC
);
END freq_div;
ARCHITECTURE rt OF freq_div IS
SIGNAL count_signal : INTEGER RANGE 0 TO 25000000;
signal mid1 : STD_LOGIC ;
BEGIN
PROCESS (clkinput)
BEGIN
IF (clkinput'EVENT AND clkinput = '1') THEN
if count_signal=24999999 then --50MHz division to 1Hz
count_signal <= 0;
mid1<= not mid1;
else
count_signal <= count_signal + 1;
end if;
output <= mid1;
end if;