文档介绍:精品
基于FPGA控制的LED汉字滚动显示器设计
2 硬件原理图
整个电路由五大部分组成:时钟计数模块GEL_CLK,存储汉字字模的ROM模块ROMZI,数据分配器模块MUX,移位模块YW及显示模块XIANSH-I。时钟计数模块用于产生整个电路所需要的时钟及其对时钟的计数值,例如:移位时钟CLK YW,T YW,T WORD,T SM。ROMZI模块是由QualtusⅡ中的LPM 1PORT ROM定制成,用来存储8个待显示的汉字。MUX模块用于在扫描时钟及扫描计数器的作用下,从ROM中读出一个汉字的8个行字模信息,送给移位模块YW,YW模块在移位时钟及移位计数器作用下,根据SELECT信号选择对读出的字模信息,进行相应的移位(左移、右移、上移、下移)后,最后送显示模块DISP驱动LED点阵显示汉字。原理图如图2所示。
ROMZI模块
利用LPM参数化模块库中单口ROM,利用QualtusⅡ中的MegaWizard Plug-In Manager定制而成,定制前首先要制作LPM ROM初始化文件,其中存储待显示汉字的字模数据,然后按照LPM MegaWizardPlug-In Manager的向导提示,结合设计要求进行定制。
图3为所定制ROM中的初始化汉字“元旦生日开心快乐”的字型码。数据分配模块MUX要求能在8个时钟作用下,从ROM中读出一行(一个汉字的8个字型码)分别送到数据分配器中的WLl~WL8输出端。图4为数据分配模块在扫描时钟作用下读取的字模数据,比较图3和图4可知,仿真结果正确,能满足题目要求。
移位模块YW
移位模块YW是整个设计的核心,行扫描实现左移,是通过每来一个移位时钟,将每一行的字模按位左移一位,扫描时钟到来时送出移位后的新字模。通过8次移位,可将一个汉字移出点阵平面,按类似的道理,也可以将一个汉字经8次移位后移进点阵平面。本例(图2)T YW为移位时钟的计数值,以WLl~WL8为欲显示汉字的原始字模,L10~L80为移位后从列上送出的8行显示字模信息,LLl~LL8为8个原始字模信息未送出位的暂存信号。设计中需要16个移位时钟,通过前8个时钟将WLl~WL8字模移进LED点阵平面,再经后8个时钟,将汉字又一位一位地移出。移位设计参考文献中有关移位寄存器的设计,分计数值为“0000"和非"0000"两部分处理,对第一行字模的处理为:
 
其他行可按相同方法处理,具体参见如下的程序:
library IEEE;
use ;
use ;
use ;
entity memtest is
port (
rst : in std_logic;
clk : in std_logic;
den : in std_logic;--serial input enable
rxd : in std_logic;--serial input data
outen : in std_logic;-- output data request
rdmem : out std_logic;--read memory
wrmem : out std_logic;-- write memory
csmem : out std_logic;-- chip enable memory
memdata: inout std_logic_vector(7 downto 0);-- memory data interface
memaddr: out std_logic_vector(2 downto 0);-- memory address
dataout: out std_logic_vector(7 downto 0);--data output
dataclkout: out std_logic --data output sync clk
);
end memtest;
architecture behav of memtest is
constant s0 :std_logic_vector(2 downto 0):= "001";
constant s1 :std_logic_vector(2 downto 0):= "010";
constant s2 :std_logic_vector(2 downto 0):= "100";
signal ss: std_logic_vector(2 downto 0);
signal rdmemaddr,wr