最新EDA课程点阵汇总.docx

上传人:b****6 文档编号:8487972 上传时间:2023-01-31 格式:DOCX 页数:14 大小:24.32KB
下载 相关 举报
最新EDA课程点阵汇总.docx_第1页
第1页 / 共14页
最新EDA课程点阵汇总.docx_第2页
第2页 / 共14页
最新EDA课程点阵汇总.docx_第3页
第3页 / 共14页
最新EDA课程点阵汇总.docx_第4页
第4页 / 共14页
最新EDA课程点阵汇总.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

最新EDA课程点阵汇总.docx

《最新EDA课程点阵汇总.docx》由会员分享,可在线阅读,更多相关《最新EDA课程点阵汇总.docx(14页珍藏版)》请在冰豆网上搜索。

最新EDA课程点阵汇总.docx

最新EDA课程点阵汇总

 

EDA课程点阵

 

北华航天工业学院

课程设计报告(论文)

 

设计课题:

16*16点阵控制接口设计

专业班级:

学生姓名:

指导教师:

胡辉

设计时间:

2014.12.22

课程设计任务书

课题名称

16X16点阵控制接口设计

完成时间

12.30

指导教师

胡辉

职称

副教授

学生姓名

班级

总体设计要求和技术要点

总体设计要求:

通过本课程的学习使学生掌握可编程器件、EDA开发系统软件、硬件描述语言和电子线路设计与技能训练等各方面知识;提高工程实践能力;学会应用EDA技术解决一些简单的电子设计问题。

技术要点:

1.在时钟信号的控制下,使点阵动态点亮,点亮方式自行设计,其中位选信号为16-4编码器编码输出。

2.设计8位开关控制的8种图案显示。

3.设计4位或4位以上的汉字循环显示,例如“北华航天”。

工作内容及时间进度安排

课程设计成果

1.与设计内容对应的软件程序

2.课程设计报告书

3.成果使用说明书

4.设计工作量要求

2014年12月28日

摘要

本文介绍了一种采用单片FPGA芯片进行16X16LED点阵控制接口电路设计的方法,主要阐述如何使用新兴的EDA器件取代传统的电子设计方法。

LED点阵显示是由8X8、16X16或多个独立的LED封装而成。

LED点阵显示屏可以显示各种数字、汉字或其他字符。

设计使用QuartusII软件,通过VHDL语言的设计,采用动态扫描的显示方法,LED列由4—16译码器控制。

最终通过试验箱实现功能。

关键词:

16X16LED点阵;QuartusII;VHDL;4—16译码器

一、设计原理……………………………………………………………1

一、设计原理

本设计所使用的16×16的点阵,EDA实验箱上有其接口电路,列选信号是由一个4位SEL[3..0]控制经4线16线译码器输出16列;行选信号为L0~L15,是由16个行信号组成的,每一行由一个单独的位来控制,高电平有效。

16×16扫描LED点阵的工作原理同8位扫描数码管类似。

它有16个共阴极输出端口每个共阴极对应有16个LED显示灯,所以其扫描译码地址需4位信号线(SEL0-SEL3),其汉字扫描码由16位地址(0-15)输入。

通过时钟的每列扫描显示完整汉字。

二、设计方案

根据系统设计的要求,设计主要由:

分频器模块、计数器模块(2个)、点阵显示模块等构成。

分频器主要将时钟进行分频产生比原来时钟小得多的另一信号让电路工作。

计数器模块主要在时钟的驱动下为存储器提供扫描地址,实现对点阵模块的控制。

并置模块主要用于将计数器产生的信号并置,从而实现汉字间的循环显示。

点阵模块显示汉字及其他花式。

原理图如下:

三、设计模块

1分频器

分频器将实验箱提供的20MHz的时钟脉冲分为多个较低频率的时钟脉冲,以产生提供给列循环扫描所用的时钟信号和控制图像汉字移动的时钟信号。

计数器1采用clk5分出1.2hz的时钟脉冲,使得汉子1秒转换一次。

计数器2采用clk0分出的1.25mhz的时钟脉冲对每一列扫描,来完成对图形的现实,只要扫描的频率足够快,就能给人以连续的感觉。

因此要控制扫描的频率,不能太低,否则,就会造成视觉上的不连续,本设计的扫描频率不得低于24Hz。

2.计数器及显示

由于设计产生了4种汉字循环滚动,使用拨码开关key0控制显示花样,当key0为1时,“圣诞快乐”四个字循环滚动,当key0为0时,3位拨码开关key1起作用,用来控制8种图案。

四、心得体会

五天的时间虽然很短暂,但在这一段的设计过程中我收获颇多。

整个设计过程中首先让我对EDA有了更深的了解,并且让我对QUARTERSⅡ软件的使用更加熟练。

尤其在编程方面让我有了很大的进步,从只会写一些简单的小程序到这种综合性的设计,我成长了许多,学会了如何使用EDA这门技术。

在编程完毕进行调试时,我们也遇到了一些困难,程序导入后发现和预想的结果有出入,归根结底还是程序编写不合理,通过思考和修改,我们成功的完成了这次课设。

我深知,虽然完成了课程设计的要求,但是我感觉到我对VHDL语言的理解还停留在比较浅的层次,要想真正掌握它还需要继续努力学习它。

五、程序

计数器1

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entityjsqis

port(

clk1:

instd_logic;

key0:

instd_logic;

key:

instd_logic_vector(2downto0);

a:

bufferstd_logic_vector(3downto0)

);

endjsq;

architectureoneofjsqis

begin

process(clk1)

begin--

if(clk1'eventandclk1='1')then

ifkey0='1'then

ifa>=3then

a<="0000";

elsea<=a+1;

endif;

elsifkey0='0'then

casekeyis

when"000"=>a<="0100";

when"001"=>a<="0101";

when"010"=>a<="0110";

when"011"=>a<="0111";

when"100"=>a<="1000";

when"101"=>a<="1001";

when"110"=>a<="1010";

when"111"=>a<="1011";

WHENOTHERS=>NULL;

endcase;

endif;

endif;

endprocess;

endone;

计数器2

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityjsq2is

port(

clk2:

instd_logic;

sao:

bufferstd_logic_vector(3downto0));

endjsq2;

architecturetwoofjsq2is

begin

process(clk2,sao)

begin

if(clk2'eventandclk2='1')then-->25HZ,liesaoxinhao

if(sao=15)then

sao<="0000";

elsesao<=sao+1;

endif;

endif;

endprocess;

endtwo;

显示

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityxsqis

port(m:

instd_logic_vector(3downto0);

n:

instd_logic_vector(3downto0);

l:

outstd_logic_vector(15downto0));

endxsq;

architecturethreeofxsqis

begin

process(m)

begin

casemis

when"0000"=>

casenis

when"1111"=>l<="0000000000000000";

when"1110"=>l<="0000000000000000";

when"1101"=>l<="0001000000000000";

when"1100"=>l<="0001001000000100";

when"1011"=>l<="0001001000001100";

when"1010"=>l<="0001000100010100";

when"1001"=>l<="0001001010100100";

when"1000"=>l<="0001111101000100";

when"0111"=>l<="0001001010100100";

when"0110"=>l<="0001000100010100";

when"0101"=>l<="0001001000001100";

when"0100"=>l<="0001000000000100";

when"0011"=>l<="0001000000000000";

when"0010"=>l<="0000000000000000";

when"0001"=>l<="0000000000000000";

when"0000"=>l<="0000000000000000";

whenothers=>null;

endcase;

when"0001"=>

casenis

when"1111"=>l<="0000000000000000";

when"1110"=>l<="0000000000010100";

when"1101"=>l<="0000000000011000";

when"1100"=>l<="0000111111110000";

when"1011"=>l<="0000010000000000";

when"1010"=>l<="0000101000001000";

when"1001"=>l<="0000010001001000";

when"1000"=>l<="0000101010101000";

when"0111"=>l<="0000100100011000";

when"0110"=>l<="0000100000001000";

when"0101"=>l<="0000101111010000";

when"0100"=>l<="0000101000010000";

when"0011"=>l<="0000101111110000";

when"0010"=>l<="0000101010001000";

when"0001"=>l<="0000101010000000";

when"0000"=>l<="0000000000000000";

whenothers=>null;

endcase;

when"0010"=>

casenis

when"1111"=>l<="0000000000000000";

when"1110"=>l<="0000000000000000";

when"1101"=>l<="0000000011100000";

when"1100"=>l<="0000000000000000";

when"1011"=>l<="0001111111111100";

when"1010"=>l<="0000000011000000";

when"1001"=>l<="0001000000000000";

when"1000"=>l<="0000100010010000";

when"0111"=>l<="0000010010010000";

when"0110"=>l<="0000001111111100";

when"0101"=>l<="0000010010010000";

when"0100"=>l<="0000100010010000";

when"0011"=>l<="0001000011110000";

when"0010"=>l<="0000000010000000";

when"0001"=>l<="0000000000000000";

when"0000"=>l<="0000000000000000";

whenothers=>null;

endcase;

when"0011"=>

casenis

when"1111"=>l<="0000000000000000";

when"1110"=>l<="0000000000000000";

when"1101"=>l<="0000000000000000";

when"1100"=>l<="0000010000000000";

when"1011"=>l<="0000001001111100";

when"1010"=>l<="0000000101000100";

when"1001"=>l<="0000100001000100";

when"1000"=>l<="0001111111110100";

when"0111"=>l<="0000000001000100";

when"0110"=>l<="0000000101000100";

when"0101"=>l<="0000001001000010";

when"0100"=>l<="0000010000000000";

when"0011"=>l<="0000000000000000";

when"0010"=>l<="0000000000000000";

when"0001"=>l<="0000000000000000";

when"0000"=>l<="0000000000000000";

whenothers=>null;

endcase;

when"0100"=>

casenis

when"1111"=>l<="0000000000000000";

when"1110"=>l<="0000000000000000";

when"1101"=>l<="0000000000000000";

when"1100"=>l<="0111111111111110";

when"1011"=>l<="0100000100000010";

when"1010"=>l<="0100000100000010";

when"1001"=>l<="0100000100000010";

when"1000"=>l<="0100000100000010";

when"0111"=>l<="0100000100000010";

when"0110"=>l<="0100000100000010";

when"0101"=>l<="0100000100000010";

when"0100"=>l<="0100000100000010";

when"0011"=>l<="0100000100000010";

when"0010"=>l<="0000000000000000";

when"0001"=>l<="0000000000000000";

when"0000"=>l<="0000000000000000";

whenothers=>null;

endcase;

when"0101"=>

casenis

when"1111"=>l<="0000000000000000";

when"1110"=>l<="0000000000000000";

when"1101"=>l<="0000000000000000";

when"1100"=>l<="0111111111111110";

when"1011"=>l<="0100000000000010";

when"1010"=>l<="0100000000000010";

when"1001"=>l<="0100000000000010";

when"1000"=>l<="0100000000000010";

when"0111"=>l<="0100000000000010";

when"0110"=>l<="0110000000000110";

when"0101"=>l<="0011000000001100";

when"0100"=>l<="0000110000110000";

when"0011"=>l<="0000001111000000";

when"0010"=>l<="0000000000000000";

when"0001"=>l<="0000000000000000";

when"0000"=>l<="0000000000000000";

whenothers=>null;

endcase;

when"0110"=>

casenis

when"1111"=>l<="0000000000000000";

when"1110"=>l<="0000000000000000";

when"1101"=>l<="0000000000000000";

when"1100"=>l<="0111110000000000";

when"1011"=>l<="0000011110000000";

when"1010"=>l<="0100010001110000";

when"1001"=>l<="0000010000001100";

when"1000"=>l<="0000010000000110";

when"0111"=>l<="0000010000000110";

when"0110"=>l<="0000010000001100";

when"0101"=>l<="0000010001110000";

when"0100"=>l<="0000011110000000";

when"0011"=>l<="0111110000000000";

when"0010"=>l<="0000000000000000";

when"0001"=>l<="0000000000000000";

when"0000"=>l<="0000000000000000";

whenothers=>null;

endcase;

when"0111"=>

casenis

when"1111"=>l<="0000000000000000";

when"1110"=>l<="0000000000111000";

when"1101"=>l<="0000000001111100";

when"1100"=>l<="0000000011111110";

when"1011"=>l<="0000000111111110";

when"1010"=>l<="0000001111111110";

when"1001"=>l<="0000011111111100";

when"1000"=>l<="0000111111111000";

when"0111"=>l<="0001111111110000";

when"0110"=>l<="0000111111111000";

when"0101"=>l<="0000011111111100";

when"0100"=>l<="0000001111111110";

when"0011"=>l<="0000000111111110";

when"0010"=>l<="0000000011111110";

when"0001"=>l<="0000000001111100";

when"0000"=>l<="0000000000111000";

whenothers=>null;

endcase;

when"1000"=>

casenis

when"1111"=>l<="0000000000000000";

when"1110"=>l<="0000000000000000";

when"1101"=>l<="0000000000000000";

when"1100"=>l<="0001111111110000";

when"1011"=>l<="0001000000010000";

when"1010"=>l<="0001001000010010";

when"1001"=>l<="0001010010010100";

when"1000"=>l<="0001010000011000";

when"0111"=>l<="0001010000010000";

when"0110"=>l<="0001010010011000";

when"0101"=>l<="0001001000010100";

when"0100"=>l<="0001000000010010";

when"0011"=>l<="0001111111110000";

when"0010"=>l<="0000000000000000";

when"0001"=>l<="0000000000000000";

when"0000"=>l<="0000000000000000";

whenothers=>null;

endcase;

 

when"1001"=>

casenis

when"1111"=>l<="0000000000000000";

when"1110"=>l<="0000011111100000";

when"1101"=>l<="0000100000010000";

when"1100"=>l<="0001000000001000";

when"1011"=>l<="0010000001000100";

when"1010"=>l<="0010000001100100";

when"1001"=>l<="0010000001000100";

when"1000"=>l<="0010000000000100";

when"0111"=>l<="0010000001000100";

when"0110"=>l<="0010000001100100";

when"0101"=>l<="0001000001001000";

when"0100"=>l<="0000100000010000";

when"0011"=>l<="0000011111100000";

when"0010"=>l<="0000000000000000";

when"0001"=>l<="0000000000000000";

when"0000"=>l<="0000000000000000";

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1