VHDL快速入门ppt课件.ppt_第1页
VHDL快速入门ppt课件.ppt_第2页
VHDL快速入门ppt课件.ppt_第3页
VHDL快速入门ppt课件.ppt_第4页
VHDL快速入门ppt课件.ppt_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

盛建伦jlsheng 1 习题参考答案 1 14 1 2 3 4 5 6 盛建伦jlsheng 2 习题参考答案 1 16 1 盛建伦jlsheng 3 习题参考答案 1 16 2 盛建伦jlsheng 4 习题参考答案 1 16 3 盛建伦jlsheng 5 习题参考答案 1 16 4 1 19输入A B C D是一个十进制数X的8421BCD码 当X为奇数时 输出Y为1 否则Y为0 习题参考答案 真值表 如果不利用约束项化简 6 1 19输入A B C D是一个十进制数X的8421BCD码 当X为奇数时 输出Y为1 否则Y为0 习题参考答案 真值表 如果利用约束项化简 7 盛建伦jlsheng 8 数字逻辑 DigitalLogic 青岛理工大学 广义双语教学课程 211 64 192 58 盛建伦jlsheng 9 硬件描述语言VHDL基础 VHDL 非常高速集成电路硬件描述语言 是由美国国防部支持的一项研究计划 于1983年创建 目的是以文字化方法描述电子电路与系统 1987年 VHDL成为IEEE标准 即IEEE1076标准 1993年修改为IEEE1164标准 1996年 IEEE又将电路合成的标准程序与规格加入到VHDL语言中 称为1076 3标准 之后 又有1076 4标准和1076 6标准 VeryHighspeedIntegratedCircuitHardwareDescriptionLanguage VHDL用语言的方式而非图形等方式描述硬件电路 容易修改 容易保存 特别适合于设计组合逻辑电路和状态机 译码器 编码器 加法器 多路选择器 地址译码器 计数器 附录A 盛建伦jlsheng 10 VHDL程序基本结构 VHDL语言通常包含实体 Entity 结构体 Architecture 配置 Configuration 包集合 Package 和库 Library 五部分 库是专门存放预编译程序包的地方 其中实体用于描述所设计的系统的外部接口信号 配置语句安装具体元件到实体 结构体对 可以被看作是设计的零件清单 结构体用于描述系统内部的结构和行为 建立输入和输出之间的关系 包集合存放各个设计模块共享的数据类型 常数和子程序等 盛建伦jlsheng 11 VHDL程序设计基本结构 盛建伦jlsheng 12 VHDL主要用于描述设计系统的结构 行为 功能和接口 器件或子系统ARCHITECTUREProcessProcessSequentialProcessCombinationalProcesscomponentPorts 它将一个设计 元件 电路 系统 分为 外部 可视部分 端口 内部 不可视部分 内部功能 算法 VeryHighspeedIntegratedCircuitHardwareDescriptionLanguage 盛建伦jlsheng 13 一 信号 signal 的含义和信号的两种最常用类型 std logic和std logic vector VHDL入门需掌握的基本知识 二 四种常用语句的基本用法赋值语句 if语句 case语句和process语句 三 实体 entity 结构体 architecture 以及一个实体和一个结构体组成的设计实体 四 层次结构的设计掌握元件 component 语句和端口映射 portmap 语句 五 库 library 和程序包 package 的基本使用 有了以上入门知识 就能够做一般的设计了 盛建伦jlsheng 14 库 library 和程序包 package 库 Library 用于存放预先编译好的程序包 Package 作用 程序包中定义了数据集合体 逻辑操作和元件等 主要是声明在设计或实体中将用到的常数 数据类型 元件及子程序等 任何一种设计都要充分利用前人已有的成果 公用的资源要尽可能使用 自己已经设计好的资源也要尽量利用起来 程序包 package 和库 library 就是一些可以公用的资源 是设计实体的一个重要组成部分 盛建伦jlsheng 15 库 library 设计库对当前设计是可见的 默认的 无需用library子句和use子句说明的库 VHDL的库分为两种 一种是设计库 一种是资源库 库是用来放置可编译的设计单元的地方 VHDL中的常用库有 STD库 WORK库 IEEE库和用户定义库 Std和work这两个库是设计库 盛建伦jlsheng 16 VHDL的标准库 库中存放有称为 standard 的标准包集合 其中定义了多种常用的数据类型 均不加说明可直接引用 库 library STD库 常用的资源库 IEEE库包含经过IEEE正式认可的STD LOGIC 1164包集合和某些公司提供的一些包集合 如STD LOGIC ARITH 算术运算库 STD LOGIC UNSIGNED等 WORK库是现行作业库 设计者所描述的VHDL语句不需要任何说明 将都存放在WORK库中 WORK库对所有设计都是隐含的 因此在使用该库时无需进行任何说明 IEEE库 WORK库 盛建伦jlsheng 17 库 library 用户定义库 用户定义库简称用户库 是由用户自己创建并定义的库 除了IEEE标准资源库外 各可编程器件厂家的EDA软件提供自己独特的资源程序包 由于这些程序包是为它们制造的器件服务的 往往更有针对性 Qartus 中提供了一个LPM库 库中有许多称之为MegaFunctions的功能强大的函数 设计者可以把自己经常使用的非标准 一般是自己开发的 包集合和实体等汇集在一起定义成一个库 作为对VHDL标准库的补充 用户定义库在使用时同样要首先进行说明 盛建伦jlsheng 18 库 library 除了STD库和WORK库之外的其它库均为资源库 使用资源库中的元件和函数之前 需要使用library子句和use子句予以说明 没有说明的库中的元件不能使用 library子句和use子句总是放在设计实体的最前面 可以放在注释之后 如果一个设计实体中使用了某个库中的元件和函数 就要使用相应的library子句和use子句 library子句的作用是使该库在当前文件中 可见 盛建伦jlsheng 19 library子句说明使用哪个库 它的格式是library库名1 库名2 库名n 库 library std库和work库是设计库 在任何设计文件中隐含都是 不可见 的 不需要特别说明 也就是说 每一个设计文件中总是隐含下列不可见的行 librarystd work usestd standard all use子句说明使用哪个库中的哪个程序包中的元件或者函数 它的格式是 use库名 程序包名 all 这些是不用在程序里写的 盛建伦jlsheng 20 程序包 package 程序包是一种使包体中的类型 常量 元件和函数对其他模块 文件 是可见 可以调用的设计单元 程序包是公用的存储区 在程序包内说明的数据 可以被其它设计实体使用 程序包由包头和包体两部分组成 盛建伦jlsheng 21 VHDL语言要素 盛建伦jlsheng 22 VHDL数据对象 数据对象 DataObjects 凡是可以被赋予一个值的对象称为数据对象 数据对象用于传递信号 例 数据对象值的类型 数据对象类型 数据对象名 盛建伦jlsheng 23 信号和变量 信号 signal 变量 variable 是硬件中物理连线的抽象描述 信号在元件的端口连接元件以及在元件内部各部分之间的连接 在硬件中没有类似的对应关系 它们主要用于保存中间结果 例如作为数组的下标 常量代表数字电路中的电源 地 恒定逻辑值等常数 常量 Constant 盛建伦jlsheng 24 信号在逻辑电路设计中最常用的数据类型 在VHDL中有10种数据类型 但是在逻辑电路设计中最常用的是std logic和std logic vector提供的数据类型 std logic类型分为布尔 boolean 型 位 bit 型 位矢量 bit vector 型 std logic有9种状态 常用的是三种状态 1 高电平 0 低电平 z 高阻 高阻状态是为了总线的描述 盛建伦jlsheng 25 信号说明 一个信号只有经过说明后才能使用 用VHDL进行设计就是写一系列语句 信号说明形式如下 一个语句用分号结束 Signalclock T1 T2 std logic Signal信号名 数据类型 设定值 SignalA Std logic vector 3Downto0 0000 例如 Signalr0 r1 r2 r3 std logic vector 15downto0 Signalr0 r1 r2 r3 std logic vector 0upto15 设定值 可选项 盛建伦jlsheng 26 1 说明位置不同 信号通常在实体 结构体和程序包中说明 变量一般在进程 过程和函数语句中说明 信号与变量的区别 2 赋值运算符不同 信号用 符号进行赋值 变量用 符号赋值 3 延迟不同 信号的赋值存在延迟 变量的赋值是直接的 没有任何延迟时间 从信号说明看不出一个信号是组合逻辑还是时序逻辑 例如寄存器 这与ABEL语言是不同的 盛建伦jlsheng 27 VHDL操作符 VHDL操作符 逻辑操作符 算术操作符 符号操作符 关系操作符 盛建伦jlsheng 28 逻辑运算符 signala b std logic signalc d std logic vector 7downto0 有7种逻辑运算符 NOT OR AND NAND NOR XOR XNOR 说明 是注释开始的标志 这些signal语句的存在只是为了说明这些信号的类型 供阅读方便使用 两个进行逻辑运算的信号 类型必须相同 例如 aandbaorbnota 正确 canddcxordnotc 正确 aandc 错误 常用的为前三种 盛建伦jlsheng 29 不等于 aandb or candd 逻辑运算符 例如 aandborcandd 等于 aandb orc andd 这些逻辑运算符 not优先级最高 其他的优先级相同 因此运算时按由左到右的顺序展开 运算时要注意加括号 NOT OR AND NAND NOR XOR XNOR 能进行逻辑运算的数据类型 bit bit vector boolean std logic std logic vector 盛建伦jlsheng 30 Signala b c d std logic vector 3downto0 Signale f g h std logic vector 1downto0 d aandbandc d aorborc d axnorbxnorc h enorfnorg h enorf norg d enorf norg 例 盛建伦jlsheng 31 算术运算符 a ba 1 常用的算术运算符有 USEieee Std logic arith ALL signala b std logic vector 15downto0 字符串必须用双引号括起来 字符类型通常用单引号引起来 字符类型区分大小写 a 01 求和运算符 求积运算符 符号运算符 混合运算符 移位运算符 VHDL中的求和运算符包括加减运算和并置运算 操作数的数据类型为整型 例 VHDL语句不区分大小写 盛建伦jlsheng 32 并置运算符 signala b std logic vector 3downto0 signalc d std logic vector 2downto0 aand 1 c c a 并置运算符用于位的连接 形成矢量 也可连接矢量形成更大的矢量 例如 盛建伦jlsheng 33 Signala std logic vector 4downto0 Signalb std logic vector 2downto0 Signalc std logic vector 1downto0 b c a b c 例 并置运算符 并置运算符用于位的连接 形成矢量 也可连接矢量形成更大的矢量 盛建伦jlsheng 34 关系运算符 等于 不等于大于 大于等于 关系运算符有下列几种 关系运算的结果为 真 true 或者 假 false 在实现硬件电路时比其它的关系运算符对芯片的利用率要高 等于 不等于运算符适用于所有的数据类型 其他的运算符适用于整数 位及矢量等 在进行关系运算时 两边的数据类型必须相同 但位长度可以不同 盛建伦jlsheng 35 VHDL顺序语句 顺序语句的特点是 每一条顺序语句的执行顺序是与它们的书写顺序基本一致的 顺序语句只能出现在进程 Process 和子程序中 子程序包括函数 Function 和过程 Procedure 顺序语句的种类 进程语句赋值语句流程控制语句等待语句 子程序调用语句返回语句空操作语句 盛建伦jlsheng 36 常用的4种语句 VHDL有许多类型的语句 入门只需掌握4种语句 赋值语句 if语句 case语句和process语句 盛建伦jlsheng 37 赋值语句 signala b c std logic signald e q std logic vector 3downto0 是信号赋值符 左右两边数据类型必须相同 数据长度必须相同 1 信号赋值语句 由于信号是物理量 因此赋值有延迟时间 如第二个语句就是一个或门 因此 信号d 或 q后到e有延迟时间 信号赋值语句的语法格式为 目标信号名 表达式 设定值 c not aandb e dorq 盛建伦jlsheng 38 variablex y z integerrange0to255 x 0 y 132 z x 赋值语句 2 变量赋值语句 是变量赋值符 左右两边的数据类型必须相同 由于变量没有相对应的明确的物理量 因此变量赋值没有时间延迟 盛建伦jlsheng 39 3 并行赋值语句 1 条件赋值语句 格式 目标信号 表达式1WHEN条件1ELSE 表达式2WHEN条件2ELSE 表达式N 1WHEN条件N 1ELSE 表达式N 盛建伦jlsheng 40 3 并行赋值语句 y0 1 whena0 0 anda1 0 else 0 1 条件赋值语句 例 用条件赋值语句描述2 4译码器的功能 signala0 a1 std logic 输入signaly0 y1 y2 y3 std logic 输出 y1 1 whena0 1 anda1 0 else 0 y2 1 whena0 0 anda1 1 else 0 y3 1 whena0 1 anda1 1 else 0 盛建伦jlsheng 41 并行赋值语句 2 选择赋值语句 格式 目标信号 信号表达式1WHEN选择条件1 信号表达式2WHEN选择条件2 WITH选择条件表达式SELECT 信号表达式NWHEN选择条件N 盛建伦jlsheng 42 并行赋值语句 2 选择赋值语句 signals std logic 输出signalm std logic vector 1downto0 输入 withmselect 例 用选择赋值语句描述异或门的功能 s 1 when 01 1 when 10 0 whenothers 盛建伦jlsheng 43 if语句 if语句的三种形式 1 门闩if语句 2 二选一if语句 3 多选一if语句 流程控制语句 语法格式 IfexpressionThenstatement ElsifexpressionThenstatement ElsifThenstatement elsestatement Endif 根据条件进行相应赋值操作 注意 不是Elseif 盛建伦jlsheng 44 1 门闩if语句 IF条件THEN若干语句ENDIF 例 语句格式 IF a b THENout 1 ENDIF 第一种IF语句 这种if语句往往用于产生触发器和锁存器 盛建伦jlsheng 45 第二种IF语句 IF条件THEN若干语句ELSE若干语句ENDIF 语句格式 IF a b THENout 1 ELSEout 0 ENDIF 2 二选一if语句 例 盛建伦jlsheng 46 例 一个8位二选一数据选择器 用于二选一控制的if语句 signalsel std logic signala b c std logic vector 7downto0 ifsel 1 thenc a elsec b endif 盛建伦jlsheng 47 第三种IF语句 If条件1Then若干语句 Elsif条件2Then若干语句 else条件nThen若干语句 Endif 语句格式 3 多选一if语句 盛建伦jlsheng 48 例 Process A BeginIfA 00 thenf D0 elsifA 01 thenf D1 elsifA 10 thenf D2 elsef D3 endif endprocess 多选一if语句 盛建伦jlsheng 49 process语句 process语句通常称为进程语句 本质上它描述了一个功能独立的电路块 在VHDL中 所有的并行执行语句都代表功能独立的电路块 而所有顺序执行语句则是用于描述电路块的功能 process语句有许多变种 这里只介绍最基本的形式 流程控制语句 process语句是个并行执行的语句 但是process语句内部的语句要求是顺序执行语句 它是VHDL程序中 描述硬件并行工作的最重要最常用的语句 50 Process语句的书写格式是 进程名 process 敏感信号1 敏感信号2 敏感信号n 若干变量说明语句 begin若干顺序执行语句endprocess 进程名 process语句 用方括号括起来的部分是可选的 第一个进程名以冒号结束 和关键字process隔开 它是可选的 可要可不要 对硬件电路没有影响 但建议最好加上进程名 加上进程名等于给这块功能独立的电路加了个标记 增强可读性 process语句中 begin之前的若干变量说明语句也是可选的 如果该process语句中需要使用变量 则需要在begin之前予以说明 这些被说明的变量只对该进程语句起作用 只能在该process语句中使用 敏感信号表 盛建伦jlsheng 51 process语句中有个敏感信号表 各敏感信号之间用逗号分开 最后一个敏感信号后面是括号 不需要跟一个逗号 process语句 所谓敏感信号就是指当它的状态发生变化时 启动process语句执行 由于process语句代表一块功能独立的电路 它的某些输入信号的状态变化 势必引起电路输出的变化 这些立即引起 当然要经过短暂的时间延迟 输出信号状态变化的信号就是敏感信号 变量不是真正的物理量 因此不能出现在敏感信号表中 在process语句中只作为输出存在的信号 出现在信号赋值符 的左边 不能作为敏感信号 既出现在信号赋值符 的左边 又出现在信号赋值符 右边的信号 可以出现在敏感信号表中 这是因为这些信号既作为这块电路的输出 又是电路内部的反馈信号 盛建伦jlsheng 52 在process语句的书写格式中 在begin和endprocess之间的若干顺序执行语句用于描述该process语句所代表的电路块的功能 process语句 在前面介绍if语句时 用if语句描述了二选一选择器和多选一选择器 但是由于if语句是顺序执行语句 因此不能代表一块功能独立的电路 只能成为一块功能独立电路的一部分 需要对前面的if语句进行改造 使之成为一块功能独立的电路 能并行执行 改造的方法之一就是将if语句放在process语句中 盛建伦jlsheng 53 signalsel std logic signala b c std logic vector 15downto0 mux2to1 process sel a b beginifsel 0 thenc a elsec b endif endprocess process语句 例 二选一选择器 注意 本例中使用了进程名 不过在endprocess之后没有书写进程名 敏感信号表中有3个输入信号 盛建伦jlsheng 54 case语句 case语句是顺序执行语句 常用来描述总线的行为 编码器和译码器的结构以及状态机等等 case语句可读性好 非常简洁 case语句的书写格式为 流程控制语句 case条件表达式iswhen条件表达式值1 若干顺序执行语句 when条件表达式n 若干顺序执行语句whenothers 若干顺序执行语句endcase 盛建伦jlsheng 55 在case语句中 某一个条件表达式满足时 就执行它后面的顺序执行语句 case语句 if语句的执行是按顺序执行 各条件有不同的优先级 case语句各条件表达式值之间不存在不同的优先级 它们是同时执行的 执行的顺序与各条件表达式值的书写顺序无关 case语句中条件表达式的值须一一列举 不能遗漏 如果不需要一一列举 则用others代替 case语句和if语句在许多情况下完成的功能是相同的 在这些情况下 用case语句描述比用if语句描述更清晰 更简洁 盛建伦jlsheng 56 signalsel std logic vector 1downto0 signala b c std logic process a b sel beginselccnull endcase endprocess case语句 本例中出现的 null 是个什么也不做的空语句 例 2输入与非门 本例中 首先将与非门输入信号a和b并置 生成一个2位的std logic vector信号sel 信号c是与非门的输出 第一个when中的 代表或者 即三个条件中的任何一个满足 都执行c 1 语句 实际上与非门一般不这样设计 常用的设计方法是 c not aandb 盛建伦jlsheng 57 设计实体 在VHDL的设计中 基本设计单元是设计实体 实体描述了该设计实体对外的接口 结构体描述了设计实体内部的性能 程序包存放各设计实体能共享的数据类型 常数和子程序等等 库中存放已编译好的实体 结构体 程序包和配置 配置描述了实体与构造体之间的连接关系 一个设计实体最多由5部分构成 实体 entity 一个或者几个结构体 architecture 使用的库 library 和程序包 pachage 配置 configuration 这里仅讨论含有一个结构体的设计实体 绝大多数设计实体都是仅含一个结构体的设计实体 一个实体 结构体 对 共同定义一个电路模型 盛建伦jlsheng 58 设计实体 盛建伦jlsheng 59 实体 entity 实体由实体 entity 语句说明 实体语句又称为实体说明 entitydeclaration 语句 实体语句的作用是定义设计实体对外的信号 entity语句的书写格式如下 entity实体名is generic 类属参数表 port 端口信号表 实体说明部分 begin实体语句部分 end 实体名 最常用的形式是 entity实体名isport 端口信号表 end实体名 盛建伦jlsheng 60 port 端口 语句的书写格式是 port 端口名 端口名 模式数据类型 端口名 端口名 模式数据类型 端口名 端口名 模式数据类型 实体 entity 实体中的每一个输出 输入被称为一个端口 一个端口实际上是一个信号 因为这些信号负责设计实体与外部的接口 因此称为端口 如果设计实体是一个封装起来的元件 那么端口相当于元件的引脚 pin 跟普通信号有两点不同 一是端口一定是信号 因此在说明时省略了关键字signal 二是在说明普通信号的信号说明语句中的信号没有说明方向 端口由于是设计实体与外部的接口 因而是有方向的 盛建伦jlsheng 61 例 实体 entity port reset cs instd logic rd wr instd logic a1 a0 instd logic pa pb inoutstd logic vector 7downto0 pcoutstd logic vector 15downto0 port 端口 语句的书写格式 port 端口名 端口名 模式数据类型 端口名 端口名 模式数据类型 注意 pc信号一行最后不以分号结束 盛建伦jlsheng 62 端口的模式用来说明信号通过端口的方向和通过方式 这些方向都是相对该设计实体而言的 例如 in模式对设计实体就是输入 有下列几种模式 实体 entity in流入设计实体 输入 out从设计实体流出 输出 inout双向端口 即可输入 又可输出 buffer缓存 能用于内部反馈的输出 盛建伦jlsheng 63 out模式和buffer模式的区别在于out端口不能用于设计实体的内部反馈 buffer端口能够用于设计实体的内部反馈 实体 entity a q1的模式是out b q1的模式是buffer 盛建伦jlsheng 64 结构体 architecture 结构体描述设计实体内部的特性 结构体的书写格式如下 architecture结构体名of实体名is内部信号 常量 数据类型 函数等的定义 begin若干并行执行语句end结构体名 实体名一定要与本结构体对应实体的实体名完全一致 architecture后面的结构体名要与end后的结构体名完全一致 而不是与实体名一致 结构体名可以随便起 因为别的地方很少用到结构体名 结构体内要求使用并行执行语句 类似if之类的顺序执行语句 只要将它们放在进程语句process语句之内即可 process语句是并行执行语句 盛建伦jlsheng 65 前面已经说明了并行语句和顺序执行语句的区别 结构体 architecture 并行执行语句代表一个独立的功能电路 因此它一定有明确表示或者隐含表示的输入 输出信号 如process语句中敏感信号表中的信号不是输入信号就是反馈信号 而顺序执行语句只用于描述电路的功能一般很难判断输入输出信号 因此不能代表一个独立的功能电路 例如从一个if语句中判断输入输出信号就比较难 盛建伦jlsheng 66 结构体有3种描述方式 行为描述 结构描述和数据流描述 结构体 architecture 1 行为描述描述该设计实体的功能 即该单元能做什么 2 结构描述描述该设计实体的硬件结构 即该设计实体的硬件是如何构成的 3 数据流方式以类似于寄存器传输级的方式描述数据的传输和变换 主要使用并行执行的信号赋值语句 既显式表示了设计实体的行为 也隐式表示了设计实体的结构 其实初学者不用太钻研各种描述方式的定义 只要能正确描述设计实体的内部特性即可 盛建伦jlsheng 67 结构体内部要求使用并行执行的语句 这是十分重要的 每个并行执行语句都是一块独立的电路 结构体 architec

温馨提示

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

评论

0/150

提交评论