课程设计
课程名称: 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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务