16X16点阵显示综合实验eda
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北华航天工业学院
《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)
课程设计任务书
一、实验要求
设计一个共阴16X16点阵控制接口,要求:在时钟信号的控制下,使点阵动态点亮,点亮方式为使点阵显示器显示“沈小兰王建超袁利宏”九个字和一种花样,其中列选信号为16-4编码器编码输出。
二、实验目的
1、了解点阵字符的产生和显示原理。
2、了解E2PROM和16×16点阵LED的工作机理。
3、加强对于总线产生,地址定位的CPLD实现的理解。
三、硬件要求
1.主芯片EPF10K10LC84-4。
2.可变时钟源。
3.带有事先编程好字库/字符的E2PROM 2864。
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进制计数器:
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY JISHU IS
PORT(CLK,RST,LOAD:IN STD_LOGIC;
DIN:IN STD_LOGIC_VECTOR(3 DOWNTO 0);
DOUT:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));
END JISHU;
ARCHITECTURE SHILIU OF JISHU IS
BEGIN
PROCESS(CLK,RST,LOAD,DIN)
BEGIN
IF (CLK'EVENT AND CLK='1') THEN
IF(RST='1')THEN DOUT<=(OTHERS=>'0');
ELSIF (LOAD='1') THEN DOUT<=DIN;
ELSIF (DOUT=15) THEN
DOUT<="0000";
ELSE
DOUT<=DOUT+1;
END IF;
END IF;
END PROCESS;
END SHILIU;
2.16*16点阵的行列驱动器
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity zhi is
port( din : in std_logic_vector(3 downto 0);
selout : buffer std_logic_vector(3 downto 0);
clk,rst: in std_logic;
dotout : out std_logic_vector(15 downto 0));
end zhi;
architecture one of zhi is
begin
process(clk,rst,din,selout)
variable b:std_logic_vector(15 downto 0);
begin
if rst='1'then selout<="0000";
elsif clk'event and clk='1' then
case din is
when "0000"=>selout<=selout+1;
case selout is
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";
when others =>b:="0000000000000000";
end case;
when"0001"=>selout<=selout+1;
case selout is
when "1111" =>b:="0000000000000000";
when "0000" =>b:="0000000000000000";
when "0001" =>b:="0000000110000000";
when "0010" =>b:="0000001100000000";
when "0011" =>b:="0000011000000000";