[信息与通信]CH9_VHDL基本语句.ppt
《[信息与通信]CH9_VHDL基本语句.ppt》由会员分享,可在线阅读,更多相关《[信息与通信]CH9_VHDL基本语句.ppt(31页珍藏版)》请在三一文库上搜索。
1、2019/1/30,1,第九章 VHDL基本语句,主要内容 顺序语句 变量说明语句 变量赋值语句 信号赋值语句 IF语句 CASE语句 LOOP语句 NEXT语句 EXIT语句 WAIT语句 NULL语句 RETURN语句 过程调用语句,2019/1/30,2,并行语句 并行信号赋值语句 BLOCK(块)语句 PROCESS(进程)语句 并行过程调用语句 GENERATE(生成)语句 元件例化语句 预定义信号属性 实验四,2019/1/30,3,一. 顺序语句 CASE语句 语法: CASE 表达式 IS WHEN 选择值 = 顺序语句; WHEN 选择值 = 顺序语句; END CASE;
2、例91: ENTITY CaseExap IS PORT (a: IN STD_LOGIC_VECTOR (4 DOWNTO 0); q: OUT STD_LOGIC_VECTOR (2 DOWNTO 0) ); END CaseExap;,2019/1/30,4,ARCHITECTURE arch_CaseExap OF CaseExap IS BEGIN PROCESS (a) BEGIN CASE a IS WHEN “00000” = q q q = “000”; END CASE; END PROCESS; END arch_CaseExap; 上例中由于向量是没有范围的,而程序中对
3、向量指定了范围,因而出错。可先将向量转为整数来实现上述想法,具体如例92:,2019/1/30,5,例92: ARCHITECTURE arch_CaseExap OF CaseExap IS BEGIN PROCESS (a) VARIABLE int: INTEGER RANGE 0 TO 31; BEGIN int := CONV_INTEGER (a) CASE int IS WHEN 0 = q q q = “000”; END CASE; END PROCESS; END arch_CaseExap;,2019/1/30,6,LOOP语句 LOOP语句使程序进行有规则的循环,循环的
4、次数受迭代算法的控制。LOOP语句一般有两种格式: 单个LOOP语句 语法: 标号: LOOP 顺序语句; END LOOP 标号; 上述语句中需要加入其他控制语句(如EXIT语句)才能构成循环。,2019/1/30,7,FOR-LOOP语句 语法: 标号: FOR IN LOOP 顺序语句; END LOOP 标号; 例: asum: FOR i IN 1 TO 9 LOOP -9次 sum := i + sum; END LOOP asum; LOOP循环的范围最好以常数表示,否则在LOOP体内的逻辑可以重复任何可能的范围,这将导致过大的硬件资源,综合器不支持没有约束条件的循环。,2019
5、/1/30,8,NEXT语句 语法: NEXT 标号 WHEN 条件; 在LOOP语句中,NEXT语句用于跳出本次循环。NEXT语句后跟的标号表示下一次迭代的起始位置,WHEN条件表明了NEXT语句的执行条件。如果NEXT语句后既无标号也无WHEN条件,则执行到该语句就立即无条件跳出本次循环,从LOOP语句的起始位置进入下一次循环。 EXIT语句 语法: EXIT 标号 WHEN 条件; EXIT语句与NEXT语句类似也是LOOP语句中使用的循环控制语句,与NEXT语句不同的是,执行EXIT将结束循环状态,从LOOP语句中跳出结束LOOP语句的正常执行。,2019/1/30,9,WAIT语句
6、WAIT语句可以设置4种不同的条件:无限等待、时间到、条件满足和敏感信号量变化。 WAIT -无限等待 WAIT ON -敏感信号量变化 WAIT UNTIL -条件满足 WAIT FOR -时间到 WAIT ON 语法: WAIT ON 信号, 信号, ; WAIT ON后所列的信号中只要有一个发生变化,其所在进程将结束挂起状态,而继续执行WAIT ON语句的后继语句。,2019/1/30,10,WAIT UNTIL 语法: WAIT UNTIL 布尔表达式; WAIT UNTIL后跟的是布尔表达式,当进程执行到该句时被挂起,直到表达式为真时,进程才被再次启动。 WAIT FOR 语法: W
7、AIT FOR 时间表达式; WAIT FOR后跟的是时间表达式,当进程执行到该句时被挂起,直到指定的等待时间到时,进程再开始执行后继语句。,2019/1/30,11,多条件WAIT语句 前面3个WAIT语句中,等待的条件都是单一的,要么是信号量,要么是布尔量,要么是时间量。实际上WAIT语句可以同时使用多个等待条件,如: WAIT ON a, b UNTIL (a=1) OR (b=1) FOR 5ns; 上述语句等待的是3个条件: 1) 信号量a和b任何一个有一次新的变化; 2) 信号量a或b取值为1; 3) 该语句已等待5ns。 只要上述条件中有一个或多个满足,进程将再次启动,继续执行W
8、AIT语句后的语句。,2019/1/30,12,子程序调用语句 子程序包括过程和函数,可以在结构体和程序包中的任何位置对子程序进行调用。 从硬件的角度讲,一个子程序的调用类似与一个元件模块的例化,也即VHDL综合器为子程序的每一次调用都生成一个电路逻辑块。 过程调用 调用过程的语句格式: 过程名 (形参名=实参表达式, 形参名=实参表达 式, );,2019/1/30,13,例9-3: PACKAGE data_types IS -定义程序包 SUBTYPE data_element IS INTEGER RANGE 0 TO 3; -定义数据类型 TYPE data_array IS ARR
9、AY (1 TO 3) OF data_element; END data_types; USE WORK.data_types.ALL; -打开当前工作库中的程序包 ENTITY sort IS PORT( in_array: IN data_array; out_array: OUT data_array); END sort;,2019/1/30,14,ARCHITECTURE arch_sort OF sort IS BEGIN PROCESS (in_array) PROCEDURE swap( data: INOUT data_array; low, high: IN INTEGE
10、R) IS VARIABLE temp: data_element; BEGIN IF (data(low) data(high) THEN temp := data(low); data(low) := data(high); data(high) := temp; END IF; END swap; VARIABLE my_array: data_array; BEGIN my_array := in_array; -将输入值读入变量 swap(my_array, 1, 2); -比较my_array1和my_array2,定义过程,2019/1/30,15,swap(my_array,
11、2, 3); -比较my_array2和my_array3 -确定最大值到my_array3 swap(my_array, 1, 2); -重新比较my_array1和 - my_array2, 确定最小值到my_array1 out_array = my_array; -结果输出 END PROCESS; END arch_sort; 上述程序中,过程swap的功能是对一个数组中指定的两个元素比较大小,并调整相应的大小顺序。 整个程序的功能是对in_array110、 in_array210 in_array310三个元素比较大小,比较结果按小到大分别输出到out_array110、 out
12、_array210和out_array310。 例83的仿真结果见图81。,2019/1/30,16,图91 例93的仿真结果,2019/1/30,17,函数调用 与过程调用十分相似,不同之处在于,函数调用将返回一个指定数据类型的值。 RETURN(返回)语句 两种语句格式: RETURN; -只能用于过程,结束过程 RETURN 表达式; -只能用于函数,结束后返回一个值 NULL语句 语句格式: NULL; 空操作语句,不完成任何操作,用于增加可读性,在CASE语句中,用于排除其它不用的条件。,2019/1/30,18,并行语句 并行信号赋值语句 并行信号赋值语句有三种形式: 简单信号赋值
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息与通信 信息 通信 CH9_VHDL 基本 语句
链接地址:https://www.31doc.com/p-2000518.html