毕业设计论文任务书 专业
班级
姓名
一、课题名称
基于
FPGA
的
LED 16
×
16
点阵汉字显示设计
二、主要技术指标
1.
本系统利用数字系统设计自动化
(EDA)
技术实现了全硬件方式的
LED
点阵显示
;
利用
EDA
工具
软件
Muxplus
Ⅱ编写
VHDL
程序
;
2.
实现任意汉字显示
;
3.
实现任意汉字的滚动显示
;
4.
进行下载仿真
。
三、工作内容和要求
1.
理解并确认毕业设计任务书
;
2.
撰写完成毕业设计开题报告并经指导教师审核通过
;
3.
学习并掌握
FPGA
的程序设计
;
4.
确定并完成方案论证
;
5. VHDL
程序的编写
;
6. EDA
实验箱上进行调试
;
7.
实现汉字滚动显示。
四、主要参考文献
:
1.
综合电子设计与实践王振红清华大学出版社
2008
年
9
月第
2
版
;
2. EDA
实用技术及应用刘艳萍国防工业出版社
2006
年第
1
版。
学 生签名 年 月 日
指 导 教师签名 年 月 日
教研室主任签名 年 月 日
系 主 任签名 年 月 日
https://www.doczj.com/doc/b43347179.html,
毕业设计论文开题报告 设计论文题目
基于FPGA的LED 16×16点阵汉字显示设计
一、选题的背景和意义
LED点阵显示屏是集微电子技术、计算机技术、信息处理技术于一体的大型显示屏系统。它
以其色彩鲜艳动态范围广亮度高寿命长工作稳定可靠等优点而成为众多显示媒体以及户
外作业显示的理想选择。受到体育场馆用LED显示屏需求快速增长的带动近年来中国 LED
显示屏应用逐步增多。目前LED已经广泛应用在银行、火车站、广告、体育场馆之中。而随着
奥运会、世博会的临近LED显示屏将广泛的应用在体育场馆以及道路交通指示中LED显示屏
在体育广场中的应用将出现快速增长。
因此本设计是很有必要的之所以基于FPGA设计是因为现场可编程门阵列FPGA设计
周期小灵活度高适合用于小批量系统提高系统的可靠性和集成度。并且采用编写灵活的VHDL
语言编写主程序。本设计可以方便的应用到各类广告宣传中。
二、课题研究的主要内容
1. 实现16×16点阵的汉字显示
2. 实现有限汉字显示
4. 实现汉字的滚动显示
5. 完成方案论证。
三、主要研究设计方法论述
通过去图书馆查阅书籍收集资料同时在搜索引擎上检索资料分析借鉴已有类似产品、设
计方案与成功经验选择几种可行方案比对最后确定最切实可行的方案展开设计。
通过Multisim或Quartus软件对系统进行模拟仿真对电路功能进行改进与完善。
在EDA试验箱上进行调试。
四、设计论文进度安排 https://www.doczj.com/doc/b43347179.html,
时间迄止日期
工 作 内 容
2010.5.17-5.23
第1周
理解并确认毕业设计任务书撰写完成毕业设计开题报告
2010.5.24-5.30
第2周
完成调研与资料收集、整理
2010.5.31-6.6
第3周
设计方案及原理框图确定
2010.6.7-7.4
第4、5、6、7周
电路资料收集单元电路设计
2010.7.5-7.18
第8、9周
电路仿真与改进、完善
2010.19-8.1
第10、11周
资料整理
2010..8.2-8.8
第12周
书写毕业设计报告
2010.8.9-8.16
第13周
修改毕业设计报告并整理装订
五、指导教师意见
指导教师签名 年 月 日
六、系部意见
系主任签名 年 月 日
目录 https://www.doczj.com/doc/b43347179.html,
摘要
ABSTRACT
第一章 前言 ............................................................ 1
1.1 本设计的研究背景和研究目的 ......................................... 1
1.2 LED点阵显示特点 .................................................... 1 1.3 FPGA设计的特点 ..................................................... 1
第二章 系统设计 ........................................................ 3
2.1设计任务与要求 ...................................................... 3
2.1.1设计任务 ........................................................ 3
2.1.2设计要求 ........................................................ 3
2.2设计原理 ............................................................ 3
2.2.1总体设计方案 .................................................... 3
2.2.2方案的比较 ...................................................... 4
2.3扫描控制模块 ........................................................ 4
2.3.1 LED的显示原理 .................................................. 4
2.3.2汉字的存储 ...................................................... 5
2.4 汉字显示 ........................................................... 5
2.4.1列循环扫描 ...................................................... 5
2.4.2字符样式设计 .................................................... 6
2.4.3字母循环扫描及期间的延时环节 ....................................
9
2.5 整个完整的程序 ..................................................... 9
第三章 系统调试与仿真 ................................................. 14
3.1开发环境介绍 ....................................................... 14
3.2调试与仿真 ......................................................... 14
3.2.1 创建工程 ...................................................... 14
3.2.2 编译前设置 ................................................... 14
3.2.3 全程编译 ..................................................... 16
3.2.4时序仿真 ...................................................... 17
第四章 结束语 ......................................................... 18
答谢辞 ............................................................... 18
参考文献 .............................................................. 18
摘要 https://www.doczj.com/doc/b43347179.html,
主要研究基于VHDL的 Led点阵汉字滚动显示。首先描述了基于现场可编程门阵
FPGA的硬件电路以及点阵显示汉字的原理;然后在单个16X16 LED发光二极管点
阵上滚动汉字的原理最后给出了描述其功能的VHDL语言程序设计方法。通过编程、
调试、仿真、下载正确地实现了汉字滚动显示扫描结果其硬件系统的实验验证也获得
了与软件模拟仿真结论相吻合的结果。
关键词LED点阵FPGAVHDL语言汉字滚动显示
https://www.doczj.com/doc/b43347179.html,
Abstract Primary research is based on VHDL, Led Scrolling dot matrix characters. First described
based on field programmable gate array (FPGA) hardware circuit, as well as the principle
character dot matrix display; and then in a single 16X16 LED scrolling LED dot matrix on
the principles of Chinese characters; Finally, the VHDL description language program of its
functions design. Through programming, debugging, simulation, download the correct
character scroll achieved scan results, the experimental verification of its hardware and
software are also obtained findings consistent with simulation results.
Keywords: LED dot-matrix; FPGA; VHDL language; character scrolling displa
https://www.doczj.com/doc/b43347179.html,
第一章 前言 1.1 本设计的研究背景和研究目的 受到体育场馆用LED显示屏需求快速增长的带动近年来中国 LED显示屏应用
逐步增多。目前LED已经广泛应用在银行、火车站、广告、体育场馆之中。而随着世
博会的临近LED显示屏将广泛的应用在体育场馆以及道路交通指示中LED显示屏在
体育广场中的应用将出现快速增长。
目前国内从事LED显示屏生产的企业众多同时受到外资企业LED显示屏价格
过高的影响在中国LED显示屏市场上多以本土企业为主。目前本土LED显示屏
生产
企业除供应国内需求外还不断把产品出口到国外市场。而近年来受到成本压力的影
响国际上一些知名的LED显示屏企业也逐步把 生产基地移到了中国如巴可在北京
设立了显示屏生产基地Lighthouse在惠州也拥有生产基地Daktronics、莱茵堡都
在国内设立了生产工厂。随着国际LED显示屏生产大厂不断把生产基地转移至国内 加
之国内众多的LED显示屏本土企业中国正在成为全球LED显示屏的主要生产基地。
因此研究LED汉字滚动显示屏的设计方法具有重要的理论和现实意义。
随着我国经济的高速发展,对公共场合发布信息的需求日益增长利用LED点阵滚
动显示汉字的出现正好适应了这一市场需求已经成为信息传播的一种重要手段。
采用传统方法设计的汉字滚动显示器通常需要使用单片机、存储器和制约逻辑电
路来进行PCB板级的系统集成。尽管这种方案有单片机软件的支持较为灵活但是由于
受硬件资源的限制未来对设计的变更和升级总是难以避免要付出较多研发经费和较
长投放市场周期的代价。随着电子设计自动化EDA技术的进展基于可编程FPGA器
件进行系统芯片集成的新设计方法也正在快速地到代基于PCB板的传统设计方式。因
此本设计的研究是很有必要的之所以基于FPGA设计是因为现场可编程门阵列FPGA
设计周期小灵活度高适合用于小批量系统提高系统的可靠性和集成度。并且采用
编写灵活的VHDL语言编写主程序。 1.2 LED点阵显示特点
1可以显示各种数字、文字、图表、曲线、图形
2采用纯红、高绿作双基色发光器件发光亮度高色彩鲜艳、丰富
3显示效果清晰、稳定、功耗低、寿命长
4优质铝合金结构磨沙、银镜或钛金不锈钢包边。尺寸和规格可根据需要灵
活组合
5支持各种计算机网络编辑软件丰富、易用
6适用于室内、外所有信息发布及广告宣传场所。如银行、证券交易所、商
场、市场、宾馆、洒楼、电信、邮政、医院、车站、机场等。 1.3 FPGA设计的特点 FPGA 通常被认为是ASIC 实现的一种替代手段. 一般ASIC 包括三种, 既全定制、
半定制(含标准单元和门阵列) 以及可编程器件。对于前两种, 需要支付不可重复使用
的工程费用NRE (Non recurring Engineering) , 主要用于芯片的流片、中测、分析https://www.doczj.com/doc/b43347179.html,
的工程开销, 一次费用一般在1 万至数万美元以上。如果一次不成功、返工、甚至多
次返工,NRE 费用将要上升。成本高、风险大, 而通常对每个ASIC 品种的需求量往往
不大,NRE 费用分摊到每个产品上价太高,
用户无法接受。而对于可编程器件PLD
(Programmable Logic Device) 正是可以解决上述问题的新型ASIC, PLD 以其操作灵
活、使用方便、开发迅速、投资风险小等突出优点,
特别适合于产品开发初期、科研样
品研制或小批量的产品. FPGA 是一种新型的PLD, 其除了具有PLD 的优点外, 其规模
比一般的PLD 的规模大。目前,Xilinx 推出的XC4025 可以达到25000 门的规
模,Altera 公司的FLEX10K100 系列芯片可达到十万门的规模,完全可以满足用户的一
般设计需要。
FPGA 的主要特点是: 寄存器数目多, 采用查找表计数,适合时序逻辑设计。 但是
互连复杂, 由于互连采用开关矩阵,因而使得延时估计往往不十分准确。
FPGA 也有其自身的局限性, 其一就是器件规模的限制,其二就是单元延迟比较大。
所以, 在设计者选定某一FPGA器件后, 要求设计者对器件的结构、性能作深入的了解,
在体系结构设计时, 就必须考虑到器件本身的结构及性能, 尽可能使设计的结构满足
器件本身的要求. 这样就增加了设计的难度。
离开对FPGA 结构的详细了解, 设计人员就不可能优化设计。因而设计人员必须了
解FPGA 器件的特性和限制, 熟悉FPGA 的结构。
在了解FPGA 结构特点的基础上, 就可以利用VHDL 语言描写出高效的电路描述实
现性能优化的电路。 https://www.doczj.com/doc/b43347179.html,
第二章 系统设计 2.1设计任务与要求 2.1.1设计任务
1设计一个16×16的LED点阵显示器
2在设计过程中EDA试验箱进行仿真调试。
2.1.2设计要求
1输出预定义“王、日、田、口”四个汉字
2输出汉字循环显示
3操作方便、可维护性高
4程序简捷便于修改。 2.2设计原理 2.2.1总体设计方案 方案一本设计所使用的16×16的点阵EDA实验箱上有其接口电路列选信号为
SEL0SEL1SEL2,SEL3,经4线16线译码器输出16列从左起为第一列列选信号是
由一个4位向量SEL[3..0]控制行选信号为H0
H15,是由16个行信号组成的每一行
由一个单独的位来控制高电平有效。例如“0000”表示第0列“0000000000000001”
表示第一行的点亮。由于列是由一个向量决定而每一时刻的值只能有一个固定的值
因而只能使某一列的若干个点亮因此就决定了只能用逐列扫描的方法。例如要使第一
列的2,4,6,8行亮则列为“0001”、行为“0000000010101010”就可以实现了。
方案二VHDL程序设计的是硬件他和编程语言的最大区别是它可以“并发执行”。
本设计可以将LED显示屏要的显示内容抽象成一个二维数组数组中的‘1’对映点阵显
示屏上面的亮点用VHDL语言设计一个进程将这
个数组动态显示在LED显示屏上再
利用另一个进程对这个数组按一定频率进行数据更新更新的方式可以有多种。因为两
个进程是同时进行的并发执行如果对数组中的汉字数据按滚动的方式更新则可
实现汉字的滚动显示。如图2-1为该方案原理图。
https://www.doczj.com/doc/b43347179.html,
图2-1 方案二原理图 2.2.2方案的比较 方案一很容易实现而且占用FPGA的资源较少。但是由于其实现方式的局限性
该方案只能实现汉字的滚动显示。方案二中将LED点阵抽象成了一个二维数组。可以设
计一些比较复杂的算法来控制这个数组使设计的系统不但可以滚动显示汉字还可以
扩展一些其它的显示效果。但是方案二中对数组的处理部分对FPGA芯片的资源消耗太
大学校实验室里的EPF10K10LC84-
4芯片只有576个逻辑单元远远不够设计要求。所以
最终选择方案一。 2.3扫描控制模块 2.3.1 LED的显示原理
16×16扫描LED点阵的工作原理同8位扫描数码管类似。它有16个共阴极输出端
口,每个共阴极对应有16个LED显示灯所以其扫描译码地址需4位信号线SEL0-SEL3
其汉字扫描码由16位段地址0-15输入。 通过时钟的每列扫描显示完整汉字。
图2-2 LED灯红绿信号 图2-3 16×16点阵LED等效电路 点阵LED一般采用扫描式显示实际运用分为三种方式
1点扫描
2行扫描
3列扫描
若使用第一种方式其扫描频率必须大于16×64=1024Hz周期小于1ms即可。若
使用第二和第三种方式则频率必须大于16×8=128Hz周期小于7.8ms即可符合视觉
更新数组数据
二维数组
动态显示 https://www.doczj.com/doc/b43347179.html,
暂留要求。此外一次驱动一列或一行8颗LED时需外加驱动电路提高电流否则LED
亮度会不足。
2.3.2汉字的存储
用动态分时扫描技术使LED点阵模块显示图像需要进行两步工作。第一步是获得
数据并保存即在存贮器中建立汉字数据库。第二步是在扫描模块的控制下配合行扫
描的次序正确地输出这些数据。获得图像数据的步骤是先将要显示的每一幅图像画在
一个如图3.3所示的被分成16×16共256个小方格的矩形框中再在有笔划下落处的
小方格里填上“1”无笔划处填上“0”这样就形成了与这个汉字所对应的二进制数
据在该矩形框上的分布再将此分布关系以32×16的数据结构组成64个字节的数据
并保存在只读存贮器ROM中。以这种方式将若干个汉字的数据贮存在存贮器内就完成
了图像数据库的建立工作。
2.4 汉字显示 汉字显示使用的是16×16的点阵EDA实验箱上有其接口电路
列选信号为SEL0
SEL1SEL2,SEL3,经4线16线译码器输出16列从左起为第一列列选信号是由一个
4位向量SEL[3..0]控制行选信号为H0H15,是由16个行信号组成的每一行由一个
单独的位来控制高电平有效。例如“0000”表示第0列“0000000000000001”表示第
一行的点亮。由于列是由一个向量决定而每一时刻的值只能有一个固定的值因而只
能使某一列的若干个点亮因此就决定了只能用逐列扫描的方法。例如要使第一列的
2,4,6,8行亮则列为“0001”、行为“0000000010101010”就可以实现了。 下面是各个部分的程序设计
2.4.1列循环扫描
列循环扫描
通过对每一列的扫描来完成对字母的现实只要扫描的频率足够快就能给人以连
续的感觉。因此要控制扫描的频率不能太低否则就会造成视觉上的不连续本设
计的扫描频率不得低于50Hz,扫描程序如下:图
2-4 16×16LED点阵模块 https://www.doczj.com/doc/b43347179.html,
Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
Entity dz_xs is
Port(enable,clk:in std_logic; --端口定义 输入信号 Sel:out std_logic_vector(3 downto 0)); --端口定义 输出信号 End dz_xs;
Architecture count of dz_xs is
Signal lie:std_logic_vector(3 downto 0);
Begin
Process(clk,enable) --脉冲、使能信号 begin
If clk'event and clk='1'then
If enable='1' then
If lie>"0000" then
Lie<=lie-"0001";
Else
Lie<="1111";
End if;
End if;
End if;
Sel<=lie;
End process;
2.4.2字符样式设计
字符样式设计
本环节是建立一个数据库使之能在扫描的同时读取所需要的信息从而完成汉字
的显示。本次设计“王、日、田、口”汉字样式设计程序如下
Library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
Entity dz_xs is
Port(enable,clk:in std_logic; --端口定义 输入信号
h0,h8:out std_logic_vector(7 downto 0)); --端口定义 输出信号h0-列数据输出h8-
代表行数据输出 End dz_xs;
Architecture count of dz_xs is
Signal lie:std_logic_vector(3 downto 0); --信号标志 https://www.doczj.com/doc/b43347179.html,
Signal past1:std_logic_vector(1 downto 0);
Begin
Process(enable,clk) --脉冲、使能信号 Begin
If clk'event and clk='1'then
If enable='1' then
Case lie is
When "00"=>
Case lie is --“王”字设计
When "0011"=>h0<="00010001";h8<="00010000";
When "0100"=>h0<="00010001";h8<="00010000";
When "0101"=>h0<="00010001";h8<="00010000";
When "0110"=>h0<="00010001";h8<="00010000";
When "0111"=>h0<="00010001";h8<="00010000";
When "1000"=>h0<="00011111";h8<="11110000";
When "1001"=>h0<="00010001";h8<="00010000";
When "1010"=>h0<="0001000
1";h8<="00010000";
When "1011"=>h0<="00010001";h8<="00010000";
When "1100"=>h0<="00010001";h8<="00010000";
When "1101"=>h0<="00010001";h8<="00010000";
When others=>h0<="00000000";h8<="00000000";
End case;
When "01"=>
Case lie is
--“日”字设计
When"0101"=>h0<="00011111";h8<="11110000";
When"0110"=>h0<="00010001";h8<="00010000";
When"0111"=>h0<="00010001";h8<="00010000";
When"1000"=>h0<="00010001";h8<="00010000";
When"1001"=>h0<="00010001";h8<="00010000"; https://www.doczj.com/doc/b43347179.html,
When"1010"=>h0<="00010001";h8<="00010000";
When"1011"=>h0<="00011111";h8<="11110000";
When others=>h0<="00000000";h8<="00000000";
End case;
When "10"=>
Case lie is --“田”字设计
When"0100"=>h0<="00011111";h8<="11110000";
When"0101"=>h0<="00010001";h8<="00010000";
When"0110"=>h0<="00010001";h8<="00010000";
When"0111"=>h0<="00010001";h8<="00010000";
When"1000"=>h0<="00011111";h8<="11110000";
When"1001"=>h0<="00010001";h8<="00010000";
When"1010"=>h0<="00010001";h8<="00010000";
When"1011"=>h0<="00010001";h8<="00010000";
When"1100"=>h0<="00011111";h8<="11110000";
When others=>h0<="00000000";h8<="00000000";
End case;
When "11"=>
Case lie is --“口”字设计
When"0101"=>h0<="00011111";h8<="11100000";
When"0110"=>h0<="00010000";h8<="00100000";
When"0111"=>h0<="00010000";h8<="00100000";
When"1000"=>h0<="00010000";h8<="00100000";
When"1001"=>h0<="00010000";h8<="00100000";
When"1010"=>h0<="00010000";h8<="00100000";
When"1011"=>h0<="00011111";h8<="11100000";
When others=>h0<="00000000";h8<="00000000";
End case;
When others=>h0<="00000000";h8<="00000000"; https://www.doczj.com/doc/b43347179.html,
End case;
End if;
End if;
End process;
2.4.3字母循环扫描及期间的延时环节
为使字母不断地循环显示并且使每个字母之间有停顿就需要在中间加一定的延
时和循环环节。在这一环节中可以通过修改其数值来控制每个字母的显示时间。
其程序如下
process(clk)
variable int: integer range 0 to 10000;
begin
if clk’event and clk=’1’then
if int<10000 then
int:=int+1;
else
int:=0;
if next1=”11”then
next1<=”00”;
else
next1<= next1+’1’;
end if;
end if;
end if;
end process; 2.5 整个完整的程序 library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity yz_ok is https://www.doczj.com/doc/b43347179.html,
port(enable,clk:in std_logic;
sel:out std_logic_vector(3 downto 0);
h0,h8:out std_logic_vector(7 downto 0));
end yz_ok;
architecture count of yz_ok is
signal lie:std_logic_vector(3 downto 0);
signal next1: std_logic_vector(1 downto 0);
begin
a1:process(clk,enable)
begin
If clk'event and clk='1'then
If enable='1' then
If lie>"0000" then
Lie<=lie-"0001";
Else
Lie<="1111";
End if;
End if;
End if;
Sel<=lie;
End process;
a2:process(enable,clk)
begin
If clk'event and clk='1'then
If enable='1' then
Case next1 is
When "00"=> https://www.doczj.com/doc/b43347179.html,
Case lie is
When "0011"=>h0<="00010001";h8<="00010000";
When "0100"=>h0<="00010001";h8<="00010000";
When "0101"=>h0<="00010001";h8<="00010000";
When "0110"=>h0<="00010001";h8<="00010000";
When "0111"=>h0<="00010001";h8<="00010000";
When "1000"=>h0<="00011111";h8<="11110000";
When "1001"=>h0<="00010001";h8<="00010000";
When "1010"=>h0<="00010001";h8<="00010000";
When "1011"=>h0<="00010001";h8<="00010000";
When "1100"=>h0<="00010001";h8<="00010000";
When "1101"=>h0<="00010001";h8<="00010000";
When others=>h0<="00000000";h8<="00000000";
End case;
When "01"=>
Case lie is
When"0101"=>h0<="00011111";h8<="11110000";
When"0110"=>h0<="00010001";h8<="00010000";
When"0111"=>h0<="00010001";h8<="00010000";
When"1000"=>h0<="00010001";h8<="00010000";
When"1001"=>h0<="00010001";h8<="00010000";
When"1010"=>h0<="00010001";h8<="00010000";
When"1011"=>h0<="00011111";h8<="11110000";
When others=>h0<="00000000";h8<="00000000";
End case;
When "10"=>
Case lie is
When"0100"=>h0<="00011111";h8<="11110000";
When"0101"=>h0<="00010001";h8<="00010000"; https://www.doczj.com/doc/b43347179.html,
When"0110"=>h0<="00010001";h8<="00010000";
When"0111"=>h0<="00010001";h8<="00010000";
When"1000"=>h0<="00011111";h8<="11110000";
When"1001"=>h0<="00010001";h8<="00010000";
When"1010"=>h0<="00010001";h8<="00010000";
When"1011"=>h0<="00010001";h8<="00010000";
When"1100"=>h0<="00011111";h8<="11110000";
When others=>h0<="00000000";h8<="00000000";
End case;
When "11"=>
Case lie is
When"0101"=>h0<="00011111";h8<="11100000";
When"0110"=>h0<="00010000";h8<="00100000";
When"0111"=>h0<="00010000";h8<="00100000";
When"1000"=>h0<="00010000";h8<="00100000";
When"1001"=>h0<="00010000";h8<="00100000";
When"1010"=>h0<="00010000";h8<="00100000";
When"1011"=>h0<="00011111";h8<="11100000";
When others=>h0<="00000000";h8<="00000000";
End case;
When others=>h0<="00000000";h8<="00000000";
End case;
End if;
End if;
End process;
a3:process(clk)
variable int: integer range 0 to 10000;
begin https://www.doczj.com/doc/b43347179.html,
if clk’event and clk=’1’then
if int<10000 then
int:=int+1;
else
int:=0;
if next1=”11”then
next1<=”00”;
else
next1<= next1+’1’;
end if;
end if;
end if;
end process;
end count; https://www.doczj.com/doc/b43347179.html,
第三章 系统调试与仿真 3.1开发环境介绍 Quartus II 是Altera公司的综合性PLD开发软件支持原理图、VHDL、Veril-ogHDL
以及AHDLAltera Hardware Description Language等多种设计输入形式内嵌自
有
的综合器以及仿真器可以完成从设计输入到硬件配置的完整PLD设计流程。
Quartus II支持Altera的IP核包含了LPM/MegaFunction宏功能模块库
使用户可以充分利用成熟的模块简化了设计的复杂性、加快了设计速度。对第
三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方
EDA工具。
此外Quartus II 通过和DSP Builder工具与Matlab/Simulink相结合可
以方便地实现各种DSP应用系统支持Altera的片上可编程系统SOPC开发
集系统级设计、嵌入式软件开发、可编程逻辑设计于一体是一种综合性的开发
平台。 3.2调试与仿真
3.2.1 创建工程
在Quartus II 中新建一个VHDL File文件将VHDL代码输入这个文件并
保存到工作目录名为yz_ok.vhd。
利用new preject wizard 工具创建一个工程工程名为yz_ok,顶层文件实体
名为 yz_ok并将上面创建的yz_ok.vhd文件加入到工程中。
3.2.2 编译前设置
1选择目标芯片。用assignmemts-settings命令弹出settings对话
框选择目标芯片为EP2C5T144C8。
图3-1 选择目标器件 https://www.doczj.com/doc/b43347179.html,
2选择工作方式编程方式及闲置引脚状态
单击上图中的device&pin options按钮弹出device&pin options窗口。 在
General项中选中auto-restart configuration after error,使对FPGA的配置
失败后能自动重新配置并加入JTAG用户编码。
图3-2 选择配置器件工作方式
在configuration项中其下方的Generate compressed bitstreams处打勾
这样就能产生用于EPCS的POF压缩配置文件。
在Configuration 选项页选择配置器件为EPCS1其配置模式选择为active
serial。
图3-3选择编程方式
在Unused pins项将目标器件闲置引脚状态设置高阻态即选择As https://www.doczj.com/doc/b43347179.html,
input,tri-stated。
图3-4 设置闲置引脚状态
3.2.3 全程编译
设置好前面的内容之后就可以进行编译了。选择Processing菜单中start
compilation在窗口的下方processing栏中显示编译信息。
图3-5 全程编译成功完成
完成后在工程管理窗口左是角显示了工程yz_ok 的层次结构和其中结构模块
耗用的逻辑宏单元数。此栏的右边是编译处理流程包括数据网表建立、逻辑综
合、适配、配置文件装配和时序分析等。
https://www.doczj.com/doc/b43347179.html,
3.2.4时序仿真
1新建一个矢量波形文件同时打开波形编辑器。设置仿真时间为50us,
保存波形文件为yz_ok.vwf。
2将工程yz_ok的端口信号名选入波形编辑器中所选的端口有
clk,enable及总线h0和h8。设置clk的时钟周期为2us占空比为50%。
图3-6 选择仿真控制
仿真器参数设置。选择菜单Assignment中的Settings在Settings
窗口下
选择Simulator在右侧的simulation mode项下选择timing即选择时序仿真
并选择仿真激励文件名yz_ok.vwf。选择simulation options栏确认选定
simulation coverage reporting; 毛刺检测Glitch detection 为1ns 宽度;选
中Run simulation until all vector stimuli 全程仿真。
现在所有设置进行完毕在菜单processing项下选择start simulation直
到出现simulation was successful仿真结束 。仿真文件simulation report 通
常会自动弹出否则选择processingsimulation report 。
图3-7 仿真波形输出 https://www.doczj.com/doc/b43347179.html,
第四章 结束语 经过为期十三周的毕业设计我对VHDL语言有了更加深刻的认识。VHDL是超
高速集成电路的硬件描述语言它能够描述硬件的结构、行为与功能。另外VHDL
具有并发性采用自上而下的结构式设计方法适合大型设计工程的分工合作。
在编写程序的时候我才发现能看懂程序和能自己写程序是两个完全不同的概念
自己一开始写程序时即便是一个很简单的功能模块在编译时也可能产生很多
错误在不断的改错过程中自己对VHDL语言的语法结构有了深刻的理解对编
译过程中常见的错误也有了全面的认识。通过这十三周的课程设计我在熟悉了
基于FPGA设计的同时也学到了很多在学习课本知识时所体会不到的东西。
完成此次设计后我不仅能对MAX+plus II开发仿真软件熟练操作能达到学
以致用同时还掌握了矩阵键盘和16×16点阵的工作原理。经过这一过程我发
现平常的学习在注重理论知识的掌握同时要加强实验环节只有通过不断地实
践我们才能把知识掌握的更牢固理解的更透彻。 答谢辞
参考文献 1综合电子设计与实践王振红清华大学出版社2008年9月第2版;
2EDA实用技术及应用刘艳萍国防工业出版社2006年第1版
3基于QuartusII的FPGA/CPLD数字系统设计实例张丽敏电子工业出版社
2007
4CPLD/FPGA常用模块与综合系统设计实例精讲罗苑棠电子工业出版社
2007。
答辩小组评价意见建议等第
答辩小组组长教师签名 年 月 日 三、系答辩委员会审定表 1
审定意见
2审定成绩等第_____ ___ 系主任签字 年 月 日 https://www.doczj.com/doc/b43347179.html,