1、目录摘要1关键词1Abstract1Key words 1引言11 设计方案1.1 方案一21.2 方案二21.3 方案比较32 扫描控制模块2.1 LED 点阵原理 32.2 汉字的存储42.3 汉字的显示52.4 滚动速度的控制63 VHDL 语言程序设计3.1 扫描频率控制的部分关键程序 63.2 单个汉字扫描的部分关键程序 73.3 汉字滚动速度控制的部分关键程序 84 系统调试4.1 开发环境介绍 94.2 调试、仿真与体会 105 系统功能、指标参数 146 设计结论 14致谢 14参考文献 141基于 VHDL 的汉字点阵动态显示系统的设计摘 要: 主要研究基于 VHDL 的 L
2、ed 点阵汉字滚动显示。首先描述了基于现场可编程门阵列(FPGA)的硬件电路,以及点阵显示汉字的原理;然后在单个 16X16 LED 发光二极管点阵上滚动汉字的原理;最后给出了描述其功能的 VHDL 语言程序设计方法。通过编程、调试、仿真、下载正确地实现了汉字滚动显示扫描结果,其硬件系统的实验验证也获得了与软件模拟仿真结论相吻合的结果。关键词:LED 点阵;FPGA;VHDL 语言;汉字滚动显示Design of Chinese characters scrolling display on LED dot matrix based on VHDLAbstract:The design of
3、this subject mainly researches Chinese characters scrolling display on LED dot matrix screen based on FPGA and VHDL . This article firstly describes the hardware circuit based on logic cell array,as well as the principle of Chinese characters display on LED dot matrix .Finally,the article gives the
4、method of VHDL design which describes the function.This design realizes the results of Chinese characters scrolling and scanning correctly by programming ,debugging ,sinulation and download ,Also the experimintal verificattion of hardware systerns has received the conclusions in accordance with the
5、results of software simulation .Key words:LED dot matrix;FPGA;VHDL;Chinese characters scrolling display引言随着我国经济的高速发展,对公共场合发布信息的需求日益增长,利用 LED点阵滚动显示汉字的出现正好适应了这一市场需求,已经成为信息传播的一种重要手段。采用传统方法设计的汉字滚动显示器,通常需要使用单片机、存储器和制约逻辑电路来进行 PCB 板级的系统集成。尽管这种方案有单片机软件的支持较为灵活,但是由于受硬件资源的限制,未来对设计的变更和升级,总是难以避免要付出较多研发经费和较长投放市场周
6、期的代价。随着电子设计自动化(EDA)技术的进展,基于可编程 FPGA 器件进行系统芯片集成的新设计方法,也正在快速地到代基于 PCB 板的传统设计方式。因此,本文主要阐述基于 FPGA 和VHDL 语言实现在 16*16 点阵上的汉字滚动显示问题。1 设计方案21.1 方案一本文系统的 LED 点阵模块,共由 1616=256 个 LED 发光二极管组成。如何在该点阵模块上显示汉字是本文设计的关键技术。本文系统设计是采用一种16 路动态分时扫描技术来实现的。具体方法是,将 1616 数组的显示模块的行输入端与 FPGA 内的只读存储器 ROM 的 16 位数据输出端口相连; 16 个列控制端
7、与一个 4-16 译码器 A 的输出相连;而译码器 A 的输入端和片选信号又与FPGA 内的列扫描控制模块的输出端口 scan4-scan0 相连。图 1.1 为方案的结构框图。1.2 方案二VHDL 程序设计的是硬件,他和编程语言的最大区别是它可以“并发执行”。本设计可以将 LED 显示屏要的显示内容抽象成一个二维数组(数组中的1对映点阵显示屏上面的亮点),用 VHDL 语言设计一个进程将这个数组动态显示在 LED 显示屏上,再利用另一个进程对这个数组按一定频率进行数据更新,更新的方式可以有多种。因为两个进程是同时进行的(并发执行),如果对数组中的汉字数据按滚动的方式更新,则可实现汉字的滚动
8、显示。图 1.2为该方案的原理图。二维数组 动态显示图 1.2 方案二的原理框图更新数组数据31.3 方案比较方案一很容易实现,而且占用 FPGA 的资源较少。但是由于其实现方式的局限性,该方案只能实现汉字的滚动显示。方案二中将 LED 点阵抽象成了一个二维数组。可以设计一些比较复杂的算法来控制这个数组,使设计的系统不但可以滚动显示汉字,还可以扩展一些其它的显示效果。但是方案二中对数组的处理部分对 FPGA 芯片的资源消耗太大学校实验室里的 EPF10K10LC84-4 芯片只有 576 个逻辑单元远远不够设计要求。所以最终选择方案一。2 扫描控制模块2.1 LED 点阵原理以下为 1616
9、点阵 LED 外观及引脚图及其等效电路,只要其对应的X、Y 轴顺向偏压,即可使 LED 发亮。例如如果想使左上角 LED 点亮,则Y0=1, X0=0 即可。应用时限流电阻可以放在 X 轴或 Y 轴。图 2.1 1616 点阵 LED 外观图图 2.2 1616 点阵 LED 等效图点阵 LED 扫描法介绍:4点阵 LED 一般采用扫描式显示,实际运用分为三种方式: (1)点扫描(2)行扫描(3)列扫描若使用第一种方式,其扫描频率必须大于 1664=1024Hz,周期小于 1ms即可。若使用第二和第三种方式,则频率必须大于 168=128Hz,周期小于7.8ms 即可符合视觉暂留要求。此外一次
10、驱动一列或一行(8 颗 LED)时需外加驱动电路提高电流,否则 LED 亮度会不足。2.2 汉字的存储用动态分时扫描技术使 LED 点阵模块显示图像,需要进行两步工作。第一步是获得数据并保存,即在存贮器中建立汉字数据库。第二步是在扫描模块的控制下,配合行扫描的次序正确地输出这些数据。获得图像数据的步骤是,先将要显示的每一幅图像画在一个如图 3.3 所示的被分成 1616 共 256 个小方格的矩形框中,再在有笔划下落处的小方格里填上“1”,无笔划处填上“0”,这样就形成了与这个汉字所对应的二进制数据在该矩形框上的分布,再将此分布关系以 3216 的数据结构组成 64 个字节的数据,并保存在只读
11、存贮器 ROM中。以这种方式将若干个汉字的数据贮存在存贮器内,就完成了图像数据库的建立工作。图 3.3 1616LED 点阵模块5然后,依次对多汉字抽取像素信息,并按序排队存放起来,便可得到一个待显示数据序列。将这个序列存到 ROM 中进一步通过寻址的方法来控制该数据序列的释放过程,就可实现在 LED 发光二极管点阵上滚动显示多汉字信息的目的。由图 2.3 可知,某一时刻能在显示数据序列中定位待显示数据的地址指针可用下式计算:addr=n+m (式 2.2.1)2.3 汉字的显示第二步工作的步骤是:先在扫描模块的控制下,由地址线确定每次由 ROM送出某一列的 16 个 LED 所要显示的汉字的
12、控制字节数据,同时由扫描模块输出的 5 位扫描码经两个 4-16 译码器解码后决定相应的某一列可以被点亮,而另外 31 列都不能被点亮。该状态持续约 0.4 毫秒后,就接着进行下一行的扫描。当完成了一次 32 行的扫描后,也就完成了一帧画面的显示。重复上述过程不断修改 ROM 的地址区间的起始地址,转向下一幅画面的数据传送和显示。如此进行,就可以在 LED 点阵模块上滚动显示 ROM 中存储的汉字。2.4 滚动速度的控制将 LED 点阵看成一个滑窗。通过这个“滑窗”每次能“看到”32 个存储单元(2 个汉字长度)的信息。只读存储器 ROM 中链式的存放了若干个汉字的点阵信息,“滑窗”在这若干个
13、汉字点阵信息上面滑动,我们通过“滑窗”看到的就是汉字的滚动显示。图 2.3 滚动显示多汉字信息的原理示意图6在用 VHDL 编程的时候,可以定义一个变量 x 作为“滑窗”在 ROM 上的起始地址,设计一个进程按一定的频率对 x 进行累加,再设计一个进程将以 x为起始地址的长度为 32 的 ROM 中的区域动态显示在 LED 点阵中。显然 x 累加的速度决定了汉字的滚动速度。此进程根据定义的信号 n 来控制 x 递增的速度,n 由外部的按键控制。n 的范围为 07 代表了汉字的不同的滚动速度。当 n 为 0 时汉字滚动的速度最快,n 为 7 时 LED 点阵上显示的汉字静止。3 VHDL 语言程
14、序设计3.1 扫描频率控制的部分关键程序process(clk) -显示时序控制 begin if clkevent and clk=1 then -上升沿dountkeyckeyckeyckeyckeyckeyckeyckeyckeyckeyckeyckeyckeyckeyckeyckeyckeyckeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyrkeyr=“1111111111111111“;end case; end if;end process;-结束进程,各个进程之间是并发执行的3.3 汉字滚动速度控制的部
15、分关键程序process(reset_n,clk_scan,flag_scan) -x 的控制进程8variable cntx:integer range 0 to 50;beginif(reset_n=0)thencntx:=0;x=0;elsif(rising_edge(clk_scan)thenif(flag_scan=1)thenif(cntx=n8 or cntx=cntxhigh)then - n 由外部的按键控制,通过n 来控制 cntx 的计数范围cntx:=0;elsecntx:=cntx+1 ;end if;if(cntx=n8)then -通过 n 来控制 x 的增加if
16、(x=xhigh)thenx=0;elsex=x+1;end if;end if;end if;end if;end process;此进程根据定义的信号 n 来控制 x 递增的速度,n 由外部的按键控制。n 的范围为 07 代表了汉字的不同的滚动速度。当 n 为 0 时汉字滚动的速度最快,n 为 7 时 LED 点阵上显示的汉字静止。4 系统调试与仿真4.1 开发环境介绍 Quartus II 是 Altera 公 司 的 综 合 性 PLD 开 发 软 件 , 支 持 原 理 图 、 VHDL、 Veril-ogHDL 以 及 AHDL( Altera Hardware Descripti
17、on Language9) 等 多 种 设 计 输 入 形 式 , 内 嵌 自 有 的 综 合 器 以 及 仿 真 器 , 可 以 完 成 从 设 计输 入 到 硬 件 配 置 的 完 整 PLD 设 计 流 程 。Quartus II 可 以 在 XP、 Linux 以 及 Unix 上 使 用 , 除 了 可 以 使 用 Tcl 脚本 完 成 设 计 流 程 外 , 提 供 了 完 善 的 用 户 图 形 界 面 设 计 方 式 。 具 有 运 行 速 度 快, 界 面 统 一 , 功 能 集 中 , 易 学 易 用 等 特 点 。Quartus II 支 持 Altera 的 IP 核
18、, 包 含 了 LPM/MegaFunction 宏 功 能 模块 库 , 使 用 户 可 以 充 分 利 用 成 熟 的 模 块 , 简 化 了 设 计 的 复 杂 性 、 加 快 了 设 计速 度 。 对 第 三 方 EDA 工 具 的 良 好 支 持 也 使 用 户 可 以 在 设 计 流 程 的 各 个 阶 段使 用 熟 悉 的 第 三 方 EDA 工 具 。此 外 , Quartus II 通 过 和 DSP Builder 工 具 与 Matlab/Simulink 相 结合 , 可 以 方 便 地 实 现 各 种 DSP 应 用 系 统 ; 支 持 Altera 的 片 上 可
19、编 程 系 统 (SOPC) 开 发 , 集 系 统 级 设 计 、 嵌 入 式 软 件 开 发 、 可 编 程 逻 辑 设 计 于 一 体 ,是 一 种 综 合 性 的 开 发 平 台 。Maxplus II 作 为 Altera 的 上 一 代 PLD 设 计 软 件 , 由 于 其 出 色 的 易 用 性而 得 到 了 广 泛 的 应 用 。 目 前 Altera 已 经 停 止 了 对 Maxplus II 的 更 新 支 持, Quartus II 与 之 相 比 不 仅 仅 是 支 持 器 件 类 型 的 丰 富 和 图 形 界 面 的 改 变 。Altera 在 Quartus
20、II 中 包 含 了 许 多 诸 如 SignalTap II、 Chip Editor 和 RTL Viewer 的 设 计 辅 助 工 具 , 集 成 了 SOPC 和 HardCopy 设 计 流 程 , 并 且 继承 了 Maxplus II 友 好 的 图 形 界 面 及 简 便 的 使 用 方 法 。Altera Quartus II 作 为 一 种 可 编 程 逻 辑 的 设 计 环 境 , 由 于 其 强 大 的 设计 能 力 和 直 观 易 用 的 接 口 , 越 来 越 受 到 数 字 系 统 设 计 者 的 欢 迎 。 Altera 的 Quartus II 可 编 程
21、逻 辑 软 件 属 于 第 四 代 PLD 开 发 平 台 。 该 平台 支 持 一 个 工 作 组 环 境 下 的 设 计 要 求 , 其 中 包 括 支 持 基 于 Internet 的 协 作设 计 。 Quartus 平 台 与 Cadence、 ExemplarLogic、 MentorGraphics、 Synopsys 和 Synplicity 等 EDA 供 应 商 的 开 发 工 具 相 兼容 。 改 进 了 软 件 的 LogicLock 模 块 设 计 功 能 , 增 添 了 FastFit 编 译 选 项 ,推 进 了 网 络 编 辑 性 能 , 而 且 提 升 了 调
22、 试 能 力 。 支 持 MAX7000/MAX3000等 乘 积 项 器 件4.2 调试、仿真与体会4.2.1 创建工程在 Quartus II 中 新 建 一 个 VHDL File 文 件 , 将 vhdl 代 码 输 入 这 个 文 件 ,并 保 存 到 工 作 目 录 , 名 为 ledarray.vhd。利 用 new preject wizard 工 具 创 建 一 个 工 程 , 工 程 名 为 ledarray,顶 层 文 件实 体 名 为 ledarray, 并 将 上 面 创 建 的 ledarray.vhd 文 件 加 入 到 工 程 中 。 G4.2.2 编 译 前 设 置( 1) 选 择 目 标 芯 片 。 用 assignmemts-settings 命 令 , 弹 出 settings 对话 框 , 选 择 目 标 芯 片 为 EP2C5T144C8。