计数器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(3downto 0);

led:out std_logic_vector(6downto 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;

entityt10 is

port(clk,clr,en:in std_logic;

co:out std_logic;

q:buffer std_logic_vector(3 downto 0)); endt10;

architecture behave oft10 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;

ENTITYt60 IS

PORT(clk,clr,en:IN STD_LOGIC;

q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

ENDt60;

ARCHITECTURE behave OFt60 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,t10:in std_logic_vector(3 downto 0); t60:in std_logic_vector(7 downto 0);

daout:out std_logic_vector(3 downto 0);

dp:out std_logic;

sel:out std_logic_vector(2 downto 0));

end seltime;

architecture fun of seltime is

signal count:std_logic_vector(2 downto 0);

begin

sel<=count;

process(clk,reset)

begin

if(reset='0')then

count<="000";

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

if(count>="101")then

count<="000";

else

count<=count+1;

end if;

end if;

case count is

when"000"=>daout<=t10(3 downto 0);dp<='0';

when"001"=>daout(3 downto 1)<="000";

daout(0)<=ci;dp<='0';

when"010"=>daout<=kn4(3 downto 0);dp<='0';

when"011"=>daout<=t60(7 downto 4);dp<='0';

when others=>daout<=t60(3 downto 0);dp<='0';

end case;

end process;

end fun;

原理图

6.顶层文件程序

library ieee;

use ieee.std_logic_1164.all;

entity ss_top is

port(clk,clr,en,plus_sub,clkdsp:in std_logic;

a,b,c,d,e,f,g,dpout:out std_logic;

sel:out std_logic_vector(2 downto 0));

end ss_top;

architecture one of ss_top is

ponentt60

port(clk,clr,en:in std_logic;

q:out std_logic_vector(7 downto 0));

end ponent;

ponent kn4

port(clk,clr,plus_sub:in std_logic;

q:buffer std_logic_vector(3 downto 0)); end ponent;

ponentt10

port(clk,clr,en:in std_logic;

co:out std_logic;

q:buffer std_logic_vector(3 downto 0)); end ponent;

ponent deled

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

led:out std_logic_vector(6 downto 0)); end ponent;

ponent seltime

port(clk,reset,ci:in std_logic;

t60:in std_logic_vector(7 downto 0);

kn4:in std_logic_vector(3 downto 0);

t10:in std_logic_vector(3 downto 0);

dp:out std_logic;

daout:out std_logic_vector(3 downto 0);

sel:out std_logic_vector(2 downto 0)); end ponent;

signalt60_out:std_logic_vector(7 downto 0);

signal kn4_out:std_logic_vector(3 downto 0);

signalt10_out:std_logic_vector(3 downto 0);

signalt10_co:std_logic;

signal ledout:std_logic_vector(6 downto 0);

signal seltime_out:std_logic_vector(3 downto 0);

Begin

a<=ledout(6);b<=ledout(5);c<=ledout(4);

d<=ledout(3);e<=ledout(2);f<=ledout(1);g<=ledout(0);

u1:deled port map(num=>seltime_out,led=>ledout);

u2:t10 port map(clk=>clk,clr=>clr,en=>en,co=>t10_co,q=>t10_out);

u3:t60 port map(clk=>clk,clr=>clr,en=>en,q=>t60_out);

u4:kn4 port map(clk=>clk,clr=>clr,plus_sub=>plus_sub,q=>t16_out);

u5:seltime

port map(clk=>clkdsp,reset=>clr,ci=>t10_co,t60=>t60_out,

kn4=>kn4_out,t10=>t10_out,

daout=>seltime_out,dp=>dpout,sel=>sel);

end one;

四、总的原理图

五、器件编程与下载

用VHDL语言编译四种计数器的、译码器和分时器的程序,然后把他们用例化语句编译成顶层文件,仿真成功以后下载到试验箱通过数码管显示出结果,试验成功。

六、性能测试与分析

各个程序编译完成以后,通过波形图检测程序的正确性,当源程序en=1时程序才能运行,当clr=1时清零,等于零时工作,在两个都工作的情况下在clk的上升沿时数据进位,clk=0时保持,等于1时运行。如果程序按以上所说正常循环说明程序正确。

七、实验设备

计算机一台,EDA实验箱一台,下载电缆一根,导线若干。

八、心得体会

通过一周的EDA课设实践,虽然时间不是很长,但是我学到了很多。通过实践让

我能够熟练的运用VHDL语言和Quartus‖软件,发现这个软件功能十分的强大,而且用途也很广。

在实践中我们遇到了挺多的困难,在开始的程序编写中其实还挺顺利的,但是把它编写到EDA试验箱中让它通过数码管显示出结果时,事实并不是想象中的那样,通过多次的更改和实验,最终实验成功。到最后找到失败的原因时让我们都感到很惊讶,它仅仅是一个让我们所有人都忽略的小小的细节,这也让我明白了一个道理,做任何事,不管大小都要认真仔细,要集中百分之百的注意力在上面,保证没有一丝遗漏,才能把事情做好。还有在遇到困难时要有不抛弃不放弃的劲头,要相信在任何时候办法总比困难多。这次实践让我收获很多,为我以后的学习打下了坚实的基础,也为我以后的学习生活增添的信心。

九、参考文献

1. 国洪,胡辉,明山《EDA技术与实验》机械工业

2.徐惠民,安德宁《数字逻辑设计与VHDL描述》机械工业

3.璇,臧春华《数字系统设计与PLD应用技术》电子工业

4.赜,朱如琪《在系统可编程技术实践教程》科学

5.曙光,郭万有等《可编程逻辑器件原理、开发与应用》电子科技大学出版

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