您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页EDA三位十进制计数显示器 zhou

EDA三位十进制计数显示器 zhou

来源:意榕旅游网


课程设计

课程名称: EDA技术与FPGA应用设计

课设题目: 三位计数 实验地点: 电机馆跨越机房 专业班级: 电信1001班

学号: 2010001213

学生姓名: 周孚宗

指导教师: 张文爱

2013年 6 月 6 日

3位十进制计数显示器

一、设计要求

1、设计3位十进制计数器;

2、设计输出低电平有效的七段显示译码器;

3、显示计数器值。

二、实验原理

三位十进制计数显示器的设计分三步完成。先设计三位十进制计数电路,再设计显示译码电路,最后建立一个顶层文件将前两者连接起来。

三、实验器材

计算机一台

操作系统:WINDOWS XP

软件:ispDesignEXPERT System

硬件:电路板一个

四、设计程序代码

1、三位十进制计数程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY COU3 IS

PORT(

CLK,RESET,CIN :IN STD_LOGIC;

CO :OUT STD_LOGIC;

BCDAP :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

BCDBP :OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

BCDCP :OUT STD_LOGIC_VECTOR(3 DOWNTO 0)

);

END COU3;

ARCHITECTURE BEHAVE OF COU3 IS

SIGNAL BCDAN:STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL BCDBN:STD_LOGIC_VECTOR(3 DOWNTO 0);

SIGNAL BCDCN:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

BCDAP<=BCDAN;

BCDBP<=BCDBN;

BCDCP<=BCDCN;

KK1:PROCESS(CLK)

BEGIN

IF(CLK'EVENT AND CLK='1')THEN

IF(RESET='0')THEN

BCDAN<=\"0000\";

ELSIF(CIN='1')THEN

IF(BCDAN=\"1001\")THEN

BCDAN<=\"0000\";

ELSE

BCDAN<=BCDAN+'1';

END IF;

END IF;

END IF;

END PROCESS KK1;

KK2:PROCESS(CLK)

BEGIN

IF(CLK'EVENT AND CLK='1')THEN

IF(RESET='0')THEN

BCDBN<=\"0000\";

ELSIF(CIN='1') AND (BCDAN=\"1001\")THEN

IF(BCDBN=\"1001\")THEN

BCDBN<=\"0000\";

ELSE

BCDBN<=BCDBN+'1';

END IF;

END IF;

END IF;

END PROCESS KK2;

KK3:PROCESS(CLK)

BEGIN

IF(CLK'EVENT AND CLK='1')THEN

IF(RESET='0')THEN

BCDCN<=\"0000\";

ELSIF(CIN='1') AND (BCDBN=\"1001\") AND (BCDAN=\"1001\")THEN

IF(BCDCN=\"1001\")THEN

BCDCN<=\"0000\";

ELSE

BCDCN<=BCDCN+'1';

END IF;

END IF;

END IF;

END PROCESS KK3;

END BEHAVE;

2、七段显示译码器程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

ENTITY SEG7 IS

PORT(II:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

Y :OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

END SEG7;

ARCHITECTURE BEHAVE OF SEG7 IS

SIGNAL INDATA:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

INDATA<=II;

PROCESS(INDATA)

BEGIN

CASE INDATA IS

WHEN\"0000\"=> Y<=\"0000001\";

WHEN\"0001\"=> Y<=\"1001111\";

WHEN\"0010\"=> Y<=\"0010010\";

WHEN\"0011\"=> Y<=\"0000110\";

WHEN\"0100\"=> Y<=\"1001100\";

WHEN\"0101\"=> Y<=\"0100100\";

WHEN\"0110\"=> Y<=\"0100000\";

WHEN\"0111\"=> Y<=\"0001111\";

WHEN\"1000\"=> Y<=\"0000000\";

WHEN\"1001\"=> Y<=\"0000100\";

WHEN\"1010\"=> Y<=\"0001000\";

WHEN\"1011\"=> Y<=\"1100000\";

WHEN\"1100\"=> Y<=\"0110001\";

WHEN\"1101\"=> Y<=\"1000010\";

WHEN\"1110\"=> Y<=\"0110000\";

WHEN\"1111\"=> Y<=\"0111000\";

WHEN OTHERS=>Y<=\"XXXXXXX\";

END CASE;

END PROCESS;

END BEHAVE;

3、顶层文件程序

LIBRARY IEEE;

USE IEEE.STD_LOGIC_11.ALL;

ENTITY COU37SEG IS

PORT(CLK,RESET,ENA:IN STD_LOGIC;

SEG1: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);

SEG2: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);

SEG3: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

END COU37SEG;

ARCHITECTURE X37 OF COU37SEG IS

COMPONENT SEG7

PORT(II:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

Y :OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

END COMPONENT;

COMPONENT COU3

PORT(CLK,RESET,CIN:IN STD_LOGIC;

BCDAP: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

BCDBP: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

BCDCP: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));

END COMPONENT;

SIGNAL A,B,C:STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

U0:COU3 PORT MAP(CLK,RESET,ENA,A,B,C);

U1:SEG7 PORT MAP(A,SEG1);

U2:SEG7 PORT MAP(B,SEG2);

U3:SEG7 PORT MAP(C,SEG3);

END X37;

五、设计步骤

1、打开ispEXPERT软件,简历一个新的工程

(1)单击菜单File选New Project

(2)输入工程路径,工程名

2、建立VHDL文件

单击File选New菜单项,选择VHDL File选项,单击OK按钮以简历VHDL文件,分别建立三位十进制计数器程序的vhd文件COU3.vhd、七段显示译码器程序的vhd文件SEG7.vhd、顶层文件的vhd文件COU37SEG.vhd。

3、设定管脚

4、保存编译运行,生成可下载到板子里的jed文件

5、器件下载

六、设计结果与分析

三位十进制加法计数器实现了从000到999的计数,当计数到999时,计数器的输出置0,下一次又从0到999计数。复位信号RESET跳变为低电平时,计数器的输出被置零。0到999的计数可以在实验板上数码管显示出来。

七、总结

通过这次的EDA硬件课程设计,我学会了如何利用isp Expert软件编程的具体功能的硬件。熟悉了VHDL语言的编程,尤其是关于元件例化的程序的编写,通过不断的修改和编译,终于使其实现了它的功能。这次课程设计使我熟悉了顶层文件和译码器程序的编写。总之,这次课设对以后的学习和工作实践会有很大的启发及帮助。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务