第10章VHDL顺序语句_第1页
第10章VHDL顺序语句_第2页
第10章VHDL顺序语句_第3页
第10章VHDL顺序语句_第4页
第10章VHDL顺序语句_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

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

文档简介

1、并行语句并行语句 并行语句在执行顺序的地位上是平等的,其执并行语句在执行顺序的地位上是平等的,其执行顺序与书写顺序无关。每一并行语句内部的语句行顺序与书写顺序无关。每一并行语句内部的语句运行方式可以有顺序和并行两种不同的方式。运行方式可以有顺序和并行两种不同的方式。功能描述语句功能描述语句 顺序语句顺序语句 顺序语句是指完全按照程序中书写的顺序执顺序语句是指完全按照程序中书写的顺序执行各语句,并且在结构层次中前面的语句执行结行各语句,并且在结构层次中前面的语句执行结果会直接影响后面各语句的执行结果。果会直接影响后面各语句的执行结果。顺序描述顺序描述语句只能出现在进程或子程序中。语句只能出现在进

2、程或子程序中。顺序语句顺序语句基本的顺序语句包括:基本的顺序语句包括:赋值语句赋值语句IF语句语句CASE语句语句LOOP语句语句REPORT语句语句变量赋值语句特点变量赋值语句特点 具有具有局部局部特征,有效性只局限于所定义的特征,有效性只局限于所定义的一个进程中,或一个子程序中。对于变量的赋一个进程中,或一个子程序中。对于变量的赋值是立即发生的。值是立即发生的。变量赋值语句举例:变量赋值语句举例:VARIABLE via1 : INTEGER ;via1 := 12 ;赋值语句赋值语句变量赋值语句、信号赋值语句变量赋值语句、信号赋值语句信号赋值语句信号赋值语句信号赋值语句特点信号赋值语句特

3、点 具有具有全局性全局性特征,不但可以作为一个设计特征,不但可以作为一个设计实体内部各单元之间数据传送的载体,而且可实体内部各单元之间数据传送的载体,而且可通过信号与其他实体通信。通过信号与其他实体通信。信号赋值语句举例信号赋值语句举例SIGNAL sig1 : INTEGER ;sig1 = 12 ;一、第一种一、第一种IF语句语句IF 条件句条件句 THEN 顺序语句顺序语句END IF语句语句格式格式流程控制语句流程控制语句if语句语句(课本(课本165165页)页) 首先判断语句中所指定的条件是否成立。如果条首先判断语句中所指定的条件是否成立。如果条件成立,则程序继续执行件成立,则程序

4、继续执行IF语句中所含的顺序处理语语句中所含的顺序处理语句;如果条件不成立,则跳过不执行,句;如果条件不成立,则跳过不执行, IF语句结束。语句结束。当当CP=0时,触发器不工作,处于维持状态。时,触发器不工作,处于维持状态。当当CP=1时,它的功能如下:时,它的功能如下:当当D=0时,次态时,次态=0,当当D=1时,次态时,次态=1。CPDQDFFD触发器的设计:触发器的设计:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff1 IS PORT(cp : IN STD_LOGIC; d: IN STD_LOGIC; q: OUT STD_L

5、OGIC);END dff1;CPDQDFFARCHITECTURE bhv OF dff1 ISSIGNAL q1 : STD_LOGIC;BEGIN PROCESS (cp) BEGIN IF(clkEVENT)and cp=1 THEN q1 = d; END IF; q=q1; END PROCESS;END bhv;当当CP=0时,触发器不时,触发器不工作,处于维持状态。工作,处于维持状态。当当CP=1时时:D=0时,次态时,次态=0,D=1时,次态时,次态=1。二、第二种二、第二种IF语句语句IF 条件句条件句 THEN 顺序语句顺序语句1ELSE 顺序语句顺序语句2END IF语

6、句语句格式格式例题例题P166IF a then n:=b;else n:=c; end IF 三、第三种三、第三种IF语句语句If 条件句条件句1 Then顺序语句顺序语句1;Elsif 条件句条件句2 Then顺序语句顺序语句2;Elsif 条件语句条件语句3 Then顺序语句顺序语句3;.else顺序语句顺序语句n+1;End if;语语句句格格式式例题:例题:Signal a,b,c,p1,p2,z : bit;IF (p1=1) THENz =a;ELSIF (p2=0) THENz = b;ELSEz = c;END IF;P P1 1P P2 2Z Z0 00 00 01 11

7、10 01 11 1cbaa画线部分意思:画线部分意思:ELSIF (p1=0 and p2=0)注意:注意:例题:例题:8线线3线优先编码器线优先编码器编编码码器器I I0 0I I1 1I I2 2I I3 3I I4 4I I5 5I I6 6I I7 7Y Y2 2Y Y1 1Y Y3 3I7 7 I6 6 I5 5 I4 4 I3 3 I2 2 I1 1 I0 0 Y3 Y3 Y2 Y2 Y1 Y11 11 11 11 10 01 11 11 10 00 00 01 11 10 01 10 00 00 01 11 10 00 00 00 00 00 01 10 01 11 10 00

8、 00 00 00 01 10 01 10 00 00 00 00 00 00 01 10 00 01 10 00 00 00 00 00 00 01 10 00 00 0说明:数据类型为说明:数据类型为std_logicLIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL;ENTITY coder ISPORT(I : IN STD_LOGIC_VECTOR(0 TO 7);Y: OUT STD_LOGIC_VECTOR(1 TO 3);END ENTITY coder ;编编码码器器I I0 0I I1 1I I2 2I I3 3I I4 4I I5 5I I

9、6 6I I7 7Y Y2 2Y Y1 1Y Y3 3实实 体体 设设 计计功能:设计元件外观功能:设计元件外观ARCHITECTURE a1 of coder ISBegin IF (I(7)=1) THEN Y=“111”;ELSIF (I(6)=1) THEN Y=“110”;ELSIF (I(5)=1) THEN Y=“101”;ELSIF (I(4)=1) THEN Y=“100”;ELSIF (I(3)=1) THEN Y=“011”;ELSIF (I(2)=1) THEN Y=“010”;ELSIF (I(1)=1) THEN Y=“001”;ELSE Y=“000”;A7 A7

10、 A6 A6 A5 A5 A4 A4 A3 A3 A2 A2 A1 A1 A0 A0 Y3 Y3 Y2 Y2 Y1 Y11 11 11 11 10 01 11 11 10 00 00 01 11 10 01 10 00 00 01 11 10 00 00 00 00 00 01 10 01 11 10 00 00 00 00 01 10 01 10 00 00 00 00 00 00 01 10 00 01 10 00 00 00 00 00 00 01 10 00 00 0END ARCHITECTURE a1;结结 构构 体体 设设 计计功能:描述输入和输出之间的逻辑关系功能:描述输入和输

11、出之间的逻辑关系END IF;PROCESS( I )END PROCESS;Library ieee;use ieee.std_logic_1164.all;entity mux4 isPort( cdata: in std_logic_vector(3 downto 0); sel: in std_logic_vector(1 downto 0); creset: in std_logic; q: out std_logic);end entity mux4 ;例:例:带复位端的带复位端的4选选1选择器的设计选择器的设计architecture rt1 of mux4 isbeginpro

12、cess(creset) begin if(creset=1) then if(sel=“00”) then q=cdata(0); elsif(sel=“01”) then q=cdata(1); elsif(sel=“10”) then q=cdata(2); else q=cdata(3); end if; else q=0; end if;end process;end architucture rt1; IF语句的条件判断输出是布尔量。语句的条件判断输出是布尔量。小结小结 IF语句可用于选择器、比较器、编码器语句可用于选择器、比较器、编码器和译码器等凡是可以进行条件控制的逻和译码器等

13、凡是可以进行条件控制的逻辑电路的设计,是辑电路的设计,是VHDL的最基础、最的最基础、最常用的语句。常用的语句。 IF语句具有优先级。语句具有优先级。NULL语句格式:语句格式:NULL; 不执行任何操作不执行任何操作 常用于常用于CASE语句中,用于表示在某些条件下语句中,用于表示在某些条件下对输出不做任何改变。对输出不做任何改变。NULL语句语句CASE语句语句(课本(课本73页)页)1. CASE语句表达结构语句表达结构CASE ISWHEN = ; WHEN = ;WHEN OTHERS = ;END CASE;选择值有选择值有4种不同的表达方式:种不同的表达方式:1. 单个普通数值:

14、如单个普通数值:如 6, “10101010”, 02. 数值选择范围:如数值选择范围:如 (2 TO 4),表示),表示2,3,43. 并列数值:如(并列数值:如(3|5),表示表示 3 或者或者 5 4. 混合方式:如(混合方式:如( 1 TO 3|5 ),表示),表示1,2,3,5-根据条件进行相应的赋值操作。根据条件进行相应的赋值操作。2.CASE语句举例语句举例SIGNAL sel : INTEGER range 0 to 20; CASE sel ISWHEN 1 = out out out out out out1 out1 out1 out1= 0; END CASE; - v

15、alue215的值未包括进去的值未包括进去- 选择值中选择值中510的值有重叠的值有重叠例题例题: 用用CASE语句设计四选一数据选择器语句设计四选一数据选择器 s s1 1s s2 2a ab bc cd dz zM MU UX X4 41 1s s1 1s s1 1Y Y0 00 00 01 11 10 01 11 1a ab bc cd dZLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux41 ISPORT ( s1, s2 : in std_logic; a,b,c,d: in std_logic; z: out std_logic

16、);END ENTITY mux41;ARCHITECTURE activ OF mux41 ISSIGNAL s :std_logic_vector(1 downto 0);BEGINS z z z z z=X;END CASE;END PROCESS;END activ;s s1 1s s2 2a ab bc cd dz zM MU UX X4 41 1s s1 1s s1 1Y Y0 00 00 01 11 10 01 11 1a ab bc cd dZARCHITECTURE activ OF mux41 ISSIGNAL s :std_logic_vector(1 downto 0)

17、;BEGINS= s1& s2PROCESS (s,a,b,c,d)BEGINIF s =“00” then z=a;ELSIF s=“01” then z = b;ELSIF s=“10” then z = c;ELSE z = d;END IF;END PROCESS;END ARCHITECTURE activ;ARCHITECTURE activ OF mux41 ISSIGNAL s :std_logic_vector(1 downto 0);BEGINS z z z z z Y YY Y Y Y Y Y Y Y c c if (a=b) then c=x01; else c

18、 if (a/=b) then c=x01; else c10 ;- 当当a大于大于10时跳出循环时跳出循环2. FOR_LOOP语句语句语法格式如下:语法格式如下:标号标号: :FOR 循环变量循环变量 IN 循环次数范围循环次数范围 LOOP 顺序语句顺序语句 END LOOP LOOP标号标号;循环变量:不必事先定义;这个变量不能被赋值;循环变量:不必事先定义;这个变量不能被赋值;在在LOOPLOOP语句范围内不要再使用其它与此循环变量同语句范围内不要再使用其它与此循环变量同名的标识符。名的标识符。循环次数范围:循环变量在循环过程中的取值范循环次数范围:循环变量在循环过程中的取值范围围整

19、数变量。整数变量。 【例例】SIGNAL a, b, c : STD_LOGIC_VECTOR (1 TO 3);.FOR n IN 1 To 3 LOOPa(n) := b(n) AND c(n);END LOOP;此段程序等效于顺序执行以下三个信号赋值操作:此段程序等效于顺序执行以下三个信号赋值操作:a(1)=b(1) AND c(1);a(2)=b(2) AND c(2); a(3)=b(3) AND c(3);【例例】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;ENTITY p_check IS PORT ( a : IN STD_LOGIC_

20、VECTOR (7 DOWNTO 0); y : OUT STD_LOGIC );END p_check; ARCHITECTURE opt OF p_check IS SIGNAL tmp :STD_LOGIC:=0 ;BEGIN PROCESS(a) BEGIN FOR n IN 0 TO 7 LOOP tmp := tmp XOR a(n); END LOOP ; y = tmp; END PROCESS; END opt; y=1,a为奇数个为奇数个1。y=0, a为偶数个为偶数个1。3.WHILE_LOOP语句语句格式为:格式为:标号:标号: WHILE 循环控制条件循环控制条件 L

21、OOP 顺序处理语句顺序处理语句 END LOOP标号标号; 循环控制条件:布尔表达式,当条件为循环控制条件:布尔表达式,当条件为“真真”时,则时,则进行循环;如果条件为进行循环;如果条件为“假假”,则结束循环。,则结束循环。 注意注意:定义循环变量及初值;没有给出循环次数的范定义循环变量及初值;没有给出循环次数的范围,而是给出了循环执行顺序语句的条件,在顺序处理语围,而是给出了循环执行顺序语句的条件,在顺序处理语句中增加了一条循环次数计算语句,用于循环语句的控制。句中增加了一条循环次数计算语句,用于循环语句的控制。例例1:Process(inputx)variable sum_temp :

22、integer :=0 ;variable i : integer :=0 ;beginsum_exa: WHILE i100 LOOP sum_temp := sum_temp+i; i:= i+1; END LOOP sum_exa;a1=sum_tmp;End process;例:例:8位奇偶校验电路的位奇偶校验电路的WHILE_LOOP设计形式设计形式 LIBRARY IEEE;USE IEEE. STD_LOGIC_1164.ALL;ENTITY parity_check IS PORT(a:IN STD_LOGIC_VECTOR (7 DOWNTO 0); y:OUT STD_LO

23、GIC);END parity_check ;例:例:8位奇偶校验电路的位奇偶校验电路的WHILE_LOOP设计形式设计形式 ARCHITECTURE behav OF parity_check ISBEGIN PROCESS(a) VARIABLE tmp:STD_LOGIC:=0; VARIABLE i :integer:=0;BEGIN WHILE (i 8)LOOP tmp := tmp XOR a(i);); i := i+1; END LOOP; y = tmp; END PROCESS;END behav;LOOP循环语句改错改错:改错:VARIABLE n : INTEGER;

24、 L1:FOR n IN 0 TO 7 LOOPtmp(n) 20;N1:FOR i IN 10 DOWNTO 1 LOOP N2:FOR j IN 0 TO 7 LOOP NEXT N1 WHEN i=j; i:= j*2+1; END LOOP N2;END LOOP N1;例例:NEXT语句应用举例语句应用举例WHILE data 1 LOOP data := data+1;NEXT WHEN data=3; data := data* data;END LOOP;条件成立而无标号,条件成立而无标号,跳出循环跳出循环条件成立,跳到条件成立,跳到N1处处条件不成立,继续内层条件不成立,继续

25、内层循环循环N2EXIT语句(1)EXIT;当当LOOP内的顺序语句执行到内的顺序语句执行到EXIT时,无条件时,无条件终止当前循环,跳出循环。终止当前循环,跳出循环。(2) EXIT LOOP标号标号;与(与(1)的功能基本相同,只是当有多重)的功能基本相同,只是当有多重LOOP嵌套时,可以跳出指定的循环。嵌套时,可以跳出指定的循环。(3) EXIT LOOP标号标号 WHEN 条件表达式条件表达式;如果条件表达式的值为如果条件表达式的值为TRUE,则执行,则执行EXIT语语句,可以跳出指定的循环。句,可以跳出指定的循环。 例:当例:当LOOP 的嵌套中,有的嵌套中,有exit指令时指令时

26、loop_a: for i in 0 to 9 loop loop_b : for j in 0 to 9 loop if data(i,j) = 0 then yout(i,j)=0; exit loop_b; elsif data(i,j) 0 then yout(i,j)=1; exit loop_a; else yout(i,j)=data(i,j); end if ; end loop loop_b; end loop loop_a;NEXT与与EXIT语句语句NEXT;NEXT LOOP 标号;标号;NEXT LOOP 标号标号 WHEN 条件表达式;条件表达式;EXIT;EXIT

27、 LOOP 标号;标号;EXIT LOOP 标号标号 WHEN 条件表达式;条件表达式;循循环环语语句句转转向向控控制制 EXIT语句也是用来控制语句也是用来控制LOOP的内部循环,与的内部循环,与NEXT语句不同的是语句不同的是EXIT语句跳向语句跳向LOOP终点,结束终点,结束LOOP语句;语句;而而NEXT语句是跳向语句是跳向LOOP语句的起始点,结束本次循环,语句的起始点,结束本次循环,开始下一次循环。开始下一次循环。ENTITY BIJIAO ISPORT (a,b : IN BIT_VECTOR(0 TO 7); y: OUT integer range 0 to 8);END B

28、IJIAO;ARCHITECTURE JIEGOU OF BIJIAO ISSignal tmp : BIT_VECTOR(0 TO 7);signal tmp2:integer:=0;BEGINPROCESS (a,b)BEGINFOR n IN 0 TO 7 LOOPtmp(n)= a(n) xor b(n);Next when (tmp(n)=0);y=tmp2+1;-tmp2=tmp2+1;END LOOP;END PROCESS; END JIEGOU;NEXT语句语句ENTITY BIJIAO ISPORT (a,b : IN BIT_VECTOR(0 TO 7); y: OUT

29、integer range 0 to 8);END BIJIAO;ARCHITECTURE JIEGOU OF BIJIAO ISSignal tmp : BIT_VECTOR(0 TO 7);signal tmp2:integer:=0;BEGINPROCESS (a,b)BEGINFOR n IN 0 TO 7 LOOPtmp(n)= a(n) xor b(n);EXIT when (tmp(n)=0);y=tmp2+1;END LOOP;END PROCESS; END JIEGOU;EXIT语句语句56格式:格式: ASSERT 条件表达式条件表达式 REPORT “输出字符串输出字符串” SEVERITY 错误等级错误等级;功能:先对条件表达式进行判断功能:先对条件表达式进行判断 (1) 如果条件为如果条件为“TURE”,则向下执行另外一条语句;,则向下执行另外一条语句; (2) 如果条件为如果条件为“FALSE”,则输出错误信息和错误严重程,则输出错误信息和错误严重程度的级别。度的级别。断言(断言(ASSERT)语句)语句用于仿真、调试程序时的人机对话。用于仿真、调试程序时的人机对话。 在在REPORT后面跟着的是设计者写的字符串,通常后面跟着的是设计者写的字符串,通常是说明错误的原因,字符串要用双引号括起来。是说明错误的原因,字符串要用双引号括起来。 SE

温馨提示

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

评论

0/150

提交评论