第八章_VHDL基本语句

上传人:012****78 文档编号:132720419 上传时间:2020-05-19 格式:PPT 页数:94 大小:3.81MB
返回 下载 相关 举报
第八章_VHDL基本语句_第1页
第1页 / 共94页
第八章_VHDL基本语句_第2页
第2页 / 共94页
第八章_VHDL基本语句_第3页
第3页 / 共94页
第八章_VHDL基本语句_第4页
第4页 / 共94页
第八章_VHDL基本语句_第5页
第5页 / 共94页
点击查看更多>>
资源描述

《第八章_VHDL基本语句》由会员分享,可在线阅读,更多相关《第八章_VHDL基本语句(94页珍藏版)》请在金锄头文库上搜索。

1、EDA技术实用教程 第8章VHDL基本语句 8 1顺序语句8 2并行语句8 3属性描述与定义语句 8 1顺序语句 主要内容 赋值语句 IF语句和CASE语句 LOOP语句 NEXT语句 EXIT语句 WAIT语句 子程序调用语句 返回语句 RETURN 和空操作语句 NULL 在用VHDL语言描述系统硬件行为时 按语句执行顺序对其进行分类 可分为顺序语句和并行语句 或称并发语句 顺序语句 指每条顺序语句的执行 指仿真执行 顺序是与它们的书写顺序基本一致 它们只能出现在进程和子程序 包括函数和过程 中 VHDL有六类基本顺序语句 赋值语句 流程控制语句 等待语句 子程序调用语句 返回语句 空操作

2、语句 一 赋值语句1 功能 将一个值或一个表达式的运算结果传递给某一数据对象 如信号 变量或由此组成的数组 2 分类和组成 分为信号赋值语句和变量赋值语句两种 每一种赋值语句都由三个基本部分组成 即赋值目标 赋值符号 赋值源 1 赋值目标 是所赋值的受体 其基本元素只能是信号或变量 但表现形式可以有多种 如文字 标识符 数组等 2 赋值符号 只有两种 信号赋值符号是 变量赋值符号是 3 赋值源 是赋值的主体 它可以是一个数值 也可以是一个逻辑或运算表达式 VHDL规定 赋值目标与赋值源的数据类型必须严格一致 二 IF语句和CASE语句1 IF语句 作为一种条件语句 它根据语句中所设置的一种或多

3、种条件 有选择地执行指定的顺序语句 其语句结构为 1 IF条件句Then顺序语句ENDIF 2 IF条件句Then顺序语句ELSE顺序语句ENDIF 3 IF条件句ThenIF条件句Then ENDIFENDIF 4 IF条件句Then顺序语句ELSIF条件句Then顺序语句 ELSE顺序语句ENDIF 注 10IF语句中至少应有一个条件句 条件句 可是一个BOOLEAN类型的标识符 如IFalTHEN 或是一个判别表达式 如IFa b 1THEN 判别表达式输出的值 即判断结果的数据类型是BOOLEAN 20IF语句根据条件句产生的判断结果是true或是false 有条件地选择执行其后的顺序

4、语句 2 CASE语句 根据满足的条件直接选择多项顺序语句中的一项执行 CASE语句的结构如下 CASE表达式ISWhen选择值 顺序语句 When选择值 顺序语句 ENDCASE 当执行到CASE语句时 首先计算表达式的值 然后根据条件句中与之相同的选择值 执行对应的顺序语句 最后结束CASE语句 表达式可以是一个整数类型或枚举类型的值 也可以是由这些数据类型的值构成的数组 多条件选择值的一般表达式为 选择值 选择值 选择值可以有四种不同的表达方式 单个普通数值 如6 数值选择范围 如 2TO4 表示取值为2 3或4 并列数值 如3 5 表示取值为3或者5 混合方式 以上三种方式的混合 注

5、使用CASE语句注意事项 1 条件句的选择值必须在表达式的取值范围内 2 除非所有条件句中的选择值能完整覆盖CASE语句中表达式的取值 否则最末一个条件句中的选择必须用 OTHERS 表示 它代表已给的所有条件句中未能列出的其它可能的取值 关键词OTHERS只能出现一次 且只能作为最后一种条件取值 3 CASE语句中每一条件句的选择值只能出现一次 不能有相同选择值的条件语句出现 4 CASE语句执行中必须选中且只能选中所列条件语句中的一条 这表明CASE语句中至少包含一个条件语句 例9 1描述的4选1选择器是用IF语句和CASE语句共同完成的 它是根据4位输入码确定输出中哪一位输出为1 选择表

6、达式的数据类型是整数型 例8 1 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYmux41ISPORT s4 s3 s2 s1 INSTD LOGIC z4 z3 z2 z1 OUTSTD LOGIC ENDmux41 ARCHITECTUREactivOFmux41ISSIGNALsel INTEGERRANGE0TO15 BEGIN 接下页 PROCESS sel s4 s3 s2 s1 BEGINselz1z2z3z4 1 当sel为8 15中任一值时选中ENDCASE ENDPROCESS ENDactiv 例8 2 CASE语句使用中容易发

7、生的错误SIGNALvalue INTEGERRANGE0TO15 SIGNALout1 STD LOGIC CASEvalueIS 缺少以WHEN引导的条件句ENDCASE CASEvalueWHEN0 out1out1out1out1 0 ENDCASE 例8 3 算术逻辑单元的VHDL描述 CASE语句混合了IF THEN语句 LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL USEIEEE STD LOGIC UNSIGNED ALL ENTITYaluISPORT a b INSTD LOGIC VECTOR 7DOWNTO0 opcode INSTD L

8、OGIC VECTOR 1DOWNTO0 result OUTSTD LOGIC VECTOR 7DOWNTO0 ENDalu ARCHITECTUREbehaveOFaluISCONSTANTplus STD LOGIC VECTOR 1DOWNTO0 b 00 CONSTANTminus STD LOGIC VECTOR 1DOWNTO0 b 01 CONSTANTequal STD LOGIC VECTOR 1DOWNTO0 b 10 CONSTANTnot equal STD LOGIC VECTOR 1DOWNTO0 b 11 BEGINPROCESS opcode a b BEGI

9、NCASEopcodeISWHENplus resultresult a b相等 IF a b THENresult a b不相等IF a b THENresult x 01 ELSEresult x 00 ENDIF ENDCASE ENDPROCESS ENDbehave 与IF语句相比 CASE语句组的程序可读性比较好 CASE语句中条件句的次序是不重要的 它的执行过程更接近于并行方式 一般地 综合后对相同的逻辑功能 CASE语句比IF语句的描述耗用更多的硬件资源 不但如此 对于有的逻辑 CASE语句无法描述 只能用IF语句来描述 这是因为IF THEN ELSIF语句具有条件相与的功能

10、和自动将逻辑值 包括进去的功能 逻辑值 有利于逻辑的化简 而CASE语句只有条件相或的功能 三 LOOP语句 NEXT语句 EXIT语句 WAIT语句1 LOOP语句 就是循环语句 它可使所包含的一组顺序语句被循环执行 其执行次数可由设定的循环参数决定 常用表达方式有两种 1 单个LOOP语句 其语法格式如下 LOOP标号 LOOP顺序语句ENDLOOP LOOP标号 这种循环方式是一种最简单的语句形式 其循环方式需引入其它控制语句 如EXIT语句 后才能确定 LOOP标号 可任选 用法示例如下 L2 LOOPa a 1 EXITL2WHENa 10 当a大于10时跳出循环ENDLOOPL2

11、2 FOR LOOP语句 语法格式如下 LOOP标号 FOR循环变量IN循环次数范围LOOP顺序语句ENDLOOP LOOP标号 FOR后的 循环变量 是一个临时变量 属LOOP语句的局部变量 不必事先定义 该变量只能作为赋值源 不能被赋值 它由LOOP语句自动定义 使用时应当注意 在LOOP语句范围内不要再使用其它与此循环变量同名的标识符 循环次数范围 规定LOOP语句中的顺序语句被执行的次数 循环变量从循环次数范围的初值开始 每执行完一次顺序语句后递增1 直到达到循环次数范围指定的最大值 LOOP语句循环的范围最好以常数表示 否则 在LOOP体内的逻辑可重复任何可能的范围 这样将导致耗费过

12、大的硬件资源 综合器不支持没有约束条件的循环 例8 4 8位奇偶校验逻辑电路的VHDL程序LIBRARYIEEE USEIEEE STD LOGIC 1164 ALL ENTITYp checkISPORT a INSTD LOGIC VECTOR 7DOWNTO0 y OUTSTD LOGIC ENDp check ARCHITECTUREoptOFp checkISSIGNALtmp STD LOGIC BEGINPROCESS a BEGINtmp 0 FORnIN0TO7LOOPtmp tmpXORa n ENDLOOP y tmp ENDPROCESS ENDopt 奇数为1 偶数为

13、0 例8 5 利用LOOP语句中的循环变量简化同类顺序语句的表达式SIGNALa b c STD LOGIC VECTOR 1TO3 FORnIN1To3LOOPa n b n ANDc n ENDLOOP 此段程序等效于顺序执行以下三个信号赋值操作 a 1 b 1 ANDc 1 a 2 b 2 ANDc 2 a 3 b 3 ANDc 3 LOOP循环的范围最好以常数表示 否则 在LOOP体内的逻辑可以重复任何可能的范围 这样将导致耗费过大的硬件资源 综合器不支持没有约束条件的循环 2 NEXT语句主要用在LOOP语句执行中进行有条件的或无条件的转向控制 其语句格式有三种 NEXT 第一种语句

14、格式 无条件终止当前循环 NEXTLOOP标号 第二种语句格式第二种语句格式功能与第一种语句格式基本相同 当有多重LOOP语句嵌套时 可转到指定标号的LOOP语句处 重新始循环操作 NEXTLOOP标号WHEN条件表达式 第三种语句格式第三种语句格式 分句 WHEN条件表达式 是执行NEXT语句的条件 如果条件表达式的值为TRUE 则执行NEXT语句 进入跳转操作 否则继续向下执行 但当只有单层LOOP循环语句时 关键词NEXT与WHEN之间的 LOOP标号 可省去 例8 6 当只有单层LOOP循环语句时 关键词NEXT与WHEN之间的 LOOP标号 可省去 L1 FORcnt valueIN

15、1TO8LOOPs1 a cnt value 0 NEXTWHEN b c s2 a cnt value 8 0 ENDLOOPL1 上例中 当程序执行到NEXT语句时 如果条件判断式 b c 的结果为TURE 将执行NEXT语句 并返回到L1 使cnt value加1后执行s1开始的赋值语句 否则将执行s2开始的赋值语句 例8 7 多重循环中 NEXT语句必须加上跳转标号 L x FORcnt valueIN1TO8LOOPs1 a cnt value 0 k 0 L y LOOPs2 b k 0 NEXTL xWHEN e f s3 b k 8 0 k k 1 NEXTLOOPL y NE

16、XTLOOPL x 当e f为TURE时执行语句NEXTL x 使cnt value加1 从s1处开始执行语句 若为FALSE 则执行s3后使k加1 3 EXIT语句 同NEXT语句相似 是LOOP语句的内部循环控制语句 有三种格式 EXIT 第一种语句格式EXITLOOP标号 第二种语句格式EXITLOOP标号WHEN条件表达式 第三种语句格式注 NEXT语句转向LOOP语句的起始点 EXIT语句转向LOOP语句的终点 例8 8 两元素位矢量值比较程序 当发现比较值a与b不同时 由EXIT语句跳出循环比较程序 并报告比较结果 SIGNALa b STD LOGIC VECTOR 1DOWNTO0 SIGNALa less then b Boolean a less then bbEXIT ELSIF a i 0 ANDb i 1 THENa less then b TRUE a bEXIT ELSENULL ENDIF ENDLOOP 当i 1时返回LOOP语句继续比较NULL为空操作语句 是为了满足ELSE的转换 当此程序先比较a和b的高位 高位是1者为大 输出判断结果TRUE或F

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号