您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页VHDL的实践(3)点阵显示系统的设计

VHDL的实践(3)点阵显示系统的设计

来源:华佗小知识
第20、21讲 VHDL的实践(3)—点阵显示系统的设计

【课前思考】

数字逻辑中关于音乐芯片的设计的过程是怎样的? 【学习目标】

理解点阵显示系统的设计原理并分析清楚用VHDL实现一个点阵显示系统乐芯片的全部代码描述。

【重 难 点】 重点:

分析实现一个点阵显示系统的全部VHDL代码描述 难点:

点阵显示系统的设计原理 【教学安排】 学时:2 学时 【知 识 点】

8.3点阵显示系统的设计.................................................................................................1

8.3点阵显示系统的设计

1 系统结构与原理

图1是系统的结构框图。本系统选用的FPGA芯片是美国Altera公司的FLEX10K系列的EPF10K10LC84-4。该芯片具有576个逻辑单元、84个引脚、72个逻辑阵列块、3个嵌入式阵列块,是一个高集成度的FPGA芯片。

系统由FPGA中的扫描控制模块、只读存储器ROM和FPGA外面的LED点阵显示模块、一个反相器和两个4-16译码器构成。其中,DZ1、DZ2、DZ3、和DZ4是4个8×8的LED点阵显示模块,由这四个模块组合起来构成了本系统16×16的LED点阵显示模块。两个4-16译码器(74LS154)和一个反相器配合FPGA中的行扫描控制模块共同完成了16×16点阵显示模块的32行的扫描控制。FPGA中的只读存储器ROM中保存了要显示的多幅图像的数据,并以8位的数据宽度输出到LED阵显示模块的列端,配合行扫描控制共同完成多幅图像的显示。

图1 系统的结构框图

2 扫描控制模块

本系统的LED点阵模块如图2所示,共由16×16=256个LED发光二极管组成。如何在该点阵模块上显示一幅图像是本设计的关键技术。本设计是采用的一种32路动态分时扫描技术来实现的。具体方法是,将如图1所示4个8×8阵列的显示模块DZ1、DZ2、DZ3、DZ4采用串行级联的方式构成为一个32行8列的扫描结构。其列输入端与FPGA内的只读存储器ROM的8位数据输出端口相连;32个行控制端与两个4-16译码器A、B的输出相连;而译码器A、B的输入端和片选信号又与FPGA内的行扫描控制模块的输出端口scan4-scan0相连。

图2 16×16LED点阵模块

用动态分时扫描技术使LED点阵模块显示图像,需要进行两步工作。第一步是获得图像数据并保存,即在存贮器中建立图像数据库。第二步是在扫描模块的控制下,配合行扫描的次序正确地输出这些数据。获得图像数据的步骤是,先将要显示的每一幅图像画在一个如图2所示的被分成16×16共256个小方格的矩形框中,再在有笔划下落处的小方格里填上“1”,无笔划处填上“0”,这样就形成了与这幅图像所对应的二进制数据在该矩形框上的分布,再将此分布关系以32×8的数据结构组成32个字节的数据,并保存在只读存贮器ROM中。以这种方式将若干幅图像的数据贮存在存贮器内,就完成了图像数据库的建立工作。

第二步工作的步骤是,先在扫描模块的控制下,由地址线确定每次由ROM送出某一行的8个LED所要显示的图案的控制字节数据,同时由扫描模块输出的5位扫描码经两个4-16译码器译码后决定相应的某一行可以被点亮,而另外31行都不能被点亮。该状态持续约0.4毫秒后,就接着进行下一行的扫描。当完成了一次32行的扫描后,也就完成了一帧画面的显示。重复上述过程,多次显示该幅画面,直到在人的视觉上形成一幅稳定的图像为止。当达到要求显示的时间后,再修改ROM 的地址区间,转向下一幅画面的数据传送和显示。如此进行,就可以在LED点阵模块上显示所要求的多幅画面。 扫描控制模块设计结果如图3所示。其VHDL关键设计代码如下: process(clk,reset) --产生扫描码进程 begin

if clk'event and clk='1' then if reset='1' then scan<=\"00000\"; else scan<= scan +1; end if; end if; end process; process(clk,reset) begin

if clk'event and clk='1' then if reset='1' then --同步复位 t<=\"0000000000\"; addr <=\"00000000\" else

if t=\"1111111111\" then --每一幅图像的显示时间 t<=\"0000000000\"; else t<=t+'1'; end if;

if t=\"1111111111\" then

if a=\"00111111\" then --每一幅图像的存储区间划分 a:=\"00000000\";

b:=\"00011111\";

else a:=a+\"00100000\"; b:=a+\"00011111\"; end if; end if; if addr =b then addr <=a;

else addr <= addr +'1'; --产生图像的每一个字节地址 end if; end if; end process;

图3 扫描控制模块

3 存储模块

为提高系统的集成度,本设计将点阵显示的图像数据库建立在EPF10K10的片内ROM中。 Flex10k10有3个嵌入式阵列块,每块大小均为2K,可构成2048×1,1024×2,512×4,256×8等4种类型RAM/ROM中的任意一种。本设计选择256×8的结构,用来构成一个能保存8幅图像的只读存贮器ROM。

在FPGA中建立片内只读存储器ROM,是通过使用美国Altera 公司的EDA工具软件MAXPLUSII,并调用其中的参数化元件LPM_ROM来实现的。具体步骤是,首先在MAXPLUSII的图形编辑器中双击空白处,便会出现如图4所示的“Enter Symbol”对话框。点击该对话框的“Mega Wizard Plug-In Manager”按钮,并在出现的对话框中选择storage->LPM_ROM,就会出现如图5所示的“Mega Wizard Plug-In Manager-LMP_ROM” 系列对话框。在该系列对话框中设置输出数据线宽度和输入地址线宽度均为8。并完成相应的配置环节就获得了要求的256字节的只读存储器ROM。

图4“EnterSymbol”对话框

图5“MegaWizard Plugl-in Manager-LMP_ROM”对话框

只读存储器ROM中的初始化数据就是本系统的图像数据库数据。该初始化数据的建立是在上述的LMP_ROM设计过程中通过指定一个后缀名为“.mif ”的初始化文件来实现的。该文件是设计者事先在文本编辑器中建立的,其VHDL格式和关键代码示意如下: WIDTH = 8; --数据线的宽度为8位

DEPTH = 256; --有256个字节存储单元,对应8根地址线宽度 ADDRESS_RADIX = HEX; --以16进制表示 DATA_RADIX = HEX; CONTENT BEGIN

00 : 2f; -- 以16进制表示的ROM内的各字节单元的地址和保存的数据 01 : 6c; 02 : f8; …… fd : ee; fe : 72;

ff : 00; END;

4 FPGA的顶层设计

将上述的扫描控制模块和只读存储器ROM在MAXPLUSII的图形编辑器中以图6的关系构成顶层设计,并编译下载到FPGA中,再按照图1所示的系统结构关系构成整个系统,即完成了一个基于FPGA的LED点阵显示系统的全部设计。

图6系统顶层设计

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务