温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
VHDL
课件
QQ:330495908 群:329988721VHDL VHDL VHDL AND ITSAND ITSAND ITSA A APPLICATIONSPPLICATIONSPPLICATIONS缪善林QQ:330495908群:32998872哈尔滨工程大学信息与通信工程学院VHDL语言及其应用语言及其应用QQ:330495908 群:329988722第一部分第一部分 VHDL综述综述(1)什么是什么是VHDL语言?语言?HDL语言是一种支持用形式化方法来描语言是一种支持用形式化方法来描述数字逻辑电路和系统的语言述数字逻辑电路和系统的语言 VHDL语言源于美国国防部发起的语言源于美国国防部发起的VHSIC(Very High Speed Integrated Circuits)计划计划 1987年年12月月IEEE批准批准VHDL为标准为标准HDL语言语言(IEEE-1076),称为称为VHDL87 1993年修订为年修订为VHDL93,2001年修订为年修订为VHDL 2001 IEEE-1076.1 VHDL-AMS,IEEE-1076.2 Mathematical Packages,IEEE-1076.3 Synthesis Packages,IEEE-1076.4 VITAL,IEEE Standard 1164 Multi-value Logic System VHDL语言的优点?语言的优点?人机可读性好人机可读性好比图形和布尔方程更简洁比图形和布尔方程更简洁方便设计重用方便设计重用容易实现设计仿真与验证容易实现设计仿真与验证便于映射为便于映射为IC芯片的制造工艺芯片的制造工艺QQ:330495908 群:329988723第一部分第一部分 VHDL综述综述(2)自顶向下设计自顶向下设计VHDL语言支持自顶向下的系统划分,直语言支持自顶向下的系统划分,直至划分后的最底层单元能用图元至划分后的最底层单元能用图元(primitive element)来实现为止来实现为止图元就是基本逻辑单元、宏模型或图元就是基本逻辑单元、宏模型或IP_core VHDL的基本模型的基本模型行为模型:用于描述数字器件或系统的行为模型:用于描述数字器件或系统的功能,统指数学方程表示的模型功能,统指数学方程表示的模型时序模型:用于描述数字器件或系统的激励与时序模型:用于描述数字器件或系统的激励与响应间的关系,统指布尔方程响应间的关系,统指布尔方程表示的模型表示的模型结构模型:用于描述自顶向下划分系统形成的结构模型:用于描述自顶向下划分系统形成的各个基本单元间的互连关系,各个基本单元间的互连关系,统指用元件互连生成的电路模型统指用元件互连生成的电路模型QQ:330495908 群:329988724第一部分第一部分 VHDL综述综述(3)VHDL的基本设计流程的基本设计流程QQ:330495908 群:329988725第一部分第一部分 VHDL综述综述(4)VHDL的主要应用领域的主要应用领域智能模块智能模块(IP)的研发的研发IP:用用VHDL语言编写,经逻辑优化和功能验证的可生成语言编写,经逻辑优化和功能验证的可生成VLSI中各种中各种功能单元的软件群,例如,无线功能单元的软件群,例如,无线通信产品、网上设备、中央处理通信产品、网上设备、中央处理器器(通用通用CPU)、DSP、PCI、USB、嵌入式、嵌入式CPU单芯片全功能集成系统设计:单芯片全功能集成系统设计:SoPC系统、嵌入式计算、系统、嵌入式计算、ASIC验证验证功能可重置系统的设计:远程系统升级、可重配置设计功能可重置系统的设计:远程系统升级、可重配置设计 FPGA的发展方向的发展方向多用途:多用途:CAM,RAM、PLL高密度、低功耗、低成本:高密度、低功耗、低成本:MAX II系列、系列、Cyclone II系列系列嵌入硬核、超高速:嵌入硬核、超高速:Stratix系列、系列、Stratix II系列、系列、Stratix GX系列系列超低成本:结构化的超低成本:结构化的ASICs,例如,例如,HardCopy系列系列嵌入嵌入CPU软核:软核:Nios、Nios IIQQ:330495908 群:329988726第一部分第一部分 VHDL综述综述(5)Altera公司的最新公司的最新FPGA芯片芯片QQ:330495908 群:329988727第二部分第二部分 VHDL语言的学习基础语言的学习基础(1)书写规定与基本句法单元书写规定与基本句法单元书写规定书写规定保留字保留字用黑体小写字母表示用黑体小写字母表示类型字类型字用小写字母表示用小写字母表示库库用大写字母表示用大写字母表示标识符标识符用小写字母表示用小写字母表示简化书写简化书写用用 表示表示任选项任选项用用 表示表示重复项重复项用用 表示,有时也用之界定一段语句表示,有时也用之界定一段语句二选一二选一用用 表示表示定义为定义为用用:=:=表示表示语句分隔语句分隔用分号用分号“;”表示表示特殊要强调的内容特殊要强调的内容用黑体表示用黑体表示注释注释用用“-”前缀前缀QQ:330495908 群:329988728第二部分第二部分 VHDL语言的学习基础语言的学习基础(2)书写规定与基本句法单元书写规定与基本句法单元标识符标识符基本标识符基本标识符 由VHDL由VHDL87支持,长度不能超过387支持,长度不能超过32 个有效字符序列,2 个有效字符序列,字符集:0字符集:09,az,AZ和下划线和下划线“_”扩展标识符扩展标识符 由VHDL由VHDL93,VHDL2001支持,首尾用反斜杠93,VHDL2001支持,首尾用反斜杠“”定界,定界,区分大小写,总与基本标识符不同,字符集:ASCII码,区分大小写,总与基本标识符不同,字符集:ASCII码,反斜杠字符要双写,允许任意字符,包括保留字、类型字反斜杠字符要双写,允许任意字符,包括保留字、类型字保留字保留字 类型字类型字 专用字专用字保留字保留字预留用于专门用途的标识符,VHDL预留用于专门用途的标识符,VHDL87,VHDL87,VHDL93和VHDL2001有差别93和VHDL2001有差别类型字类型字用于表示数据类型的标识符用于表示数据类型的标识符专用字专用字用于表示特别信息和常量的标识符用于表示特别信息和常量的标识符QQ:330495908 群:329988729第二部分第二部分 VHDL语言的学习基础语言的学习基础(3)书写规定与基本句法单元书写规定与基本句法单元数及表示法数及表示法数制:数制:二进制、十进制、十六进制二进制、十进制、十六进制书写格式:书写格式:被表示的数被表示的数:=#为为216之间的十进制正整数之间的十进制正整数,#号为定界符,号为定界符,为为10时可省略时可省略定界符和基。定界符和基。:=E+|E ;:=下划线下划线;:=|用字符用字符AF表示表示1015的数字,不分大小写。的数字,不分大小写。举例举例:2#0001_0111_0010#8#562#16#172#370 3.7E+2 -整数整数370的表示的表示2#0.100#8#0.4#16#0.8#-实数实数0.5的表示的表示注意:在相邻数字之间插入下划线注意:在相邻数字之间插入下划线只为增加可读性,对数值无影响。只为增加可读性,对数值无影响。QQ:330495908 群:3299887210第二部分第二部分 VHDL语言的学习基础语言的学习基础(4)书写规定与基本句法单元书写规定与基本句法单元字符、串、位串字符、串、位串字符:字符:用单引号括起来,例如,用单引号括起来,例如,A、a、%串:串:用双引号括起来用双引号括起来。串内包含双引号字符时,用双写双引号来表示。串长串内包含双引号字符时,用双写双引号来表示。串长度超过一行度超过一行,用运算符用运算符“&”把两个子串连接起来把两个子串连接起来,例如,例如,“A string”“This string contains anembedded stringin it”“00001111zzzz”“”位串:位串:仅由仅由0和和1字符组成的串字符组成的串,用双引号括起来,前缀符号用双引号括起来,前缀符号 B 代表二进制代表二进制 O 代表八进制代表八进制 X 代表十六进制代表十六进制例如例如,B“10”B“1111_0010_0001”-二进制位串-二进制位串O“072072”O“1313”o“372372”-八进制位串八进制位串X“FA”X“0d”x“FFE0”-十六进制位串-十六进制位串QQ:330495908 群:3299887211第二部分第二部分 VHDL语言的学习基础语言的学习基础(5)目标与分类目标与分类信号、变量、常量和文件信号、变量、常量和文件从从硬硬件件的的角角度度看看,信信号号代代表表着着实实际际电电路路中中的的某某一连接线,而常量一连接线,而常量代代表表着着实实际际电电路路中中的的电源或地。变量和文件没有与硬件直接的对应关电源或地。变量和文件没有与硬件直接的对应关系,通常它们只作为暂存和交换信息的载体使用系,通常它们只作为暂存和交换信息的载体使用 信号信号抽抽象象描描述述电路的导线,起保持改变的数值和连接子元件的作用。电路的导线,起保持改变的数值和连接子元件的作用。信号总是在元件的端口连接元件,元件间交换的信息仅通过信号传送信号总是在元件的端口连接元件,元件间交换的信息仅通过信号传送信信号号赋赋值值不意味着立即更新其保持的原有内容,因为任何对信号不意味着立即更新其保持的原有内容,因为任何对信号的的赋赋值值操操作作只只能能作作为为预定数值存储在信号的驱动器中,仅当模拟时间预定数值存储在信号的驱动器中,仅当模拟时间经过起同步作用的语句或再一次启动了进程时才会发生更新动作。经过起同步作用的语句或再一次启动了进程时才会发生更新动作。允许利用属性存取过去和当前的数值,可以接受来自变量的赋值允许利用属性存取过去和当前的数值,可以接受来自变量的赋值QQ:330495908 群:3299887212第二部分第二部分 VHDL语言的学习基础语言的学习基础(6)目标与分类目标与分类信号、变量、常量和文件信号、变量、常量和文件 信号信号信号说明语句的书写格式为:信号说明语句的书写格式为:signal ,:约束范围约束范围:=;例如:例如:signal temp_sum:std_logic_vector(3 downto 0):=“0011”;signal a,b:std_logic;信号信号a和和b取系统默认值,即:该类型的最左值或最小值取系统默认值,即:该类型的最左值或最小值 0。信号代入符为信号代入符为“=”,例如:例如:output=a xor b after 3 ns;QQ:330495908 群:3299887213第二部分第二部分 VHDL语言的学习基础语言的学习基础(7)目标与分类目标与分类信号、变量、常量和文件信号、变量、常量和文件 变量变量用用于描述硬件的高层次特性,在综于描述硬件的高层次特性,在综合过程中可能推断为存储器件。合过程中可能推断为存储器件。存在两种变量:规则变量和共享变量。存在两种变量:规则变量和共享变量。规规则变量只能在子程序和进程语句则变量只能在子程序和进程语句中被说明和使用,是一个局部量。中被说明和使用,是一个局部量。共享变量的作用范围是全局的,即:跨越共享变量的作用范围是全局的,即:跨越同级和向下的设计层次可见。同级和向下的设计层次可见。VHDL87标准只支持规则变量,标准只支持规则变量,VHDL93和和VHDL2001标准既支持规则标准既支持规则变量也支持共享变量。变量也支持共享变量。不不允许在进程和子程序中说明共享变量。允许在进程和子程序中说明共享变量。变变量说明语句的书写格式如下:量说明语句的书写格式如下:variable,:约束范围约束范围:=;全全局变量说明需加入保留字局变量说明需加入保留字sharedQQ:330495908 群:3299887214第二部分第二部分 VHDL语言的学习基础语言的学习基础(8)目标与分类目标与分类信号、变量、常量和文件信号、变量、常量和文件 变量变量变量只在进程首次执行时初始化,并在进变量只在进程首次执行时初始化,并在进程被挂起和重新激活时保程被挂起和重新激活时保持持原原有数有数值不变。共享变量除赋值机制与信值不变。共享变量除赋值机制与信号不同外,其他类同于信号。号不同外,其他类同于信号。变量赋值语句的书写格式为:变量赋值语句的书写格式为:语句标号:语句标号:=;:=;例子:例子:m:=1;counter:=counter+1;VHDL中对变量赋值是立即生效的。变量在赋值时不能用VHDL中对变量赋值是立即生效的。变量在赋值时不能用after引入附加延时引入附加延时例如,下列赋值语句是错误的。例如,下列赋值语句是错误的。op1:counter:=counter+1 after 2 ns;VHDLVHDL87标准不支持语句标号的使用87标准不支持语句标号的使用QQ:330495908 群:3299887215第二部分第二部分 VHDL语言的学习基础语言的学习基础(9)目标与分类目标与分类信号、变量、常量和文件信号、变量、常量和文件 常量常量代表具有语义的常数值。说代表具有语义的常数值。说明时赋值,一旦被赋值,就在整个程序执行中明时赋值,一旦被赋值,就在整个程序执行中保保持不变。持不变。书写格式:书写格式:constant ,constant ,::=;::=;例子:例子:constant number_of_bytes:integer:=8;constant number_of_bits:integer:=8*number_of_bytes;constant m:integer:=user_function(a,b);-user_function为函数为函数constant n:integer:=a+b;子程序中说明的常量,仅在子程序中说明的常量,仅在子程序子程序调用时调用时有效,有效,调用结调用结束后它束后它的值将的值将被释放,被释放,常量说明语句中缺少赋值时称之为缓定常量。常量说明语句中缺少赋值时称之为缓定常量。QQ:330495908 群:3299887216第二部分第二部分 VHDL语言的学习基础语言的学习基础(10)目标与分类目标与分类信号、变量、常量和文件信号、变量、常量和文件 文件文件仅支持读写操作,不支持综合。不可以通过赋值来更新内容,只仅支持读写操作,不支持综合。不可以通过赋值来更新内容,只能通过子程能通过子程序对文件进行读写操作。序对文件进行读写操作。STD库库textio包提供对文件的全部支持内容。包提供对文件的全部支持内容。特殊目标特殊目标端口、类属端口、类属(generic)、参量、参量(parameter)及循环语句和生成语句的标号等。及循环语句和生成语句的标号等。端口所包含的目标为信号,作用是为实体端口所包含的目标为信号,作用是为实体内部数据与外部数据交换创建通道内部数据与外部数据交换创建通道类属的作用是为外部信息送入实体内部提供通道类属的作用是为外部信息送入实体内部提供通道,类属传送的信息,类属传送的信息均均为为静静态态信信息,即:常量。息,即:常量。参量的作用类似于参量的作用类似于C语言中的形式参数,参量在子程序中可以被说明为信语言中的形式参数,参量在子程序中可以被说明为信号号、变量或常量,而在函数中只能被说明为常量。变量或常量,而在函数中只能被说明为常量。QQ:330495908 群:3299887217第二部分第二部分 VHDL语言的学习基础语言的学习基础(11)数据类型数据类型标量类型、复合类型、寻址类型、文件类型标量类型、复合类型、寻址类型、文件类型 标量类型标量类型目标的数据值由单个元素构成目标的数据值由单个元素构成 复合类型复合类型目标的数据值由多个元素结组构成目标的数据值由多个元素结组构成 寻址类型寻址类型指针类型,值指向存储空间,用于建指针类型,值指向存储空间,用于建立目标间的联系或控制存储空间立目标间的联系或控制存储空间 文件类型文件类型外部文件存放的数据值序列的镜像,用于数据读入和写出外部文件存放的数据值序列的镜像,用于数据读入和写出预定义类型、用户自定义类型预定义类型、用户自定义类型QQ:330495908 群:3299887218第二部分第二部分 VHDL语言的学习基础语言的学习基础(12)数据类型数据类型 整数类型整数类型(integer)位宽位宽32位:值范围位:值范围-231+1231-1,有符号数、无符号数、不能按,有符号数、无符号数、不能按bit操作操作子类型:自然数子类型:自然数natural,正整数正整数positive 浮点类型浮点类型(real):值范围值范围1.0e+38、用于行为仿真、用于行为仿真 布尔类型布尔类型(boolean):值范围值范围true、false 字符类型字符类型(character)ASCII码码:0、1、A、字符串类型字符串类型(string):“0101”、“ABCDabcd”位值类型位值类型bit类型:类型:1、0std_logic类型类型:U、X、0、1、Z、W、L、H、-位组类型位组类型bit_vector类型:类型:“1000_1010”/std_logic_vector类型:类型:“zzzz_1001”预定义类型预定义类型:STD库提供、可直接引用QQ:330495908 群:3299887219第二部分第二部分 VHDL语言的学习基础语言的学习基础(13)数据类型数据类型预定义类型预定义类型 时间类型时间类型(time)单位:单位:fs、ps、ns、s、ms、sec、min、hr 错误等级类型错误等级类型(severity)值状态:值状态:note(注意注意)、warning(警告警告)、error(出错出错)、failure(失败失败)寻址类型寻址类型(line):指针类型,值指向存储空间指针类型,值指向存储空间 文件类型文件类型(text):用于定义代表外部文件的目标用于定义代表外部文件的目标用户自定义类型:非隐含定义用户自定义类型:非隐含定义,需要需要type语句语句 整数类型整数类型(integer)、实数类型、实数类型(real)、物理类型、物理类型 枚举类型枚举类型(enumerated):离散值由左至右分配数值离散值由左至右分配数值 组类型组类型(array):限定性组、非限定性组限定性组、非限定性组(元素规模暂不定元素规模暂不定)记录类型记录类型(record):不同类型数据集合,不能直接产生硬件对应不同类型数据集合,不能直接产生硬件对应 寻址类型寻址类型(access)和文件类型和文件类型(file)QQ:330495908 群:3299887220第二部分第二部分 VHDL语言的学习基础语言的学习基础(14)数据类型数据类型自定义语句格式自定义语句格式 标量类型定义标量类型定义type ,is 约束范围约束范围;枚举类型定义枚举类型定义type ,is(,);限定性限定性组类型定义组类型定义type ,is array(,)of;:=todownto或者或者 range todownto 非限定性组类型定义非限定性组类型定义type ,is array(range,)of;QQ:330495908 群:3299887221第二部分第二部分 VHDL语言的学习基础语言的学习基础(15)数据类型数据类型自定义语句格式自定义语句格式 物理类型定义物理类型定义type ,is units;=;end units;记录类型定义记录类型定义type ,is record,:;end record;子子类型定义类型定义subtype ,is 约束范围约束范围;组集合体组集合体(=,)命名结合、位置结合命名结合、位置结合QQ:330495908 群:3299887222第二部分第二部分 VHDL语言的学习基础语言的学习基础(16)数据类型数据类型VHDL数据类型汇总VHDL数据类型汇总QQ:330495908 群:3299887223第二部分第二部分 VHDL语言的学习基础语言的学习基础(17)数据类型数据类型标量类型属性标量类型属性数值类、函数类、信号类、数据类型类、数据范围类,用于简化数值类、函数类、信号类、数据类型类、数据范围类,用于简化书写和获取标量类型的信息书写和获取标量类型的信息 数值类属性数值类属性Tleft-能给出能给出T的取值范围的左端值;的取值范围的左端值;Tright-能给出能给出T的取值范围的右端值;的取值范围的右端值;Tlow-能给出能给出T的取值范围的低端值;的取值范围的低端值;Thigh-能给出能给出T的取值范围的高端值;的取值范围的高端值;Tascending-如果如果T的取值范围按升序排列则为真,否则为假;的取值范围按升序排列则为真,否则为假;Timage(x)-能给出一个表达能给出一个表达x的值的串;的值的串;Tvalue(s)-能给出由串能给出由串s表达的表达的T的值。的值。QQ:330495908 群:3299887224第二部分第二部分 VHDL语言的学习基础语言的学习基础(18)数据类型数据类型标量类型属性标量类型属性 函数类属性函数类属性Tpos(x)-能给出能给出x在在T中的位置号;中的位置号;Tval(n)-能给出在位置能给出在位置n处处T的取值;的取值;Tsucc(x)-能给出能给出x值所在位置的下一个位置处的值;值所在位置的下一个位置处的值;Tpred(x)-能给出能给出x值所在位置的前一个位置处的值;值所在位置的前一个位置处的值;Tleftof(x)-能给出能给出x值所在位置的左边位置处的值;值所在位置的左边位置处的值;Trightof(x)-能给出能给出x值所在位置的右边位置处的值;值所在位置的右边位置处的值;例如,例如,type day is (sun,mon,tue,wed,thu,fri,sat);Daypos(sun)=0 Dayval(3)=wedDaysucc(thu)=friDaypred(thu)=wedDayleftof(mon)=sun Dayright(mon)=tueQQ:330495908 群:3299887225第二部分第二部分 VHDL语言的学习基础语言的学习基础(19)数据类型数据类型组类型属性组类型属性A Aleft(N)left(N)能给出A的第N维下标界的左边界值;能给出A的第N维下标界的左边界值;A Aright(N)right(N)能给出A的第N维下标界的右边界值;能给出A的第N维下标界的右边界值;A Alow(N)low(N)能给出A的第N维下标界的下边界值;能给出A的第N维下标界的下边界值;A Ahigh(N)high(N)能给出A的第N维下标界的上边界值;能给出A的第N维下标界的上边界值;A Arange(N)range(N)能给出A的第N维下标的取值范围;能给出A的第N维下标的取值范围;A Areverse_range(N)reverse_range(N)能给出A的第N维下标取值范围的相反值;能给出A的第N维下标取值范围的相反值;A Alength(N)length(N)能给出A的第N维下标界的长度;能给出A的第N维下标界的长度;A Aascending(N)ascending(N)如果A的第N维下标取值按升序排列则为真,如果A的第N维下标取值按升序排列则为真,否则为假;否则为假;QQ:330495908 群:3299887226第二部分第二部分 VHDL语言的学习基础语言的学习基础(20)表达式与运算符表达式与运算符表达式表达式由运算符和操作数组成由运算符和操作数组成运算符运算符 特殊运算符特殊运算符:*、abs、not 乘法运算符乘法运算符:*、/、mod、rem 正、负运算符正、负运算符:、加减运算符加减运算符:、&移位移位运算符运算符:sll、srl、sla、sra、rol、ror 关系运算符关系运算符:=、/=、=逻辑运算符逻辑运算符:and、or、nand、nor、xor、xnor类型限定与类型转换类型限定与类型转换 类型限定:显性表示数据的类型类型限定:显性表示数据的类型语句格式:语句格式:(数据数据)QQ:330495908 群:3299887227第二部分第二部分 VHDL语言的学习基础语言的学习基础(21)表达式与运算符表达式与运算符类型转换类型转换QQ:330495908 群:3299887228第三部分第三部分 VHDL顺序语句顺序语句(1)顺序语句顺序语句建模进程、过程和函数功能的基本语句单元,仅用于进程、过程和函数中建模进程、过程和函数功能的基本语句单元,仅用于进程、过程和函数中变量赋值语句变量赋值语句:=;注:注:可以包含信号、变量和常量可以包含信号、变量和常量赋值即刻生效赋值即刻生效例:例:signal sig:std_logic;-进程外部的信号s进程外部的信号sigig event_on_sig:process is variable flag:boolean:=false;-说明变量flag并赋初值说明变量flag并赋初值beginflag:=not flag;-变量赋值语句变量赋值语句wait on sig;end process event_on_sig;QQ:330495908 群:3299887229第三部分第三部分 VHDL顺序语句顺序语句(2)顺序语句顺序语句简单信号赋值语句简单信号赋值语句:=transportinertial;注:注::=after,在并行语句区只为信号和常量,在顺序语句区也可为变量在并行语句区只为信号和常量,在顺序语句区也可为变量transport表示传输延时,起平移信号波形的作用,表示传输延时,起平移信号波形的作用,inertial表示惯性延时,延表示惯性延时,延时由第一个时由第一个after后的参数值决定后的参数值决定赋值不能立刻生效,暂存在信号驱动器赋值不能立刻生效,暂存在信号驱动器中,待同步事件发生时赋值到信号中,待同步事件发生时赋值到信号例:例:mux:process(a,b,sel)is -a、b和和sel为敏感信号为敏感信号begincase sel iswhen 0=y y null;end case;end process mux;QQ:330495908 群:3299887230第三部分第三部分 VHDL顺序语句顺序语句(3)顺序语句顺序语句等待语句等待语句用于取代进程语句的敏感信号列表为进程提供同步,有四种形式:用于取代进程语句的敏感信号列表为进程提供同步,有四种形式::wait -无限等待无限等待:wait on,;-直到信号活动或变化时结束等待直到信号活动或变化时结束等待:wait until;-直到条件为真时结束等待直到条件为真时结束等待:wait for;-直到延时时间到时结束等待直到延时时间到时结束等待注:注:至少要含有一个信号量,因进程一旦至少要含有一个信号量,因进程一旦挂起,变量将不再改变,挂起,变量将不再改变,若要退出等待状态,只能靠信号的活动或若要退出等待状态,只能靠信号的活动或变化引起布尔表达式的值为真变化引起布尔表达式的值为真允许混合使用允许混合使用例:例::wait on ,until for;等待语句与敏感信号列表不能同时使用等待语句与敏感信号列表不能同时使用QQ:330495908 群:3299887231第三部分第三部分 VHDL顺序语句顺序语句(4)顺序语句顺序语句if 语句:语句:按条件执行操作,用于表示按条件执行操作,用于表示VHDL模型的行为模型的行为:if then;elsif then;else;end if;注:注:只能由关系运算符或逻辑运算符组成,给出布尔量只能由关系运算符或逻辑运算符组成,给出布尔量if语句不允许对信号边沿做二选一语句不允许对信号边沿做二选一 处理处理举例说明举例说明例例3-2中支持负整数运算的语句:中支持负整数运算的语句:use IEEE.std_logic_signed.all;use IEEE.std_logic_arith.all;例例3-3中中clkevent 用于返回信号事件属性用于返回信号事件属性if clr=1 then q=0;elsif clkevent and clk=1 then q=d;end if;QQ:330495908 群:3299887232第三部分第三部分 VHDL顺序语句顺序语句(5)顺序语句顺序语句case语句:语句:执行多选一操作,用于表示执行多选一操作,用于表示VHDL模型的行为模型的行为:case is when =;end case ;注:注:=|others:=downto|to 要覆盖所有可能的取值,不允许重复使用它们要覆盖所有可能的取值,不允许重复使用它们每次只执行一个分枝,每次只执行一个分枝,when 子句的位置不影响执行结果子句的位置不影响执行结果QQ:330495908 群:3299887233第三部分第三部分 VHDL顺序语句顺序语句(6)顺序语句顺序语句循环语句:循环语句:用于描述具有重复结构或迭代运算的部分用于描述具有重复结构或迭代运算的部分以简化程序代码,有三种形式:以简化程序代码,有三种形式:loop语句语句:loop;end loop ;for loop语句语句:for in loop;end loop ;注:注:=to|downto 为隐含定义、是整数、不允许修改为隐含定义、是整数、不允许修改QQ:330495908 群:3299887234第三部分第三部分 VHDL顺序语句顺序语句(7)顺序语句顺序语句循环语句:循环语句:用于描述具有重复结构或迭代运算的部分用于描述具有重复结构或迭代运算的部分以简化程序代码,有三种形式:以简化程序代码,有三种形式:while loop语句语句:while loop;end loop ;注:注:为真执行,否则结束为真执行,否则结束循环变量非隐含定义循环变量非隐含定义QQ:330495908 群:3299887235第三部分第三部分 VHDL顺序语句顺序语句(8)顺序语句顺序语句exit语句:语句:循环控制语句,可强迫循环从正常执行中循环控制语句,可强迫循环从正常执行中跳到由语句标号所指定的新位置跳到由语句标号所指定的新位置exitwhen;注:缺省注:缺省或或when子句则子句则跳到循环语句跳到循环语句end loop后面执行后面执行next语句:语句:循环控制语句,可结束循环控制语句,可结束next语句后面的操作跳到由语句标号指定的环内语句后面的操作跳到由语句标号指定的环内新位置,只能实现内部循环控制新位置,只能实现内部循环控制nextwhen;例:例:process(x,y)isvariable eqi:std_ulogic;begineqi:=1;for i in xrange loopnext when eqi=0;eqi:=eqi and(x(i)xnor y(i)end loop;eq=eqi;end process;QQ:330495908 群:3299887236第三部分第三部分 VHDL顺序语句顺序语句(9)顺序语句顺序语句return语句:语句:起结束当前最内层过程体或函数起结束当前最内层过程体或函数体执行的作用,有两种形式:体执行的作用,有两种形式:当用于过程时,当用于过程时,:return;当用于函数时,当用于函数时,:return;注:保证函数体不执行到结尾的注:保证函数体不执行到结尾的end并带回函数的返回值,返回值数据类型必须满足要求并带回函数的返回值,返回值数据类型必须满足要求null语句:语句:空操作,执行该语句无任何动作,空操作,执行该语句无任何动作,只是把运行操作指向下一条语句。只是把运行操作指向下一条语句。:null;assert语句:语句:断言语句来产生警告信息断言语句来产生警告信息assert report severity;注:注:为真,执行下一条语句;否则输出为真,执行下一条语句;否则输出和报告和报告为文本说明信息。缺省为文本说明信息。缺省report子句,默认消息为子句,默认消息为“assertion violation”为为failure、error、warning和和note。缺省。缺省severity子句默认为子句默认为errorQQ:330495908 群:3299887237第三部分第三部分 VHDL顺序语句顺序语句(10)顺序语句顺序语句report语句:语句:类似于断言语句的功能,用于给出信息报告类似于断言语句的功能,用于给出信息报告:report severity;注:仅有VHDL注:仅有VHDL93标准和VHDL93标准和VHDL2001标准支持report语句。2001标准支持report语句。缺省缺省severity子句时,子句时,report语句相当于语句相当于VHDL87标准中的一个条件为标准中的一个条件为false、错误级别为错误级别为note的的assert语句语句过程调用语句:过程调用语句:相当于一条顺序语句或并行语句,相当于一条顺序语句或并行语句,在进程中使用为顺序语句。在进程中使用为顺序语句。过程调用将启动对应过程体(子过程或函数)的执行过程调用将启动对应过程体(子过程或函数)的执行:(实参数列表实参数列表);注:注:(实参数列表实参数列表)是向过程体内部传递信息的接口。实是向过程体内部传递信息的接口。实参数可为信号、变量或常量参数可为信号、变量或常量例:例:proc_miltiplier(a,b,y);-调用计算调用计算y=a*b的过程的过程QQ:330495908 群:3299887238第四部分第四部分 VHDL的模型结构的模型结构(1)设计实体:设计实体:VHDL的基本设计单元,由实体说明和构造体两部分组成的基本设计单元,由实体说明和构造体两部分组成实体说明:实体说明:用于描述一个设计的外部视图用于描述一个设计的外部视图,即即:定义实体名、界面接口、引入外部参数定义实体名、界面接口、引入外部参数entity isgeneric();port();end entity;注注:类属子句:提供用于规定端口大类属子句:提供用于规定端口大小、元件数目、定时的参数小、元件数目、定时的参数constant,:in:=;端口子句:用于定义端口引脚名、数据流向、数据类型端口子句:用于定义端口引脚名、数据流向、数据类型signal,:bus:=;?bus 用于表示具有三态特性的端口用于表示具有三态特性的端口?用于表示端口信号的输入用于表示端口信号的输入/输出方向:输出方向:in、out、inout、buffer、linkage?用于规定端口信号的缺省值,即:在用于规定端口信号的缺省值,即:在非使用状态时为端口信号提供上非使用状态时为端口信号提供上拉电平。一旦端口信号被使用,则缺省值便自动被忽略拉电平。一旦端口信号被使用,则缺省值便自动被忽略QQ:330495908 群:3299887239第四部分第四部分 VHDL的模型结构的模型结构(2)设计实体:设计实体:VHDL的基本设计单元,由实体说明和构造体两部分组成的基本设计单元,由实体说明和构造体两部分组成实体说明:实体说明:?允许使用子程序和体、类型和子类型允许使用子程序和体、类型和子类型、常量或信号说明语句的区域、常量或信号说明语句的区域例:例:library IEEE;use IEEE.std_logic_1164.all;entity ram isport(addr:in std_logic_vector(15 downto 0);data:out std_logic_vector(31 downto 0);enable:in std_logic);-类型说明和过程说明部分类型说明和过程说明部分type instruction is array(1 to 8)of natural;type program is array(n