第一部分VHDL语言编程基础.ppt_第1页
第一部分VHDL语言编程基础.ppt_第2页
第一部分VHDL语言编程基础.ppt_第3页
第一部分VHDL语言编程基础.ppt_第4页
第一部分VHDL语言编程基础.ppt_第5页
已阅读5页,还剩312页未读 继续免费阅读

下载本文档

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

文档简介

第一部分VHDL语言编程基础 通过电脑下载 编程文件 到器件 PLD 程序代码与电路 代码对应于逻辑逻辑与器件结合产生功能电路代码的重复代表电路的重复电路是并行的 所以代码一定是并行的逻辑的繁简对应代码的繁简 概述 1 常用硬件描述语言简介常用硬件描述语言有VHDL Verilog和ABEL语言 三者的比较 1 逻辑描述层次 一般的硬件描述语言可以在三个层次上进行电路描述 其层次由高到低依次可分为行为级 RTL级和门电路级 VHDL语言是一种高级描述语言 适用于行为级和RTL级的描述 最适于描述电路的行为 Verilog语言和ABEL语言是一种较低级的描述语言 适用于RTL级和门电路级的描述 最适于描述门级电路 2 设计要求 VHDL进行电子系统设计时可以不了解电路的结构细节 设计者所做的工作较少 Verilog和ABEL语言进行电子系统设计时需了解电路的结构细节 设计者需做大量的工作 3 综合过程 任何一种语言源程序 最终都要转换成门电路级才能被布线器或适配器所接受 因此 VHDL语言源程序的综合通常要经过行为级 RTL级 门电路级的转化 VHDL几乎不能直接控制门电路的生成 而Verilog语言和ABEL语言源程序的综合过程要稍简单 即经过RTL级 门电路级的转化 易于控制电路资源 4 对综合器的要求 VHDL描述语言层次较高 不易控制底层电路 因而对综合器的性能要求较高 Verilog和ABEL对综合器的性能要求较低 5 支持的EDA工具 支持VHDL和Verilog的EDA工具很多 但支持ABEL的综合器仅仅Dataio一家 6 国际化程度 VHDL和Verilog已成为IEEE标准 而ABEL正朝国际化标准努力 2 VHDL的简介VHDL的英文全名是Very High SpeedIntegratedCircuitHardwareDescriptionLanguage 诞生于1982年 1987年底 VHDL被IEEE TheInstituteofElectricalandElectronicsEngineers 和美国国防部确认为标准硬件描述语言 1993年 IEEE对VHDL进行了修订 从更高的抽象层次和系统描述能力上扩展VHDL的内容 公布了新版本的VHDL 即IEEE标准的1076 1993版本 VHDL和Verilog作为IEEE的工业标准硬件描述语言 又得到众多EDA公司的支持 在电子工程领域 已成为事实上的通用硬件描述语言 有专家认为 在新的世纪中 VHDL与Verilog语言将承担起几乎全部的数字系统设计任务 3 VHDL程序设计约定为了便于程序的阅读和调试 本书对VHDL程序设计特作如下约定 1 语句结构描述中方括号 内的内容为可选内容 2 对于VHDL的编译器和综合器来说 程序文字的大小写是不加区分的 本书一般使用大写 3 程序中的注释使用双横线 在VHDL程序的任何一行中 双横线 后的文字都不参加编译和综合 4 为了便于程序的阅读与调试 书写和输入程序时 使用层次缩进格式 同一层次的对齐 低层次的较高层次的缩进两个字符 5 源程序文件的名字与实体名必须一致 第一章VHDL的程序结构和软件操作 1 1VHDL程序的基本结构 1 2软件操作 Max plus 的操作 1 1VHDL程序的基本结构 实体描述 ENTITY 结构体 ARCHITECTURE 设计实体 实体描述 ENTITY 构造体1 设计实体 构造体2 构造体n 设计实体 实体说明 构造体之间关系 库 包集合 LIBRARY 库 包集合 LIBRARY 结构体配置 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYorISPORT a b INSTD LOGIC y OUTSTD LOGIC ENDENTITYor ARCHITECTUREbehaOForISBEGINy aorb ENDbeha 例1 库说明 实体描述 结构体 例2 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYhalf adderISPORT a b INSTD LOGIC s co OUTSTD LOGIC ENDhalf adder ARCHITECTUREhalf1OFhalf adderISSIGNALc d STD LOGIC BEGINc aORb d aNANDb co NOTd s cANDd ENDhalf1 一 库 程序包使用 LIBRARY LIBRARY和PACKAGE的声明部分 作用 库 Library 是用于存放预先编译好的程序包 Package 程序包中定义了数据集合体 逻辑操作和元件等 主要是声明在设计或实体中将用到的常数 数据类型 元件及子程序等 通常用到IEEE的库中STD LOGIC 1164 STD LOGIC ARITH STD LOGIC UNSIGNED STD LOGIC SIGNED等程序包 使用格式 LIBRARY库名 USE库名 程序包名 All 在Quartus 系统中有4个库能支持VHDL语言 它们分别是Std库 IEEE库 WORK库和VITAL库 Std库和IEEE库提供基本的逻辑运算函数及数据类型转换函数等 IEEE库中的程序包std logic 1164定义了std logic和std logic vector等数据类型 二 实体描述 ENTITY 作用 定义本设计的输入 出端口 即定义电路的外观 即I O接口的类型和数量使用格式 端口名 端口模式数据类型 ENTITY实体名IS END ENTITY 实体名 格式 PORT 端口名 端口模式数据类型 GENERIC 类属表 类属说明语句 类属 GENERIC 参量是一种端口界面常数 常以一种说明的形式放在实体或块结构体前的说明部分 一般书写格式如下 GENERIC 常数名 数据类型 设定值 常数名 数据类型 设定值 端口名 即每个外部管脚名称 有多个时可用逗号隔开 PORT 端口名 端口模式数据类型 端口名 端口模式数据类型 Entity ARCHITECTURE定义作用 定义实体的实现 即电路的具体描述 说明电路执行什么动作或实现功能 ARCHITECTURE结构体名OF实体名IS BEGIN 功能描述语句 END ARCHITECTURE 结构体名 使用格式 三 结构体 ARCHITECTURE 说明语句 结构体说明语句 结构体中的说明语句是对结构体的功能描述语句中将要用到的信号 SIGNAL 数据类型 TYPE 常数 CONSTANT 元件 COMPONANT 函数 FUNCTION 和过程 PROCEDURE 等加以说明 功能描述语句 功能描述语句主要由5种不同类型的以并行方式工作的语句结构 1 块语句结构 由一系列并行语句构成 2 进程语句结构 由顺序语句构成 3 信号赋值语句 将设计实体内处理结果向定义的信号或界面端口进行赋值 4 子程序调用语句 用于调用过程或函数 5 元件例化语句 对其它的设计实体作元件调用 举例 设计一个与门电路 逻辑符号 真值表 LibraryIEEE UseIEEE STD LOGIC 1164 all Entityand2isPort A instd logic B instd logic Y outstd logic Endand2 首先定义输入输出端口名字 模式 Mode 信号类型 注意最后语句的分号在括号外 实体定义 ArchitectureNaofand2isBeginY AandB EndNa 结构体定义 端口模式有以下几种类型 IN OUT INOUT BUFFER ArchitectureNbofand2isBeginY 1 whenA 1 andB 1 else 0 EndNb 以上结构体表达何种电路 一个实体可以有几个结构体 即结构体的定义可以有不同的形式 结论 小结 VHDL程序设计基本结构 1 2软件操作 Max plus 的操作 1 建立和编写一个VHDL语言的工程文件 2 VHDL程序的编译 3 VHDL语言程序的仿真 4 芯片的时序分析 5 安排芯片脚位 一 软件操作 Max plus 的操作 1 Max plus 开发工具是美国Altera公司自行设计的一种软件工具 其全称为MultipleArrayMatrixandProgrammableLogicUserSystem 它具有原理图输入和文本输入 采用硬件描述语言 两种输入手段 利用该工具所配备的编辑 编译 仿真 综合 芯片编程等功能 将设计电路图或电路描述程序变成基本的逻辑单元写入到可编程的芯片中 如PLD FPGA芯片 作成ASIC芯片 它是EDA设计中不可缺少的一种工具 2 软件安装 我们通过范例介绍 利用Max plus 系统 1 如何编写VHDL程序 使用TextEditor 2 如何编译VHDL程序 使用Compiler 3 如何仿真验证VHDL程序 使用WaveformEditor Simulator 4 如何进行芯片的时序分析 使用TimingAnalyzer 5 如何安排芯片脚位 使用FloorplanEditor 6 如何下载程序至芯片 使用Programmer 二 建立和编写一个VHDL语言的工程文件 首先启动Max plus 系统 启动后系统进入主菜单画面 在主菜单上有5个选项 分别是 Max plus File Assign Options和Help 1 打开文本编辑器 用鼠标点击File选项 点击子菜单中的New选项 接着屏幕会出现New的对话框 在对话框内有4种编辑方式 图形编辑 符号编辑 文本编辑和波形编辑 VHDL文件属于文本 那么应该选择文本编辑方式 点击OK按钮 屏幕上将出现一个无名的编辑窗口 则系统进入文本编辑状态 2 在编辑窗口中进行编辑输入 输入相应的描述语句 3 存盘 a我们编辑的VHDL文件扩展名为vhd b保存的文件名必须和所定义的实体名相同 c文件存盘的目录不应是根目录或桌面 建议存放在Max2work或Maxplus2目录 或其子目录 以与门的设计为例讲述具体过程 三 VHDL程序的编译 1 若文件没有打开 需首先打开要编译的VHDL文件 2 将目前的文件设置成工程文件 点击File选项 光标移到子菜单的Project项停留几秒钟 屏幕上会出现下一级菜单 点击SetProjecttoCurrentFile 3 打开编译器 点击主菜单MAX plus Compiler选项 屏幕上就出现编译对话框 4 开始编译 完成了上述编译前的准备及必要的设置工作 点击编译对话框中的Start按钮 编译即开始 以与门的设计为例讲述具体过程 四 VHDL语言程序的仿真 仿真是为了验证我们所编写的VHDL程序的功能是否正确 1 首先生成仿真波形文件 a 打开波形编辑器 点击主菜单的MAX plus WaveformEditor选项 就可在屏幕上显示波形编辑器窗口 在未输入信号名以前 整个窗口是空白的 b 确定仿真持续时间 File EndTime c 选则输入输出端口名 d 编辑输入信号波形 e 信号波形编辑完成后 需存盘为仿真使用 文件名采取默认方式即可 2 打开仿真器 点击主菜单MAX plus Simulator项 此时弹出Simulator对话框 点击对话框的Start按钮 仿真即开始 在仿真结束后打开仿真波形文件 点击右下角的OpenSCF按钮 即可以显示仿真结果 以与门的设计为例讲述具体过程 五 芯片的时序分析 仿真结果从波形上来看 很难给出定量的信号延迟关系 这一点时序分析却能直观地用表来进行显示 1 选择要下载的器件型号 2 需要再编译一次 点击主菜单的Assign Device项得到Device对话框 3 打开时序仿真器 点击TimingAnalyzer选项 4 最后点击Start按钮后 时序分析器开始启动 以与门的设计为例讲述具体过程 六 安排芯片脚位 为了将程序下载到芯片 需安排芯片脚位 1 打开芯片脚位设置器 MAX plus FloorplanEditor 2 将实体定义的端口名字和下载芯片的管脚进行具体对应 3 最后再进行一次编译 EDA实验箱 第二章VHDL语言要素 一 VHDL语言标识符的有关命名规则 1 标识符主要用于命名或标识VHDL设计中的一个项目 如实体 构造体 程序包 过程 函数 常量 变量 文件等 2 标识符不区分大小写 3 长度不超过32个有效字符序列 4 只能由英文字母 数字及下划线构成 5 首字母必须是字母 且不连续使用下划线 不以下划线 结尾 6 任何VHDL语言的保留字不能用作标识符 VHDL语言程序书写规定 二 VHDL语言书写规定 1 VHDL语句间用分号隔开 2 VHDL注释语句用 开头 2 1VHDL文字规则VHDL文字 Literal 主要包括数值和标识符 数值型文字主要有数字型 字符串型 位串型 1 数字型文字 1 整数文字 整数文字都是十进制的数 如 5 678 0 156E2 15600 45 234 287 45234287 数字间的下划线仅仅是为了提高文字的可读性 相当于一个空的间隔符 而没有其他的意义 因而不影响文字本身的数值 2 实数文字 实数文字也都是十进制的数 但必须带有小数点 如 188 993 88 670 551 453 909 88670551 453909 1 0 44 99E 2 0 4499 1 335 0 0 3 以数制基数表示的文字 用这种方式表示的数由五个部分组成 第一部分 用十进制数标明数制进位的基数 第二部分 数制隔离符号 第三部分 表达的文字 第四部分 指数隔离符号 第五部分 用十进制表示的指数部分 这一部分的数如果是0可以省去不写 现举例如下 10 170 十进制数表示 等于170 2 1111 1110 二进制数表示 等于254 16 E E1 十六进制数表示 等于2 11100000 等于224 4 物理量文字 VHDL综合器不接受此类文字 如 60s 60秒 100m 100米 k 千欧姆 177A 177安培 2 字符串型文字 1 字符是用单引号引起来的ASCII字符 可以是数值 也可以是符号或字母 如 R A Z 2 字符串则是一维的字符数组 须放在双引号中 如 ERROR BOTHSANDQEQUALTOL 3 数位字符串 数位字符串称位矢量 代表的是二进制 八进制或十六进制的数组 B 二进制基数符号 0 1 O 八进制基数符号 0 7 X 十六进制基数符号 0 9 A F 例 B 10110110 X A0 X 456 3 下标名及下标段名下标名用于指示数组型变量或信号的某一元素 而下标段名则用于指示数组型变量或信号的某一段元素 其语句格式如下 数组类型信号名或变量名 表达式1 TO DOWNTO表达式2 例 SIGNALA B C BIT VECTOR 0TO7 SIGNALY Z BIT Z B 3 3是可计算型下标表示C 0TO3 A 4TO7 以段的方式进行赋值 2 2数据类型 数据类型分类 主要有逻辑信号类型和数值信号类型 2 2 1逻辑数据类型 1 布尔代数 Boolean 型 定义位置 在STD库的standard程序包中进行定义 信号形式 FALSE TRUE 2 位 Bit 定义位置 在STD库的standard程序包中进行定义 信号形式 0 1 低电位 高电位 编码器 输入信号 输出信号 3 位数组类型 Bit Vector 定义位置 在STD库的standard程序包中进行定义 例 SignalA bit vector 0to7 SignalY bit vector 2downto0 输入信号 输出信号 4 标准逻辑型 Std Logic 定义位置 在IEEE库的std logic 1164程序包中进行定义 其中只有 0 1 Z 四种值可以综合 可以看出 这个 标准逻辑 信号定义 比 位即bit 信号对于数字逻辑电路的逻辑特性描述更完整 更真实 所以在VHDL的程序里 对于逻辑信号的定义 通常都是采用这个 标准逻辑 信号形式 使用这类数据信号 必须包含下面两条声明语句 LibraryIEEE UseIEEE std logic 1164 all 5 标准逻辑数组类型 Std Logic vector 定义位置 在ieee库的std logic 1164程序包中进行定义 Bit Vector与Std Logic vector的区别在于数组的每一位前者为BIT型 0 1 后者为Std Logic型 2 2 2数值数据类型 1 整数 Integer 定义位置 在std库的standard程序包中进行定义 即数值范围为 231 1 231 1 与数学中的整数的定义相同 不能含有小数点的数 书写方式有 2 十进制数10E4 十进制数16 D2 十六进制数2 101101 二进制数 2 无符号 Unsigned 和有符号 Signed 类型 定义位置 有符号 Signed 和无符号 Unsigned 逻辑信号定义在库IEEE的程序包std logic arith中 有符号类型数据代表有符号数值 即可以是正数 0 负数 编译器将有符号数类型作为一个补码的二进制数 最左边的位为符号位 无符号类型数据代表无符号数值 即代表0或正数 最左边的位为最高位 如 Unsigned 0110 代表 6 Unsigned 1010 代表 10 如 signed 0110 代表 6 signed 1011 代表 5 例如 VARIABLEA UNSIGNED 0TO5 SIGNALB SIGNED 3DOWNTO0 最左位B 3 是符号位 libraryieee useieee std logic 1164 all useieee std logic arith all entitydataisport a b inunsigned 3downto0 相应改为a b insigned 3downto0 c outstd logic enddata architecturem1ofdataisbeginc 1 whena belse 0 endm1 useieee std logic 1164 all useieee std logic arith all 列举a b具体值 当定义成无符号数据类型时 若a 1000 b 0001 即a 8 b 1则结果 c 1 c 0 当定义成有符号数据类型时 若a 1001 b 0001 则结果 3 实数 real 含有小数点的数 其范围为 1 0E 38 1 0E 38 实数有正负数 书写时一定要有小数点 如 1 2 2 5 1 0E20 4 自然数 natural 包含0和0以上的正整数 5 正整数 positive 大于0的正整数 6 其它 字符 character 所定义的字符量通常有单引号括起来 如 A a 1 等 字符串 string 是由双引号括起来的一个字符序列 也称为字符矢量或字符串数组 如 integerrange 时间 time 是一个物理量单位 完整时间量数据应包含整数和单位两部分 错误等级 severitylevel 表征系统的状态 有note 注意 warning 警告 error 出错 failure 失败 四种 2 2 3用户定义的数据类型 格式 TYPE数据类型名IS数据类型定义OF基本数据类型 或者为 TYPE数据类型名IS数据类型定义 1 枚举类型 一组以列表形式给出的适用于特定操作所需要的值 如 TYPEyearIS Jan Feb Mar Apr May Jun Aug Sep Oct Nov Dec 2 整数类型和实数类型 如 TYPEdigitISINTEGERRANGE0TO100 3 数组类型 格式为 TYPE数组名ISARRAY约束范围OF数据类型 如 TYPEwordISARRAY 0to7 OFSTD LOGIC TYPEdata busISARRAY 15downto0 OFSTD LOGIC VECTOR 7DOWNTO0 4 其它 还可以定义物理类型 记录类型等 2 2 4数据类型的转换 VHDL语言中 不同数据类型不能进行运算和直接代入 必须将要代入的数据进行类型转换 例1 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYexa 2ISPORT inp INSTD LOGIC ENDexa 2 ARCHITECTUREexamOFexa 2ISSIGNALinb BIT BEGINinb TO BIT inp ENDexam 例2 SIGNALa BIT VECTOR 0TO11 SIGNALb STD LOGIC VECTOR 0TO11 a X A6 十六进制数值赋予位矢量BIT VECTOR b TO STDLOGICVECTOR X A6 注 十六进制数值不能赋予STD LOGIC VECTOR 例3 VARIABLEa INTEGER VARIABLEb REAL a INTEGER b b REAL a 注 类型标记转换法 即直接转换 2 3VHDL数据对象 数据对象 DataObjects 凡是可以被赋予一个值的对象称为数据对象 数据对象用于传递信号 数据对象有 信号 变量 常数 数据对象名 数据对象类型 数据对象值的类型 2 3 1信号 信号数据对象 代表电路内部传输线路线路 其在元件之间起互连作用 信号通常在包集合 结构体和实体说明中使用 信号数据对象的定义格式为 Signal信号名 数据类型 设定值 如 SignalA Std logic vector 3Downto0 0000 注意 由于QuartusII系统往往会忽略信号对象定义时所赋初始值 建议在结构体中用赋值语句完成对信号的赋值 信号赋值语句的语法格式为 目标信号名 表达式 设定值 A 1010 2 3 2变量 变量用于进程语句 函数语句 过程语句的结构中做局部的数据存储 它是一个局部量 而且变量的赋值是立即生效的 不产生赋值延时 它用于对中间数据的临时存储 并不一定代表电路的某一组件 变量数据对象的定义格式为 Variable变量名 数据类型 设定值 如 Variablea integer 0 变量赋值语句的语法格式为 目标变量名 表达式 设定值 注意 由于QuartusII系统往往会忽略变量对象定义时所赋初始值 建议在结构体中用赋值语句完成对变量的赋值 如 a b c 常数的定义格式为 Constant常数名 数据类型 表达式 如 ConstantD1 Integer 3 VariableD2 Std Logic Vector D1Downto0 0000 ConstantPi real 3 14159 注意 常数数据对象定义的同时进行赋值 赋值符号为 2 3 3常数 常量是设计者为实体中某一常量名赋予的固定值 一般在程序开始前进行说明 2 3 4信号 变量 常数对比 一 定义 SignalA std logic VariableB std logic vector 7downto0 ConstantC integer 6 二 赋值及赋值时刻 A 1010 延时 B 1010 立刻 三 定义区域 信号 实体 结构体 程序包 变量 进程 子程序 常数 实体 结构体 程序包 块 进程 子程序 四 适用范围 信号 实体 结构体 程序包 变量 定义了变量的进程 子程序的顺序语句中 常数 视其定义的位置而定 若常数定义在实体中 适用范围是实体所对应的有结构体 若常数定义在结构体中 适用范围就是本结构体 练习 1 定义信号A为标准逻辑数组 8个元素 2 定义变量B 其数据类型为标准逻辑型 3 定义信号C 数据类型为整数型 4 给A B C赋值 其中A的值为11001101 B的值为0 C的值为23 SignalA std logic vector 1to8 VariableB std logic SignalC integer A 11001101 B 0 解 C 23 2 4VHDL操作符 VHDL操作符 逻辑 算术 符号 关系操作符 2 4 1逻辑运算符 一 分类及功能 AND 与 OR 或 NOT 非 NAND 与非 NOR 或非 XOR 异或 XNOR 同或 二 用法 1 操作数的数据类型必须符合操作符的要求 能进行逻辑运算的数据类型 bit bit vector boolean std logic std logic vector 例 Signala b y std logic Signalc d z integer y aandb z candd 2 表达式中有多个运算符时一般要加括号 表达式中有多个运算符时一般要加括号 但and or xor除外 例 Signala b c d std logic vector 3downto0 Signale f g h std logic vector 1downto0 d aandbandc d aorborc d axorbxorc h enorfnorg h enorf norg 3 运算符两侧的操作数要对称 d enorf norg LibraryIEEE USEIEEE STD LOGIC 1164 ALL ENTITYlitiIS PORT a b c d INSTD LOGIC e outSTD LOGIC ENDliti ACHITECTUREAA1OFlitiIS BEGIN e aandb ortmp Signaltmp std logic tmp cxord ENDAA1 2 4 2关系运算符 等于 不等于 大于 大于等于 注 1 等于和不等于的操作对象可以是任何数据类型构成的操作数 2 其它关系运算符对数据类型有一定的限制 整数 枚举型 3 在实现硬件电路时比其它的关系运算符对芯片的利用率要高 例 SIGNALa STD LOGIC 3DOWNTO0 SIGNALb STD LOGIC 3DOWNTO0 ab THEN ELSE 注意 对于位组 或矢量 数据进行关系运算时总是先左对齐 然后再由左至右逐位进行比较 例 A 1010 B 111 试比较A和B大小 2 4 3算术运算符 一 分类及功能 求和运算符 求积运算符 符号运算符 混合运算符 移位运算符等 加 减 并置 乘 除 MOD求模 REM取余 指数 ABS取绝对值 二 运用 1 求和运算符 VHDL中的求和运算符包括加减运算和并置 运算 用于位的连接 操作数的数据类型为整型 例1 Variablea b c d e f integerrange0to255 a b c d e f 例2 Signala std logic vector 0to4 Signalb std logic vector 0to2 Signalc std logic vector 1downto0 a b c 例3 A VH DL A VHDL A 0 1 A 01 2 移位运算符 移位运算所对应的数据类型为一维数组 其中的元素为bit boolean等 例 Variablea1 std logic vector 3to0 a1 1011 a1SLL1 a1 0110 a1SRL2 a1 0010 a1ROL1 a1 0111 3 其它 SLL 逻辑左移 SRL 逻辑右移 SLA算术左移 SRA算术右移 ROL 逻辑循环左移 ROR逻辑循环右移 Signala std logic vector 4downto0 Signalb std logic vector 2downto0 Signalc std logic vector 1downto0 b c a b c VariableA std logic vector 7downto0 A 10110001 ASLL1 AROL1 1 为了方便各种不同数据类型间的运算 VHDL允许用户对原有的基本操作符重新定义 赋予新的含义和功能 从而建立一种新的操作符 这就是重载操作符 定义这种操作符的函数称为重载函数 事实上 在程序包STD LOGIC UNSIGNED中已定义了多种可供不同数据类型间操作的运算符重载函数 STD LOGIC ARITH STD LOGIC UNSIGNED和STD LOGIC SIGNED中已经为许多类型的运算重载了算术运算符和关系运算符 因此只要引用这些程序包 SINGEND UNSIGEND STD LOGIC和INTEGER之间即可混合运算 INTEGER STD LOGIC和STD LOGIC VECTOR之间也可以混合运算 2 4 4重载运算符 libraryIEEE useIEEE std logic 1164 all packagestd logic arithistypeUNSIGNEDisarray NATURALrange ofSTD LOGIC typeSIGNEDisarray NATURALrange ofSTD LOGIC subtypeSMALL INTisINTEGERrange0to1 function L UNSIGNED R UNSIGNED returnUNSIGNED function L SIGNED R SIGNED returnSIGNED function L UNSIGNED R SIGNED returnSIGNED function L SIGNED R UNSIGNED returnSIGNED function L UNSIGNED R INTEGER returnUNSIGNED function L INTEGER R UNSIGNED returnUNSIGNED function L SIGNED R INTEGER returnSIGNED function L INTEGER R SIGNED returnSIGNED function L UNSIGNED R STD ULOGIC returnUNSIGNED function L STD ULOGIC R UNSIGNED returnUNSIGNED function L SIGNED R STD ULOGIC returnSIGNED function L STD ULOGIC R SIGNED returnSIGNED 例 Std logic arith程序包中的部分重载运算符 function L UNSIGNED R UNSIGNED returnSTD LOGIC VECTOR function L SIGNED R SIGNED returnSTD LOGIC VECTOR function L UNSIGNED R SIGNED returnSTD LOGIC VECTOR function L SIGNED R UNSIGNED returnSTD LOGIC VECTOR function L UNSIGNED R INTEGER returnSTD LOGIC VECTOR function L INTEGER R UNSIGNED returnSTD LOGIC VECTOR function L SIGNED R INTEGER returnSTD LOGIC VECTOR function L INTEGER R SIGNED returnSTD LOGIC VECTOR function L UNSIGNED R STD ULOGIC returnSTD LOGIC VECTOR function L STD ULOGIC R UNSIGNED returnSTD LOGIC VECTOR function L SIGNED R STD ULOGIC returnSTD LOGIC VECTOR function L STD ULOGIC R SIGNED returnSTD LOGIC VECTOR function L UNSIGNED R UNSIGNED returnUNSIGNED function L SIGNED R SIGNED returnSIGNED endStd logic arith VHDL操作符列表 VHDL操作符优先级 VHDL语句类型 并行语句在architecture的begin和end之间 与书写顺序无关 每一条并发语句均可用一个process语句等价 顺序语句只能在process和子程序中使用 与语句的书写顺序有关 语句类型分 顺序语句和并行语句 第三章VHDL顺序语句 一 顺序语句概念 顺序语句的特点是 每一条顺序语句的执行顺序是与它们的书写顺序基本一致的 顺序语句只能出现在进程 Process 和子程序中 子程序包括函数 Function 和过程 Procedure 二 种类 赋值语句流程控制语句等待语句 子程序调用语句返回语句空操作语句 3 1进程语句 Process语句 输入信号发生变化时 电路启动进行计算 进程语句是由顺序语句构成的 通过信号与结构体其余部分进行信息交流 在进程中有一个敏感信号列表 表中列出的任何信号的改变都将启动进程 执行进程内相应的顺序语句 进程语句是将并行语句和顺序语句区分开来的标志之一 语法格式 进程标号 Process 敏感信号列表 Variabledeclarations 变量声明Begin顺序语句 EndProcess 标号 Process sel x1 x2 Beginf x1 Ifsel 1thenf x2 endif Endprocess Process sel x1 x2 BeginIfsel 1thenf x2 endif f x1 Endprocess 在第二个进程中 无论什么情况 f x1 而在第一个进程中 只有信号sel 1时 f x1 因此 语句的排列顺序很重要 会影响信号的输出结果 区别 3 2赋值语句 赋值语句包括变量赋值语句和信号赋值语句 前者的赋值是立刻发生的 后者的赋值发生在一个进程结束的时刻 并延时进行 变量赋值目标 赋值源 信号赋值目标 赋值源 在同一进程中 同一信号赋值目标有多个赋值源时 信号赋值目标获得的是最后一个赋值源的值 其前面相同的赋值目标不做任何变化 注 3 2 1信号和变量赋值 执行结果为 x cxorb y cxorb 执行结果为 x cxora y cxorb 3 2 2信号和变量赋值举例 1 标识符赋值目标 Variablea b std logic Signalc std logic vector 1to4 a 1 b 0 c 1100 c 3 1 注 一位值用单引号 多位值用双引号 2 段赋值 Signalc std logic vector 1to4 c 1to2 10 c 1to4 1010 3 块赋值 Signala b c d std logic Signals std logic vector 1to4 s 0100 a b c d s 位置关联 Variablee f std logic Variableg std logic vector 1to2 Variableh std logic vector 1to4 e 0 f 1 g 10 h e 3 f 4 g 1 2 g 2 1 名称关联 结果 h的值为 0101 Libraryieee Useieee std logic 1164 all Entitydff1isPort clk d instd logic q outstd logic Enddff1 Architecturebhvofdff1isSignala b std logic Beginprocess clk beginIfrising edge clk thena d b a q b Endif Endprocess Endbhv 例1 信号赋值 例2 变量赋值 Libraryieee Useieee std logic 1164 all Entitydff1isPort clk d instd logic q outstd logic Enddff1 Architecturebhvofdff1isBeginprocess clk Variablea b std logic beginIfrising edge clk thena d b a q b Endif Endprocess Endbhv 例2 变量赋值生成图形 例1 信号赋值生成的图形 3 3流程 转向 控制语句 3 3 1IF语句 语法格式 If条件1Then语句1 Elsif条件2Then语句2 Elsif条件3Then语句3 else语句n Endif 根据条件进行相应赋值操作 例1 Process A BeginIfA 00 thenY D0 elsifA 01 thenY D1 elsifA 10 thenY D2 elseY D3 endif endprocess 一 第一种IF语句 IF条件句THEN顺序语句ENDIF 例题 语句格式 IF a b THENout 1 ENDIF 二 第二种IF语句 IF条件句THEN顺序语句1ELSE顺序语句2ENDIF 语句格式 例题 IF a b THENout 1 ELSEout 0 ENDIF 三 第三种IF语句 语法格式 If条件句1Then顺序语句1 Elsif条件句2Then顺序语句2 Elsif条件语句3Then顺序语句3 else顺序语句n Endif 语句格式 例题1 Signala b c p1 p2 z bit PROCESS P1 P2 ISBEGINIF p1 1 THENz a ELSIF p2 0 THENz b ELSEz c ENDIF ENDPROCESS 选择方式 c b a a 画线部分意思 ELSIF p1 0 andp2 0 注 例题2 8线 3线优先编码器 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYcoderIS PORT I INSTD LOGIC VECTOR 0TO7 Y OUTSTD LOGIC VECTOR 1TO3 ENDcoder 实体设计 功能 设计元件外观 ARCHITECTUREa1orcoderIS Begin IF I 7 1 THENY 111 ELSIF I 6 1 THENY 110 ELSIF I 5 1 THENY 101 ELSIF I 4 1 THENY 100 ELSIF I 3 1 THENY 011 ELSIF I 2 1 THENY 010 ELSIF I 1 1 THENY 001 ELSEY 000 ENDa1 结构体设计 功能 描述输入和输出之间的逻辑关系 ENDIF Begin Process A is ENDprocess 练习题 设计一个3线 8线译码器 元件外观 输入输出逻辑关系 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYcoderIS PORT A INSTD LOGIC VECTOR 1TO3 Y OUTSTD LOGIC VECTOR 7DOWNTO0 ENDcoder 实体设计 功能 设计元件外观 ARCHITECTUREa1OFcoderIS Begin IFA 000 THENY 00000001 ELSIFA 001 THENY 00000010 ELSIFA 010 THENY 00000100 ELSIFA 011 THENY 00001000 ELSIFA 100 THENY 00010000 ELSIFA 101 THENY 00100000 ELSIFA 110 THENY 01000000 ELSEY 10000000 ENDa1 结构体设计 功能 描述输入和输出之间的逻辑关系 ENDIF Process A is Begin endprocess 3 3 2Case When语句 作用 根据条件进行相应的赋值操作 语法格式 Case表达式IsWhen选择值1 顺序语句1 When选择值2 顺序语句2 whenothers 顺序语句n Endcase CASE语句根据满足的条件直接选择多项顺序语句的一项执行 不是信号赋值符号 其意思等价于 THEN 注 例题1 用CASE语句设计四选一数据选择器 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALLENTITYmux41ISPORT s1 s2 instd logic a b c d instd logic z outstd logic ENDENTITYmux41 ARCHITECTUREactivOFmux41ISSIGNALs std logic vector 1downto0 BEGINSzzzzz x ENDCASE ENDPROCESS ENDactiv ARCHITECTUREactivOFmux41ISSIGNALs std logic vector 1downto0 BEGINS s1 ARCHITECTUREactivOFmux41ISSIGNALs std logic vector 1downto0 BEGINSzzzzz x ENDCASE ENDPROCESS ENDactiv 例题2 SIGNALSEL INTEGERRANGE0TO15 CASESELISWHEN0 Z1Z2Z3Z4 1 ENDCASE IF与CASE比较 IF语句中条件句之间是相与的关系 CASE语句中条件句之间是相或的关系 2 CASE条件语句必须将所有情况列出而IF则不必 3 IF语句可实现优先级 CASE语句则不可以 课堂练习题 试设计一个4位奇偶校验器 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYTEST12ISPORT D INSTD LOGIC VECTOR 3DOWNTO0 P NP OUTSTD LOGIC ENDTEST12 ARCHITECTUREAOFTEST12ISSIGNALTMP1 TMP2 TMP3 STD LOGIC BEGINTMP1 D 3 XORD 2 TMP2 D 1 XORD 0 TMP3 TMP1XORTMP2 NP TMP3XOR 1 P TMP3XOR 0 ENDA 源程序 数码显示 一 数码显示器 一 发光二极管 发光二极管特性 当加正向电压时 二极管导通并发光 利用这了一特性可制成共阴极和共阳极七段数码显示器 二 七段数码显示器 1 工作原理 共阴极接法 2 显示代码概念 9的显示代码 显示译码器 显示译码器功能 其真值表如下所示 输入代码 输出显示代码 Libraryieee Useieee std logic 1164 all Useieee std logic unsigned all EntityBCD 7isPort A instd logic vector 3downto0 Y outstd logic vector 6downto0 EndBCD 7 Archi

温馨提示

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

评论

0/150

提交评论