基于FPGA的点阵显示控制器的设计.docx

上传人:b****1 文档编号:1888115 上传时间:2023-05-02 格式:DOCX 页数:25 大小:137.92KB
下载 相关 举报
基于FPGA的点阵显示控制器的设计.docx_第1页
第1页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第2页
第2页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第3页
第3页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第4页
第4页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第5页
第5页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第6页
第6页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第7页
第7页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第8页
第8页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第9页
第9页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第10页
第10页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第11页
第11页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第12页
第12页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第13页
第13页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第14页
第14页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第15页
第15页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第16页
第16页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第17页
第17页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第18页
第18页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第19页
第19页 / 共25页
基于FPGA的点阵显示控制器的设计.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于FPGA的点阵显示控制器的设计.docx

《基于FPGA的点阵显示控制器的设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的点阵显示控制器的设计.docx(25页珍藏版)》请在冰点文库上搜索。

基于FPGA的点阵显示控制器的设计.docx

基于FPGA的点阵显示控制器的设计

目录

序言………………………………………………………………………2

第1章课题要求…………………………………………………………2

1.1技术要求…………………………………………………………………2

1.1.1EDA技术…………………………………………………………………2

1.1.2VHDL语言………………………………………………………………3

1.1.3层次化设计……………………………………………………………3

1.2功能要求…………………………………………………………………3

1.3本人任务…………………………………………………………………3

第2章方案设计及原理框图……………………………………3

第3章单元模块设计仿真结果及分析………………………5

第4章顶层模块设计仿真结果及分析…………………………13

第5章硬件电路设计与安装图…………………………………14

第6章硬件电路安装与调试……………………………………15

第7章调试结果………………………………………………………16

第8章收获与体会……………………………………………………17

参考文献…………………………………………………………………18

序言

随着计算机技术和电子技术的飞速发展和广泛应用,电器设备的输出设备也变得复杂多样。

诸如CRT显示、LCD显示、多位LED显示及发光二极管显示等应运而生。

在这些显示当中,LED及发光二极管显示电路较为简单,成本也较低,在功能单一的仪器仪表与机电设备中应用较广。

但当设备显示的点或位较多时,就需要采用一定的驱动电路与相应的驱动方式。

EDA技术就是依赖功能强大的计算机,在EDA工具软件平台上,对以硬件描述语言VHDL为系统逻辑描述手段完成的设计文件,自动地完成逻辑编译、化简、分割、综合、布局布线以及逻辑优化和仿真测试,直至实现既定的电子线路系统功能。

EDA技术为现代电子理论和设计的表达与实现提供了可能性。

随着电子设计自动化(EDA)技术的进展,基于可编程FPGA器件进行系统芯片集成的新设计方法,也正在快速地取代基于PCB板的传统设计方式。

第一章课题要求

1.1技术要求

1.1.1EDA技术

20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。

在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。

这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。

这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。

EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。

EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。

EDA技术是指以计算机为工作平台,融合了应用电子技术、计算机技术、信息处理及智能化技术的最新成果,进行电子产品的自动设计。

利用EDA工具,电子设计师可以从概念、算法、协议等开始设计电子系统,大量工作可以通过计算机完成,并可以将电子产品从电路设计、性能分析到设计出IC版图或PCB版图的整个过程的计算机上自动处理完成。

1.1.2VHDL语言

VHDL的英文全名是Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage,诞生于1982年。

1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言。

VHDL主要用于描述数字系统的结构,行为,功能和接口。

除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。

VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。

在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。

这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。

VHDL语言具有以下几点特点:

VHDL语言功能强大,设计方式多样;VHDL语言具有强大的硬件描述能力;VHDL语言具有很强的移植能力;VHDL语言的设计描述与器件无关;VHDL语言程序易于共享和复用。

1.1.3层次化设计

层次化设计就是一种自上而下的设计。

这种设计就是设计者从系统的要求出发,自上而下地逐步将设计内容细化,最终完成系统的硬件整体设计。

对于一个复杂的设计系统,如果完全采用原理图设计方法,工作量比较大,而且也容易出错。

运用层次化设计方法,使设计进一步细化。

层次化设计提供了更加快速简单的验证与仿真。

1.2功能要求

对于本次数字电路课程设计的基于FPGA的点阵显示控制器的设计,我们在基本功能是静态显示“开”字,在此基础上,我们还进行了一些拓展功能,一屏一屏地显示“元旦快乐”四个字,以及从右往左滚动显示“开”字,这三个功能分别通过三个开关实现控制,从而在LED显示器上得以显示。

1.3本人任务

本人主要负责软件的编写,仿真,调试和下载,以及拓展功能的思考。

 

第二章方案设计及原理框图

点阵LED显示块由64个发光二极管排列成8行*8列的点阵。

在同一行中的8个发光二极管的所有正极连接在一起,由一个引脚引出,在同一列中的8个发光二极管的所有负极连接在一起,由一个引脚引出,这样共有8个行引出脚和8个列引出脚。

 

根据矩阵焊接面引脚与芯片相连接,如要显示一个复杂图形或字符时,可以按逐列显示或逐行显示,即一列一列(或一行一行)将要显示的点阵信息显示出来。

本设计采用逐列扫描的方式实现。

也就是说只有当某一行为高电平且某一列为低电平时,这一行和这一列对应的发光二极管才发光。

否则,LED显示器将不能正常工作。

因为不可能在同一时刻显示整个汉字。

为了显示出整个汉字,首先分布好汉字排列,以行给汉字信息;然后以1Hz频率的时序逐一点亮每一列,即每列逐一加高电平,同时行给汉字信息,根据人眼的视觉残留特性,使之形成整个汉字的显示。

软件总体框图

第三章单元模块设计仿真结果及分析

一、静态显示“开”字

程序:

libraryieee;——函数库定义

useieee.std_logic_1164.all;

useieee.std_logic_Unsigned.all;

useieee.std_logic_ARITH.all;

ENTITYpengis

port(clk,en:

instd_logic;

lie:

outstd_logic_vector(7downto0);--列

com:

outstd_logic_vector(7downto0));--行

Endpeng;

Architectureaofpengis

signalst1:

std_logic_vector(7downto0);

signalosc:

std_logic;

signalosd:

std_logic;

signald_ff:

std_logic_vector(27downto0);

signaldata:

std_logic_vector(7downto0);

signald0,d1,d2,d3,d4,d5,d6,d7:

std_logic_vector(7downto0);

signallie0:

std_logic_vector(6downto0);

Begin

com<=data;

lie<=st1;

d0<="00000000";

d1<="10001000";

d2<="01001010";

d3<="00111110";

d4<="00001010";

d5<="11111110";

d6<="00001010";

d7<="00001000";——字库开

First:

process

begin

waituntilclk='1';——分频

if(d_ff(27downto0)>=2e8)then

d_ff(27downto0)<="0000000000000000000000000000";

else

d_ff(27downto0)<=d_ff+1;

endif;

osc<=notd_ff(10);

endprocessfirst;

second:

process(osc,en)——扫描

begin

if(osc='1'andosc'eventanden='0')then

ifst1(7downto0)="00000000"orst1(7downto0)="01111111"then

st1(7downto0)<="11111110";data<=d0;——逐列扫描方式

elsifst1(7downto0)="11111110"then

st1(7downto0)<="11111101";data<=d1;

elsifst1(7downto0)="11111101"then

st1(7downto0)<="11111011";data<=d2;

elsifst1(7downto0)="11111011"then

st1(7downto0)<="11110111";data<=d3;

elsifst1(7downto0)="11110111"then

st1(7downto0)<="11101111";data<=d4;

elsifst1(7downto0)="11101111"then

st1(7downto0)<="11011111";data<=d5;

elsifst1(7downto0)="11011111"then

st1(7downto0)<="10111111";data<=d6;

elsifst1(7downto0)="10111111"then

st1(7downto0)<="01111111";data<=d7;

endif;

endif;

endprocesssecond;

enda;

仿真波形:

 

分析:

当按下开关后,由仿真波形可清楚的看出显示了一个“开”字,所以仿真结果正确。

 

二、一屏一屏显示“元旦快乐”

程序:

Libraryieee;

Useieee.std_logic_1164.all;

Useieee.std_logic_unsigned.all;

Useieee.std_logic_arith.all;

Entitywengis

Port(

Clk,en:

instd_logic;

lie:

outstd_logic_vector(7downto0);——列

Com:

outstd_logic_vector(7downto0));——行

Endweng;

Architectureaofwengis

signalst1:

std_logic_vector(7downto0);

signalosc:

std_logic;

signalosd:

std_logic;

signald_ff:

std_logic_vector(27downto0);

signaldata:

std_logic_vector(7downto0);

signald0,d1,d2,d3,d4,d5,d6,d7:

std_logic_vector(7downto0);

signallie0:

std_logic_vector(6downto0);

begin

com<=data;

lie<=st1;

D0<=

"10000000"whenlie0(6downto0)="0000001"else

"10000000"whenlie0(6downto0)="0000010"else

"00011000"whenlie0(6downto0)="0000011"else

"00000000"whenlie0(6downto0)="0000100"else

"00000000";

D1<=

"01001000"whenlie0(6downto0)="0000001"else

"10111110"whenlie0(6downto0)="0000010"else

"11111111"whenlie0(6downto0)="0000011"else

"00000000"whenlie0(6downto0)="0000100"else

"00000000";

D2<=

"00111010"whenlie0(6downto0)="0000001"else

"10101010"whenlie0(6downto0)="0000010"else

"00011000"whenlie0(6downto0)="0000011"else

"01011110"whenlie0(6downto0)="0000100"else

"00000000";

D3<=

"00001010"whenlie0(6downto0)="0000001"else

"10101010"whenlie0(6downto0)="0000010"else

"10100100"whenlie0(6downto0)="0000011"else

"10010010"whenlie0(6downto0)="0000100"else

"00000000";

D4<=

"11111010"whenlie0(6downto0)="0000001"else

"10101010"whenlie0(6downto0)="0000010"else

"01111111"whenlie0(6downto0)="0000011"else

"11111110"whenlie0(6downto0)="0000100"else

"00000000";

D5<=

"10001010"whenlie0(6downto0)="0000001"else

"10101010"whenlie0(6downto0)="0000010"else

"01100100"whenlie0(6downto0)="0000011"else

"00010010"whenlie0(6downto0)="0000100"else

"00000000";

D6<=

"11001000"whenlie0(6downto0)="0000001"else

"10111110"whenlie0(6downto0)="0000010"else

"10111100"whenlie0(6downto0)="0000011"else

"01010011"whenlie0(6downto0)="0000100"else

"00000000";

D7<=

"00000000"whenlie0(6downto0)="0000001"else

"10000000"whenlie0(6downto0)="0000010"else

"00100000"whenlie0(6downto0)="0000011"else

"00000000"whenlie0(6downto0)="0000100"else

"00000000";——字库"元旦快乐"

first:

process

begin

waituntilclk='1';——分频

if(d_ff(27downto0)>=2e8)then

d_ff(27downto0)<="0000000000000000000000000000";

else

d_ff(27downto0)<=d_ff+1;

endif;

osc<=notd_ff(10);

osd<=notd_ff(15);

endprocessfirst;

second:

process(osc,en)

begin

if(osc='1'andosc'eventanden='0')then

ifst1(7downto0)="00000000"orst1(7downto0)="01111111"then

st1(7downto0)<="11111110";data<=d0;——逐列扫描方式

elsifst1(7downto0)="11111110"then

st1(7downto0)<="11111101";data<=d1;

elsifst1(7downto0)="11111101"then

st1(7downto0)<="11111011";data<=d2;

elsifst1(7downto0)="11111011"then

st1(7downto0)<="11110111";data<=d3;

elsifst1(7downto0)="11110111"then

st1(7downto0)<="11101111";data<=d4;

elsifst1(7downto0)="11101111"then

st1(7downto0)<="11011111";data<=d5;

elsifst1(7downto0)="11011111"then

st1(7downto0)<="10111111";data<=d6;

elsifst1(7downto0)="10111111"then

st1(7downto0)<="01111111";data<=d7;

endif;

endif;

endprocesssecond;

third:

process(osd,en)

begin

if(osd='1'andosd'eventanden='0')then

iflie0(6downto0)="0000100"then

lie0(6downto0)<="0000000";

elselie0(6downto0)<=lie0+1;

endif;

endif;

endprocessthird;

enda;

 

仿真波形:

分析:

由仿真波形可以清晰的看出,显示了四个字“元旦快乐”,由此可知,仿真结果正确。

 

三、滚动显示“开”字

程序:

Libraryieee;

Useieee.std_logic_1164.all;

Useieee.std_logic_unsigned.all;

Useieee.std_logic_arith.all;

entitygunis

port(

clk,en:

INSTD_LOGIC;

lie:

outSTD_LOGIC_VECTOR(7DOWNTO0);——列

com:

outSTD_LOGIC_VECTOR(7DOWNTO0));——行

endgun;

ArchitectureaOFgunIS

signalst1:

std_logic_vector(7downto0);

signalosc:

std_logic;

signalosd:

std_logic;

signald_ff:

std_logic_vector(27downto0);

signaldata:

std_logic_vector(7downto0);

signald0,d1,d2,d3,d4,d5,d6,d7:

std_logic_vector(7downto0);

signallie0:

std_logic_vector(6downto0);

Begin

Com<=data;

lie<=st1;

D0<=

"00000000"whenlie0="0000000"else

"10001000"whenlie0="0000001"else

"01001010"whenlie0="0000010"else

"00111110"whenlie0="0000011"else

"00001010"whenlie0="0000100"else

"11111110"whenlie0="0000101"else

"00001010"whenlie0="0000110"else

"00001000"whenlie0="0000111"else

"00000000";

D1<=

"10001000"whenlie0="0000000"else

"01001010"whenlie0="0000001"else

"00111110"whenlie0="0000010"else

"00001010"whenlie0="0000011"else

"11111110"whenlie0="0000100"else

"00001010"whenlie0="0000101"else

"00001000"whenlie0="0000110"else

"00000000"whenlie0="0000111"else

"00000000";

D2<=

"01001010"whenlie0="0000000"else

"00111110"whenlie0="0000001"else

"00001010"whenlie0="0000010"else

"11111110"whenlie0="0000011"else

"00001010"whenlie0="0000100"else

"00001000"whenlie0="0000101"else

"00000000"whenlie0="0000110"else

"10001000"whenlie0="0000111"else

"00000000";

D3<=

"00111110"whenlie0="0000000"else

"00001010"whenlie0="0000001"else

"11111110"whenlie0="0000010"else

"00001010"whenlie0="0000011"else

"00001000"whenlie0="0000100"else

"000

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2