EDA技术及应用_第5章_2_第1页
EDA技术及应用_第5章_2_第2页
EDA技术及应用_第5章_2_第3页
EDA技术及应用_第5章_2_第4页
EDA技术及应用_第5章_2_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1 5 1 3库 程序包 VHDL的基本结构由前述的实体和结构体组成 但实际中的VHDL程序除上述两个基本部分以外通常还包括另外三个部分 库 程序包和配置库 主要用来存放已经编译的实体 结构体 程序包等 程序包 主要用来存放各个设计都能共享的数据类型 子程序 常数和元件等 2 VHDL库中的各个设计单元 实体 结构体 程序包和配置都可以作为其他设计的资源 一个设计可以使用多个库中的设计单元 当一个设计要使用库中的已编译单元时 必须要在每个设计的VHDL源代码的开头说明要引用的库 然后使用USE子句指明要使用库中的哪一个设计单元 1 库说明语句格式 library 以library开头 后面紧跟着设计中要使用的库的名字库说明语句使该库对于设计可见 2 USE子句格式 use all 库名是前面库说明语句中说明的库程序包名是设计中要使用的库中的设计单元all表示使用程序包中的所有资源 1 库 Library 3 ENTITYexampleISPORT d INSTD LOGIC VECTOR 15DOWNTO0 clk reset oe INSTD LOGIC q1 OUTSTD LOGIC VECTOR 15DOWNTO0 q2 INOUTSTD LOGIC VECTOR 15DOWNTO0 int BUFFERSTD LOGIC opt OUTSTD LOGIC ENDexample LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL 程序5 1 8 4 在VHDL中 设计的实体说明和结构体中定义的数据类型 子程序说明 属性说明和元件说明等部分只能在该设计实体中使用 而对于其他设计实体是不可见的 为减少重复定义工作 VHDL提出了程序包的概念 用来存放能够共享的数据类型 子程序说明 属性说明和元件说明等 程序包说明部分 主要对数据类型 子程序 常量和元件等进行说明 PACKAGE程序包名IS 程序包首程序包说明部分END程序包名 程序包体部分 用来规定程序包的实际功能 1 程序包的结构 PACKAGEBODY程序包名IS 程序包体程序包体说明部分以及包体内容END程序包名 2 程序包 5 预定义的程序包 STD LOGIC 1164程序包 是IEEE库中最常用的程序包 其中包含了一些数据类型 子类型和函数的定义 这些定义将VHDL扩展成一个可以描述多值逻辑的硬件描述语言 该程序包中最常用的两个数据类型是 STD LOGIC和STD LOGIC VECTOR 2 常用的预定义程序包 6 STANDARD和TEXTIO程序包 Standard和textio程序包是std库中的预编译程序包 Standard中定义了许多基本的数据类型等 Textio程序包主要供仿真器使用 可以用文本编辑器建立一个数据文件 文件中包含仿真时需要的数据 仿真时用textio程序包的子程序存取这些数据 STD LOGIC UNSIGNED和STD LOGIC SIGNED程序包 Std logic unsigned和std logic signed程序包都是Synopsys公司的程序包 预先编译在IEEE库中 此程序包定义了可用于Integer型及Std logic和std logic vector型混合运算的运算符 还定义了一个从std logic vector到integer型的转换函数 STD LOGIC ARITH程序包 STD LOGIC ARITH程序包预先编译在IEEE库中 是Synopsys公司的程序包 此程序包在STD LOGIC 1164程序包的基础上扩展了3个数据类型 UNSIGNED SIGNED和SMALL INT 并为其定义了相关的算术运算符和转换函数 7 libraryieee useieee std logic 1164 all useieee std logic arith all useieee std logic unsigned all 8 5 2VHDL语言要素 5 2 1VHDL的文字规则 与其他计算机高级语言一样 VHDL也有自己的文字规则VHDL文字主要包括数字 标识符 字符和字符串等 1 标识符 标识符主要用来为常数 变量 信号 端口 子程序和参数等命名 有效的字符 包括26个大小写英文字母 数字包括0 9以及下划线 任何标识符必须以英文字母开头下划线 的前后必须有英文字母或数字标识符中的英语字母不分大小写 例 Decoder 1 FFT sig n Not ACK是正确的而 Decoder 1 2FFT sig n return是错误的 其规则如下 9 2 数字 1 整数 整数都是十进制的数 如 5 678 0 156E2 15600 45 234 287 45234287 2 实数 实数也都是十进制的数 但必须带有小数点 如 1 335 88 670 551 453 909 88670551 453909 1 0 44 99E 2 0 4499 3 以数值基数表示的数 用这种方式表示的数由五部分组成 基 整数 指数 第一部分 用十进制数标明数值进位的基数 第二部分 数值隔离符 第三部分 表达的数值 第四部分 指数隔离符 第五部分 用十进制数表示的指数部分 若为0可省略不写 10 例如 10 170 表示第三部分为十进制数 等于170 16 FE 表示第三部分十六进制数 等于254 2 1111 1110 表示第三部分为二进制数 等于254 8 376 表示第三部分为八进制数 等于254 16 E E1 表示十六进制数 等于14 161 等于224 3 字符和字符串 1 字符是用单引号括起来的ASC 码一般情况下VHDL对字母的大小写不敏感 但对字符的大小写是敏感的 例 A 和 a 是不同的 2 字符串是用双引号括起来的字符序列在VHDL中字符串常用来作为说明文字出现 例 itistimeout ERROR BothSandQequalto1 注意 a 和 a 是不同的 11 B 二进制基数符号O 八进制基数符号X 十六进制基数符号采用位串的优点是为了增加源代码的可读性 例 B 1 1101 1110 二进制数数组 位矢数组长度是9O 15 八进制数数组 位矢数组长度是6X AD0 十六进制数数组 位矢数组长度是12 4 位串 位串是用双引号括起来的数字序列 数字序列前面加上一个基数说明符 12 5 2 2数据对象 DATAOBJECTS VHDL是一种硬件描述语言 硬件电路的工作过程实际上是信号的传输和存储的过程 所以VHDL最基本的描述对象是信号 为了便于描述 还定义了另外两类数据对象 变量和常量 1 常量 CONSTANT 常量是指在设计实体中不会发生变化的值常量定义的一般表述 CONSTANT常量名 数据类型 表达式 例如 constanta b INTEGER 2 constantVCC REAL 3 3 注意 常量一旦被赋值就不能再改变常量可以在程序包 实体说明 结构体和进程的说明区域进行说明常量所赋的值应与其所定义的数据类型一致 否则出错 13 2 变量 VARIABLE 变量主要用于对暂时数据进行存储 它不能将信息带出对它作出定义的当前单元 1 变量定义的一般格式 VARIABLE变量名 数据类型 初始值 例 VARIABLEa std logic VARIABLEb c integer 2 VARIABLEcount1 count2 count3 integerrange0to255 0 例中定义a为标准逻辑位变量 b c为整数型变量 初始值为2等 14 注意 1 赋值语句右边的表达式必须是一个与目标变量具有相同数据类型的数值 2 变量是一个局部量 只能在进程和子程序中使用 3 变量的赋值是一种理想化的数据传输 是立即发生的 不存在任何延时的行为 2 变量的赋值变量可以被连续地进行赋值 变量的赋值采用的符号是 格式如下 变量名 表达式 例 a 1010101 位矢量赋值b 0 位赋值x 100 0 实数赋值 15 3 信号 SIGNAL 信号是描述硬件系统的基本数据对象 它是设计实体中并行语句模块间动态交换数据的手段 在物理上信号对应着硬件设计中的一条连接线 信号定义语句格式 SIGNAL信号名 数据类型 初始值 例 SIGNALclk std logic 0 SIGNALa integerrange0to15 SIGNALdata std logic vector 15downto0 信号的初始值不是必须的 而且仅在VHDL的行为仿真中有效 信号的定义范围是实体 结构体和程序包 16 信号赋值采用如下格式 信号名 表达式 例 x 9 y x 在进程中 可以允许同一信号有多个赋值源 即在同一进程中存在多个同名的信号被赋值 其结果只是最后的赋值语句被启动 SIGNALa b c y z integer PROCESS a b c BEGINy a b 不对y进行赋值z c x y b y的最后赋值ENDPROCESS 17 信号 SIGNAL 基本用法 在电路中作为信号连线使用适用范围 在整个结构体内的任何地方都能适用行为特性 赋值具有一定的延迟在进程中 只在进程的的最后才对信号赋值 信号与变量赋值语句功能的比较 变量 VARIABLE 基本用法 在进程中作为局部数据存储单元使用适用范围 只能在所定义的进程中使用行为特性 赋值是没有延迟的在进程中是立即赋值 18 5 2 3数据类型 前面介绍了VHDL的数据对象 对于每一个对象来说 都要指定其数据类型 因此 VHDL需要提供用来指定对象的数据类型 每一对象只能具有一个数据类型且只能具有那个数据类型的值 对某对象进行操作的类型必须与该对象的类型相匹配 不同类型之间的数据不能直接带入 即使数据类型相同 而位长不同也不能进行带入 VHDL的强类型特性主要体现在以下几个方面 19 1 VHDL的主要预定义数据类型 1 布尔 BOOLEAN 数据类型 属于二值枚举型 取值为false和true 2 位 BIT 数据类型 属于二值枚举型 取值只能 1 和 0 3 位矢量 BIT VECTOR 数据类型 是BIT的数组 使用位矢量必须注明位宽 例 signala bit vector 7downto0 4 字符 CHARACTER 数据类型 字符类型通常用单引号引起来 如 a 字符类型区分大小写 这一点和标识符的大小写是不同的 VHDL的预定义数据类型都是在VHDL标准程序包STANDARD中定义的 20 7 时间 TIME 数据类型VHDL中唯一的预定义物理类型是时间 完整的时间类型包括整数和物理量单位两部分 整数和单位之间至少留一个空格 例 55ms 20ns等 6 实数 REAL 数据类型 类似于数学中的实数 或称为浮点数 通常情况下实数类型仅能用于VHDL的仿真 综合器一般不支持实数 5 整数 INTEGER 数据类型 正整数 负整数和零 可以使用预定义的运算操作符 如 等进行算术运算 在VHDL中 整数的取值范围是 2147483647 2147483647仿真时 将其作为有符号数处理 综合时 作为无符号数处理 21 2 IEEE预定义标准逻辑位与矢量 1 标准逻辑位 std logic 数据类型 2 标准逻辑矢量 std logic vector 数据类型std logic vector是std logic的数组形式 因为是ieee的预定义数据类型 使用时必须先打开ieee库 即 libraryieee useieee std logic 1164 all std logic是一个9值的逻辑 其取值为 U 未初始化状态 X 不定态 O 逻辑0 1 逻辑1 Z 高阻态 W 弱不定态 L 弱0 H 弱1 无关态 22 3 其他预定义标准数据类型 Synopsys公司在IEEE库中加入的程序包STD LOGIC ARITH中定义了3种数据类型 下面是其中常用的2种 1 无符号数据类型 UNSIGNEDTYPE UNSIGNED数据类型代表一个无符号的数值 以二进制数表示 二进制数的左边为最高位 2 有符号数据类型 SIGNEDTYPE SIGNED数据类型代表一个有符号的数值 综合器将其解释为补码 最高位为符号位 23 1 TYPE语句用法 TYPE数据类型名IS数据类型定义 或 TYPE数据类型名IS数据类型定义OF基本数据类型 上述格式中的数据类型名由设计者自定 数据类型定义部分用来描述所定义元素的表达方式和表达内容 基本数据类型是指数据类型定义中所定义的基本数据类型 一般都是取已有的预定义数据类型 4 用户自定义数据类型 除标准的预定义数据类型外 VHDL还允许用户自行定义新的数据类型 由用户定义的数据类型可以有多种 如枚举类型 整数类型 实数类型 数组类型 记录类型和时间类型等 用户自定义数据类型是用类型定义语句实现的 格式如下 例 typeweekis sun mon tue wed thu fri sat typest1isarray 0to15 ofstd logic 24 2 自定义数据类型举例 枚举数据类型 EnumeratedTypes 在综合过程中 枚举类型文字元素的编码通常是自动的 编码顺序是默认的 一般将第一个枚举量 最左边的量 编码为0 以后的依次加1 前例中的默认编码值如下 state1 000 state3 010 state5 100 state2 001 state4 011 VHDL中的枚举数据类型是一种特殊的数据类型 是用文字符号来表示一组实际的二进制数 例如 typem stateis state1 state2 state3 state4 state5 signalpresent state next state m state 25 数组类型 ArrayTypes 语句格式如下 TYPE数组名ISARRAY 数组范围 OF数据类型 例 typestbisarray 7downto0 ofstd logic 该数组有8个元素 其下标排列是7 6 1 0 typedata busisarray 0to7 ofbit 数组类型属复合类型 是将一组具有相同数据类型的元素集合在一起 作为一个数据对象来处理的数据类型 数组可以是一维数组或多维数组 26 对数组的赋值有两种方法 一是对整个数组进行一次赋值 二是按照下标对每一个数组元素进行赋值 例 typedata busisarray 0to7 ofbit signala data bus 整体赋值 a 01000111 分别赋值 a 0 0 a 1 1 a 2 0 a 3 0 a 4 0 a 5 1 a 6 1 a 7 1 27 5 数据类型的转换 在VHDL语言中 数据类型的定义是相当严格的 不同的数据类型之间不能进行运算和直接代入 为了实现正确的赋值操作 必须要将带入的数据进行类型转换 数据类型转换函数通常由程序包来提供 下表列出了常用的数据类型转换函数 28 29 5 2 4运算符 操作符和操作数间的运算应注意 VHDL中共有四类操作符 逻辑操作符 关系操作符 算术操作符和连接操作符 基本操作符间操作数是同数据类型操作数的数据类型必须与操作符所要求的数据类型一致注意操作符之间的优先级通常在一个表达式中有两个以上的运算符时 需要使用括号将这些运算分组 若其中的运算符相同且为AND OR XOR中的一种则不需使用括号 如y aandb or notcandd 去掉括号语法错误 30 1 逻辑运算符 LogicalOperator 逻辑运算符共有7种 分别是 操作符功能操作数类型NOT取反std logic bit booleanAND与std logic bit booleanOR或std logic bit booleanNAND与非std logic bit booleanNOR或非std logic bit booleanXOR异或std logic bit booleanXNOR同或std logic bit boolean 31 下面是逻辑操作符运算的几个例子 SIGNALa b c STD LOGIC VECTOR 3DOWNTO0 SIGNALd e f g STD LOGIC VECTOR 1DOWNTO0 SIGNALh i j k STD LOGIC SIGNALl m n o p BOOLEAN a bANDc 正确 a b c的数据类型同属4位长的位矢量d eORfORg 两个操作符OR相同 不需括号h iNANDj NANDk NAND

温馨提示

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

评论

0/150

提交评论