基于FPGA的点阵显示控制器的设计.docx
- 文档编号:23053257
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:25
- 大小:137.92KB
基于FPGA的点阵显示控制器的设计.docx
《基于FPGA的点阵显示控制器的设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的点阵显示控制器的设计.docx(25页珍藏版)》请在冰豆网上搜索。
基于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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 点阵 显示 控制器 设计