《VHDL顺序语句》PPT课件.ppt

上传人:小飞机 文档编号:5454328 上传时间:2023-07-08 格式:PPT 页数:42 大小:228.49KB
返回 下载 相关 举报
《VHDL顺序语句》PPT课件.ppt_第1页
第1页 / 共42页
《VHDL顺序语句》PPT课件.ppt_第2页
第2页 / 共42页
《VHDL顺序语句》PPT课件.ppt_第3页
第3页 / 共42页
《VHDL顺序语句》PPT课件.ppt_第4页
第4页 / 共42页
《VHDL顺序语句》PPT课件.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《《VHDL顺序语句》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《VHDL顺序语句》PPT课件.ppt(42页珍藏版)》请在三一办公上搜索。

1、第四章 VHDL顺序语句(Sequential Statement),Process,Function,Procedure中的语句都是顺序执行,以Process为例Process与Process之间,与其他并行语句之间都是并行的关系,4.1、赋值语句,1.顺序信号赋值语句 信号名=赋值源;赋值符号左边必须是信号名,但不能是端口声明中指定为in的信号。右边表达式中可以出现任意对象类,但不能出现端口声明中指定为out的信号。例:B=A;-惯性延迟,无时间延迟子句,即延迟D=C after 5 ns;-传输延迟,指定延迟时间,2.变量赋值语句,变量赋值的含义是:用计算赋值符号右边的表达式所得新值取代

2、变量原来的值。变量赋值的语法形式为:变量名:=表达式;,3、赋值目标,a:=1;C1:=“1100”;G(2)=y;H(I)=z;F(1 to 4):=“1001”;,SIGNAL a,b,c,d:STD_LOGIC;SIGNAL S:STD_LOGIC_VECTOR(1 TO 4);VARIABLE e,f:STD_LOGIC;VARIABLE g:STD_LOGIC_VECTOR(1 TO 2);VARIABLE h:STD_LOGIC_VECTOR(1 TO 4);S e,4=f,2=g(1),1=g(2):=h;-g(2):=h(1);g(1):=h(2);e:=h(3);f:=h(4

3、);,4.2 流程控制结构,VHDL为用户提供了若干控制进程内部执行流的结构,可分为条件控制和循环控制两种。IF语句CASE语句LOOP语句NEXT语句EXIT语句,1.if语句(条件控制语句),if 条件表达式 then 顺序语句end if;,if 条件表达式 then 顺序语句 else 顺序语句end if;,if 条件表达式 then 顺序语句 elsif 条件表达式 then 顺序语句 else 顺序语句 end if;,求取最大值,BEGIN IF(ab)THEN y=b;ELSE y=a;END IF;END max;,B用VHDL设计一个D触发器,ddf1,引进内部节点信号,

4、进程和敏感信号,检测CLK上升沿,将数据输出端口,顺序语句,PROCESS(clock,clear)BEGINIF clear=0 THENq=0;ELSIF clockEVENT and clock=1 THENq=d;END IF;END PROCESS;,T触发器,Process(clk)begin if(clkevent and clk=1)then if(t=1)then q=not(q);else q=q;end if;end if;end process;,ENTITY mux ISPORT(a,b,sel:IN BIT;data_out:OUT BIT);END mux;ARC

5、HITECTURE ex OF mux ISSIGNAL temp:BIT;BEGINprocess_a:PROCESS(a,b,selx)BEGINIF(sel=0)THENtemp=a;ELSE temp=b;END IF;data_out=temp;END PROCESS process_a;,case 语句的一般形式为:case 值表达式 iswhen 选择值=语句;when 选择值=语句;when others=语句;end case;case语句选择项的要求:选择唯一,覆盖全集。,2、case语句,选择值的表达方式,单个普通数值 8数值选择范围(2 to 4)并列数值 3|5|8

6、混合方式,LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY mux41 isPORT(s1,s2,a,b,c,d:INSTD_LOGIC;z:OUTSTD_LOGIC);END mux41;ARCHITECTURE activ OF mux41 IS SIGNAL s:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN s z z z zz=x;END CASE;END PROCESS;END activ;,例:signal C:Integer range 1 to 20;signal Out1:(0,1,2,3);process

7、(C)begincase C iswhen 1=Out1 Out1 Out1 Out1=3;-C=9,16,17,18,19,20end case;end process;,3.循环控制语句(loop 语句),有三种循环语句:简单循环语句,for循环语句以及while循环语句。Next语句和exit语句是与循环密切相关的两个顺序语句,用来控制特殊的循环过程。(1)无条件loop语句(2)for loop语句(3)while loop语句(4)next语句(5)exit语句,(1)无条件loop语句,无条件loop语句是简单循环语句,其中包含一个无限循环执行的语句集,其形式为;loop标号:lo

8、op顺序语句;end loop loop标号;循环标号是可选项。从语法上讲,循环体中的语句中还可以有循环语句,因而在一个循环语句里可以嵌套另外的循环语句。如果语句中没有exit语句,则这样的循环语句无限循环,不会停止。但exit语句可以使它结束循环,参看下面的exit语句的介绍。,loop2:loopa:=a+1;exit loop2 when a10;end loop loop2;,(2)for loop语句,loop标号:f or 循环变量 in 循环次数范围 loop 顺序语句;end loop loop标号;循环变量由循环次数范围确定其类型,无需声明。循环变量可用在循环体中,但一旦循环

9、结束,循环变量不再起作用,即不能把循环变量的值带到循环体外。,8位奇偶校验电路ENTITY p_check isPORT(a:IN STD_LOGIC_VECTOR(7 DOWNTO 0);Y:OUTSTD_LOGIC);END p_check;ARCHITECTURE opt OF p_check IS SIGNAL tmp:STD_LOGIC;BEGIN PROCESS(a)BEGIN tmp=0;for n in 0 to 7 looptmp=tmp XOR a(n);end loop;y=tmp;END PROCESS;END opt;,(3)while loop语句,标号:while

10、 循环控制条件 loop语句;end loop 标号;循环控制条件是布尔类型。每次执行完循环体之后,都要检测条件表达式的值是真还是假。只要其值为真,就要在执行一次循环体内的语句。在条件为假时结束循环。,process(inputx)variable n:Integer:=1;beginL1:while n=8 loopoutputx(n)=inputx(n+8);n:=n+1;end loop L1;end process;,(4)next语句,该语句控制循环提前进入下一次循环,即跳过该语句后面的语句执行指定标号的下一个循环next;next loop标号;next loop标号 when 条

11、件表达式;,loop2:loop B:=B+1;next loop2 when B10;.end loop loop2;,(5)exit语句,exit语句使得从循环标号所标明的循环中退出。exit;exit loop标号;exit loop标号 when 条件表达式 如果指定条件,必须要在所绐条件为真的前提下,才从循环标号所标明的循环中退出。两种情况下的循环标号都是可选项。如果语句中末给出循环标号,则从当前循环中退出。,signal a,b:std_logic_vector(1 downto 0);signal a_less_then_b:BOOLEAN;a_less_then_b=false

12、;for i in 1 downto 0 loop IF(a(i)=1 AND b(i)=0 THEN a_less_then_b=false;EXIT;Elsif(a(i)=0 AND b(i)=1 THEN a_less_then_b=true;EXIT;ELSE NULL;END IF;END LOOP;,3.WAIT语句,等待语句是进程中专门控制进程激活与挂起的的顺序语句。可以出现在进程的任何位置,也可以有多个进程语句。wait-永远挂起wait on A,B;-A 或B 变化时,进程激活wait until Enable=1;-满足条件时,进程激活wait for 5 ns;-过5

13、ns 后,进程激活,任意组合:wait on A,B until Enable=1;-等待A,B变化,且Enable=1时激活。wait on A,B for 5 ns;-等待A,B变化,或到达5 ns 时激活。wait until Enable=1 for 5 ns;-等待Enable=1时激活,或者到达5 ns 时激活。wait on A,B until Enable=1 for 5 ns;-等待A,B变化,且Enable=1时激活,或者到达 5 ns 时激活。,p1:process-()beginwait on s1;wait on s2;wait on s1;end process p

14、1;进程中可以由若干等待语句。运行开始时,进程处于激活状态,从第一个顺序语句开始执行,遇到第一个等待语句是挂起。当该等待语句的条件满足时,进程再次激活,从该等待语句接着运行,直到遇到下一个等待语句再次挂起。以后每次激活后,运行到下一个等待语句挂起。如果进程执行到最后一个语句,则下一个语句是第一个语句。,-子程序可以在结构体的任何位置被调用,而且可以反复调用。,子程序的特点:,四、子程序调用语句,过程(PROCEDURE),过程语句的结构:PROCEDURE 过程名(形式参数1;形式参数2;)IS 定义语句;BEGIN 顺序处理语句;END 过程名;,过程语句的调用格式:过程名(形数名=实参表达

15、式,形数名=实参表达式);,PACKAGE data_type ISsubtype data_element is integer range 0 to 3;type data_array is array(1 to 3)of data_element;end data_type;,use work.data_type.all;ENTITY sort isPORT(in_array:in data_array;out_array:out data_array;END sort;ARCHITECTURE exmp OF sort ISBEGIN PROCESS(in_array)procedur

16、e swap(data:inout data_array;low,high:in integer)is variable temp:data_element;BEGIN if(data(low)data(high)then tmp:=data(low);data(low):=data(high);data(high):=temp;end if;End swap;Varible my_array:data_array;,Begin my_array:=in_array;Swap(my_array,1,2);Swap(my_array,2,3);Swap(my_array,1,2);Out_arr

17、ay=my_array;End process;End exmp;,函数(FUNCTION),函数语句的结构:FUNCTION 函数名(输入参数表)RETUEN 数据类型 IS 定义语句;BEGIN 顺序处理语句;RETUEN 返回变量名;END 函数名;,函数语句的调用格式:函数名(实际参数表);,例:用FUNCTION语句描述求取最大值的函数。FUNCTION max(a:std_logic_vector(5 downto 0);b:std_logic_vector(5 downto 0)RETURN std_logic_vector(5 downto 0)IS VARIABLE tmp:

18、std_logic_vector(arange);BEGIN IF(ab)THEN tmp:=a;ELSE tmp:=b;END IF;RETURN tmp;END max;,函数的参数均为输入参数。函数调用返回一个指定数据类型的值。,ARCHITECTURE rtl OF dpeak IS SIGNAL peak:STD_LOGIC_VECTOR(5 downto 0);BEGIN dout=peak;PROCESS(clk)BEGIN IF(clkevent and clk=1)THEN IF(set=1)THEN peak=date;ELSE peak=max(date,peak);EN

19、D IF;END IF;END PROCESS;END rtl;,五、返回语句return语句,返回浯句(return)用来中止子程序的运行。对于过程来说,返回浯句的唯一合法形式是:return;当执行了这个语句时,控制返回到该过程的调用点。对于函数来说,返回语句对函数输出的数据对象回送函数值。例如:function AND_Function(x,y:in Bit)return Bit isbeginif xland y1 thenreturn 1;elsereturn 0;end if;end AND_Function,六、空语句null 语句,某些时候,我们需要显式地指出在某些条件下不执行任何动作,空语句(null)可以达到这个目的。例如:Procedure ModTwo(x:inout Integer)begincase xwhen 1|0=null;-当x等于1或0时,没有动作。when others=x:=x mod 2;-其他情况下以2为模。end case;end ModTwo,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号