zhao第3章硬件描述语言.ppt

上传人:sh****n 文档编号:6580391 上传时间:2020-02-29 格式:PPT 页数:160 大小:3.17MB
返回 下载 相关 举报
zhao第3章硬件描述语言.ppt_第1页
第1页 / 共160页
zhao第3章硬件描述语言.ppt_第2页
第2页 / 共160页
zhao第3章硬件描述语言.ppt_第3页
第3页 / 共160页
点击查看更多>>
资源描述
2020 2 29 1 第三章 硬件描述语言VHDL基础 2 2020 2 29 章节目录 3 1硬件描述语言概述3 2VHDL语言程序结构3 3VHDL常用语句3 4VHDL语法基础3 5组合电路的VHDL描述3 6时序电路的VHDL描述 调换 3 2020 2 29 3 1硬件描述语言概述 可编程逻辑器件 电子设计自动化 EDA 与硬件描述语言 可编程逻辑器件是一种功能可变的集成器件 可通过编程的方法设计其完成不同的逻辑功能 设计需借助软件工具 即采用电子设计自动化的方式 设计形式有原理图和硬件描述语言两种 硬件描述语言是用来描述数字电路系统的一种语言 4 2020 2 29 3 1硬件描述语言概述 目前常用的硬件描述语言有两种 VHDL VerilogHDL VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage超高速集成电路硬件描述语言 VerilogHardwareDescriptionLanguageVerilog硬件描述语言 VHDL语言发展较早 从使用者数量来看 目前两种语言平分秋色 VHDL语言更严谨 更适合设计大型数字系统 两种语言相似的地方很多 学会一种可自学另一种 5 2020 2 29 3 1硬件描述语言概述 VHDL语言的IEEE标准VHDLIEEE1076 1987VHDLIEEE1076 1993 早在1980年 因为美国军事工业需要描述电子系统的方法 美国国防部开始进行VHDL的开发1987年 由IEEE InstituteofElectricalandElectronicsEngineers 电气和电子工程师协会 将VHDL制定为标准 称为IEEE1076 19871993年制定了第二个IEEE标准版本 称为IEEE1076 1993 增加了一些新的命令和属性 6 2020 2 29 章节目录 3 1硬件描述语言概述3 2VHDL语言程序结构3 4VHDL语法基础3 3VHDL常用语句3 5组合电路的VHDL描述3 6时序电路的VHDL描述 7 2020 2 29 3 2VHDL语言程序结构 五个基本组成部分 库 Library 程序包 Package 实体说明 EntityDeclaration 结构体 Archiecture 配置 Configuration 主要部分 注意 程序扩展名为 vhd 8 2020 2 29 3 2VHDL语言程序结构 例3 1 2选1数据选择器的VHDL语言描述 功能 2选1数据选择器 Sel 0时 f d0 Sel 1时 f d1 9 2020 2 29 2to1muxVHDLLIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYmuxISPORT d0 d1 sel INSTD LOGIC f OUTSTD LOGIC ENDmux 库程序包 实体说明 VHDL语言程序 注释 3 2VHDL语言程序结构 10 2020 2 29 ARCHITECTUREstructureOFmuxISSIGNALtemp STD LOGIC 内部信号BEGINp0 PROCESS d0 d1 sel 进程VARIABLEtemp1 temp2 temp3 STD LOGIC BEGIN 进程内的局部变量temp1 d0AND NOTsel 变量间的逻辑关系temp2 d1ANDsel temp3 temp1ORtemp2 temp temp3 f temp ENDPROCESSp0 进程结束ENDstructure 结构体结束 结构体 3 2VHDL语言程序结构 11 2020 2 29 EDA工具软件QuartusII综合出来的电路 3 2VHDL语言程序结构 12 2020 2 29 3 2VHDL语言程序结构 1行是注释 用 引头2 3行是库说明部分 打开库及库中的程序包4 7行是实体说明部分 描述电路的端口信号8 最后是结构体部分 描述电路的逻辑功能VHDL语言不区分大小写 为阅读方便 关键字用大写 用户自定义部分用小写 说明 13 2020 2 29 三方面内容 3 2 1实体说明3 2 2结构体3 2 3程序包 库及配置 3 2VHDL语言程序结构 14 2020 2 29 3 2 1实体说明 格式 ENTITYIS GENERIC 类属说明 PORT 端口说明 实体语句部分 END ENTITY 主要部分 表示必选项 表示可选项 主要功能 说明电路的名字 输入输出信号 15 2020 2 29 3 2 1实体说明 例 4位纹波加法器的实体说明 ENTITYadder rippleIS GENERIC m TIME 5ns PORT a b INSTD LOGIC VECTOR 3DOWNTO0 q OUTSTD LOGIC VECTOR 3DOWNTO0 cout OUTSTD LOGIC ENDadder ripple 16 2020 2 29 3 2 1实体说明 实体名由用户自定义 必须和主文件名一致必须以ENTITYIS开始 以END结束在端口说明部分说明输入输出信号的情况在类属说明部分说明类属常数的情况 通常电路中的常数可在设计实体的内部进行赋值 且一旦赋值就不能再改变 如果电路中某个常数值需要在实体外部进行修改 则在实体说明部分的类属说明中加以说明 这样的常数可称为类属常数 以与普通常数区别 VHDL语言程序的扩展名是vhd 即 vhd 说明 17 2020 2 29 3 2 1实体说明 1 类属说明语句 GENERIC m TIME 5ns 格式 GENERIC 常数名 数据类型 设定值 常数名 数据类型 设定值 功能 说明类属常数的名字 数据类型 设定值 例 18 2020 2 29 3 2 1实体说明 2 端口说明语句 格式 PORT 端口名 端口名 模式 数据类型 端口名 端口名 模式 数据类型 PORT a b INSTD LOGIC VECTOR 3DOWNTO0 q OUTSTD LOGIC VECTOR 3DOWNTO0 cout OUTSTD LOGIC 功能 说明输入输出信号的名字 输入输出模式 数据类型 例 19 2020 2 29 3 2 1实体说明 端口名是输入输出信号的名字 模式是指输入输出信号的方向 数据类型是指输入输出信号的取值类型 表3 1端口方向说明 BITBIT VECTORSTD LOGICINTEGERBOOLEANSTD LOGIC VECTOR 常用数据类型 数据类型在3 4节详细介绍 说明 20 2020 2 29 3 2 2结构体 格式 ARCHITECTUREOFIS 定义语句 BEGINEND 功能 描述电路的具体结构 功能 主要部分 21 2020 2 29 3 2 2结构体 ARCHITECTURE是关键字 结构体名可随意起 实体名必须和实体说明中的实体名一致 定义语句是指对内部信号 变量等的说明 并行处理语句部分是结构体的主要部分 描述电路的结构 功能等 BEGIN后开始结构和功能的描述 说明 22 2020 2 29 3 2 2结构体 例3 2 一个RS触发器的结构体 数据流描述方式 该电路中并行语句部分使用的是并行信号赋值语句 描述了两个与非门的连接关系 23 2020 2 29 3 2 2结构体 例3 3 一个RS触发器的结构体 结构描述方式 本例是RS触发器的另一种描述方式 并行处理语句采用的是元件例化语句 后面3 3 1介绍 24 2020 2 29 3 2 2结构体 例3 4 一个全加器的VHDL程序 数据流描述方式 本例结构体中的并行处理部分采用的也是并发信号赋值语句 描述了两个异或门和一个与或门 本例中的类属说明语句说明了一个时间常数tpd是5ns 后面的赋值语句使用了该延时参数 25 2020 2 29 3 2 2结构体 3种常用的子结构描述方式 进程语句结构块语句结构子程序语句结构 主要讲解 26 2020 2 29 3 2 2结构体 进程 PROCESS 语句结构 格式 进程标号 PROCESS 敏感信号表 IS 进程语句说明部分 BEGINENDPROCESS 进程标号 27 2020 2 29 3 2 2结构体 例3 7 带敏感信号表的进程语句实例 28 2020 2 29 3 2 3包集合 库及配置 1 包集合 Package 包集合中存放供多个实体公用的数据类型 常量 子程序 包集合又存放在库中 一般情况下 要使用某个包集合中的资源时 必须对该包集合进行使用说明 一般情况下 要使用某个库中的包集合时 也必须对该库进行说明 格式 LIBRARY USE LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL 例 29 2020 2 29 3 2 3包集合 库及配置 VHDL提供的标准包集合 STANDARDSTD LOGIC 1164 STANDARD包中定义了若干数据类型 子类型 函数 该包已预先在STD库中编译好 并且自动与所有模型连接 使用时无须说明 STD LOGIC 1164包中也定义了若干数据类型和函数 该包已预先在IEEE库中编译好 但是在使用时须加以使用说明 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL 在STD库中 在IEEE库中 用时不须说明 用时须说明 30 2020 2 29 3 2 3包集合 库及配置 常用的数据类型 整数 实数 BIT BIT VECTOR 布尔量 字符 字符串 物理型 错误等级 自然数和正整数 均在STANDARD程序包中 常用的数据类型 STD LOGIC STD LOGIC VECTOR 在STD LOGIC 1164程序包中 31 2020 2 29 3 2 3包集合 库及配置 包集合结构格式 PACKAGEIS 说明语句 END 包集合名 PACKAGEBODYIS 说明语句 END 包集合名 包首 包体 用户可自定义包集合 32 2020 2 29 3 2 3包集合 库及配置 例3 10 自定义包集合的例子 包集合说明 包首 PACKAGEexampleISTYPEalu opIS add sub mul div eq gt lt CONSTANTpi REAL 3 1415926 delay1 TIME COMPONENTnand2PORT a b INBIT c OUTBIT ENDCOMPONENT FUNCTIONmean a b c REAL RETURNREAL ENDexample 说明了一个枚举类型的数据alu op 两个常数pi delay1 一个元件nand2 一个函数mean 33 2020 2 29 3 2 3包集合 库及配置 包集合体PACKAGEBODYexampleISCONSTANTdelay1 TIME 15ns FUNCTIONmean a b c REAL RETURNREAL BEGINRETURN a b c 3 0 ENDmean ENDexample 包集合体中具体说明了时间常数delay1的值 函数mean的功能 34 2020 2 29 3 2 3包集合 库及配置 USEWORK example ALL 自定义的包集合存放在WORK库中 自定义的包集合在使用时也必须进行使用说明 例 35 2020 2 29 3 2 3包集合 库及配置 2 库 Library 格式 库中存放已编译过的设计单元 如实体 程序包等 库中内容可以用作其它VHDL描述的资源 使用库时需要说明 LIBRARY 5种库 IEEESTDASICWORK用户定义库 LIBRARYIEEE 例 36 2020 2 29 3 2 3包集合 库及配置 IEEESTD LOGIC 1164NUMERIC BITNUMERIC STDSTD LOGIC ARITHSTD LOGIC SIGNEDSTD LOGIC UNSIGNEDSTDSTANDARDTEXTIOVATIL 面向ASIC的库 VATIL TIMINGVATIL PRIMITIVEWORK 现行工作库 用户定义库 无须说明 不但要说明库 还要说明库中的程序包 例 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL 最常用 例 LIBRARYSTD USESTD STANDARD ALL 37 2020 2 29 3 2 3包集合 库及配置 3 配置语句 Configration 格式 CONFIGURATIONOF实体名IS 说明语句 END 配置名 配置语句描述层与层之间的连接关系 以及实体与结构体之间的连接关系 可利用配置语句来选择不同的结构体 使其与要设计的实体相对应 例 CONFIGURATIONconfrOFrsffISFORrs behav ENDFOR ENDconfr 38 2020 2 29 章节目录 3 1硬件描述语言概述3 2VHDL语言程序结构3 4VHDL语法基础3 3VHDL常用语句3 5组合电路的VHDL描述3 6时序电路的VHDL描述 39 2020 2 29 3 4VHDL语法基础 3 4 1标识符和保留字3 4 2数据对象3 4 3数据类型3 4 4数据类型的转换3 4 5运算操作符 五方面内容 40 2020 2 29 3 4 1标识符和保留字 规则 由字母数字下划线组成必须以英文字母开头最后一个字符不能是下划线不允许出现连续两个下划线保留字不能作一般的标识符不区别大小写 1 标识符 即由用户起的实体名 结构体名 信号名 变量名 41 2020 2 29 3 4 1标识符和保留字 2 保留字 表3 3常用保留字 见P 109 保留字即VHDL语言中已使用的关键字 保留字不能用作标识符 42 2020 2 29 3 4 2数据对象 对象有四种类型 常数信号变量文件 最常用 VHDL 93标准新加的 43 2020 2 29 3 4 2数据对象 1 常数 CONSTANT常数名 数据类型 表达式 常数声明格式 使用前必须声明 CONSTANTtoler DISTANCE 1 5nm CONSTANTpi REAL 3 141592 CONSTANTcycle time TIME 100ns CONSTANTPropagation Delay DELAY LENGTH 例 常数值 44 2020 2 29 3 4 2数据对象 2 变量 VARIABLE变量名 数据类型 约束条件 表达式 变量声明格式 使用前必须声明 例 VARIABLEresult STD LOGIC 0 VARIABLEx y z INTEGER VARIABLEcount INTEGERRANGE0TO255 10 初始值 声明时可带初始值 约束条件 45 2020 2 29 3 4 2数据对象 变量赋值格式 变量名 表达式 例 result 1 x y 3 注意赋值符号 表达式的数据类型和变量的类型必须一致 表达式可以是运算表达式也可以是具体数值 46 2020 2 29 3 4 2数据对象 3 信号 SIGNAL信号名 数据类型 约束条件 表达式 信号声明格式 使用前必须声明 例 SIGNALfirst sig INTEGER SIGNALsys clk BIT 0 SIGNALsecond fig third sig INTEGER 10 SIGNALs INTEGERRANGE0TO20 15 初值 声明时可带初始值 约束条件 47 2020 2 29 3 4 2数据对象 信号赋值格式 信号名 表达式 例 a bAFTER10ns a expression b a expression bAFTER10ns 注意信号说明中的赋初值符号是 而信号赋值语句中的赋值符号为 表达式的数据类型和信号的类型必须一致 表达式可以是运算表达式也可以是具体数值 信号赋值可以添加延时信息 48 2020 2 29 3 4 2数据对象 变量是局部的 信号是全局的 变量只能用在进程内 信号没有此限制 若变量用于进程之外 必须将该变量先赋给一个相同类型的信号 用信号在进程之间传递数据 信号可以延迟 变量不能 变量不能用于硬件连线 常用在高层次建模的计算中 信号可视为实际硬件系统中连线的抽象 进程对信号敏感而对变量不敏感 赋值符号不一样 信号和变量的区别 49 2020 2 29 3 4 3数据类型 Scalartypes标量型Composite复合型Access存取型File文件型Protected保护型 5种类型 每一种中又有若干子类型和具体数据类型 50 2020 2 29 3 4 3数据类型 已经在标准数据包STANDARD和STD LOGIC 1164中定义好的常用的数据类型如下 整数 实数 BIT BIT VECTOR 布尔量 字符 字符串 物理型 错误等级 自然数和正整数 本节介绍以上数据类型的特点 STD LOGIC STD LOGIC VECTOR STANDARD STD LOGIC 1164 51 2020 2 29 3 4 3数据类型 整数 INTEGER 属于 标量型 整数型 在STANDARD程序包中 整数的表示范围为 231 1 231 1 例 VARIABLEa INTEGER 15 SIGNALs INTEGERRANGE0TO20 15 INTEGER型数据值不用引号括起来 52 2020 2 29 3 4 3数据类型 2 实数 REAL 属于 标量型 浮点型 在STANDARD程序包中 实数的表示范围为 1 0E38 1 0E38 实数的书写方式举例 1 0666 66636 5e 4 某些数即可以用整数表示 也可以用实数表示 如1 0是实数 1是整数 两者数值相同但类型不同 REAL型数据值不用引号括起来 53 2020 2 29 3 4 3数据类型 3 BIT 属于 标量型 枚举型 和BIT VECTOR 属于 复合型 数组型 在STANDARD程序包中 BIT又称位型 其值仅有2个 0 和 1 BIT VECTOR又称位矢量 是BIT的数组 例 BIT型数值要用单引号括起来 BIT VECTOR型数值要用双引号括起来 SIGNALa BIT SIGNALLow byte BIT VECTOR 0to7 a 1 Low byte 00000101 54 2020 2 29 3 4 3数据类型 4 布尔型 BOOLEAN 属于 标量型 枚举型 在STANDARD程序包中 BOOLEAN的值仅有2个 TRUE和FALSE 55 2020 2 29 3 4 3数据类型 5 STD LOGIC 和STD LOGIC VECTOR 在STD LOGIC 1164程序包中 STD LOGIC又称标准逻辑变量 其值有9个 U X 0 1 Z W L H 常用的是 0 1 Z STD LOGIC VECTOR称标准逻辑向量 是STD LOGIC的数组 STD LOGIC型数值要用单引号括起来 STD LOGIC VECTOR型数值要用双引号括起来 例 SIGNALa STD LOGIC a 1 56 2020 2 29 3 4 3数据类型 6 字符 CHARACTER 属于 标量型 枚举型 和字符串 STRING 属于 复合型 数组型 在STANDARD程序包中 CHARACTER型数值要用单引号括起来 STRING型数值要用双引号括起来 例 A a 1 2 ABC HELLO 57 2020 2 29 3 4 3数据类型 7 时间型 TIME 属于 标量型 物理型 在STANDARD程序包中 GENERIC m TIME 5ns 例 58 2020 2 29 3 4 3数据类型 8 错误等级 SEVERITY LEVEL 属于 标量型 枚举型 在STANDARD程序包中 SEVERITY LEVEL的值有4个 NOTE WARNING ERROR FAILURE 注意 警告 错误 失败 59 2020 2 29 3 4 3数据类型 9 自然数 NATURAL 标量型 整数型 整数 和正整数 POSITIVE 标量型 整数型 整数 在STANDARD程序包中 NATURAL和POSITIVE是INTEGER的子类型 60 2020 2 29 3 4 3数据类型 以上是已经在标准数据包STANDARD和STD LOGIC 1164中定义好的常用的数据类型 除此之外 还可以由用户自定义数据类型 可以由用户自定义的数据类型 枚举类型整数类型数组类型记录类型存取类型文件类型时间类型实数类型 TYPE数据类型名IS数据类型定义OF基本数据类型 TYPE数据类型名IS数据类型定义 格式 61 2020 2 29 3 4 3数据类型 TYPEalu opIS add sub mul div eq gt lt TYPEBITis 0 1 TYPEBIT VECTORisarray NATURALrange ofBIT SUBTYPEPOSITIVEisINTEGERrange1toINTEGER HIGH 定义一个数据类型alu op 是枚举型 取值为add sub mul div eq gt lt中的一个声明变量a是alu op型的 VARIABLEa alu op 例 下例为标准程序包中的某些数据类型定义 62 2020 2 29 3 4 4数据类型的转换 自学 见P 114 63 2020 2 29 3 4 5运算操作符 5类运算操作符 逻辑运算关系运算算术运算并置运算移位运算 64 2020 2 29 3 4 5运算操作符 可以对BIT BOOLEAN STD LOGIC STD LOGIC VECTOR等类型数据进行逻辑运算 1 逻辑运算符 65 2020 2 29 3 4 5运算操作符 2 算术运算符 66 2020 2 29 3 4 5运算操作符 3 关系运算符 67 2020 2 29 3 4 5运算操作符 4 并置运算符 sel b 例 若b 1 a 0 则sel 10 Y H e l l o Y Hello 若b 1010 a 0011 则sel 10100011 68 2020 2 29 3 4 5运算操作符 5 移位运算符 69 2020 2 29 3 4 5运算操作符 运算符的优先级 见P 115 70 2020 2 29 章节目录 3 1硬件描述语言概述3 2VHDL语言程序结构3 4VHDL语法基础3 3VHDL常用语句3 5组合电路的VHDL描述3 6时序电路的VHDL描述 71 2020 2 29 3 3VHDL常用语句 仿真时 两大类 并行语句 顺序语句 并行语句同时并行执行 顺序语句按先后次序执行 72 2020 2 29 3 3 1并行语句 ARCHITECTUREOFIS 定义语句 BEGINEND 并行语句用在结构体的并行处理语句部分 73 2020 2 29 3 3 1并行语句 进程语句并行信号赋值语句元件例化语句块语句过程调用语句参数传递语句生成语句并行断言语句 74 2020 2 29 3 3 1并行语句 1 进程语句 格式 进程标号 PROCESS 敏感信号表 IS 进程语句说明部分 BEGINENDPROCESS 进程标号 进程语句是最主要的并行语句 它在VDHL程序设计中使用频率最高 也是最能体现硬件描述语言的一条语句 75 2020 2 29 3 3 1并行语句 例3 7 带异步复位功能的D触发器的VHDL描述 76 2020 2 29 3 3 1并行语句 当敏感信号发生变化时 执行进程 当执行完最后一个语句时 回到第一个语句 等待下一次敏感信号变化 一个结构体中可以有多个进程 进程之间是并行的 进程内部各条语句是顺序执行的 进程语句说明部分可以说明需要的局部变量 说明 77 2020 2 29 3 3 1并行语句 2 并行信号赋值语句 并发信号赋值语句 例 q1 a b q2 a b 当a或b有变化时 两条语句同时执行 模拟了两个加法器和乘法器电路 注意前提是信号赋值语句放在进程外 若放在进程中 则变成了顺序执行的语句 当信号赋值语句放在进程外时 就是并发信号赋值语句 78 2020 2 29 3 3 1并行语句 条件信号赋值语句 格式 目标信号 表达式1WHEN条件1ELSE表达式2WHEN条件2ELSE表达式3WHEN条件3ELSE 表达式n 1WHEN条件n 1ELSE表达式n 当条件1满足时 目标信号 表达式1当条件2满足时 目标信号 表达式2 功能 条件判断是并行的 不是先判断条件1满足否 再判断条件2满足否 而是同时判断 79 2020 2 29 3 3 1并行语句 例3 11 用条件信号赋值语句设计4选1数据选择器 80 2020 2 29 3 3 1并行语句 选择信号赋值语句 格式 WITH选择条件表达式SELECT目标信号 表达式1WHEN选择条件1表达式2WHEN选择条件2表达式3WHEN选择条件3 表达式nWHEN选择条件n 当选择条件符合条件1时 目标信号 表达式1当选择条件符合条件2时 目标信号 表达式2 功能 81 2020 2 29 3 3 1并行语句 例3 12 用选择信号赋值语句设计4选1数据选择器 语句之间是并行的 该例既使用了条件信号赋值语句也使用了选择信号赋值语句 82 2020 2 29 3 3 1并行语句 3 元件例化语句 元件例化语句是最能体现层次化设计思想的语句 例如设计由D触发器构成的移位寄存器 可以将设计分成2层 底层描述D触发器 顶层调用底层描述的D触发器 在顶层中调用底层设计时 就要用到元件例化语句 层次化设计简单说即将整个系统分成不同的层次 顶层设计可以调用底层设计 83 2020 2 29 3 3 1并行语句 格式 COMPONENT GENERIC类属说明 PORT ENDCOMPONENT GENERICMAP 参数映射 PORTMAP 端口映射 定义元件 底层设计定义成一个元件 元件例化 调用定义好的元件 并说明该元件与其他信号的连接关系 84 2020 2 29 3 3 1并行语句 例3 14 用元件例化语句描述由D触发器构成的移位寄存器 dff是另一个程序对应的电路 这里将其定义成一个元件 并用其构成一个移位寄存器 语句之间是并行的 85 2020 2 29 3 3 1并行语句 s0 s4 86 2020 2 29 3 3 1并行语句 元件名必须与底层文件的实体名一致 端口映射部分要指明元件内部信号与外部信号的连接关系 其顺序必须与端口说明部分的顺序一致 一个元件定义部分可以对应多个元件例化部分 相当于调用了多个元件而已 元件标号名可以帮助标识不同的元件 说明 87 2020 2 29 3 3 1并行语句 4 生成语句 非重点不讲 88 2020 2 29 3 3 1并行语句 ARCHITECTURECOMPONENTENDCOMPONENT BEGINPROCESSENDPROCESSdff1 dffPORTMAP S 0 clk S 1 q1 各部分之间是并行的 89 2020 2 29 3 3 2顺序语句 顺序语句是相对于并行语句而言的 顺序语句的特点是 每一条顺序语句的执行顺序是与它们的书写顺序相一致的 顺序语句只能出现在进程和子程序中 进程标号 PROCESS 敏感信号表 IS 进程语句说明部分 BEGINENDPROCESS 进程标号 90 2020 2 29 3 3 2顺序语句 顺序赋值语句WAIT语句IF语句CASE语句LOOP语句EXIT语句RETURN语句NULL语句REPORT语句断言语句 常用 91 2020 2 29 3 3 2顺序语句 1 顺序赋值语句 92 2020 2 29 3 3 2顺序语句 信号赋值语句 格式 目标信号 表达式 信号赋值语句中的赋值符号为 表达式的数据类型和信号的类型必须一致 表达式可以是运算表达式也可以是具体数值 信号赋值可以添加延时信息 用在进程中才是顺序语句 s aXORbXORc 例 当信号赋值语句放在进程内时 就是顺序语句 放在进程外时就是并行语句 93 2020 2 29 3 3 2顺序语句 2 WAIT语句 格式 WAIT 无限等待WAITON 敏感信号变化WAITUNTIL 条件满足WAITFOR 时间到 进程在仿真运行时总是处于两种状态之一 执行或挂起 进程状态的变化可受WAIT语句控制 94 2020 2 29 3 3 2顺序语句 3 IF语句 IF语句是一种条件控制语句 是常用语句之一 IF语句只能用在进程中 网上有一句话 IF CASE打天下 95 2020 2 29 3 3 2顺序语句 格式 IFTHEN ENDIF IF THEN语句 当条件满足时 执行THEN后的语句 否则 不执行 功能 96 2020 2 29 3 3 2顺序语句 顺序处理语句 当条件满足时 d的值赋给q 否则 q值不变 例3 17 用IF THEN语句描述D触发器功能 97 2020 2 29 3 3 2顺序语句 格式 IFTHEN ELSE ENDIF 两分支 IF THEN ELSE语句 当条件满足时 执行THEN后的语句 否则 执行ELSE后的语句 功能 98 2020 2 29 3 3 2顺序语句 例 用IF THEN ELSE语句描述二选一数据选择器 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYmuxISPORT d0 d1 sel INSTD LOGIC f OUTSTD LOGIC ENDmux 99 2020 2 29 3 3 2顺序语句 ARCHITECTUREbehaOFmuxISBEGINPROCESS d0 d1 sel BEGINIF sel 0 THENf d0 ELSEf d1 ENDIF ENDPROCESS ENDbeha sel 0时 f d0 sel 1时 f d1 100 2020 2 29 3 3 2顺序语句 格式 IFTHEN ELSIFTHEN ELSE ENDIF 多分支 IF THEN ELSIF ELSE语句 当条件1满足时 执行THEN后的顺序语句1 否则 当条件2满足时 执行THEN后的顺序语句2 否则执行ELSE后的顺序语句3 功能 101 2020 2 29 3 3 2顺序语句 条件1优先级高条件2优先级低 还可以再分支 102 2020 2 29 3 3 2顺序语句 例 4选1数据选择器的VHDL程序 P137 注意 条件要完整 最后必须加ELSEf 0 否则会综合出寄存器 103 2020 2 29 3 4 2顺序语句 条件不完整的综合结果 有寄存器 104 2020 2 29 3 3 2顺序语句 4 CASE语句 格式 CASE表达式ISWHEN表达式的取值1 顺序处理语句1 WHEN表达式的取值2 顺序处理语句2 WHENOTHERS 顺序处理语句n ENDCASE CASE语句也是常用语句之一 具有条件控制功能 也只能用在进程中 105 2020 2 29 3 3 2顺序语句 几个条件是同等级的 106 2020 2 29 3 3 2顺序语句 例3 19 用CASE语句实现3 8线译码器 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYdecoder 3to8ISPORT a b c g1 g2 g3 INSTD LOGIC y OUTSTD LOGIC VECTOR 7DOWNTO0 ENDdecoder 3to8 ARCHITECTUREbehaOFdecoder 3to8ISSIGNALindata STD LOGIC VECTOR 2DOWNTO0 BEGINindata c 107 2020 2 29 PROCESS indata g1 g2 g3 BEGINIF g1 1 ANDg2 0 ANDg3 0 THENCASEindataISWHEN 000 yyyyyyyyy XXXXXXXX ENDCASE ELSEy 11111111 ENDIF ENDPROCESS ENDbeha 108 2020 2 29 3 3 2顺序语句 CASE语句的各条件表达式是同时执行的 条件表达式的所有情况都要列举到 可用WHENOTHERS描述 说明 109 2020 2 29 3 3 2顺序语句 5 LOOP语句 格式 LOOP标号 FOR循环变量IN取值范围LOOP ENDLOOP LOOP标号 LOOP是循环语句 有两种 FOR LOOP WHILE LOOP FOR LOOP 若循环变量在取值范围内则执行循环 否则结束循环 功能 110 2020 2 29 3 3 2顺序语句 例3 20 用FOR LOOP语句描述的偶校验发生器 设a 11001110 则tmp 1 奇数个1 设a 11001100 则tmp 0 偶数个1 111 2020 2 29 3 3 2顺序语句 格式 LOOP标号 WHILE条件LOOP ENDLOOP LOOP标号 若条件为真则执行循环 若为假则结束循环 WHILE LOOP 功能 112 2020 2 29 3 3 2顺序语句 例3 21 用WHILE LOOP语句描述的偶校验发生器 功能和例3 20相同 113 2020 2 29 3 3 2顺序语句 归纳一下 前面介绍的IF语句 CASE语句 LOOP语句 有一个共同的特点 即不是对电路的具体结构进行描述 而是对电路的功能和行为进行了描述 采用的是类似C语言的高级描述语言 我们把这种描述方式称为行为描述方式 后面介绍 114 2020 2 29 3 3 2顺序语句 6 EXIT语句 格式 EXIT LOOP标号 EXIT LOOP标号 WHEN条件 程序执行到该语句处 无条件跳出 程序执行到LOOP标号处 无条件跳出 条件满足时 执行到该语句处跳出 条件满足时 执行到LOOP标号处跳出 除正常结束循环外 还可利用EXIT语句退出 115 2020 2 29 3 3 2顺序语句 7 断言语句 ASSERT 格式 ASSERTREPORTSEVERITY 断言语句主要用于程序仿真 调试中的人机会话 它可以给出一个文字串作为警告和错误的信息 功能 如果断言条件为假 则顺序执行REPORT语句 输出用双引号括起来的以文字串表示的错误信息 同时还要报告错误信息的严重级别 116 2020 2 29 3 3 2顺序语句 例3 22 使用ASSERT语句的RS触发器的VHDL程序 注意在RS触发器中 不允许两个输入都为1 该程序使用断言语句 一旦出现两个输入r s都为1的情况 则发出错误提示 117 2020 2 29 3 3 2顺序语句 VHDL语言的三种描述方式 数据流描述方式 RTL级描述方式 结构描述方式 行为描述方式 主要采用逻辑关系式的描述方式 说明了数据的流向 主要采用元件例化语句 说明元件之间的连接关系 主要采用IF CASE WAIT LOOP等高级语言 说明电路的功能和行为 118 2020 2 29 3 3 2顺序语句 数据流描述方式的2选1数据选择器 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYmuxISPORT d0 d1 sel INSTD LOGIC f OUTSTD LOGIC ENDmux ARCHITECTUREmux 1OFmuxISBEGINp0 PROCESS d0 d1 sel VARIABLEtemp1 temp2 STD LOGIC BEGINtemp1 d0AND NOTsel temp2 d1ANDsel f temp1ORtemp2 ENDPROCESSp0 ENDmux 1 主要采用逻辑关系式的描述方式 说明了数据的流向 119 2020 2 29 3 3 2顺序语句 结构描述方式的2选1数据选择器 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYmuxISPORT d0 d1 sel INSTD LOGIC f OUTSTD LOGIC ENDmux ARCHITECTUREmux 2OFmuxISSIGNALy1 y2 y3 STD LOGICCOMPONENTNOT1PORT a INSTD LOGIC y OUTSTD LOGIC ENDCOMPONENT 120 2020 2 29 3 3 2顺序语句 主要采用元件例化语句 说明元件之间的连接关系 COMPONENTAND2PORT a b INSTD LOGIC y OUTSTD LOGIC ENDCOMPONENT COMPONENTOR2PORT a b INSTD LOGIC y OUTSTD LOGIC ENDCOMPONENT BEGINu1 NOT1PORTMAP sel y1 u2 AND2PORTMAP d0 y1 y2 u3 AND2PORTMAP d1 sel y3 u4 OR2PORTMAP y2 y3 y ENDmux 2 121 2020 2 29 3 3 2顺序语句 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYmuxISPORT d0 d1 sel INSTD LOGIC f OUTSTD LOGIC ENDmux ARCHITECTUREbehaOFmuxISBEGINPROCESS d0 d1 sel BEGINIF sel 0 THENf d0 ELSEf d1 ENDIF ENDPROCESS ENDbeha 行为描述方式的2选1数据选择器 主要采用IF CASE WAIT LOOP等高级语言 说明电路的功能和行为 122 2020 2 29 3 3 2顺序语句 实际程序中往往几种描述方式混合使用 初学阶段不必过于在意所采用的描述方式 知道有这种说法即可 123 2020 2 29 章节目录 3 1硬件描述语言概述3 2VHDL语言程序结构3 4VHDL语法基础3 3VHDL常用语句3 5组合电路的VHDL描述3 6时序电路的VHDL描述 124 2020 2 29 3 5组合电路的VHDL描述 1 例4 3 判定电路的VHDL程序 P123 本例使用了条件赋值语句 同学们可以尝试用CASE语句实现 125 2020 2 29 3 5组合电路的VHDL描述 综合结果 126 2020 2 29 3 5组合电路的VHDL描述 2 例 4 2线优先编码器的VHDL程序 P126 本例使用了IF THEN ELSIF THEN语句 利用IF条件的优先级很方便地实现了优先编码的功能 如果用CASE语句则只能实现普通编码器的功能 THEN后面的顺序语句用分号隔开 127 2020 2 29 3 5组合电路的VHDL描述 3 例 74138的VHDL程序 P130 使用IF THEN ELSE CASE语句 128 2020 2 29 3 5组合电路的VHDL描述 4 例 7448的VHDL程序 P135 ifthenelsifthenelse语句 129 2020 2 29 条件不完整 缺少最后一条ELSE 综合时会综合出寄存器 RTL图说明了这一点 程序存在的问题 130 2020 2 29 综合电路局部 寄存器 修改 在ENDIF前加一句 ELSEsegout 0000000 rbo 1 就不会产生寄存器 131 2020 2 29 3 5组合电路的VHDL描述 5 例 1 4数据分配器的VHDL程序 P136 ifthenelsifthenelse语句 该程序仍然出现条件不完整的情况 结果会综合出寄存器 修改程序 在ENDIF前加ELSEw 0 0 w 1 0 w 2 0 w 3 0 则寄存器消失 132 2020 2 29 3 5组合电路的VHDL描述 6 例 4选1数据选择器的VHDL程序 P137 ifthenelsifthenelse语句 和上例同样的问题 综合出了寄存器 加ELSEf 0 语句修改 133 2020 2 29 3 5组合电路的VHDL描述 7 例 全加器的VHDL程序 P143 并行赋值语句 该程序没有使用进程 134 2020 2 29 3 5组合电路的VHDL描述 8 例4 10 ALU的VHDL程序 ifthenelsifthenelse case语句 该程序用到了IEEE库中的STD LOGIC ARITH和STD LOGIC UNSIGNED程序包 实际上可以不用 135 2020 2 29 3 5组合电路的VHDL描述 9 例 偶发生器的VHDL程序 P151 进程 并行赋值语句 此程序可以把进程去掉 136 2020 2 29 3 5组合电路的VHDL描述 10 例 偶校验器的VHDL程序 P152 并行赋值语句 137 2020 2 29 3 5组合电路的VHDL描述 VHDL语言的可综合性 一部分语句可综合出电路另一部分语句不能综合出电路 例如延时语句 对文件的操作语句 断言语句 测试程序等都不能综合出电路 通俗地讲综合即将VHDL语言程序转换成电路 由EDA软件完成 138 2020 2 29 章节目录 3 1硬件描述语言概述3 2VHDL语言程序结构3 3VHDL语法基础3 4VHDL常用语句3 5组合电路的VHDL描述3 6时序电路的VHDL描述 139 2020 2 29 复习VHDL语言程序结构 五个基本组成部分 库 Library 程序包 Package 实体说明 EntityDeclaration 结构体 Archiecture 配置 Configuration 主要部分 140 2020 2 29 3 2VHDL语言程序结构 例3 1 2选1数据选择器的VHDL语言描述 功能 2选1数据选择器 Sel 0时 f d0 Sel 1时 f d1 141 2020 2 29 2to1muxVHDLLIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYmuxISPORT d0 d1 sel INSTD LOGIC f OUTSTD LOGIC ENDmux 库程序包 实体说明 VHDL语言程序 注释 3 2VHDL语言程序结构 142 2020 2 29 ARCHITECTUREstructureOFmuxISSIGNALtemp STD LOGIC 内部信号BEGINp0 PROCESS d0 d1 sel 进程VARIABLEtemp1 temp2 temp3 STD LOGIC BEGIN 进程内的局部变量temp1 d0AND NOTsel 变量间的逻辑关系temp2 d1ANDsel temp3 temp1ORtemp2 temp temp3 f temp ENDPROCESSp0 进程结束ENDstructure 结构体结束 结构体 3 2VHDL语言程序结构 143 2020 2 29 3 3 2顺序语句 VHDL语言的三种描述方式 数据流描述方式 RTL级描述方式 结构描述方式 行为描述方式 主要采用逻辑关系式的描述方式 说明了数据的流向 主要采用元件例化语句 说明元件之间的连接关系 主要采用IF CASE WAIT LOOP等高级语言 说明电路的功能和行为 144 2020 2 29 3 6时序电路的VHDL描述 时序电路的VHDL程序大都采用行为描述方式 而不采用数据流描述方式 例1 JK触发器的VHDL程序 P 184 设计上升沿触发的边沿JK触发器 具有低电平有效的异步置位 置零功能 145 2020 2 29 3 6时序电路的VHDL描述 源程序 利用IFTHENELSIFTHEN语句 q qb设置成BUFFER类型 是因为有反馈 书中程序有错误 146 2020 2 29 QuartusII软件下的仿真波形 147 2020 2 29 3 6时序电路的VHDL描述 例2 步进电机控制器的VHDL程序 P 210 148 2020 2 29 3 6时序电路的VHDL描述 源程序 利用IFTHENELSIFTHEN语句 书中程序有错 不能有两个时钟 149 2020 2 29 QuartusII软件下的仿真波形 150 2020 2 29 3 6时序电路的VHDL描述 例3 移位寄存器的VHDL程序 P 218 功能 4位并行输入 串行输出移位寄存器 具有同步置数功能 有置数 移位控制端 高电平有效 移位时 移入数据为0 151 2020 2 29 3 6时序电路的VHDL描述 源程序 利用IFTHENELSIFTHEN语句 注意移位语句 q 0 即 q 0q3q2q1 配合 serial out q 0 152 2020 2 29 QuartusII软件下的仿真波形 153 2020 2 29 3 6时序电路的VHDL描述 例4 移位寄存器74194的VHDL程序 P 220 功能表 无清零功能 154 2020 2 29 3 6时序电路的VHDL描述 源程序 采用ifthenelsifthen case语句 该程序将194的清零功能取消了 请同学们自己加上 155 2020 2 29 3 6时序电路的VHDL描述 例5 计数器74161的VHDL程序 P 225 有进位输出rco 156 2020 2 29 3 6时序电路的VHDL描述 源程序 利用ifthenelsifthen语句 注意异步清零和同步置数的实现原理注意计数容量16的实现原理 157 2020 2 29 3 6时序电路的VHDL描述 例6 74160级联构成100进制计数器的VHDL程序 P 227 功能 采用并行进位法级联没有置数功能 158 2020 2 29 复习元件例化语句 格式 COMPONENT GENERIC类属说明 PORT ENDCOMPONENT GENERICMAP 参数映射 PORTMAP 端口映射 定义元件 底层设计定义成一个元件 元件例化 调用定义好的元件 并说明该元件与其他信号的连接关系 159 2020 2 29 源程序 采用结构描述方式 注意该程序中有两个实体 160 2020 2 29 作业 3 13 23 53 3
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!