16X16点阵显示综合实验eda.docx
《16X16点阵显示综合实验eda.docx》由会员分享,可在线阅读,更多相关《16X16点阵显示综合实验eda.docx(21页珍藏版)》请在冰豆网上搜索。
16X16点阵显示综合实验eda
北华航天工业学院
《EDA技术综合设计》
课程设计报告
报告题目:
16X16点阵显示综合实验
作者所在系部:
电子工程系
作者所在专业:
自动化
作者所在班级:
B08221
作者姓名:
王建超
指导教师姓名:
崔瑞雪
完成时间:
2010-11-30
内容摘要
EDA技术是现代电子信息工程领域的一门新兴技术,它是在现代先进的计算机工作平台上开发出来的一整套电子系统设计的软硬件工具,并提供了先进的电子系统设计方法。
随着EDA技术的不断发展,开发人员完全可以通过自己的电子系统设计来定制其芯片内部的的电路功能,使之成为设计者自己的专门集成电路芯片。
在本次课设中,设计一个共阴16X16点阵控制接口,要求:
在时钟信号的控制下,使点阵动态点亮,点亮方式为使点阵显示器显示“………”九个字和一种花样,其中列选信号为16-4编码器编码输出。
列选信号采用与7段数码管的位选信号一样的处理方法,即列扫描信号频率大于24HZ。
字体、格式,注意本次为课设报告、不是实验报告
关键词:
EDA、可编程逻辑器件、时钟信号、16*16点阵字符发生器
目录
一、设计要求···············································1
二、实验目的···············································1
三、硬件要求···············································1
四、实验原理···············································1
五、程序设计···············································2
16进制计数器··········································2
16*16点阵的行列驱动器·································2
六、原理图················································12
七、仿真波形··············································12
八、实验总结··············································13
参考文献··················································13
课程设计任务书
课题名称
16*16点阵显示综合实验
完成时间
指导教师
职称
学生姓名
班级
总体设计要求和技术要点
设计一个共阴16X16点阵控制接口,要求:
在时钟信号的控制下,使点阵动态点亮,点亮方式为使点阵显示器显示“沈小兰王建超袁利宏”九个字和一种花样,其中列选信号为16-4编码器编码输出。
列选信号采用与7段数码管的位选信号一样的处理方法,即列扫描信号频率大于24HZ。
工作内容及时间进度安排
11/29日:
上午熟悉EDAV型试验系统,完成芯片下载,试验箱连线;
下午调试程序,对错误进行修改,实现目标花样;
11/30日:
上午验收、答辩;
讲前面工作写上
课程设计成果
1.与设计内容对应的软件程序
2.课程设计报告书
3.成果使用说明书
4.设计工作量要求
一、实验要求
设计一个共阴16X16点阵控制接口,要求:
在时钟信号的控制下,使点阵动态点亮,点亮方式为使点阵显示器显示“沈小兰王建超袁利宏”九个字和一种花样,其中列选信号为16-4编码器编码输出。
二、实验目的
1、了解点阵字符的产生和显示原理。
2、了解E2PROM和16×16点阵LED的工作机理。
3、加强对于总线产生,地址定位的CPLD实现的理解。
三、硬件要求
1. 主芯片EPF10K10LC84-4。
2. 可变时钟源。
3. 带有事先编程好字库/字符的E2PROM2864。
4. 16×16扫描LED点阵。
四、实验原理
16×16扫描LED点阵的工作原理同8位扫描数码管类似。
它有16个共阴极输出端口,每个共阴极对应有16个LED显示灯。
所以其扫描译码地址需4位信号线。
要使16点阵上某个点亮,如第10行第4列的LED点亮,只要让列选信号为“0100”,从而选中第4列,再给第10行一个高电平,即可点亮该LED。
本实验通过FPGA芯片写入字形,产生扫描信号。
为了显示整个汉字,首先分布好汉字的排列,以行给汉字信息;然后以大于24HZ的频率扫描列,即每行逐一加高电平,根据人眼的视觉残留特性,使之形成整个汉字的显示。
由于要显示不同的字,需要给一个信DIN,对不同字不同花样进行选择。
而该信号的产生可以通过一个16进制计数器完成。
本设计由16进制计数器,行驱动和列驱动组成。
输出包括了如下图所示的列选信号SEL0—SEL3。
五、程序设计
1.16进制计数器:
LIBRARYieee;
USEieee.std_logic_1164.all;
USEieee.std_logic_unsigned.all;
ENTITYJISHUIS
PORT(CLK,RST,LOAD:
INSTD_LOGIC;
DIN:
INSTD_LOGIC_VECTOR(3DOWNTO0);
DOUT:
BUFFERSTD_LOGIC_VECTOR(3DOWNTO0));
ENDJISHU;
ARCHITECTURESHILIUOFJISHUIS
BEGIN
PROCESS(CLK,RST,LOAD,DIN)
BEGIN
IF(CLK'EVENTANDCLK='1')THEN
IF(RST='1')THENDOUT<=(OTHERS=>'0');
ELSIF(LOAD='1')THENDOUT<=DIN;
ELSIF(DOUT=15)THEN
DOUT<="0000";
ELSE
DOUT<=DOUT+1;
ENDIF;
ENDIF;
ENDPROCESS;
ENDSHILIU;
2.16*16点阵的行列驱动器
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityzhiis
port(din:
instd_logic_vector(3downto0);
selout:
bufferstd_logic_vector(3downto0);
clk,rst:
instd_logic;
dotout:
outstd_logic_vector(15downto0));
endzhi;
architectureoneofzhiis
begin
process(clk,rst,din,selout)
variableb:
std_logic_vector(15downto0);
begin
ifrst='1'thenselout<="0000";
elsifclk'eventandclk='1'then
casedinis
when"0000"=>selout<=selout+1;
caseseloutis
when"1111"=>b:
="0000000000000000";
when"0000"=>b:
="0010001000011100";
when"0001"=>b:
="0001000100001000";
when"0010"=>b:
="0000100010010000";
when"0011"=>b:
="0000000000100010";
when"0100"=>b:
="0011100001000100";
when"0101"=>b:
="0001000000001000";
when"0110"=>b:
="0001000000010000";
when"0111"=>b:
="0111111111100000";
when"1000"=>b:
="0111111111111100";
when"1001"=>b:
="0001000000000100";
when"1010"=>b:
="0001010000000100";
when"1011"=>b:
="0001100000000100";
when"1100"=>b:
="0011000000000100";
when"1101"=>b:
="0000000000011100";
whenothers=>b:
="0000000000000000";
endcase;
when"0001"=>selout<=selout+1;
caseseloutis
when"1111"=>b:
="0000000000000000";
when"0000"=>b:
="0000000000000000";
when"0001"=>b:
="0000000110000000";
when"0010"=>b:
="0000001100000000";
when"0011"=>b:
="0000011000000000";
when"0100"=>b:
="0000110000010000";
when"0101"=>b:
="0000000000001000";
when"0110"=>b:
="0111111111111100";
when"0111"=>b:
="0111111111111110";
when"1000"=>b:
="0000000000000000";
when"1001"=>b:
="0000110000000000";
when"1010"=>b:
="0000011000000000";
when"1011"=>b:
="0000001100000000";
when"1100"=>b:
="0000000110000000";
when"1101"=>b:
="0000000000000000";
whenothers=>b:
="0000000000000000";
endcase;
when"0010"=>selout<=selout+1;
caseseloutis
when"1111"=>b:
="0000000000000000";
when"0000"=>b:
="0000000000000110";
when"0001"=>b:
="0001100000000110";
when"0010"=>b:
="1001100000000110";
when"0011"=>b:
="1101100110000110";
when"0100"=>b:
="0111100110000110";
when"0101"=>b:
="0011100110000110";
when"0110"=>b:
="0001100110000110";
when"0111"=>b:
="0001100110000110";
when"1000"=>b:
="0011100110000110";
when"1001"=>b:
="0111100110000110";
when"1010"=>b:
="1101100110000110";
when"1011"=>b:
="1001100000000110";
when"1100"=>b:
="0001100000000110";
when"1101"=>b:
="0000000000000110";
whenothers=>b:
="0000000000000000";
endcase;
when"0011"=>selout<=selout+1;
caseseloutis
when"1111"=>b:
="0000000000000000";
when"0000"=>b:
="0000000000000100";
when"0001"=>b:
="0000000000001100";
when"0010"=>b:
="0001000000011100";
when"0011"=>b:
="0101011011110000";
when"0100"=>b:
="0101011101100000";
when"0101"=>b:
="0101010110000000";
when"0110"=>b:
="1111010111111111";
when"0111"=>b:
="0101010111111110";
when"1000"=>b:
="0101010101100100";
when"1001"=>b:
="0101011000110000";
when"1010"=>b:
="0001000000011000";
when"1011"=>b:
="0000000000001100";
when"1100"=>b:
="0000000000000100";
when"1101"=>b:
="0000000000000000";
whenothers=>b:
="0000000000000000";
endcase;
when"0100"=>selout<=selout+1;
caseseloutis
when"0000"=>b:
="0000000000011000";
when"0001"=>b:
="0000011000110000";
when"0010"=>b:
="0110011011000000";
when"0011"=>b:
="0111111111111100";
when"0100"=>b:
="0111111111111110";
when"0101"=>b:
="0110011110000000";
when"0110"=>b:
="0000011011100000";
when"0111"=>b:
="0000000001100000";
when"1000"=>b:
="0000000000000000";
when"1001"=>b:
="0000011111110000";
when"1010"=>b:
="0000011111100000";
when"1011"=>b:
="0000000000001000";
when"1100"=>b:
="0111111111111100";
when"1101"=>b:
="0111111111111110";
when"1110"=>b:
="0000000000000000";
whenothers=>b:
="0000000000000000";
endcase;
when"0101"=>selout<=selout+1;
caseseloutis
when"0000"=>b:
="0000000000000000";
when"0001"=>b:
="0000111000000010";
when"0010"=>b:
="0000111000000110";
when"0011"=>b:
="0000100110001000";
when"0100"=>b:
="0000100110010110";
when"0101"=>b:
="0000100110101110";
when"0110"=>b:
="0110100111010110";
when"0111"=>b:
="0110101110100110";
when"1000"=>b:
="0110100110000110";
when"1001"=>b:
="0000100110010110";
when"1010"=>b:
="0000100110001110";
when"1011"=>b:
="0000100110000110";
when"1100"=>b:
="0000111000000110";
when"1101"=>b:
="0000111000000010";
when"1110"=>b:
="0000000000000000";
whenothers=>b:
="0000000000000000";
endcase;
when"0110"=>selout<=selout+1;
caseseloutis
when"1111"=>b:
="0000000000000000";
when"0000"=>b:
="0000000000000010";
when"0001"=>b:
="0110000000000110";
when"0010"=>b:
="0110000110000110";
when"0011"=>b:
="0110000110000110";
when"0100"=>b:
="0110000110000110";
when"0101"=>b:
="0110000110000110";
when"0110"=>b:
="0111111111111110";
when"0111"=>b:
="0111111111111110";
when"1000"=>b:
="0110000110000110";
when"1001"=>b:
="0110000110000110";
when"1010"=>b:
="0110000110000110";
when"1011"=>b:
="0110000110000110";
when"1100"=>b:
="0110000000000110";
when"1101"=>b:
="0000000000000010";
whenothers=>b:
="0000000000000000";
endcase;
when"0111"=>selout<=selout+1;
caseseloutis
when"0000"=>b:
="0000000000100100";
when"0001"=>b:
="0010001000011000";
when"0010"=>b:
="0010010100011000";
when"0011"=>b:
="0010110010100100";
when"0100"=>b:
="0011000001001010";
when"0101"=>b:
="0010010010101010";
when"0110"=>b:
="0010010010101010";
when"0111"=>b:
="0010010010101010";
when"1000"=>b:
="0111111111111110";
when"1001"=>b:
="0010010010101010";
when"1010"=>b:
="0010010010101010";
when"1011"=>b:
="0010010010101010";
when"1100"=>b:
="0011111110001010";
when"1101"=>b:
="0000010000001010";
when"1110"=>b:
="0000010000000010";
whenothers=>b:
="0000000000000000";
endcase;
when"1000"=>selout<=selout+1;
caseseloutis
when"0000"=>b:
="0000000001111100";
when"0001"=>b:
="0000100011000000";
when"0010"=>b:
="0010100100100000";
when"0011"=>b:
="0010101000010000";
when"0100"=>b:
="0111111111001000";
when"0101"=>b:
="0010100100000100";
when"0110"=>b:
="0010100100000010";
when"0111"=>b:
="0000100000000010";
when"1000"=>b:
="0000000000000010";
when"1001"=>b:
="0100010001110010";
when"1010"=>b:
="0100100010001010";
when"1011"=>b:
="0101000010001010";
when"1100"=>b:
="0110010010001010";
when"1101"=>b:
="0111111001110010";
when"1110"=>b:
="0000000000000000";
whenothers=>b:
="0000000000000000";
endcase;
when"1001"=>selout<=selout+1;
caseseloutis
when"1111"=>b:
="0000111100001111";
when"0000"=>b:
="0000111100001111";
when"0001"=>b:
="0000111100001111";
when"0010"=>b:
="0000111100001111";
when"0011"=>b:
="1111000011110000";
when"0100"=>b:
="1111000011110000";
when"0101"=>b:
="1111000011110000";
when"0110"=>b:
="1111111111110000";
when"0111"=>b:
="0000111100001111";
when"1000"=>b:
="00