7段数码管控制引脚

7段数码管控制引脚
7段数码管控制引脚

《EDA技术综合设计》

课程设计报告

报告题目:计数器7段数码管控制接口技术作者所在系部:

作者所在专业:

作者所在班级:

作者姓名:

作者学号:

指导教师姓名:

完成时间:

内容摘要

掌握VHDL语言基本知识,并熟练运用VHDL语言来编写程序,来下载实践到硬件上,培养使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。利用VHDL语言设计一个七段数码管控制引脚,在时钟信号的控制下,使6位数码管动态刷新显示十进制计数器及其进位,十二进制计数器,四位二进制可逆计数器,六十进制计数器的计数结果,这期间需要seltime分频器来动态的给各个计数器分配数码管,并显示数字的变化。

关键词:VHDL语言编程七段数码管控制引脚芯片

目录

一概述 (1)

二方案设计与论证 (1)

三单元电路设计与参数计算 (1)

3.1数码管译码器 (1)

3.2 十进制计数器 (2)

3.3六十进制计数器 (3)

3.4四位二进制可逆计数器 (5)

3.5时间数据扫描分时选择模块 (6)

3.6顶层文件 (8)

四总的原理图 (9)

五器件编程与下载 (9)

六性能测试与分析(要围绕设计要求中的各项指标进行) (10)

七实验设备 (10)

八心得体会 (10)

九参考文献 (10)

课程设计任务书

一、概述

设计一个共阴7段数码管控制接口,在硬件时钟电路的基础上,采用分频器,输出一个1S的时钟信号。一个带使能输入、进位输出及同步清0的增1十进制计数器。一个带使能输入及同步清0的六十进制同步加法计数器和一个四位二进制可逆计数器。要求:在时钟信号的控制下,使6位数码管动态刷新显示上述计数器的计数结果。

二、方案设计与论证

首先VHDL语言编写底层文件和三个计数器的程序,再编写分频器和数码管的程序,最后用例化语句编写顶层文件,分别都调试在确认无误后把顶层文件下载到试验箱,连接导线,完成后实现在时钟信号的控制下,6位数码管动态刷新显示三个计数器的技术结果。

三、单元电路设计

1.数码管译码器程序

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity deled is

port(num:in std_logic_vector(3 downto 0);

led:out std_logic_vector(6 downto 0));

end deled;

architecture fun of deled is

begin

-- abcdefg

led<="1111110"when num="0000"else

"0110000"when num="0001"else

"1101101"when num="0010"else

"1111001"when num="0011"else

"0110011"when num="0100"else

"1011011"when num="0101"else

"1011111"when num="0110"else

"1110000"when num="0111"else

"1111111"when num="1000"else

"1111011"when num="1001"else

"1110111"when num="1010"else

"0011111"when num="1011"else

"1001110"when num="1100"else

"0111101"when num="1101"else

"1001111"when num="1110"else

"1000111"when num="1111";

end fun;

原理图

2.十进制计数器程序

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity cnt10 is

port(clk,clr,en:in std_logic;

co:out std_logic;

q:buffer std_logic_vector(3 downto 0));

end cnt10;

architecture behave of cnt10 is

begin

process(clk,clr,en)

begin

if(en='0')then q<="0000";

elsif(clk'event and clk='1')then if(clr='1')then q<="0000";

elsif(q=9)then q<="0000";

co<='1';

else q<=q+1;

co<='0';

end if;

end if;

end process;

end behave;

原理图

仿真波形图

3.六十进制计数器程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY cnt60 IS

PORT(clk,clr,en:IN STD_LOGIC;

q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END cnt60;

ARCHITECTURE behave OF cnt60 IS

SIGNAL qh,ql:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

PROCESS(clk,clr,en)

BEGIN

IF(en='1')THEN ql<="0000";qh<="0000";

ELSIF(clk'event and clk='1')THEN

IF(clr='1')THEN ql<="0000";qh<="0000"; ELSIF(ql=9)THEN ql<="0000";

IF(qh=5)THEN qh<="0000";

ELSE qh<=qh+1;

END IF;

ELSE ql<=ql+1;

END IF;

END IF;

q<=qh&ql;

END PROCESS;

END behave;

原理图

波形图

4.四位二进制可逆计数器程序

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity kn4 is

port(clk,clr,plus_sub:in std_logic;

q:buffer std_logic_vector(3 downto 0));

end kn4;

architecture behave of kn4 is

begin

process(clk,clr,plus_sub)

begin

if(clk'event and clk='1')then

if(clr='1')then q<="0000";

elsif(plus_sub='1')then

if(q=15)then q<="0000";

else q<=q+1;

end if;

elsif(plus_sub='0')then

if(q=0)then q<="1111";

else q<=q-1;

end if;

end if;

end if;

end process;

end behave;

原理图

波形图

5.时间数据扫描分时选择模块程序

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity seltime is

port(clk,reset,ci:in std_logic;

Kn4,cnt10:in std_logic_vector(3 downto 0); cnt60:in std_logic_vector(7 downto 0);

相关主题
相关文档
最新文档