VHDL的基本语法市公开课一等奖省赛课微课金奖课件_第1页
VHDL的基本语法市公开课一等奖省赛课微课金奖课件_第2页
VHDL的基本语法市公开课一等奖省赛课微课金奖课件_第3页
VHDL的基本语法市公开课一等奖省赛课微课金奖课件_第4页
VHDL的基本语法市公开课一等奖省赛课微课金奖课件_第5页
已阅读5页,还剩122页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VHDL培训教程欢迎参加VHDL培训1/127VHDL培训教程第一讲、VHDL介绍及其结构第二讲、VHDL中对象、操作符、数据类型第三讲、VHDL中控制语句及模块第四讲、状态机设计2/127第一讲、VHDL介绍及其结构经过本课学习您能够了解以下几点1、VHDL基本概念2、VHDL基本结构3、VHDL设计初步3/127VHDL-VHSICHardwareDecriptionLanguage

其中VHSIC-VeryHighSpeedIntegratedCircuit电子设计自动化关键技术之一是要求用形式化方法来描述硬件系统。VHDL适应了这种要求。什么是VHDL4/127VHDL和VerilogHDLVerilogHDL:另一个硬件描述语言,由Verilog企业开发,1995年成为IEEE标准。优点:简单、易学易用缺点:功效不如VHDL强大,仿真工具少VHDL:

1987年成为IEEE标准优点:功效强大、通用性强。缺点:难学5/127VHDL发展历史起源于八十年代,由美国国防部开发两个标准:1、1987年IEEE1076(VHDL87)

2、1993年进行了修正(VHDL93)6/127VHDL在电子系统设计中应用电子系统设计模块7/127VHDL在电子系统设计中应用电子系统设计描述等级1、行为级2、RTL级(Registertransferlevel)3、逻辑门级4、版图级用VHDL能够描述以上四个等级8/127VHDL在电子系统设计中应用系统设计描述等级-制版级9/127VHDL在电子系统设计中应用系统设计描述等级-逻辑门级10/127VHDL在电子系统设计中应用系统设计描述等级-RTL级11/127VHDL在电子系统设计中应用系统设计描述等级-行为级12/127怎样使用VHDL描述硬件实体

Entity(实体)Architecture1(结构体)ArchitectureN

process(进程结构)

block(块结构)

subprograms(子程序)

procedure(过程)

function(函数)13/127libraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_unsigned.all;entitycountisport(clock,reset:inSTD_LOGIC;dataout:outSTD_LOGIC_VECTOR(3downto0));endcount;architecturebehaviorlofcountissignaldatabuffer:STD_LOGIC_VECTOR(3downto0);begindataout<=databuffer;

process(clock,reset)

beginif(reset='1')thendatabuffer<="0000";elsif(clock'eventandclock='1')thenifdatabuffer="1000"thendatabuffer<="0000";elsedatabuffer<=databuffer+'1';endif;endif;

endprocess;endbehavioral;14/127VHDL结构关键点1、ENTITY(实体)格式:

Entity实体名IS[类属参数说明][端口说明]EndEntity;其中端口说明格式为:

PORT(端口名1,端口名N:方向:类型)其中方向有:IN,OUT,INOUT,BUFFER,LINKAGE

15/127VHDL结构关键点注意简单地说

In

不能够出现在<=或:=左边

out不能够出现在<=或:=右边

buffer能够出现在<=或:=两边In信号只能被引用,不能被赋值out信号只能被赋值,不能被引用buffer信号能够被引用,也能够被赋值16/127VHDL结构关键点例子(HalfAdd)

其内部结构将由Architecture来描述17/127VHDL结构关键点2、Arcthitecture(结构体)

格式:

Arcthitecture

结构体名of

实体名is

[定义语句]内部信号、常数、元件、数据类型、函数等定义

begin[并行处理语句和block、process、function、procedure]

end结构体名;

18/127VHDL结构关键点例子(HalfAdd)19/127VHDL结构关键点例子(FullAdd)(学习怎样调用现有模块)

20/127VHDL结构关键点实例(FullAdd)-entity

21/127VHDL结构关键点实例(FullAdd)-architecture22/12723/127VHDL中设计单元

除了entity(实体)和architecture(结构体)外还有另外三个能够独立进行编译设计单元Package(包集合)属于库结构一个层次,存放信号定义、常数定义、数据类型、元件语句、函数定义和过程定义。PackageBody含有独立对端口(port)packageconfiguration(配置)描述层与层之间连接关系以及实体与结构体之间关系。24/127VHDL中设计单元VHDL中设计单元(能够独立编译)25/127Library库概念STD库--VHDL标准库IEEE库--VHDL标准库扩展面向ASIC库--不一样工艺不一样企业自定义库普通用户自己库库:数据集合。内含各类包定义、实体、结构体等26/127Library库概念用户自己库当您VHDL文件被编译后,编译结果储存在特定目录下,这个目录逻辑名称即Library,此目录下内容亦即是这个Library内容。27/127Package包概念Package(包)28/127VHDL中结构关系结构关系29/127VHDL介绍及其结构本讲结束下一讲:VHDL中对象、操作符、数据类型30/127第二讲、VHDL对象、操作符、数据类型经过本课学习您能够了解以下几点1、VHDL基本类型2、怎样在VHDL中定义类型3、VHDL信号定义4、怎样在VHDL中对信号赋值5、VHDL中操作符31/127VHDL对象、操作符、数据类型对象object

对客观实体抽象和概括VHDL中对象有:1、Constant(常量)在程序中不能够被赋值

2、Variable(变量)在程序中能够被赋值(用“:=”),赋值后马上改变为新值。3、Signal(信号)在程序中能够被赋值(用“<=”),但不马上更新,当进程挂起后,才开始更新。

32/127VHDL对象、操作符、数据类型VHDL中对象使用:

variable

x,y:integer;--定义了整数型变量对象x,y

constantVcc:real;--定义了实数型常量对象Vcc

signalclk,reset:bit;--定义了位类型信号对象clk,reset33/127VHDL中对象使用注意1、variable只能定义在process和subprogram(包含function和procedure)中,不可定以在其外部。2、signal不能定义在process和subprogram(包含function和procedure)中,只可定以在其外部。34/127VHDL对象、操作符、数据类型对象属性

类似于其它面向对象编程语言如VB、VC、DELPHI

使用方法格式:对象’属性例子:clk’event--表明信号clkevent属性

惯用属性:

Signal对象惯用属性有:

event:返回boolean值,信号发生改变时返回truelast_value:返回信号发生此次改变前值

last_event:返回上一次信号发生改变到现在改变间隔时间35/127VHDL对象、操作符、数据类型Signal对象惯用属性有:接上页delayed[(时延值)]:使信号产生固定时间延时并返回stable[(时延值)]:返回boolean,信号在要求时间内没有改变返回truetransaction:返回bit类型,信号每发生一次改变,返回值翻转一次例子:A<=B’delayed(10ns);--B延时10ns后赋给A;

if(B’Stable(10ns));--判断B在10ns中是否发生改变36/127VHDL对象、操作符、数据类型信号event和last_value属性经惯用来确定信号边缘

属性应用比如:判断clk上升沿if((clk’event)and(clk=‘1’)and(clk’last_value=‘0’))then判断clk下降沿if((clk’event)and(clk=‘0’)and(clk’last_value=‘1’))then37/127VHDL基本类型1、bit(位):

`0`和`1`2、bit-Vector(位矢量):比如:``00110``3、Boolean“ture”和“false”4、time

比如:1us、100ms,3s5、character

比如:‘a’、’n’、’1’、’0’6、string

比如:“sdfsd”、”mydesign”7、integer32位比如:1、234、-21342348、real范围-1.0E38~+1.0E38

比如:1.0、2.834、3.14、0.038/127VHDL基本类型9、natural

自然数和positive

正整数10、senveritylevel(常和assert语句配合使用)包含有:note、warning、error、failure

以上十种类型是VHDL中标准类型,在编程中能够直接使用。使用这十种以外类型,需要自行定义或指明所引用Library(库)和Package(包)集合39/127VHDL基本类型例子一40/127VHDL基本类型和赋值例子二41/127VHDL基本类型和赋值例子三例子中信号Z有两个驱动A和B;Z必须定义为一个新数据类型,不然Z将无法决定取值,语句视为非法。42/127VHDL基本类型和赋值例子四43/127VHDL基本类型和赋值例子五关键点:赋值语句中方向应和申明中方向一样44/127VHDL基本类型和赋值连接操作符---使用&45/127VHDL基本类型和赋值集合操作---使用()46/127VHDL基本类型和赋值集合操作---采取序号47/127VHDL基本类型和赋值集合操作--采取others48/127在VHDL中定义自己类型通用格式

TYPE

类型名IS数据类型定义用户能够定义数据类型枚举类型enumberated、整数型integer、实数型real、数组类型array、纪录类型record、时间类型time、文件类型file、存取类型access49/127在VHDL中定义自己类型枚举类型enumberated格式

type

数据类型名is

(元素,元素…...);例子

typeweekis(sun,mon,tue,thu,fri,sat);typestd_logicis(‘1’,’0’,’x’,’z’);

50/127在VHDL中定义自己类型整数类integer和实数类real格式

type

数据类型名is数据类型定义约束范围;例子

typeweekisintegerrange1to7;typecurrentisrealrange-1E4to1E451/127在VHDL中定义自己类型数组类型array格式

type

数据类型名isarray

范围

of元数据类型名例子

typeweekisarray(1to7)ofinteger;

typedeweekisarray(1to7)ofweek;52/127在VHDL中定义自己类型时间类型time格式

type

数据类型名is

范围

units基本单位;

单位;

endunits53/127在VHDL中定义自己类型时间类型例子

typetimeisrange-1E18to1E18unitsus;ms=1000us;sec=1000ms;min=60sec;endunits注意:引用时间时,有编译器要求量与单位之间应有一个空格如:1ns;不能写为1ns;54/127在VHDL中定义自己类型纪录类型record格式

type

数据类型名is

record

元素名:数据类型名;

元素名:数据类型名;….

endrecord;55/127在VHDL中定义自己类型纪录类型例子typeorderisrecordid:integer;date:string;security:boolean;endrecord;引用:signalflag:boolean;signalorder1:order;order1<=(3423,”1999/07/07”,true);flag<=order1.security;

56/127IEEE1164中定义类型std_ulogic是对位(bit)类型扩展,只允许一个驱动源57/127IEEE1164中定义类型Std_logic同std_ulogic一样有九个状态,允许一个或多个驱动源58/127IEEE1164中定义类型Std_unlogic_vector和std_logic_vector59/127IEEE1164中定义类型Std_unlogic、std_ulogic_vectorstd_logic_vector和std_unlogic_vector类型均定义在package(包)standard_logic_1164中在使用这四种类形时应加以说明,比如:libraryieee;useieee.std_logic_1164.all;注:standard_logic_1164位于IEEE库中60/127类型使用例子例子一(申明使用库和包)61/127类型使用例子例子二std_ulogic和std_logic区分62/127类型使用例子练习一:下面那一个是正确363/127VHDL中操作符分类

1、逻辑操作符

2、关系操作符

3、数学运算符64/127VHDL中操作符1、逻辑操作符有:65/127VHDL中操作符逻辑操作符应用类型66/127VHDL中操作符逻辑操作符应用例子67/127VHDL中操作符2、关系运算符有68/127VHDL中操作符关系运算符应用ARRAY(数组)没有数字概念,数组“111”不等于769/127VHDL中操作符3、数学运算符注意:上述运算符应用于integer,real,time类型,不能用于vector(假如希望用于vector,能够使用库IEEEstd_logic_unsigned包,它对算术运算符进行了扩展)70/127VHDL中操作符VHDL中操作符应用关键点

1、VHDL属于强类型,不一样类型之间不能进行运算和赋值,能够进行数据类型转换

2、vector不表示number3、array不表示number71/127VHDL中操作符本讲结束下一讲:VHDL中控制语句及模块72/127第三讲VHDL中控制语句及模块经过本讲您将会学到1、Block编写2、Process编写3、function和procedure编写4、VHDL中流程控制语句书写73/127VHDL中控制语句及模块回顾第一讲内容

Entity(实体)Architecture1(结构体)ArchitectureN

process(进程结构)

block(块结构)

subprograms(子程序)

procedure(过程)

function(函数)74/127VHDL中控制语句及模块基本概念1、并行处理(concurrent)语句执行与书写次序无关,并行块内语句时同时执行2、次序处理(sequential)语句执行按书写先后次序,从前到后次序执行。这种方式和其它普通编程语言(如c,pascal)是一样。75/127VHDL中控制语句及模块Architecture中语句及子模块之间是并行处理子模块block中语句是并行处理子模块process中语句是次序处理子模块subprogram中function和procedure是次序处理76/127VHDL中architectureArcthitecture(结构体)格式为:(第一讲)

Arcthitecture

结构体名of

实体名is

[定义语句]内部信号、常数、元件、数据类型、函数等定义

begin[并行处理语句和block、process、function、procedure]

end结构体名;

77/127Architecture中BlockBlock格式

块名:

BLOCK[定义语句]

begin[并行处理语句concurrentstatement]

endblock

块名78/127Architecture中Block条件Block格式

块名:

BLOCK

[(布尔表示式)]

[定义语句]

begin[并行处理语句concurrentstatement[信号]<=

guarded[信号,延时];

endblock

块名79/127Architecture中BlockBlock例子

myblock1:

block(clk=‘1’)

signal:qin:bit:=‘0’;

beginqout<=guardedqin;

endblockmyblock1

myblock2:

block

beginqout<=qin;

endblock

myblock280/127Architecture中processProcess格式[进程名:]

process[(触发信号列表)][定义语句;]

begin[串行处理语句sequentialstatement;]

endprocess81/127Architecture中processprocess例子

exp1:

process

(clk,qin)

variable:qin:bit:=‘0’;

beginqout<=qin;

endprocessexp2:

process

begin

waitonclk,qin;

qout<=qin;

endprocess82/127process例子-值更新分析:当A、B、C、D中任一信号发生改变时,进程将开始执行,当执行Z<=AandB后,Z值不会马上改变;同理执行Z<=CandD后Z值也不会马上改变。当执行endprocess后,Z值才开始更新,同时系统挂起开始等候敏感信号。83/127Architecture中processProcess中敏感信号列表普遍标准是:在process中,其值被引用信号应该出现在敏感信号列表中例子;二选一选择器:A、B为输入信号;SEL为选路信号;Z为输出信号;84/127不符和设计要求85/127Architecture中subprogramFunction(函数)格式:

function

函数名(参数1,参数2…...)

[定义语句]

return

数据类型名

is[定义语句]

begin[次序执行语句]

return[返回变量名]

end函数名

86/127Architecture中subprogramFunction例子functionmax(a,b:bit)

returnbooleanisvariable:flag:boolean;beginif(a=b)thenflag<=true;

endifreturnflag;endmaxFunction中参数不用说明方向(因为只有一个方向in)87/127Architecture中subprogramprocedure(过程)格式:

procedure

过程名(参数1,参数2…...)is[定义语句]

begin[次序执行语句]

end

过程名

88/127Architecture中subprogramProcedure例子proceduremax(a,b:inbit;

flag:outboolean)isbeginif(a=b)thenflag<=true;

endifendmax;89/127次序执行语句sequentialstatementWait语句assert语句If语句case语句forloop语句while语句90/127次序执行语句sequentialstatementWait语句书写格式

wait;--无限等候

waiton[信号列表]--等候信号改变

waituntil[条件];--等候条件满足

waitfor[时间值];--等候时间到功效

wait语句使系统暂时挂起(等同于endprocess),此时,信号值开始更新。条件满足后,系统将继续运行。91/127次序执行语句sequentialstatementWait语句例子process(a,b)

beginy<=aandb;endprocessprocessbeginwaitona,b;y<=aandb;endprocess等同于process(a,b)

begin错误假如process中已经有敏感信号

waitona,b;进程中不能使用wait语句

y<=aandb;endprocess92/127次序执行语句sequentialstatementWait语句例子假如process中没有敏感信号列表,其进程中也没有wait语句,则process中程序代码循环执行processbeginclk<=notclkafter50ns;endprocess功效:产生频率为100nsclk信号93/127次序执行语句sequentialstatementAssert语句格式

assert条件[report输出信息][severity]

说明:条件为true时执行下一条语句,为false时输犯错误信息和错误严重级别例子

….assert(sum=100)report“sum/=100”severityerror;

nextstatement…...94/127次序执行语句sequentialstatementIf语句格式

if条件then[次序执行语句][else][次序执行语句]endifif条件then[次序执行语句][elsif][次序执行语句][elsif][次序执行语句]…..[else]endif95/127次序执行语句sequentialstatementIf语句例子96/127次序执行语句sequentialstatementCase语句格式Case表示式iswhen条件表示式=>次序处理语句

when条件表示式=>次序处理语句

…….whenothers=>次序处理语句endcase

标准:1、完全性:表示式全部可能值都必须说明,能够用others2、唯一性:相同表示式值只能说明一次97/127次序执行语句sequentialstatementCase语句例子,条件表示式能够有各种形式98/127次序执行语句sequentialstatementCase语句例子99/127

次序执行语句sequentialstatementForloop语句格式For循环变量in范围loop[次序处理语句]endloop注意:循环变量不需要定义(申明);例子中i不需要定义Forloop语句例子Foriin1to10loopsum=sum+1;endloop100/127次序执行语句sequentialstatement在loop语句中能够用next来跳出此次循环,也能够用exit来结束整个循环状态

next格式:next[标号][when条件];

exit格式:

exit[标号][when条件];Foriin1to10loopsum=sum+1;nextwhensum=100;endloopForiin1to10loopsum=sum+1;exitwhensum=100;endloop101/127次序执行语句sequentialstatementWhile语句格式while条件loop[次序处理语句]endloopWhilei<10loopsum=sum+1;i=i+1;endloopWhile语句例子102/127并行处理语句concurrentstatement1、信号赋值操作2、带条件信号赋值语句3、带选择信号赋值语句103/127并行处理语句concurrentstatement信号赋值操作符号“<=”进行信号赋值操作,它能够用在次序执行语句中,也能够用在并行处理语句中注意

1、用在并行处理语句中时,符号<=右边值是此条语句敏感信号,即符号<=右边值发生改变就会重新激发此条赋值语句,也即符号<=右边值不改变时,此条赋值语句就不会执行。假如符号<=右边是常数则赋值语句一直执行。

2、用在次序执行语句中时,没有以上说法。104/127并行处理语句concurrentstatement赋值语句例子Myblock:Blockbeginclr<=‘1’after10ns; clr<=‘0’after20ns;endblockmyblockprocessbeginclr<=‘1’after10ns;clr<=‘0’after20ns;endblockmyblock程序执行10ns后clr为1,又过10ns后0赋给了clr,此时clr以前值1并没有清掉,clr将出现不稳定状态程序执行10ns后clr为1,又过20ns后clr值变为0,105/127并行处理语句concurrentstatement条件信号带入语句格式

目标信号量<=表示式1when条件1else表示式2when条件2else表示式3when条件3…..

else表示式4注意:最终Else项是必须;满足完全性和唯一性106/127并行处理语句concurrentstatement条件信号带入语句例子Blockbeginsel<=b&a;q<=ainwhensel=“00”elsebinwhensel=“01”elsecinwhensel=“10”elsedinwhensel=‘11”elsexx;endblock107/127并行处理语句concurrentstatement选择信号带入语句格式

with表示式select

目标信号量<=表示式1when条件1,表示式2when条件2,

…..

表示式nwhen条件n;108/127并行处理语句concurrentstatement选择信号带入语句例子Blockbeginwithselselectq<=ainwhensel=“00”,

binwhensel=“01”,

cinwhensel=“10”,

dinwhensel=‘11”xx;whenothers;endblock109/127次序执行语句和并行处理语句次序执行语句和并行处理语句总结1、次序执行语句wait、assert、if-else、case、for-loop、while语句只能用在process、function和procedure中;2、并行处理语句(条件信号带入和选择信号带入)只能用在architecture、block中;110/127其它语句Generic语句enttityand2isgeneric(rise:t

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论