VHDL课程设计22.docx
- 文档编号:23486204
- 上传时间:2023-05-17
- 格式:DOCX
- 页数:21
- 大小:251.44KB
VHDL课程设计22.docx
《VHDL课程设计22.docx》由会员分享,可在线阅读,更多相关《VHDL课程设计22.docx(21页珍藏版)》请在冰豆网上搜索。
VHDL课程设计22
湖北民族学院2006年春季期
VHDL课程设计
乐曲演奏电路设计
学号:
0302442
姓名:
XXX
指导老师:
XXX
一、概述
在电子设计技术领域,可编程逻辑器件的广泛应用,为数字系统的设计带来了极大的灵活性。
由于该器件可以通过软件编程而对其硬件的结构和工作方式进行重构,使得硬件的设计可以如同软件设计那样方便快捷。
这一切极大的改变了传统的数字系统设计方法、设计过程乃至设计观念。
在传统的数字系统设计中,用户能够通过编程方式改变器件逻辑功能只有两种途径,即微处理器的软件编程(如单片机)和特定器件的控制字配置(如8255)。
在传统的设计概念中,器件引脚功能的硬件方式的任意确定是不可能的。
而对于系统构成的设计过程只能对器件功能和电路板图分别进行设计和确定,通过设计电路板来规划系统功能。
在此期间,大量的时间和精力花在元件选配和系统结构的可行性定位上。
但若采用可编程逻辑器件,便可以利用计算机软件的方式对目标进行设计,而以硬件的形式既定的系统功能。
在设计过程中,设计者若可根据需要,随时改变器件的内部逻辑功能和管脚的信号方式。
借助于大规模集成的可编程器件和高效的设计软件,用户不仅可通过直接对芯片结构的设计实现多种数字逻辑器件和高效的设计软件,用户不仅可通过直接对芯片结构的设计实现多种数字逻辑功能,而且由于管脚定义的灵活性,大大减轻了电路图设计和电路板设计的工作量和难度,缩小了系统的体积,提高了系统的可靠性。
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,是20世纪90年代初,从CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAT(计算机辅助测试)和CAE(计算机辅助工程)的概念发展而是来的。
EDA技术就是以计算机为工具,在EDA软件平台上,对以硬件描述HDL为系统逻辑描述手段完成的设计文件自动地完成逻辑编译、逻辑分割、逻辑综合及优化、逻辑布局、逻辑仿真,直至对于特定目标芯片的甜酸编译、逻辑遇敌和编程下载等工作。
设计者的工作仅限于利用软件的方式,即利用硬件描述评议来完成对系统硬件功能的描述,在EDA工具的帮助下就可以得到最后的设计结果。
尽管目标系统是硬件,但整个设计和修改过程如同完成软件设计一样的方便和高效。
EDA技术中最为瞩目的功能,即最具现代电子设计技术特征的功能就是日益强大的逻辑设计仿真测试技术。
EDA仿真测试技术只需通过计算机就能对所设计的电子系统从各种不同屋次的系统性能特点完成一系列准确的测试与仿真操作在完成实际系统的安装后还能对系统上的目标器件进行所谓边界扫描测试。
这一切都极大地提高了大规模系统电子设计的自动化程度。
另一方面高速发展的CPLD/FPGA器件又为EDA技术的不断进步奠定了坚实的物质基础。
CPLD/FPGA器件更广泛的应用及厂商间的竞争,使得普通的设计人员获得廉价的器件和EDA软件成为可能。
现代的EDA工具软件已突破了早期仅能进行PCB版图设计,或类似某些仅限于电路功能模拟的、纯软件范围的局限,以最终实现可靠的硬件系统为目标,配备了系统设计自动化的全部工具。
如配置了各种常用的硬件描述语言平台VHDL、VerilogHDL、ABEL-HDL等;配置了多种功能兼用和混合使用的逻辑描述输入工具,如硬件描述语言文本输入法(其中包括布尔方程描述方式、原理图描述方式、状态图描述方式等)以及原理图输入法、波形输入法等;同时还培植了高性能的逻辑综合、优化和仿真模拟工具。
近十年由于超大规模集成电路和软件技术的快速发展,使数字系统集成到一片集成电路内成为可能,Altera、Xilinx、AMD等公司都推出了非常好的CPLD和FPGA产品,并为这些产品的设计配备了设计、下载软件,这些软件除了支持图形方式设计数字系统外,还支持设计多种数字系统的设计语言,使数字系统设计起来更加容易,可以说数字电子技术的设计进入了一个新时代。
美国国防部开发的VHDL语言成为了IEEE.STD_1076标准,VHDL作为IEEE标准的硬件描述语言和EDA的重要组成部分,经过十几年的发展、应用和完善,以及强大的系统描述能力、规范的程序设计结构、灵活的语句表达风格和多层次的仿真测试手段,受到业界的普遍认同和广泛的接受,从数十种国际流行的硬件描述语言中脱颖而出,成为EDA领域的首选硬件设计计算机语言,而且目前流行的EDA工具软件全部支持VHDL。
该语言集成了各种HDL语言的优点,使数字系统设计更加简单和容易,是一个规模庞大的语言。
VHDL语言通常包含实体(Entity),构造体(Architecture),配置(Configuration),包集合(Package),和库(Library)五部分.其中实体用于描述所设计的系统的外部接口信号;构造体用于描述系统内部的结构和行为;建立输入和输出之间的关系;配置语句安装具体元件到实体—结构体对,可以被看作是设计的零件清单;包集合存放各个设计模块共享的数据类型、常数和子程序等;库是专门存放预编译程序包的地方。
VHDL主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。
应用VHDL进行工程设计的优点有以下几个方面:
(1)与其他的硬件描述语言相比,VHDL具有更强的行为描述能力,从而决定了他成为系统设计领域最佳的硬件描述语言。
强大的行为描述能力是避开具体的器件结构,从逻辑行为上描述和设计大规模电子系统的重要保证。
(2)VHDL丰富的仿真语句和库函数,使得在任何大系统的设计早期就能查验设计系统的功能可行性,随时可对设计进行仿真模拟。
(3)VHDL语句的行为描述能力和程序结构决定了他具有支持大规模设计的分解和已有设计的再利用功能。
符合市场需求的大规模系统高效,高速的完成必须有多人甚至多个代发组共同并行工作才能实现。
(4)对于用VHDL完成的一个确定的设计,可以利用EDA工具进行逻辑综合和优化,并自动的把VHDL描述设计转变成门级网表。
(5)VHDL对设计的描述具有相对独立性,设计者可以不懂硬件的结构,也不必管理最终设计实现的目标器件是什么,而进行独立的设计。
MAX+PLUSII软件是一个功能强大,容易使用的软件包,它可以以图形方式、文字输入方式(AHDL、VHDL和VERILOG)、和波形方式输入设计文件,可以编译并形成各种能。
其主要功能为:
(1)原理图输入(GraphicEditor)
MAX+PLUSII软件具有图形输入能力,用户可以方便的使用图形编辑器输入电路图,图中的元器件可以调用元件库中元器件,除调用库中的元件以外,还可以调用该软件中的符号功能形成的功能块。
够下装到EPROM和各种ALTERA器件的文件,还可以进行仿真以检验设计的准确性。
(2)波形编辑器(waveformEditor)
在进行逻辑电路的行为仿真时,需要在所设计电路的输入端加入一定的波形,波形编辑器可以生成和编辑仿真用的波形(*.SCF文件),使用该编辑器的工具条可以容易方便的生成波形和编辑波形。
(3)管脚(底层)编辑窗口(FloorplanEditor)
该窗口用于将已设计好逻辑电路的输入输出节点赋予实际芯片的引脚,通过鼠标的拖拉,方便的定义管脚的功能。
(4)自动错误定位
在编译源文件的过程中,若源文件有错误,Max+Plus2软件可以自动指出错误类型和错误所在的位置。
(5)逻辑综合与适配
该软件在编译过程中,通过逻辑综合(LogicSynthesizer)和适配(Fitter)模块,可以把最简单的逻辑表达式自动的吻合在合适的器件中。
(6)设计规则检查
选取Compile\Processing\DesignDoctor菜单,将调出规则检查医生,该医生可以按照三种规则中的一个规则检查各个设计文件,以保证设计的可靠性。
一旦选择该菜单,在编译窗口将显示出医生,用鼠标点击医生,该医生可以告诉你程序文件的健康情况。
(7)多器件划分(Partitioner)
如果设计不能完全装入一个器件,编译器中的多器件划分模块,可自动的将一个设计分成几个部分并分别装入几个器件中,并保证器件之间的连线最少。
(8)编程文件的产生
编译器中的装配程序(Assembler)将编译好的程序创建一个或多个编程目标文件:
EPROM配置文件(*.POF)例如,MAX7000系列;
SRAM文件(*.SCF)例如,FLEX8000系列的配置芯片EPROM;
JEDEC文件(*.JED);
十六进制文件(*.HEX);
文本文件(*.TTF);
串行BIT流文件(*.SBF);
(10)仿真
当设计文件被编译好,并在波形编辑器中将输入波形编辑完毕后,就可以进行行为仿真了,通过仿真可以检验设计的逻辑关系是否准确。
(11)分析时间(AnalyzeTiming)
该功能可以分析各个信号到输出端的时间延迟,可以给出延迟矩阵和最高工作频率。
(12)器件编程
当设计全部完成后,就可以将形成的目标文件下载到芯片中,实际验证设计的准确性。
(13)设计过程
1)进入Max+plus2软件环境
2)输入项目文件名(File/Project/Name)
3)输入源文件(图形、VHDL、AHDL、Verlog和波形输入方式)
4)(Max+plusⅡ/graphicEditor,Max+plusⅡ/TextEditor,Max+plusⅡ/WaveformEditor)
5)指定CPLD型号(Assign/Device)
6)设置管脚、下载方式和逻辑综合的方式
(Assign/GlobalProjectDeviceOption,Assign/GlobalLogicSynthesis)
7)保存并检查源文件(File/project/Save&Check)
8)指定管脚(Max+plusⅡ/FloorplanEditor)
9)保存和编译源文件(File/project/Save&Compile)
10)生成波形文件(Max+plusⅡ/WaveformEditor)
11)仿真(Max+plusⅡ/Simulator)
12)下载配置(Max+plusⅡ/Programmer)
二、设计
下面设计一首《友谊天长地久》乐曲演奏电路,通过查询相关资料,得知音高与频率的对应关系,具体见下表:
1
2
3
4
5
6
7
低音
131
147
165
175
196
221
248
中音
262
294
330
350
393
441
496
高音
525
589
661
700
786
882
990
音高频率对照表
此程序使用4MHZ时钟,如果经时钟不同修改一下常数即好。
模块及模块功能设计:
1、模块PAIA见图1。
该模块控制每一个音的长短,送初值给FANA模块,从而控制音高.
图1
2、模块FANA见图2。
该模块的功能是根据PAIA送来的初值倒计时,每次计到0时就使信号Q反转,由于初值不同,从而产生不同的音高。
图2
本设计的总体框图如下图3所示:
图3
三、程序清单:
1、PAIA模块的程序:
libraryieee;
useieee.std_logic_1164.all;
entitypaiais
port(clk:
instd_logic;
q:
outintegerrange0to10204);
endpaia;
architecturepaia_1ofpaiais
begin
process(clk)
variablecnt1:
integerrange0to1500000;
variablecnt2:
integerrange0to8;
variablen:
integerrange0to45;
begin
ifclk'eventandclk='1'then
ifcnt1<1500000then
cnt1:
=cnt1+1;
else
cnt1:
=0;
casenis
when0=>q<=10204;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=1;
endif;
when1=>q<=7634;
ifcnt2<6then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=2;
endif;
when2=>q<=6061;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=3;
endif;
when3=>q<=6803;
ifcnt2<3then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=4;
endif;
when4=>q<=7634;
n:
=5;
when5=>q<=6803;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=6;
endif;
when6=>q<=6061;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=7;
endif;
when7=>q<=7634;
ifcnt2<4then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=8;
endif;
when8=>q<=6061;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=9;
endif;
when9=>q<=5089;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=10;
endif;
when10=>q<=4535;
ifcnt2<9then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=11;
endif;
when11=>q<=5089;
ifcnt2<3then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=12;
endif;
when12=>q<=6061;
ifcnt2<2then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=13;
endif;
when13=>q<=7634;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=14;
endif;
when14=>q<=6803;
ifcnt2<3then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=15;
endif;
when15=>q<=7634;
n:
=16;
when16=>q<=6803;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=17;
endif;
when17=>q<=6061;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=18;
endif;
when18=>q<=7634;
ifcnt2<3then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=19;
endif;
when19=>q<=9050;
ifcnt2<2then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=20;
endif;
when20=>q<=10204;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=21;
endif;
when21=>q<=7634;
ifcnt2<7then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=22;
endif;
when22=>q<=4535;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=23;
endif;
when23=>q<=5089;
ifcnt2<3then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=24;
endif;
when24=>q<=6061;
ifcnt2<2then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=25;
endif;
when25=>q<=7634;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=26;
endif;
when26=>q<=6083;
ifcnt2<3then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=27;
endif;
when27=>q<=7634;
n:
=28;
when28=>q<=6803;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=29;
endif;
when29=>q<=4535;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=30;
endif;
when30=>q<=5089;
ifcnt2<3then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=31;
endif;
when31=>q<=6061;
ifcnt2<2then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=32;
endif;
when32=>q<=5089;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=33;
endif;
when33=>q<=4535;
ifcnt2<7then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=34;
endif;
when34=>q<=3089;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=35;
endif;
when35=>q<=5089;
ifcnt2<3then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=36;
endif;
when36=>q<=6061;
ifcnt2<2then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=37;
endif;
when37=>q<=7634;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=38;
endif;
when38=>q<=6803;
ifcnt2<3then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=39;
endif;
when39=>q<=7634;
n:
=40;
when40=>q<=6803;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=41;
endif;
when41=>q<=6061;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=42;
endif;
when42=>q<=7634;
ifcnt2<3then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=43;
endif;
when43=>q<=9050;
ifcnt2<2then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=44;
endif;
when44=>q<=10204;
ifcnt2<1then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=45;
endif;
when45=>q<=7634;
ifcnt2<7then
cnt2:
=cnt2+1;
else
cnt2:
=0;
n:
=0;
endif;
endcase;
endif;
endif;
endprocess;
endpaia_1;
2、FANA模块程序清单:
libraryieee;
useieee.std_logic_1164.all;
entityfanais
port(a:
inintegerrange0to10204;
clk:
instd_logic;
q:
outstd_logic);
endfana;
architecturefana_1offanais
begin
process(clk)
variableb,d:
std_logic;
variablec:
integerrange0to10204;
begin
ifclk'eventandclk='1'then
ifb='0'then
c:
=a;
b:
='1';
else
ifc=0then
b:
='0';
d:
=notd;
else
c:
=C-1;
endif;
endif;
endif;
q<=d;
endprocess;
endfana_1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 课程设计 22
![提示](https://static.bdocx.com/images/bang_tan.gif)