88点阵实验报告.docx
《88点阵实验报告.docx》由会员分享,可在线阅读,更多相关《88点阵实验报告.docx(18页珍藏版)》请在冰豆网上搜索。
![88点阵实验报告.docx](https://file1.bdocx.com/fileroot1/2022-12/17/a500ef99-9bad-4a03-b748-a28f0636482e/a500ef99-9bad-4a03-b748-a28f0636482e1.gif)
88点阵实验报告
JIANGSUTEACHERSUNIVERSITYOFTECHNOLOGY
数字电路课程设计报告
基于FFPA的
8*8点阵显示器的设计
(软件部分)
学院名称:
电气信息工程学院
专业:
通信工程
班级:
08通信2W
姓名:
孙立波(朱容海)
学号:
08313219
指导教师姓名:
朱幼莲宋伟
2010年12月
序言……………………………………………………………
一、课题要求…………………………………………………………………
(1)技术要求………………………………………………………………………
(2)功能要求………………………………………………………………………
(3)本人的工作……………………………………………………………………
二、设计原理及其框图……………………………………………
(1)8*8点阵的工作原理和方案……………………………………………
(2)单元电路设计,仿真与分析……………………………………………
(3)顶层电路设计,仿真与分析……………………………………………
(4)硬件电路设计与安装图…………………………………………………
三、成品调试
(1)下载调试…………………………………………………………………
(2)收获及体会………………………………………………………………
序言
面对当今飞速发展的电子产品市场,设计师需要更加实用、快捷的EDA工具,使用统一的集成化设计环境,改变传统设计思路,将精力集中到设计构思、方案比较和寻找优化设计等方面,需要以最快的速度,开发出性能优良、质量一流的电子产品,对EDA技术提出了更高的要求。
未来的EDA技术将在仿真、时序分析、集成电路自动测试、高速印刷电路板设计及开发操作平台的扩展等方面取得新的突破,向着功能强大、简单易学、使用方便的方向发展。
可编程逻辑器件已经成为当今世界上最富吸引力的半导体器件,在现代电子系统设计中扮演着越来越重要的角色。
过去的几年里,可编程器件市场的增长主要来自大容量的可编程逻辑器件CPLD和FPGA。
本课程设计主要阐述基于FPGA和VHDL语言实现在8*8点阵上的汉字静态显示、一屏一屏显示以及滚动显示。
在实际学习中我们应该从应用的角度看待这门课程,初步掌握基本设计工具和设计方法,在课程实践中应锻炼自己的实际设计思想、创新思维和创造能力,力求提高自己的工程实践能力和自主创新能力。
一、课题要求
(1)技术要求
软件要求:
能够使用EDA编写程序及仿真设计,能够较为熟练的掌握Quartus软件并使用该软件进行编程、仿真和调试。
硬件要求:
FPGA(EP2C5T144C8)引脚识别和连接。
(2)功能要求
1.静态显示“王”字;
2.一屏一屏的显示“江技师”;
3.滚动的显示数字“19”。
(3)本人的工作
通过查阅资料,了解8*8点阵的工作原理和FPGA芯片的基本工作原理并负责软件的编写,仿真和调试。
二、设计原理及其框图
(1)8*8点阵的工作原理和方案
若要用点阵发光二极管显示汉字,首先要将汉字放在一个方块内,方格块分成8*8共64个小方格,在方块内写上汉字,在字笔划下落处的小方格里填上“1”,无笔划处填上“0”,这样就形成了一个汉字二进制数据。
下图是一只8*8阵列的点阵发光显示器,该点阵发光显示器是由8*8阵列组成,共8行,每行8只发光二极管,共64只发光像素,每列的8只发光二极管的所有负极(阴极)相连。
每行发光管的正极相连,点阵发光显示器在同一时间只能点亮一列,每列点亮的情况是根据从显示器P1~P8送入的数据点亮,要使一个字符在显示器整屏显示,点阵发光显示器就必须通过快速逐列点亮,而且是周而复始的循环点亮,使人眼的暂留视觉效应形成一个全屏字符。
8*8点阵二极管示意图
原理框图:
(2)单元电路设计,仿真与分析
<1>:
静态显示“王”字
程序:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_Unsigned.all;
useieee.std_logic_ARITH.all;
ENTITYjingxianis
port(clk:
instd_logic;
en:
instd_logic;
lie:
outstd_logic_vector(7downto0);--列
hang:
outstd_logic_vector(7downto0));--行
Endjingxian;
Architectureaofjingxianis
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,d8,d9,d10,d11,d12,d13,d14,d15:
std_logic_vector(7downto0);
Begin
hang<=data;
lie<=st1;
d0<="00000010";
d1<="10010010";
d2<="10010010";
d3<="11111110";
d4<="10010010";
d5<="10010010";
d6<="00000010";
d7<="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);
endprocessfirst;
second:
process(osc,en)
begin
if(osc='1'andosc'event)then
if(en='1')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;
elsest1<="00000000";data<="00000000";
endif;
endif;
endprocesssecond;
enda;
波形图:
<2>:
.一屏一屏显示“江技师”
程序:
Libraryieee;
Useieee.std_logic_1164.all;
Useieee.std_logic_unsigned.all;
Useieee.std_logic_arith.all;
Entitypingxianis
Port(
Clk,en:
instd_logic;
lie:
outstd_logic_vector(7downto0);--列
hang:
outstd_logic_vector(7downto0));--行
Endpingxian;
Architectureaofpingxianis
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
hang<=data;
lie<=st1;
D0<=
"01000001"whenlie0(6downto0)="0000000"else
"00001000"whenlie0(6downto0)="0000001"else
"00111100"whenlie0(6downto0)="0000010"else
"00000000";
D1<=
"01000001"whenlie0(6downto0)="0000000"else
"00101101"whenlie0(6downto0)="0000001"else
"10101000"whenlie0(6downto0)="0000010"else
"00000000";
D2<=
"01000001"whenlie0(6downto0)="0000000"else
"11111010"whenlie0(6downto0)="0000001"else
"11111111"whenlie0(6downto0)="0000010"else
"00000000";
D3<=
"01000001"whenlie0(6downto0)="0000000"else
"00101101"whenlie0(6downto0)="0000001"else
"10100000"whenlie0(6downto0)="0000010"else
"00000000";
D4<=
"01000001"whenlie0(6downto0)="0000000"else
"00001000"whenlie0(6downto0)="0000001"else
"00111100"whenlie0(6downto0)="0000010"else
"00000000";
D5<=
"00101100"whenlie0(6downto0)="0000000"else
"00110000"whenlie0(6downto0)="0000001"else
"11111100"whenlie0(6downto0)="0000010"else
"00000000";
D6<=
"01010010"whenlie0(6downto0)="0000000"else
"11111111"whenlie0(6downto0)="0000001"else
"00000010"whenlie0(6downto0)="0000010"else
"00000000";
D7<=
"10100001"whenlie0(6downto0)="0000000"else
"00100110"whenlie0(6downto0)="0000001"else
"00111101"whenlie0(6downto0)="0000010"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(25);
endprocessfirst;
second:
process(osc,en)
begin
if(osc='1'andosc'event)then
if(en='1')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;
elsest1<="00000000";data<="00000000";
endif;
endif;
endprocesssecond;
third:
process(osd,en)
begin
if(osd='1'andosd'eventanden='1')then
iflie0(6downto0)="0000010"then
lie0(6downto0)<="0000000";
elselie0(6downto0)<=lie0+1;
endif;
endif;
endprocessthird;
enda;
波形图:
<3>:
滚动显示“19”
程序:
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);--列
hang:
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
hang<=data;
lie<=st1;
D0<=
"11111111"whenlie0="0000000"else--19第0列
"10010001"whenlie0="0000001"else--19第1列
"10010001"whenlie0="0000010"else--19第2列
"10010001"whenlie0="0000011"else--19第3列
"11110001"whenlie0="0000100"else--19第4列
"00000000"whenlie0="0000101"else--19第5列
"11111111"whenlie0="0000110"else--19第6列
"00000000"whenlie0="0000111"else--19第7列
"00000000";--以上为字库0
D1<=
"10010001"whenlie0="0000001"else--19第1列
"10010001"whenlie0="0000010"else--19第2列
"10010001"whenlie0="0000011"else--19第3列
"11110001"whenlie0="0000100"else--19第4列
"00000000"whenlie0="0000101"else--19第5列
"11111111"whenlie0="0000110"else--19第6列
"00000000"whenlie0="0000111"else--19第7列
"11111111"whenlie0="0000000"else--19第0列
"00000000";--以上为字库1
D2<=
"10010001"whenlie0="0000010"else--19第2列
"10010001"whenlie0="0000011"else--19第3列
"11110001"whenlie0="0000100"else--19第4列
"00000000"whenlie0="0000101"else--19第5列
"11111111"whenlie0="0000110"else--19第6列
"00000000"whenlie0="0000111"else--19第7列
"11111111"whenlie0="0000000"else--19第0列
"10010001"whenlie0="0000001"else--19第1列
"00000000";--以上为字库2
D3<=
"10010001"whenlie0="0000011"else--19第3列
"11110001"whenlie0="0000100"else--19第4列
"00000000"whenlie0="0000101"else--19第5列
"11111111"whenlie0="0000110"else--19第6列
"00000000"whenlie0="0000111"else--19第7列
"11111111"whenlie0="0000000"else--19第0列
"10010001"whenlie0="0000001"else--19第1列
"10010001"whenlie0="0000010"else--19第2列
"00000000";--以上为字库3
D4<=
"11110001"whenlie0="0000100"else--19第4列
"00000000"whenlie0="0000101"else--19第5列
"11111111"whenlie0="0000110"else--19第6列
"00000000"whenlie0="0000111"else--19第7列
"11111111"whenlie0="0000000"else--19第0列
"10010001"whenlie0="0000001"else--19第1列
"10010001"whenlie0="0000010"else--19第2列
"10010001"whenlie0="0000011"else--19第3列
"00000000";--以上为字库4
D5<=
"00000000"whenlie0="0000101"else--19第5列
"11111111"whenlie0="0000110"else--19第6列
"00000000"whenlie0="0000111"else--19第7列
"11111111"whenlie0="0000000"else--19第0列
"10010001"whenlie0="0000001"else--19第1列
"10010001"whenlie0="0000010"else--19第2列
"10010001"whenlie0="0000011"else--19第3列
"11110001"whenlie0="0000100"else--19第4列
"00000000";--以上是字库5
D6<=
"11111111"whenlie0="0000110"else--19第6列
"00000000"whenlie0="0000111"else--19第7列
"11111111"whenlie0="0000000"else--19第0列
"10010001"whenlie0="0000001"else--19第1列
"10010001"whenlie0="0000010"else--19第2列
"10010001"whenlie0="0000011"else--19第3列
"11110001"whenlie0="0000100"else--19第4列
"00000000"whenlie0="0000101"else--19第5列
"00000000";--以上是字库6
D7<=
"00000000"whenlie0="0000111"els