基于FPGA控制的LED汉字滚动显示器设计

上传人:公**** 文档编号:470791461 上传时间:2022-12-03 格式:DOC 页数:16 大小:180KB
返回 下载 相关 举报
基于FPGA控制的LED汉字滚动显示器设计_第1页
第1页 / 共16页
基于FPGA控制的LED汉字滚动显示器设计_第2页
第2页 / 共16页
基于FPGA控制的LED汉字滚动显示器设计_第3页
第3页 / 共16页
基于FPGA控制的LED汉字滚动显示器设计_第4页
第4页 / 共16页
基于FPGA控制的LED汉字滚动显示器设计_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《基于FPGA控制的LED汉字滚动显示器设计》由会员分享,可在线阅读,更多相关《基于FPGA控制的LED汉字滚动显示器设计(16页珍藏版)》请在金锄头文库上搜索。

1、基于FPGA控制的LED汉字滚动显示器设计2 硬件原理图整个电路由五大部分组成:时钟计数模块GEL_CLK,存储汉字字模的ROM模块ROMZI,数据分配器模块MUX,移位模块YW及显示模块XIANSH-I。时钟计数模块用于产生整个电路所需要的时钟及其对时钟的计数值,例如:移位时钟CLK YW,移位计数器CNT YW,字计数器CNT WORD,显示扫描计数器CNT SM。ROMZI模块是由Qualtus中的LPM 1PORT ROM定制成,用来存储8个待显示的汉字。MUX模块用于在扫描时钟及扫描计数器的作用下,从ROM中读出一个汉字的8个行字模信息,送给移位模块YW,YW模块在移位时钟及移位计数

2、器作用下,根据SELECT信号选择对读出的字模信息,进行相应的移位(左移、右移、上移、下移)后,最后送显示模块DISP驱动LED点阵显示汉字。原理图如图2所示。32 ROMZI模块利用LPM参数化模块库中单口ROM,利用Qualtus中的MegaWizard Plug-In Manager定制而成,定制前首先要制作LPM ROM初始化文件,其中存储待显示汉字的字模数据,然后按照LPM MegaWizardPlug-In Manager的向导提示,结合设计要求进行定制。图3为所定制ROM中的初始化汉字“元旦生日开心快乐”的字型码。数据分配模块MUX要求能在8个时钟作用下,从ROM中读出一行(一个

3、汉字的8个字型码)分别送到数据分配器中的WLlWL8输出端。图4为数据分配模块在扫描时钟作用下读取的字模数据,比较图3和图4可知,仿真结果正确,能满足题目要求。33 移位模块YW移位模块YW是整个设计的核心,行扫描实现左移,是通过每来一个移位时钟,将每一行的字模按位左移一位,扫描时钟到来时送出移位后的新字模。通过8次移位,可将一个汉字移出点阵平面,按类似的道理,也可以将一个汉字经8次移位后移进点阵平面。本例(图2)中,CNT YW为移位时钟的计数值,以WLlWL8为欲显示汉字的原始字模,L10L80为移位后从列上送出的8行显示字模信息,LLlLL8为8个原始字模信息未送出位的暂存信号。设计中需

4、要16个移位时钟,通过前8个时钟将WLlWL8字模移进LED点阵平面,再经后8个时钟,将汉字又一位一位地移出。移位设计参考文献中有关移位寄存器的设计,分计数值为“0000和非0000两部分处理,对第一行字模的处理为:其他行可按相同方法处理,具体参见如下的程序:library IEEE;use IEEE.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity memtest isport (rst : in std_logic;clk : in std_logic;den : i

5、n std_logic;-serial input enablerxd : in std_logic;-serial input dataouten : in std_logic;- output data requestrdmem : out std_logic;-read memorywrmem : out std_logic;- write memorycsmem : out std_logic;- chip enable memorymemdata: inout std_logic_vector(7 downto 0);- memory data interfacememaddr: o

6、ut std_logic_vector(2 downto 0);- memory addressdataout: out std_logic_vector(7 downto 0);-data outputdataclkout: 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; const

7、ant s2 :std_logic_vector(2 downto 0):= 100;signal ss: std_logic_vector(2 downto 0);signal rdmemaddr,wrmemaddr: std_logic_vector(2 downto 0);signal rxdcnt: std_logic_vector(3 downto 0);signal rdmemdata, wrmemdata :std_logic_vector(7 downto 0);signal wrmem_s, wrrdy, dataclkout_s :std_logic;beginproces

8、s(rst,clk)beginif rst = 0 thenwrmemdata 0);elsif clkevent and clk = 1 thenif den = 1 thenwrmemdata(7) = wrmemdata(6);wrmemdata(6) = wrmemdata(5);wrmemdata(5) = wrmemdata(4);wrmemdata(4) = wrmemdata(3);wrmemdata(3) = wrmemdata(2);wrmemdata(2) = wrmemdata(1);wrmemdata(1) = wrmemdata(0);wrmemdata(0) =

9、rxd;end if;end if;end process;process(rst,clk)beginif rst = 0 thenrxdcnt 0);elsif clkevent and clk = 1 thenif den = 1 thenif rxdcnt = 9 thenrxdcnt = rxdcnt;elserxdcnt = rxdcnt +1;end if;elserxdcnt 0);end if;end if;end process;process(rst,clk)beginif rst = 0 thenss if wrrdy = 1 thenss = s1;elsif oute

10、n = 1 thenss ss ss ss = s0;end case;end if;end process;process(rst,clk)beginif rst = 0 thenwrrdy = 0;elsif clkevent and clk = 1 thenif ss = s1 thenwrrdy = 0;elseif rxdcnt = 8 thenwrrdy = 1;elsewrrdy = 0;end if;end if;end if;end process;wrmem_s = 0 when ss = s1 else 1;rdmem = 0 when ss = s2 else 1;cs

11、mem = 1 when ss = s1 or ss = s2 else 0;process(rst,clk)beginif rst = 0 thendataclkout_s = 0;elsif clkevent and clk = 1 thenif ss = s2 thendataclkout_s = 1;elsedataclkout_s = 0;end if;end if;end process;process(clk)beginif clkevent and clk = 1 thendataclkout = dataclkout_s;end if;end process;process(

12、rst,clk)beginif rst = 0 thendataout 0);elsif clkevent and clk = 1 thenif ss = s2 thendataout = rdmemdata;end if;end if;end process;process(rst,clk)beginif rst = 0 thenwrmemaddr 0);elsif clkevent and clk = 1 thenif ss = s1 thenwrmemaddr = wrmemaddr +1;end if;end if;end process;process(rst,clk)beginif rst = 0 thenrdmemaddr 0);elsif clkevent and clk = 1 thenif ss = s2 thenrdmemaddr = rdmemaddr +1 ;end if;end if;end process;memaddr = wrmemaddr when wrmem_s = 0 else rdmemaddr;memdata = wrmemdata when wrmem_s = 0 else ZZZZZZZZ;rdmemdata = memdata;wrmem = wrmem_s;end beha

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号