基于FPGA的多路彩灯控制器的设计Word文档格式.docx
《基于FPGA的多路彩灯控制器的设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于FPGA的多路彩灯控制器的设计Word文档格式.docx(20页珍藏版)》请在冰豆网上搜索。
FPGA是新型的可编程逻辑器件,采用FPGA进行产品开发可以灵活地进行模块配置,大大缩短了产品开发周期,也有利于产品向小型化,集成化的方向发展。
二、任务要求
设计一个多路彩灯控制器,能循环变化花型,可清零,可选择花型。
彩灯控制器有16路发光二极管构成,当控制器开关打开时,能够在6种不同花型之间进行循环变化。
要求控制器具备复位清零功能,一旦复位信号失效,不论控制器花型变化处于何种状态,都会无条件即刻清零,回到初始化状态。
三、设计作用与目的
根据系统设计要求可知,整个系统共有三个输入信号:
控制彩灯节奏快慢的基准时钟信号CLK_IN,系统清零信号CLR,彩灯节奏快慢选择开关CHOSE_KEY;
共有16个输出信号LED[15..0],分别用于控制十六路彩灯。
据此,我们可将整个彩灯控制器CDKZQ分为三大部分:
时序控制电路SXKZ和显示控制电路XSKZ。
本题目还用原理图来完成顶层文件,对于比较简单的,子模块较少的题目,建议顶层模块使用原理图,会比较直观。
而对于比较复杂的,子模块较多的题目,使用文本元件例化,会更简洁清晰。
如用原理图完成顶层文件连线如图所示。
本题目是采用文本元件例化来完成的。
彩灯控制器的组成原理图
四、所用设备及软件
4.1FPGA的发展历程
FPGA(Field-ProgrammableGateArray),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。
它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
以硬件描述语言(Verilog或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至FPGA上进行测试,是现代IC设计验证的技术主流。
这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。
在大多数的FPGA里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其他更加完整的记忆块。
系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。
一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。
FPGA一般来说比ASIC(专用集成电路)的速度要慢,无法完成复杂的设计,但是功耗较低。
但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。
厂商也可能会提供便宜的但是编辑能力差的FPGA。
因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。
另外一种方法是用CPLD(ComplexProgrammableLogicDevice,复杂可编程逻辑器件)。
4.2QuartusII
4.2.1简介
QuartusII是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL以及AHDL(AlteraHardwareDescriptionLanguage)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
QuartusII可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。
具有运行速度快,界面统一,功能集中,易学易用等特点。
QuartusII支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。
对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。
此外,QuartusII通过和DSPBuilder工具与Matlab/Simulink相结合,可以方便地实现各种DSP应用系统;
支持Altera的片上可编程系统(SOPC)开发,集系统级设计、嵌入式软件开发、可编程逻辑设计于一体,是一种综合性的开发平台。
MaxplusII作为Altera的上一代PLD设计软件,由于其出色的易用性而得到了广泛的应用。
目前Altera已经停止了对MaxplusII的更新支持,QuartusII与之相比不仅仅是支持器件类型的丰富和图形界面的改变。
Altera在QuartusII中包含了许多诸如SignalTapII、ChipEditor和RTLViewer的设计辅助工具,集成了SOPC和HardCopy设计流程,并且继承了MaxplusII友好的图形界面及简便的使用方法。
AlteraQuartusII作为一种可编程逻辑的设计环境,由于其强大的设计能力和直观易用的接口,越来越受到数字系统设计者的欢迎。
4.2.2功能
QuartusII提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:
可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;
芯片(电路)平面布局连线编辑;
LogicLock增量设计方法,用户可建立并优化系统,然后添加对原始系统的性能影响较小或无影响的后续模块;
功能强大的逻辑综合工具;
完备的电路功能仿真与时序逻辑仿真工具;
定时/时序分析与关键路径延时分析;
可使用SignalTapII逻辑分析工具进行嵌入式的逻辑分析;
支持软件源文件的添加和创建,并将它们链接起来生成编程文件;
使用组合编译方式可一次完成整体设计流程;
自动定位编译错误;
高效的期间编程与验证工具;
可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件;
能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。
4.2.3简介
Altera的QuartusII可编程逻辑软件属于第四代PLD开发平台。
该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。
Quartus平台与Cadence、ExemplarLogic、MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。
改进了软件的LogicLock模块设计功能,增添了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。
支持MAX7000/MAX3000等乘积项器件
QuartusII设计套装的其他特性包括:
[1]
·
DSPBuilder12.0新的数字信号处理(DSP)支持——通过系统控制台,与MATLAB的DDR存储器进行通信,并具有新的浮点功能,提高了设计效能,以及DSP效率。
经过改进的视频和图像处理(VIP)套装以及视频接口IP——通过具有边缘自适应算法的ScalerIIMegaCore功能以及新的Avalon-Streaming(Avalon-ST)视频监视和跟踪系统IP内核,简化了视频处理应用的开发。
增强收发器设计和验证——更新了ArriaVFPGA的收发器工具包支持,进一步提高收发器数据速率(对于StratixVFPGA,高达14.1Gbps)。
五、系统设计方案
5.1、系统总体设计
图5.1系统总图
5.2、系统软件设计
5.2.1,时序控制器:
SXKZ部分
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
--库函数声明
entitysxkzis--实体声明
port(
chose_key:
instd_logic;
--速度控制按钮
clk_in:
--输入时钟信号
clr:
--复位信号
clk:
outstd_logic--改变后的时钟信号
);
endentity;
architectureartofsxkzis--结构体声明
signalcllk:
std_logic;
begin
process(clk_in,clr,chose_key)is--进程
variabletemp:
std_logic_vector(0to2);
--定义一个变量
begin
ifclr='
1'
thencllk<
='
0'
;
temp:
="
000"
--复位初始化
elsifrising_edge(clk_in)then
ifchose_key='
then--按键按下,高速时
iftemp="
011"
then--输出时钟信号T为输入信号的
temp:
--8倍
cllk<
=notcllk;
elsetemp:
=temp+'
endif;
else
111"
then--按键没按下,低速时
--输出时钟信号T为输入信号的
--16倍
endif;
endif;
endprocess;
clk<
=cllk;
endart;
生成的元器件符号SYMBOL:
图5.2时序控制器
5.2.2,显示控制器:
XSKZ
entityxskzis
led:
outstd_logic_vector(0to15)--彩灯输出,控制端口
architectureartofxskzis
typestateis(s0,s1,s2,s3,s4,s5,s6);
--定义一组状态机
signalcurrent_state:
state;
signalflower:
std_logic_vector(15downto0);
--定义一信号
process(clr,clk)is
constantf1:
std_logic_vector(0to15):
0001000100010001"
constantf2:
1010101010101010"
constantf3:
0011001100110011"
constantf4:
0100100100100100"
constantf5:
1001010010100101"
constantf6:
1101101101100110"
--定义一组彩灯的花式。
ifclr='
thencurrent_state<
=s0;
--判断复位信号,有则复
elsifrising_edge(clk)then--位状态为0,否则等待
casecurrent_stateis--时钟信号的上升沿
whens0=>
flower<
0000000000000000"
--初始状态
current_state<
=s1;
--一个时钟上升沿,将当前
whens1=>
--状态指向下一个状态
=f1;
current_state<
=s2;
whens2=>
=f2;
=s3;
whens3=>
=f3;
=s4;
whens4=>
=f4;
=s5;
whens5=>
=f5;
=s6;
whens6=>
=f6;
--返回第一个状态,实现循环
endcase;
endprocess;
led<
=flower;
endarchitecture;
生成元器件符号:
SYMBOL
图5.3显示控制器
5.2.3,彩灯控制器:
CDKZ
entitycdkz2is--实体
clkin:
--端口定义
outstd_logic_vector(0to15)
architectureartofcdkz2is--结构体
componentsxkzis--元件例化sxkz
outstd_logic
endcomponentsxkz;
componentxskzis--元件例化xskz
endcomponentxskz;
signals0:
--定义一个信号
u1:
sxkzportmap(chose_key,clkin,clr,s0);
u2:
xskzportmap(s0,clr,led);
彩灯控制器SYMBOL:
图5.4彩灯控制器
图5.5RTL
六、仿真调试分析
startcompilation先编译
generatefunctionalsimulationnetlist然后生成功能仿真网络表
assignments–setting—simulationsetting设置成功能仿真
然后新建一个vectorwaveformfile
通过view—utilitywindows--nodefinder把输入输出管脚添加进波形仿真图里点击startsimulation
6.1,时序控制器波形仿真:
图6.1输入信号
图6.2输出波形
6.2显示控制器波形仿真:
图6.3输入信号
图6.4输出波形
6.3彩灯控制器波形仿真:
图6.5Chose_key为0时
图6.6Chose_key为1时
七、设计中的问题及解决方法
实验表明,此设计方法能够满足多种不同花样彩灯的变化要求,并且该方法便于扩展不同变化模式的彩灯花样,同时又实现了彩灯的两种不同频率的闪烁。
如果不按任何按键时候,灯就按四种花样顺序循环跑,如果按下某个键再松开,比如按下C键然后松开,那么不管之前灯跑到哪个花样,按键后灯就会从C代表的花样处开始跑,然后是D花样,然后是A花样,依次循环。
但是A,B,C,D认为是按下会弹起的按键,因为这个程序里,如果一直按着按键不松手,会导致灯只是反复跑一个花样。
比如按着B键不松手,那么就会反复跑B花样。
还有不能允许同时按下两个键,三个键,4个键,也就是说,同一时刻ABCD只能有一个是高电平,否则会出错,因为这个程序并没有防错机制。
八、心得体会:
本次设计的课题是彩灯控制器的设计,当拿到这个课题的时候经过分析就知道关键是计数器和分频器的使用,分频的方法有很多种,对于同一种功能的实现,用VHDL可以采用多种方式进行描述,每种方式之间各有优劣,本次设计只采用了其中较简单的一种,应尽量用最简洁的语言写出所需功能的程序。
通过这次课程设计对EDA技术有了更进一步的熟悉,VHDL
语言和C语言等其他语言还是有很大的区别。
VHDL是EDA技术的重要组成部分,其具有与具体硬件电路无关和与设计平台无关的特性,并且具有良好的电路行为描述和系统描述的能力,并在语言易读性和层次化、结构化设计方面,表现了强大的生命力和应用潜力。
其主要的也是最大的优点就在于设计者可以专心致力于其功能的实现,而不需要对不影响功能的与工艺有关的因素花费过多的时间和精力。
在实际操作中发现设计和课本上的知识有很大联系,但又高于课本,一个简单的原理要把它应用以及和其他功能综合起来就有些困难。
通过设计也巩固了我们的书本知识以及通过借阅书籍和上网查找资料,也丰富了自己对EDA的了解
九、主要参考文献:
【1】谭会生、张昌凡EDA技术及应用西安电子科技大学出版社2002.8
【2】张洪润、张亚凡FPGA/CPLD应用设计200例北京航空航天大学出版社2007.2
【3】王刚、张潋基于FPGA的SOPC嵌入式系统设计与典型实例电子工业出版社2009.1
【4】周润景.基于QuartusⅡ的FPGA/CPLD数字系统设计实例[M].西安:
电子工业出版社,2007,8
【5】潘松黄继业.EDA技术实用教程(第二版)[M].北京:
科学出版社,2006.9
【6】林明权马维旻.VHDL数字控制系统设计范例[M].西安:
电子
工业出版社,2003.1
【7】褚振勇.FPGA设计及应用(第三版)[M].西安:
电子科技大学出版社,2012.4
【8】张毅刚彭喜元彭宇.单片机原理及应用(第二版)[M].北京:
高等教育出版社,2009.11
附录:
彩灯控制器的源程序
entityhorseracelampis
port(clk:
clr:
a:
b:
c:
d:
opt:
q:
outstd_logic_vector(5downto0);
div2:
end;
architectureoneofhorseracelampis
typestatesis(s0,s1,s2,s3);
signalpresent:
states;
signalq1:
std_logic_vector(5downto0);
signalcount:
std_logic_vector(3downto0);
signalhalfclk:
std_logic_vector(1downto0);
signalclkin:
process(clk)
ifclk'
eventandclk='
then
halfclk<
=halfclk+1;
endif;
process(opt)
begin
ifopt='
then
clkin(0)<
=halfclk(0);
else
=clk;
process(clk,clr,a,b,c,d)
ifclr='
present<
=s