摘 要 :鉴于传统的 L ED 显示规模小、可靠性差、需要上位机实时控制的问题 ,提出一种基于 FPGA 和 2 片 SRAM 的嵌
入式大屏幕 L ED 显示的方法 ,其显示规模达到 512 ×512 点阵列 ,并且可以在完全不需要上位机控制的情况下实时独立的工
作。本设计已经实际使用在现场厂房中 ,能够较好地对厂房中的生产情况进行实时显示。着重讨论该系统最底层的硬件连
接及相应的软件设计 ,并给出其软、硬件实现。
关键词 :嵌入式 ;L ED 大屏幕 ;设计优化 ; FPGA
1 引 言
L ED 显示屏的应用已经比较普遍 ,而且随着应用的
普及 ,更多新式的 L ED 显示屏会应用在更多的场合 ,所以
研究嵌入式大屏幕点阵 L ED 的显示很有实际意义。
但是现在市场上的多种 L
ED 显示屏在显示性能上良
莠不齐 ,并且大多需要上位机对显示过程进行实时控制。
本文提出一种优化的高性能高可靠性的嵌入式大屏幕 L ED 显示系统 ,只需要用 1 片 FPGA 和 2 片 SRAM 就可
以实现大屏幕 L ED 显示的驱动和内容更换 ,可以说其性
能已经大有改善。本设计可以应对多种大屏幕显示的
场合。
2 系统硬件设计与实现
硬件连接的方式多种并且灵活 ,其连接方式直接影响
到显示的性能。下面给出的硬件连接方式是最优的方式 , 能够达到高性能的显示 ,并且使软件编写变得简单。
每个 8 ×8 的 L ED 点阵块称为最小模块。每 16 个 8 ×8的 L ED 点阵块为一个基模块 ,一个基模块横向有 8 个 ,纵向有 2 个最小模块 ,如图 1 所示。图中每个小方格
代表一个最小模块。
每个最小模块控制信号为 8 个行信号 H1~ H8 和 8 个数据信号 R1 ~ R8。行信号接一个 3 8 译码器74 HC138 的输出 ,他的输入为 HangQ[ 2. . 0 ] ;而列信号给
具体这一行的数据信号接的是一个 74 HC595 的输出 ,如
图 2 所示。
74 HC595 是移位锁存芯片 ,他内部有一个移位寄存
器 ,还有一个数据移入引脚 ( DS) 、一个数据移出引脚 (Q8) 、8 个数据输出引脚 ( Q1~Q8) ,另外还有脉冲信号 (CL K) 和数据锁存信号(ST) 。他的工作原理是当脉冲信
号作用时将移入引脚的数据移入芯片内部的移位寄存器 , 当移满 8 位数据以后 ,第 8 位的数据就会出现在数据移出引脚上 ,再给一个脉冲信号 ,这一位数据就会被移出同时
也有新的数据移入。当数据锁存信号有效时 ,芯片内部的
的移位寄存器就将 8 位数据就锁存到 8 个数据输出引脚
上 ,从而实现数据输出。
对于一个最小模块 ,当数据信号 R 有效后 ,时钟信号 TSCK 就将该数据移入 74
HC595 的内部寄存器 ,内部寄
存器的 8 位全部移满数据后 ,锁存信号 TLOCK 有效 ,就
能将移满的数据全部送到 8 个数据信号 R1~R8 上。这
个时候 ,再用 HangQ[ 2. . 0 ]选中其中的某一行信号 ,行锁
存信号 TL EDEN 有效后 ,就可以在这个 8 ×8 的点阵列上
实现数据显示。因为在一个特定的时间只能在这个 8 ×8 的 L ED 点阵块上显示其中的一行 ,所以将第一行到第8 行
依次循环显示 ,只要速度足够快 ,人眼看起来就是连续的。
对于 一 个 基 模 块 , 因 为 每 个 最 小 模 块 都 有 一 个 74 HC595 移 位 锁 存 芯 片 , 只 要 将 各 个 最 小 模 块 的 74 HC595 串联起来 ,也就是将前一个 74
HC595 的数据移
出引脚接到下一个 74 HC595 的数
据移 入引脚 上 , 而 74 HC595 的脉冲信号和数据锁存信号都接同一个信号 , 就可以实现一个基模块的数据显示。与最小模块一样 ,在
一个特定的时间只能显示基模块中的所有最小模块的某
一行。只要在 8 行依次显示的过程中速度足够快 ,人眼就
看不出闪烁。
这样就实现了上面 16 个基模块连在一起。数据及控 制信号从右边进入 ,从左边输出。一个基模块为 64 ×16 的 L ED 点阵块 ,本设计中的显示规模为 512 ×512 点阵 , 所以要将横向有 8 个 ,竖向有 32 个最小模块连接起来。
而在实际的设计中分为上半屏和下半屏显示 ,分别为 512 ×256。当数据装满上半屏后再装下半屏 ,数据锁存信
号和行锁存信号最后给出 ,从而实现整屏的最小模块的某
一行显示。当然要实现整屏数据的显示 ,只有循环显示整
屏中最小模块的 8 行。
在上半屏显示中 ,又将其分为 8 个 512 ×32 的块 ,这 样的块叫单独显示模块 ,也就是说将横向的 2 行基模块看 成一个单独的模块并用单独的一组信号进行控制 ,上半屏 就要 8 组信号控制。这 8 组信号除了数据信号 R 不同外 , 其他的信号都是一样的。也就是说 ,在上半屏显示中 8 条
数据线同时给上半屏的 8 个单独显示模块串打数据 ,当然
只是给单独显示模块中的最小模块的某一行打满数据 ,然
后再给下半屏打入数据。所以下半屏的情况与上半屏基
本一样 ,除了 8 组数据信号 R 不同外 ,还有时钟信号也不
一样。输入数据时 ,上半屏的时钟信号首先有效 ,根据基
模块的理论要输入 2 048 个脉冲以后上半屏的数据才被
灌满 ;然后下半屏的数据才有效 ,从而输入下半屏的数据 , 情况与上半屏完全一样。
在显示控制方面 ,使用一块 AL TERA 公司的 FPGA 芯片 ,型号为 EPF10 K20
TC144 4 ,另外还使用了 2 块SRAM 芯片 ,每块的容量为 128 kB ,他们都用来存放显示
的数据(见图 3) 。
工作时 ,FPGA 在一个特定的时间只从 2 块 SRAM 的 其中一块取出显示的数据进行显示 ,而同时另外一块 SRAM 与 MPU 进行数据交换 ,MPU 会写入新的数据 ,以 便 FPGA 在下一个时间段显示这块 SRAM 的数据 ,以此
交替的工作。如果显示的图像不改变 ,即一块 SRAM 里
的数据不变时 ,MPU 就不需要给另一块 SRAM 写数据 , 这时该嵌入式显示模块就可以独立于 MPU 工作。一帧
的数据大小为 32 kB ,远小于 SRAM 的容量 ,所以可以在
编写程序的时候加入一些显示的技巧 ,比如从上往下显
示等。
由以上所知 ,FPGA 有 2 个基本作用 ,一个是从一块 SRAM 中取出数据并显示在显示屏上 ; 另外一个是将 MPU 给的数据写到另一块 SRAM 中。
3 软件设计
软件设计要根据硬件的连接情况编写 ,主要分为显示
部分和写 RAM 部分(见图 4) 。
在扫描显示中 ,首先上半屏的 8 组控制信号的时钟脉 冲信号有效 ,并且在这个过程中 ,8 组控制信号的数据信 号 R 有效 ,所以就可以先将上半屏的 8 个单独显示模块中
的最小模块的某一行灌满数据。然后用同样的方法将下
半屏的 8 个单独显示模块中的最小模块的某一行灌满数
据 ,当然上半屏和下半屏灌满的都是最小模块的相同的一
行。最后数据锁存信号和行锁存信号有效 ,使其显示。在
这个过程中要注意的是数据信号 R ,因为要显示整屏的数
据 ,在软件编写的过程中要将某个位置显示的数据准确的显示在该位置 ,就要从内存中准确的取出这个数据。
每一帧显示的数据大小为 32 768 B ,对于 2 块 RAM 交替工作的情况是完全符合要求的。并且 SRAM 的存取
速度快 ,换帧的时候也能够很好地显示出预期的数据。程
序中用一个 RAM 选择模块 ,用来选择某个时间是读出哪
一块 RAM ,还是写入哪一块 RAM。
FPGA 与存
储器 联接的 信号 为 Ram1A [ 16. . 0 ] ,
Ram1D [ 7. . 0 ] , Ram1Rd , Ram1Wr ; Ram2A [ 16. . 0 ] , Ram2D[ 7. . 0 ]
,Ram2Rd ,Ram2Wr。当 FPGA 从 Ram1 取
出数据进行显示时 ,其中有关 Ram1 的信号就有效 ;同时
就给 Ram2 写数据。程序中还用到 4 个内部变量 Rt [ 7. . 0 ][7. . 0 ] , Gt[ 7. . 0 ][ 7. . 0 ] ,Rs[ 7. . 0 ][ 7. .
0 ]和 Gs[ 7. . 0 ] [7. . 0 ]分别代表 4 个数组 ,每个数组里有 8 个字节。
程序中用到 1 个全局时钟 clk ,他用来驱动 1 个内部 全局信号 counter_temp ,他是 1 个 15 位的矢量。TSCK和 TNsck 信号将 8 个 clk 时钟周期作为他们的 1 个时钟周 期 ,也就是说 8 个 clk 时间送出 1 位数据。
FPGA 读 RAM 的时序为 : 首
先地 址信号 出现 在 RamxA[ 16. . 0 ]上 ,然后 RamxRd
,RamxWr 分别置为低电
平和高电平 ,经过 12~15 ns ,读出的数据就会出现在 RamxD[ 7. . 0 ]上以便 FPGA 读这个数来显示。
FPGA 写 Ram 的时序是外部 MPU 信号控制 ,首先地
址信号出现在 Ram2A[ 16. . 0 ]上 ,然后 Ram2Rd ,Ram2Wr 分别置为高电平和低电平 ,写的数据出现在 Ram2D[ 7. . 0 ]上。经过很短的时间 ,数据就写入了。
程序设定 FPGA 中的 Ram1D 和 Ram2D 为双向口 ,可 写可读。在内部要设相应的缓冲器。因为写 RAM 是 MPU 写给 RAM ,MPU 要指明写的地址和数据 ,所以在程
序中要有地址和数据输入口。实际设计中为了减少 FP2 GA 的端口 ,设计成低地址和数据复用线 AD[ 7. . 0 ] ,用一
个信号 AL E 选择 ;当其为低电平时 ,AD[ 7. . 0 ]有效的数据是地址 ,为高电平时为要写入 RAM 中的数据。
静态图像显示过程中为了使眼睛看上去不闪烁 ,就要
使一帧图像在一秒内至少显示 50 次 ,即使一帧图像在最多 20 ms 显示完。要达到这个要求 ,就要使一个最小模块的 8 行在最多 20 ms 内完成一个循环显示。因为是上半屏与
下半屏分开传输数据 ,所以要求在最多 1. 25 ms 内传完半
屏数据 ,时钟周期需要在0. 6μs 以下 ,而选用的 FPGA 的时
钟频率可以达到 50 MHz 以上 ,完全符合显示的要求。
4 结 语
硬件连接和软件设计是融为一体的 ,在最初系统的整
体规划中 ,就是要兼顾两者。本设计从硬件连接到最后的
软件实现 ,都是优化以后的结果。所以按照本设计中的硬
件连接情况而设计的软件 ,只需要一片 2 万门的 FPGA 就
可以实现如此大规模的点阵显示 ,并且本设计的 L ED 显
示屏 ,画面非常清晰稳定 ,并且在换帧的过程中能够做到
流畅自如 ,看不出停滞。