版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3.4 VHDL的顺序语句,变量赋值语句 信号赋值语句 IF语句 CASE语句 LOOP 语句,NEXT语句 EXIT 语句 WAIT语句,注意:这些顺序语句均包含在进程PROCESS的内部,顺序语句(Sequential Statements)用来实现模型的算法描述。,这些语句从多侧面完整地描述数字系统的硬件结构和基本逻辑功能,其中包括通信的方式、信号的赋值、多层次的元件例化以及系统行为等。,顺序语句和并行语句是VHDL程序设计中两大基本描述语句系列。,并行语句(Concurrent Statements)用来表示各模型算法描述之间的连接关系。,顺序语句只能出现在 进程(PROCESS) 过
2、程(PROCEDURE) 函数(FUNCTION) 中,其它都是并行语句。,顺序语句是相对于并行语句而言的,其特点是每一条顺序语句的执行(指仿真执行)顺序是与它们的书写顺序基本一致的,,理解,一个进程是由一系列顺序语句构成的,而进程本身属并行语句。也就是说,在同一设计实体中,所有的进程是并行执行的,每个进程内部是顺序执行的。,VHDL有如下六类基本顺序语句:,信号赋值语句 变量赋值语句,1、赋值语句,2、转向控制语句,3、等待语句,4、子程序调用语句,5、返回语句,6、空操作语句,IF语句 CASE语句 LOOP语句 NEXT语句 EXIT语句,RETURN语句,NULL语句,WAIT语句,过
3、程调用 函数调用,目的变量 := 表达式;,变量的说明和赋值限定在顺序区域内,即只能在进程或子程序中使用,它无法传递到进程之外。,目的信号 = 表达式;,例:y=1;,例:x:=15;,信号赋值可以在顺序区域内作顺序语句,也可以在结构体中当作并行语句使用。,1、赋值语句,A、变量赋值语句,B、信号赋值语句,进程中的信号赋值与变量赋值,LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC ) ; END DFF1; ARCHITEC
4、TURE bhv OF DFF1 IS SIGNAL QQ : STD_LOGIC ; BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN QQ = D1 ; END IF; Q1 = QQ ; END PROCESS ; END bhv;,进程中的信号赋值,RTL电路,LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC ) ; END DFF1; ARCHITECTUR
5、E bhv OF DFF1 IS BEGIN PROCESS (CLK) VARIABLE QQ : STD_LOGIC ; BEGIN IF CLKEVENT AND CLK = 1 THEN QQ := D1 ; END IF; Q1 = QQ ; END PROCESS ; END bhv;,进程中的变量赋值,RTL电路,LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC ) ; END DFF3; ARCHITECTUR
6、E bhv OF DFF3 IS SIGNAL A,B : STD_LOGIC ; BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN A = D1 ; B = A ; Q1= B ; END IF; END PROCESS ; END bhv;,进程中的信号赋值,RTL电路,LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC ) ; END DFF3; ARCHITEC
7、TURE bhv OF DFF3 IS BEGIN PROCESS (CLK) VARIABLE A,B : STD_LOGIC ; BEGIN IF CLKEVENT AND CLK = 1 THEN A := D1 ; B := A ; Q1= B ; END IF; END PROCESS ; END bhv;,进程中的变量赋值,RTL电路,2、流程控制语句,第一种,第二种,A、IF 语句,IF 条件句 THEN 顺序语句; END IF;,IF 条件句 THEN 顺序语句; ELSE 顺序语句; END IF;,IF语句执行时首先判断紧跟其后的 条件是否成立,若结果为TURE,则执行关
8、键件词THEN后的顺序语句,否则, 执行ELSE (或END IF)后面的语句,IF语句按书写顺序进行有序判断,比较,可实现优先级逻辑控制,IF语句常用于选择器,比较器,译码器等 需要进行条件控制的逻辑电路设计,第三种,IF 条件句1 THEN 顺序语句1; ELSIF 条件2 THEN 顺序语句2; ELSIF 条件n THEN 顺序语句n; ELSE 顺序语句n+1; END IF;,IF 条件句 Then IF 条件句 Then . END IF END IF,第 四种,例 :IF (SET=1) THEN c=b END IF;,例 : IF (sel=1) THEN c=a; ELS
9、E c=b; END IF;,例 用IF语句描述一个四选一电路,LIBRARY IEEE; USE IEEE. STE_LOGIC_1164.ALL; ENTITY mux4 IS PORT (input: IN STD_LOGIC_VECTOR (3 DOWNTO 0); sel: IN STD_LOGIC_VECTOR (1 DOWNTO 0); Y: OUT STD_LOGIC); END mux4;,ARCHITECTURE rt1 OF mux4 IS BEGIN PROCESS (input, sel) BEGIN IF (sel=”00”) THEN Y=input (0); E
10、LSIF (Sel=”01”) THEN Y=input (1); ELSIF (Sel=”10”) THEN Y=input (2); ELSE Y=input (3); END IF; END PROCESS; END rt1;,IF语句不仅可用于选择器设计,还可用于比较器,译码器等进行条件控制的逻辑设计。IF语句中至少应有一个条件句,条件句必须由布尔表达式构成,条件表达式中能使用关系运算操作及逻辑运算操作的组合表达式。,IF语句颠倒条件判别次序,会引起在综合时逻辑功能的变化,即IF语句判别条件不可颠倒。,IF语句中,先处理最起始的条件;如果不满足,再处理下一个条件。一般把条件约束最多的作
11、为起始条件。,B、CASE 语句,CASE标号: CASE 表达式 IS When 选择值 = 顺序语句; When 选择值 = 顺序语句; . When OTHERS =顺序语句; END CASE ;,选择值可以有四种不同的表达方式: 单个普通数值,如6。 数值选择范围,如(2 TO 4),表示取值为2、3或4。 并列数值,如35,表示取值为3或者5。 混合方式,以上三种方式的混合。,例 用CASE语句描述4选1多路选择器。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY MUX41 IS PORT(S1,S2: IN STD_LOGIC
12、; A,B,C,D:IN STD_LOGIC; Z: OUT STD_LOGIC); END ENTITY MUX41;,ARCHITECTURE ART OF MUX41 IS SIGNAL S :STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN SZZZZZ=X; END CASE; END PROCESS; END ARCHITECTURE ART;,(1) 条件句中的选择值必须在表达式的取值范围内。 (2) 除非所有条件句中的选择值能完整覆盖CASE语句中表达式的取值,否则最末一个条件句中的选择必须用“OTHERS”表示。 (3) CASE语句中每一条语句的选择只
13、能出现一次,不能有相同选择值的条件语句出现。 (4) CASE语句执行中必须选中,且只能选中所列条件语句中的一条。这表明CASE语句中至少要包含一个条件语句。,使用CASE语句需注意以下几点:,CASE语句常用来描写总线行为、编码器和译码器的结构。CASE语句与IF语句功能相似但CASE语句的可读性好,非常简洁。,例:case语句的误用 signal value :integer range 0 to 15; signal out_1:bit; case value is -缺少when条件语句 end case; case value is -分支条件不包含2到15 when 0 =out_
14、1out_1=0; end case,case value is -在5到10上发生重叠 when 0 to 10 = out_1 out_1=0; end case;,C、LOOP 语句,用法示例: L2 :LOOP a := a+1; EXIT L2 WHEN a 10 ; - 当a大于10时跳出循环 END LOOP L2; .,(1)无限LOOP语句,其语法格式如下:,标号: LOOP 顺序语句; END LOOP 标号 ;,标号: FOR 循环变量 IN 循环次数范围 LOOP 顺序语句; END LOOP 标号;,(2)FOR LOOP语句,语法格式如下:,循环变量由循环次数范围确
15、定其类型,无需声明。循环变量可用在循环体中,但一旦循环结束,循环变量不再起作用,即不能把循环变量的值带到循环体外。,用法示例: FOR I IN 0 TO 7 LOOP Tmp:=tmp XOR a (I); END LOOP;,标号: WHILE 条件 LOOP 顺序语句; END LOOP 标号;,(3)WHILE LOOP语句,语法格式如下:,用法示例: WHILE i4 LOOP b:=b AND a(i); vout (i):=b; I:=I+1; END LOOP;,D、NEXT 语句,NEXT; - 第一种语句格式 NEXT LOOP 标号; - 第二种语句格式 NEXT LOO
16、P 标号 WHEN 条件表达式; - 第三种语句格式,NEXT有三种用法,其语法格式如下:,当LOOP 标号缺省时,则执行NEXT 语句时,即刻无条件终止当前的循环,跳回到本次循环LOOP语句开始处,开始下一次循环,否则跳转到指定标号的LOOP语句开始处,重新开始执行循环操作。若WHEN子句出现并且条件表达式的值为TRUE,则执行NEXT语句,进入跳转操作,否则继续向下执行。,D、NEXT 语句,在loop语句中next语句用来跳出本次循环。 格式如下: next LOOP 标号 when 条件表达式; 分三种情况: 1) next: 无条件终止当前的循环,跳回到本次循环LOOP语句的开始,开
17、始下次循环。,2) next loop 标号; 无条件终止当前的循环,跳转到指定标号的LOOP语句的开始处,重新开始执行循环操作。 3) next 标号 when 条件表达式; 当条件表达式的值为true,则执行next语句,进入跳转操作,否则继续向下执行。,用法示例: L1: FOR CNT IN 1 TO 8 LOOP S1:A(CNT):=0; NEXT WHEN (B=C); S2 :A(CNT+8):=0; END LOOP L1;,当程序执行到NEXT语句时,如果条件判断式(b=c)的结果为TRUE,将执行NEXT语句,并返回到L1,使cnt加1后执行S1开始的赋值语句,否则执行S
18、2开始的赋值语句。,E、EXIT 语句,EXIT; - 第一种语句格式 EXIT LOOP 标号; - 第二种语句格式 EXIT LOOP 标号 WHEN 条件表达式; - 第三种语句格式,EXIT有三种用法,其语法格式如下:,这种语句格式与前述的NEXT 语句的格式和操作功能非常相似,唯一的区别是NEXT语句是跳向LOOP 语句的起始点,而EXIT语句则是跳向LOOP语句的终点。,EXIT语句为程序需要处理保护、出错和警告状态时,提供了一种快捷、简便的调试方法。,3、等待语句,WAIT语句,wait - 无限等待 wait on - 敏感信号量变化 wait until - 条件满足(可综合
19、) wait for - 时间到,WAIT有四种用法,其语法格式如下:,用法示例1: SIGNAL s1,s2 : STD_LOGIC; . PROCESS BEGIN . WAIT ON s1,s2 ; END PROCESS ;,WAIT ON 信号表 UNTIL 条件表达式 FOR 时间表达式;,用法示例2: . Wait until enable =1;,单独的WAIT表示永远挂起。,一般地,只有WAIT_UNTIL格式的等待语句可以被综合器接受(其余语句格式只能在VHDL仿真器中使用) ,WAIT_UNTIL语句有以下三种表达方式: WAIT UNTIL 信号=Value ; - (
20、1) WAIT UNTIL 信号EVENT AND 信号=Value; - (2) WAIT UNTIL NOT 信号STABLE AND 信号=Value; - (3),如果设clock为时钟信号输入端,以下四条WAIT语句所设的进程启动条件都是时钟上跳沿,所以它们对应的硬件结构是一样的: WAIT UNTIL clock =1; WAIT UNTIL rising_edge(clock) ; WAIT UNTIL NOT clockSTABLE AND clock =1; WAIT UNTIL clock =1 AND clockEVENT;,例: PROCESS BEGIN rst_lo
21、op : LOOP WAIT UNTIL clock =1 AND clockEVENT; - 等待时钟信号 NEXT rst_loop WHEN (rst=1); - 检测复位信号rst x = a ; - 无复位信号,执行赋值操作 WAIT UNTIL clock =1 AND clockEVENT; - 等待时钟信号 NEXT rst_loop When (rst=1); - 检测复位信号rst y = b ; - 无复位信号,执行赋值操作 END LOOP rst_loop ; END PROCESS;,VHDL规定,已列出敏感量的进程中不能使用任何形式的WAIT语句。,【例】 PRO
22、CEDURE rs (SIGNAL s , r : IN STD_LOGIC ; SIGNAL q , nq : INOUT STD_LOGIC) IS BEGIN IF ( s =1 AND r =1) THEN REPORT Forbidden state : s and r are quual to 1; RETURN ; ELSE q = s AND nq AFTER 5 ns ; nq = s AND q AFTER 5 ns ; END IF ; END PROCEDURE rs ;,【例】 FUNCTION opt (a, b, opr :STD_LOGIC) RETURN STD_LOGIC IS BEGIN IF (opr =1) THEN RETURN (a AND b); ELSE RETURN (a OR b) ; END IF ; END FUNCTION opt ;,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (完整版)墙面一般抹灰施工方案
- 消防自动喷淋系统安装施工方案及工艺方法
- 辐射安全科学防护-辐射防护教育培训
- 艾梅乙专项培训前考试试题(附答案)
- 2025年防护眼镜使用规范培训试题及答案
- 2025年公司消防应急预案方案全文
- 教学创建“绿色学校”工作计划及实施方案
- 2026年中石化福建石油分公司校园招聘笔试模拟试题及答案解析
- 铣刨沥青混凝土路面施工方案标准版
- 2026年云南省投资控股集团有限公司校园招聘考试备考题库及答案解析
- 药物安全性研究-洞察分析
- DB33T 968-2015 热处理电炉可比单位产品电耗 监测技术要求
- 农业生产安全双重预防机制实施方案
- 中建支吊架施工方案
- 湖南工程学院《机械设计基础A》2022-2023学年第一学期期末试卷
- 《农业经营与管理》考试历年真题考试题库(职校用)
- QB/T 8020-2024 冷冻饮品 冰棍(正式版)
- 数控技术实习报告3篇
- 高原性低氧症护理
- 金华市优力塑业有限公司年产36万套吹塑盒技改项目环评报告
- 小学教育本科毕业论文
评论
0/150
提交评论