可编程多彩霓虹灯.docx
《可编程多彩霓虹灯.docx》由会员分享,可在线阅读,更多相关《可编程多彩霓虹灯.docx(32页珍藏版)》请在冰豆网上搜索。
可编程多彩霓虹灯
第一章绪论
1.1引言
随着科学技术的迅猛发展,电子工业界经历了巨大的飞跃。
集成电路的设计正朝着速度快、性能高、容量大、体积小和微功耗的方向发展。
基于这种情况,可编程逻辑器件的出现和发展大大改变了传统的系统设计方法。
可编程逻辑器件和相应的设计技术体现在三个主要方面:
一是可编程逻辑器件的芯片技术;二是适用于可逻辑编程器件的硬件编程技术,三是可编程逻辑器件设计的EDA开发工具,它主要用来进行可编程逻辑器件应用的具体实现。
在本实验中采用了集成度较高的FPGA可编程逻辑器件,选用了VerilogHDL硬件描述语言和QuartusⅡ开发软件。
VHDL硬件描述语言在电子设计自动化(EDA)中扮演着重要的角色。
由于采用了具有多层次描述系统硬件功能的能力的“自顶向下”(Top-Down)和基于库(Library-Based)的全新设计方法,它使设计师们摆脱了大量的辅助设计工作,而把精力集中于创造性的方案与概念构思上,用新的思路来发掘硬件设备的潜力,从而极大地提高了设计效率,缩短了产品的研制周期。
QuartusⅡ是集成了编辑器、仿真工具、检查/分析工具和优化/综合工具的这些所有开发工具的一种集成的开发环境,通过该开发环境能够很方便的检验设计的仿真结果以及建立起与可编程逻辑器件的管脚之间对应的关系。
第二章技术概述
2.1EDA技术简介
2.1.1EDA技术的发展概况
EDA(ElectronicDesignAutomation),即电子设计自动化,是指利用计算机完成电子系统的设计。
EDA技术是以计算机和微电子技术为先导的,汇集了计算机图形学、拓扑学、逻辑学、微电子工艺与结构学和计算数学等多种计算机应用学科最新成果的先进技术。
EDA技术以计算机为工具,代替人完成数字系统的逻辑综合、布局布线和设计仿真等工作。
设计人员只需要完成对系统功能的描述,就可以由计算机软件进行处理,得到设计结果,而且修改设计如同修改软件一样方便,可以极大地提高设计效率。
从20世纪60年代中期开始,人们就不断开发出各种计算机辅助设计工具来帮助设计人员进行电子系统的设计。
电路理论和半导体工艺水平的提高,对EDA技术的发展起到了巨大的作用,使EDA作用范围从PCB板设计延伸到电子线路和集成电路设计,直至整个系统的设计,也使IC芯片系统应用、电路制作和整个电子生产过程都集成在一个环境之中。
根据电子设计技术的发展特征,EDA技术发展大致分为三个阶段。
1.CAD阶段
第一阶段的特点是一些单独的工具软件,主要有PCB布线设计、电路模拟、逻辑模拟、以及版图的绘制等,通过计算机的使用,从而将设计人员从大量繁重重复的计算和绘图工作中解脱出来。
20世纪80年代,随着集成电路规模的增大,EDA技术有了较快的发展。
许多软件公司等进入市场,开始供应带电路图编辑工具和逻辑模拟工具的EDA软件。
这个时期的软件产品主要针对产品开发,按照设计、分析、生产和测试等多个阶段,不同阶段分别使用不同的软件包,每个软件只能完成其中一项工作,通过顺序循环使用这些软件,可完成设计的全过程。
2.CAE阶段
这个阶段在集成电路与电子设计方法学以及设计工具集成化方面取得了许多成果。
各种设计工具,如原理图输入、编译与连接、逻辑模拟、测试码生成、版图自动布局已齐全。
由于采用了统一数据管理技术,因而能够将各个工具集成为一个CAE系统。
按照设计方法学制定的设计流程,可以实现从设计输入到版图输出的全程设计自动化。
这个阶段主要采用基于单元库的半定制设计方法,采用门阵列与标准单元设计的各种ASIC得到了极大的发展,将集成电路工业推入了ASIC时代。
3.EDA阶段
20世纪90年代以来,微电子技术以惊人的速度发展,其工艺水平达到了深亚微米级,此阶段主要出现了以高级语言描述、系统仿真和综合技术为特征的第三代EDA技术,不仅极大地提高了系统的设计效率,而且使设计人员摆脱了大量的辅助性及基础性工作,将精力集中于创造性的方案与概念的构思上。
它的特征为:
第一,高层综合的理论与方法取得较大进展,将EDA设计层次由RT级提高到了系统级(又称行为级),并划分为逻辑综合和测试综合。
第二,采用硬件描述语言HDL来描述10万门以上的设计,并形成了VHDL和VerilogHDL两种标准硬件描述语言。
第三,采用平面规划技术对逻辑综合和物理版图设计进行联合管理,作到在逻辑综合早期设计阶段就考虑到物理设计信息的影响。
第四,可测性设计。
第五,为带有嵌入IP模块ASIC设计提供软硬件协同系统设计工具。
2.1.2EDA技术的基本特征
EDA技术代表了当今电子设计技术的最新发展方向,它的基本特征是:
设计人员按照“自顶向下”的设计方法,对整个系统进行方案设计和功能划分,系统的关键电路用一片或几片专用集成电路(ASIC)实现,然后采用硬件描述语言(HDL)完成系统行为级设计,最后通过综合器和适配器生成最终的目标器件。
这样的设计方法被称为高层次的电子设计方法。
下面介绍与EDA基本特征有关的几个概念。
1.“自顶向下”的设计方法
10年前,电子设计的基本思路还是选择标准集成电路“自底向上”(Bottom-Up)地构造出一个新的系统,这样的设计方法就如同一砖一瓦地建造金字塔,不仅效率低、成本高而且还容易出错。
2.高层次设计
高层次设计提供了一种“自顶向下”(Top-Down)的全新的设计方法,这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构设计。
在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证。
然后用综合优化工具生成具体门电路的网表,其对应的物理实现级可以是印刷电路板或专用集成电路。
由于设计的主要仿真和调试过程是在高层次上完成的,这不仅有利于早期发现结构设计上的错误,避免设计工作的浪费,而且也减少了逻辑功能仿真的工作量,提高了设计的一次成功率。
2.2Verilog硬件描述语言
Verilog HDL是目前应用最为广泛的硬件描述语言。
Verilog HDL可以用来进行各种层次的逻辑设计,也可以进行数字系统的逻辑综合,仿真验证和时序分析等。
Verilog HDL适合算法级,寄存器级,逻辑级,门级和版图级等各个层次的设计和描述.
Verilog HDL进行设计最大的优点是其工艺无关性.这使得工程师在功能设计,逻辑验证阶段可以不必过多考虑门级及工艺实现的具体细节,只需根据系统设计的要求施加不同的约束条件,即可设计出实际电路.
Verilog HDL是一种硬件描述语言(hardware description language),为了制作数字电路而用来描述ASICs和FPGA的设计之用。
Verilog 的设计者想要以 C 编程语言为基础设计一种语言,可以使工程师比较容易学习。
Verilog 是由en:
Gateway Design Automation公司于大约1984年开始发展。
Gateway Design Automation公司后来被 Cadence Design Systems于1990年所购并。
现在 Cadence 对于 Gateway 公司的 Verilog 和 Verilog-XL 模拟器拥有全部的财产权。
2.3QuartusII软件介绍
QuartusII软件是开发AlteraPLD的软件工具,可开发FPGA、CPLD和结构化的ASIC,是MAX+plusII的升级版本。
QuartusII提供了方便的设计输入方式、快速的编译和直接易懂的器件编程。
能够支持逻辑门数在百万门以上的逻辑器件的开发,并且为第三方工具提供了无缝接口。
QuartusII提供了全面的逻辑设计能力,包括电路图、文本和波形的设计输入以及编译、逻辑综合、仿真和定时分析以及器件编程等诸多功能。
特别是在原理图输入等方面,QuartusII被公认为是最容易使用、人机界面最友好的PLD开发软件。
2.3.1QuartusII软件的特点
1.开放式的多平台设计环境
QuartusII提供了完整的多平台设计环境,能满足各种特定设计的需要,也是可编程片上系统(SOPC)设计的综合性环境和SOPC开发的基本设计工具,并为AlreraDSP开发包进行系统的模型设计提供了集成综合环境。
QuartusII设计工具完全支持VHDL、Verilog的设计流程,其内部嵌有VHDL、Verilog逻辑综合器。
QuartusII也可以利用第三方综合工具。
同样,QuartusII具备仿真功能,同时也支持第三方的仿真工具。
2.设计与结构无关
QuartusII支持Cyclone、Stratix、APEX20KE、FLEX10KA、FLEX6000、MAX7000B、MAX7000AE和MAX7000S等系列可编程逻辑器件,门数为6000~250000门,提供了业界正真与结构无关的可编程逻辑设计环境。
QuartusII的编译器还提供了强大的逻辑综合与优化功能以减轻用户的设计负担。
3.可在多种平台运行
QuartusII软件可基于PC的WindowsNT4.0、Windows98、Windows2000等操作系统下运行,也可在SunSPARCstasions,HP9000Series700/800等工作站上运行。
4.层次化设计
QuartusII支持层次化设计,可以在一个新的编辑输入环境中对使用不同输入设计方式完成的模块进行调试,从而解决了原理图与HDL混合输入设计的问题。
5.模块化工具
设计者可以从各种设计输入、编辑、校验及器件编程工具中做出选择,形成用户风格的开发环境,必要时还可以在保留原始功能的基础上添加新的功能。
6.支持硬件描述语言
QuartusII软件支持多种硬件描述语言的设计输入,包括标准的VHDL、VerilogHDL及AHDL。
7.丰富的LPM模块
QuartusII含大量有用的LPM模块,它们是复杂或高级形同构建的重要组成部分,在SOPC设计中被大量使用,也可以在QuartusII普通设计文件一起使用。
Altera提供的LPM函数均基于Altera期间的结构做了优化设计。
在许多实用情况中,必须使用宏功能模块才可以使用一些Altera特定器件的硬件功能。
2.3.2QuartusII软件设计流程
作为第一款从FPGA至掩模器件的完整设计工具,Altera公司推出的四代可编程逻辑器件集成开发环境QuartusII提供了从设计输入到器件变成的全部功能。
QuartusII分为综合工具、仿真工具、实现工具、辅助设计工具和其他工具等,强大,界面友好,易于掌握。
利用QuartusII开发工具进行数字系统设计,可以概括为以下几个步骤:
设计输入、综合、布局布线、时序分析、仿真、编程和配置等,如图1所示
图1QuartusII设计流程
Fig.1QuartusIIdesignprocess
QuartusII利用VerilogHDL完成电路设计,必须借助EDA工具的综合器、适配器、时序仿真器和编译器等工具进行相应的处理,才能最终在硬件上得以实现和测试。
第三章可编程多彩霓虹灯系统设计方案
3.1设计分析
利用开发系统板,设计一个简易的霓虹灯控制芯片。
利用开发板上的8个发光二极管来模拟霓虹灯的灯泡,用按键来控制霓虹灯的显示模式。
设计一个可编程的多彩霓虹灯,实现霓虹灯的可编程多种图案的交替显示。
系统的输入信号包括8个拨码开关、一个按键开关和时钟信号,输出信号有8个LED。
可编程多彩霓虹灯的外部时钟由晶振产生,该开发板系统示例中采用的晶振频率为50MHz。
可编程多彩霓虹灯共有8个灯泡,定义这8个灯泡的亮暗组合为一帧图案,每次显示的图案需要8bits数据。
在本设计中,预定了8帧图案,在正常情况下,可编程多彩霓虹灯以1帧/秒的速度变换显示数据。
同时,在按键的控制下,8个拨码开关用来输入8个霓虹灯的图案显示数据。
方法如下:
首先拨好8个数码开关,表示一帧具体的图案显示数据,其中,“开”代表响应的霓虹灯点亮,“关”代表相应的霓虹灯熄灭;然后按下按键,数据就存入了控制器电路的内部存储器中;继续用拨码开关输入下一帧的色彩数据,再按下按键,数据就存入控制器电路内部的下一组存储器中;按照这种方法,可以预先存储好8帧显示图案。
当8帧显示图案数据存满了以后,可以继续输入数据,心输入的数据会覆盖第一次输入的数据。
3.2系统分析
可编程多彩霓虹灯分为五个模块,包括两个分频器模、RAM存储器模块、显示模块和按键控制模块。
两个分频器模块的作用是对系统时钟进行分频。
由于显示部分需要每秒显示一帧图像,所以需要由系统高频时钟分频得到一个1s的时钟用于控制显示模块。
另外一个分频器输出0.1s的时钟,主要用于按键去抖动,并且能够得到合理速度的按键控制信号,同时这个时钟也用于构建RAM的工作时钟。
显示模块的主要作用是从RAM中读出显示数据,并把这个数据显示到LED上。
显示控制模块需要每秒从RAM中读数一次,每次读出数据位8bits。
键盘、拨码控制模块的主要作用是检测外部的按键信号,如果按键信号失效,就把拨码开关的数据输入到当前地址指针所指的RAM地址中。
数据存储RAM模块是最复杂的核心模块,负责数据的存入和读出,该RAM需要处理来自键盘、拨码开关的数据写入信号,也要处理LED显示控制模块的数据请求信号,以及二者的冲突仲裁处理。
3.3模块设计
3.3.1.分频器1模块设计
(1)模块原理分析。
分频器是采用计数器实现的,其基本原理是计数n个原始时钟脉冲后,把分频产生的时钟信号进行一次翻转,周而复始,产生不断翻转的分频时钟。
(2)模块接口定义。
分频器1模块接口定义如表1所示。
表1分频器1模块接口信号定义
信号名
I/O
位宽
含义
clk
I
1bit
系统50MHz时钟输入
Clk_01s
O
1bit
分频后周期为0.1s的时钟输出
(3)模块Verilog代码设计,代码如下:
begin
if(counter==22'b1001100010010110100000)//如果等于2500000
begin
counter<=22'b0;//把counter恢复成0
clk_01s<=~clk_01s;//把clk_01s翻转
end
else
counter<=counter+1'b1;//counter继续计数
end
3.3.2分频器2模块设计
分频器2模块接口定义如表2所示。
表2分频器2模块接口定义
信号名
I/O
位宽
含义
clk
I
1bit
系统50MHz时钟输入
Clk_01s
O
1bit
分频后周期为1s的时钟输出
模块Verilog代码设计,代码如下:
begin
if(counter==25'h17d7840)//如果等于25000000
begin
counter<=25'b0;//把counter恢复成0
clk_1s<=~clk_1s;//把clk_1s翻转
end
else//如果不等于25000000
counter<=counter+1'b1;//counter继续计数
end
3.3.3显示控制模块设计
(1)模块原理分析。
显示控制模块的功能是从RAM中读取数据,并把这个数据显示到LED上。
LED数据是8bits,所以需要8位数据总线从RAM读出数据,同时还需要8条数据总线来传输数据到LED灯上。
此外,由于RAM数据有8组,所以还需要给RAM相应的地址信号。
基于上述考虑,先显示控制模块里需要设计一个地址寄存器,由于只有8个存储单元,所以可以只需要3bits的地址寄存器,地址寄存器需要自动循环累加才能连续不断地输出地址给RAM。
为了本设计模块的简洁化,减少使用其他接口控制信号,定义RAM和控制模块的读出接口时序为:
只要控制模块发送地址,RAM就自动输出相应地址的数据。
(2)模块接口定义。
显示控制模块接口定义如表3所示。
表3显示模块接口定义
信号名
I/O
位宽
含义
clk_1s
I
1bit
分频后周期为1s的时钟输出
led
O
8bits
输出给LED灯的显示数据
disp_add
O
3bits
输出给RAM的地址
disp_data
I
8bits
从RAM读出的数据
(3)模块Verilog代码设计,代码如下:
inputclk_1s;
output[7:
0]led;
input[7:
0]disp_data;//显示数据
output[2:
0]disp_add;//地址信号
reg[2:
0]disp_add;//地址寄存器
//自动产生地址
always@(posedgeclk_1s)
disp_add<=disp_add+1'b1;
//输出data给led灯
assignled=disp_data;
3.3.4按键控制模块设计
(1)模块原理分析。
按键控制模块的功能是把外部拨码开关的数据通过按键输入给RAM,按键开关是控制信号,每按下一次,可以把拨码开关的状态作为显示数据输入到RAM中,同时RAM地址指针增加1。
按键控制模块首先要处理的问题旧手机按键信号的去抖动,由于人在按下按键的时候一定会有抖动,所以需要用0.1s的时钟对按键进行去抖动处理,然后对去抖了的按键信号做上升沿检测,这样每次按下按键之后就会生成一个与时钟等宽的高电平信号,可用于控制RAM的写入。
RAM收到这个控制信号后,就会把数据总线上的数据写入地址总线对应位置的RAM空间;同时,地址寄存器收到这个信号以后,也会把地址指针加1,准备好下一次写入的地址。
(2)模块接口定义。
按键控制模块接口定义如表4所示。
表4按键控制模块接口定义
信号名
I/O
位宽
含义
clk_01s
I
1bit
分频后周期为0.1s的输出
key
I
8bits
外部的拨码开关信号
press
I
1bit
外部的按键信号
wdata
O
8bits
写入RAM的数据总线
key_add
O
3bits
从按键控制模块输出给RAM的地址信号
wr
O
1bit
写控制信号,按键信号通过上升沿检测电路后,生成一个时钟宽度的写信号
(3)模块Verilog代码设计,代码如下:
inputclk_01s;//输入的0.1s时钟
input[7:
0]key;//外部的拨码开关
inputpress;//按键开关
output[7:
0]wdata;//写入RAM的数据
output[2:
0]key_add;//写入SRAM的地址
outputwr;//写控制信号
regpress1,press2,press3;
always@(posedgeclk_01s)//去抖动电路
begin
press1<=press;
press2<=press1;
press3<=press2;
end
//上升沿产生电路
assignwr=press2&&(~press3);
3.3.5RAM模块设计
(1)模块原理分析。
RAM本身是一个存取数据的元件。
在本设计中采用64个D触发器作为存储单元,分为8组,每组有8bits。
除了存储单元以外,RAM还需要译码器和读/写控制器。
这里,RAM不需要读控制信号,给地址信号就可以直接读出;而写入时一定需要控制信号;由于采用了D触发器作为存储单元,所以不必担心同时读/写的问题,D触发器可以同时进行读/写操作。
而如果采用了SRAM结构,就需要专门的仲裁电路来处理同时读/写的矛盾。
RAM模块包括三部分:
写入不分、D触发器阵列和读出部分。
读出部分包括一个译码器电路,可以把地址译码器选中的D触发器输出端通过多路选择器选通到最终的数据总线上;写入部分,也通过一个地址译码器和一个多路选择器最终把地址中的D触发器写入数据。
在本设计中,当wr有效的时候,就写入D触发器。
由于D触发器的时钟同步电路,所以需要外部的写入信号也必须是同步于D触发器时钟的。
这里写入信号wr和D触发器都同步时钟clk_01s,所以符合设计的要求。
(2)模块接口定义。
RAM模块接口定义如表5所示。
表5RAM模块接口定义
信号名
I/O
位宽
含义
clk_01s
I
1bit
分频后周期为0.1s的时钟输出
wdata
I
8bits
写入RAM的数据总线
key_add
I
3bits
从按键控制模块输入给RAM的地址信号
wr
I
1bit
写控制信号,按键信号通过上升沿检测电路后,生成的一个时钟宽度的写信号
disp_add
I
3bits
显示控制模块输入给RAM的地址信号
disp_data
O
8bits
显示控制模块从RAM读出的数据
(3)模块Verilog代码设计,代码如下:
//读出的地址译码和多路选择器
assigndisp_data=disp_add==3'b000?
ram0:
disp_add==3'b001?
ram1:
disp_add==3'b010?
ram2:
disp_add==3'b011?
ram3:
disp_add==3'b100?
ram4:
disp_add==3'b101?
ram5:
disp_add==3'b110?
ram6:
disp_add==3'b111?
ram7:
8'bz;
//写入的译码和多路选择器
always@(posedgeclk_01s)
begin
if(wr==1'b1)//如果写使能信号wr有效才写入
begin
if(key_add==3'b000)//如果写入的地址为“000”
ram0<=wdata;//把数据写入ram0这个单元
elseif(key_add==3'b001)
ram1<=wdata;
elseif(key_add==3'b010)
ram2<=wdata;
elseif(key_add==3'b011)
ram3<=wdata;
elseif(key_add==3'b100)
ram4<=wdata;
elseif(key_add==3'b101)
ram5<=wdata;
elseif(key_add==3'b110)
ram6<=wdata;
elseif(key_add==3'b111)
ram7<=wdata;
end
end
3.3.6顶层连接模块设计
前面设计了五个电路模块,包括:
两个分频器(clk_div1和clk_div2)、显示控制模块(disp_ctl)、按键控制模块(key_ctl)和RAM模块(ram)。
在顶层链接模块中,按照控制关系把这五个模块链接起来。
代码如下:
//实体化clk_div1模块
wireclk_01s;
clk_div1clk_div1_inst(
.clk(clk),
.clk_01s(clk_01s)
);
//实体化clk_div2模块
wireclk_1s;
clk_div2clk_div2_inst(
.clk(clk),//输入时钟
.clk_1s(clk_1s)//输出时钟
);
//实体化disp_ctl模