




已阅读5页,还剩37页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章 VHDL顺序语句(Sequential Statement),Process,Function,Procedure中的语句都是顺序执行,以Process为例 Process与Process之间,与其他并行语句之间都是并行的关系,4.1、 赋值语句,1. 顺序信号赋值语句 信号名 =赋值源; 赋值符号左边必须是信号名,但不能是端口声明中指定为in的信号。右边表达式中可以出现任意对象类,但不能出现端口声明中指定为out的信号。 例: B = A; - 惯性延迟,无时间延迟子句,即延迟 D = C after 5 ns; - 传输延迟,指定延迟时间,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) ;,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,引进内部节点信号,进程和敏感信号,检测CLK上升沿,将数据输出端口,顺序 语句,PROCESS (clock, clear) BEGIN IF clear = 0 THEN q = 0; ELSIF clockEVENT and clock = 1 THEN q = 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 mul IS PORT (a, b, sel : IN BIT; data_out : OUT BIT); END mul; ARCHITECTURE ex OF mul IS SIGNAL temp : BIT; BEGIN process_a: PROCESS (a, b, selx) BEGIN IF (sel = 0) THEN temp = a; ELSE temp = b; END IF; data_out = temp; END PROCESS process_a;,case 语句的一般形式为: case 值表达式 is when 选择值 = 语句; when选择值= 语句; when others = 语句; end case; case语句选择项的要求: 选择唯一,覆盖全集。,2、case语句,选择值的表达方式,单个普通数值 8 数值选择范围 (2 to 4) 并列数值 3 | 5 | 8 混合方式,LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY mux41 is PORT (s1,s2,a,b,c,d : IN STD_LOGIC; z : OUT STD_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 ( C ) begin case C is when 1 = Out1 Out1 Out1 Out1 = 3; - C= 9, 16, 17, 18, 19, 20 end 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标号 :loop 顺序语句; end loop loop标号; 循环标号是可选项。从语法上讲,循环体中的语句中还可以有循环语句,因而在一个循环语句里可以嵌套另外的循环语句。 如果语句中没有exit语句,则这样的循环语句无限循环,不会停止。但exit语句可以使它结束循环,参看下面的exit语句的介绍。,loop2: loop a := a+1; exit loop2 when a10; end loop loop2;,(2) for loop语句,loop标号: f or 循环变量 in 循环次数范围 loop 顺序语句; end loop loop标号; 循环变量由循环次数范围确定其类型,无需声明。循环变量可用在循环体中,但一旦循环结束,循环变量不再起作用,即不能把循环变量的值带到循环体外。,8位奇偶校验电路 ENTITY p_check is PORT (a : IN STD_LOGIC_VECTOR(7 DOWNTO 0); Y : OUT STD_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 loop tmp= tmp XOR a(n); end loop; y = tmp; END PROCESS; END opt;,(3) while loop语句,标号:while 循环控制条件 loop 语句; end loop 标号; 循环控制条件是布尔类型。每次执行完循环体之后,都要检测条件表达式的值是真还是假。只要其值为真,就要在执行一次循环体内的语句。在条件为假时结束循环。,process (inputx) variable n : Integer := 1; begin L1: while n = 8 loop outputx(n) = inputx(n+8); n := n +1 ; end loop L1; end process;,(4) next语句,该语句控制循环提前进入下一次循环,即跳过该语句后面的语句执行指定标号的下一个循环 next ; next loop标号; next loop标号 when 条件表达式 ;,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; 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 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 -( ) begin wait on s1; wait on s2; wait on s1; end process p1; 进程中可以由若干等待语句。运行开始时,进程处于激活状态,从第一个顺序语句开始执行,遇到第一个等待语句是挂起。当该等待语句的条件满足时,进程再次激活,从该等待语句接着运行,直到遇到下一个等待语句再次挂起。以后每次激活后,运行到下一个等待语句挂起。如果进程执行到最后一个语句,则下一个语句是第一个语句。,-子程序可以在结构体的任何位置被调用,而且可以反复调用。,子程序的特点:,四、子程序调用语句,过程(PROCEDURE),过程语句的结构: PROCEDURE 过程名(形式参数1;形式参数2; )IS 定义语句; BEGIN 顺序处理语句; END 过程名;,过程语句的调用格式: 过程名 (形数名= 实参表达式 ,形数名= 实参表达式);,PACKAGE data_type IS subtype 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 is PORT (in_array : in data_array ; out_array : out data_array ; END sort ; ARCHITECTURE exmp OF sort IS BEGIN PROCESS (in_array) procedure 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_array = 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: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_L
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论