版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、10.1.1 赋值语句赋值语句信号赋值语句信号赋值语句变量赋值语句变量赋值语句信号代入语句:信号代入语句: 格式格式: 目的信号变量目的信号变量=信号变量表达式信号变量表达式 例例: a 顺序语句;顺序语句;When 选择值选择值 = 顺序语句;顺序语句;.【WHEN OTHERS =】;END CASE ;2)多条件选择值的一般表达式:多条件选择值的一般表达式: 选择值选择值 | |选择值选择值 3)选择值)选择值 表达方式:表达方式: (1 1)单个普通数值,如)单个普通数值,如6 6。 (2 2)数值选择范围,如)数值选择范围,如(2 (2 TO 4)TO 4),表示取值为表示取值为 2
2、 2、3 3或或4 4。 (3 3)并列数值,如)并列数值,如3 3 5 5,表示取值为,表示取值为3 3或者或者5 5。 (4 4)混合方式,以上三种方式的混合。)混合方式,以上三种方式的混合。 4 4)CASE CASE 语句举例语句举例LIBRARY IEEELIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux41 IS ENTITY mux41 IS PORT (s4 PORT (s4,s3, s2s3, s2,s1 : IN STD_LOGIC;s1 : IN STD_LOG
3、IC; z4 z4,z3, z2z3, z2,z1 : OUT STD_LOGIC); z1 : OUT STD_LOGIC); END mux41 END mux41; ARCHITECTURE ARCHITECTURE activactiv OF mux41 IS OF mux41 IS SIGNAL sel : INTEGER RANGE 0 TO 15; SIGNAL sel : INTEGER RANGE 0 TO 15; BEGIN BEGIN z1 z1=0 ; z2=0; z3=0; z4=0; -=0 ; z2=0; z3=0; z4 = z1 z1=1 ; = z2 z2=
4、1 ; = z3 z3=1; z4 z4 = 实参表达式实参表达式 , 形参名形参名= = 实参表达式实参表达式) ) ;2 2)一个过程的调用将分别完成以下三个步骤:一个过程的调用将分别完成以下三个步骤:(1 1)将)将ININ和和INOUTINOUT模式的实参值赋给欲调用的过程中与它们对应的形参;模式的实参值赋给欲调用的过程中与它们对应的形参;(2 2)执行这个过程;)执行这个过程;(3 3)将过程中)将过程中ININ和和INOUTINOUT模式的形参值返回给对应的实参。模式的形参值返回给对应的实参。3)举例)举例 例例1 【例例2】2、函数调用、函数调用函数调用与过程调用是十分相似的,函
5、数调用与过程调用是十分相似的,不同之处:调用函数将返还一个指定数据类型的值,不同之处:调用函数将返还一个指定数据类型的值,函数的参量只能是输入值。函数的参量只能是输入值。1)格式:)格式: FUNCTION 函数名(参数表)函数名(参数表) RETURN 数据类型数据类型; - 函数首函数首 FUNCTION 函数名(参数表)函数名(参数表) RETURN 数据类型数据类型 IS - - 函数体函数体2 2)详细内容已讲过)详细内容已讲过10.1.9 返回语句返回语句(RETURN)1)格式:格式: 语句格式一语句格式一: RETURN; -只用于结束过程,并不返回任何值。只用于结束过程,并不
6、返回任何值。 语句格式二语句格式二: RETURN 表达式;表达式; -只用于函数,并返回一个值。只用于函数,并返回一个值。2)举例)举例 例例1 过程调用返回例子过程调用返回例子 例例2 幻灯片幻灯片 60函数调用返回例子函数调用返回例子10.1.10 空操作语句空操作语句(NULL) 1)语句格式:)语句格式:NULL;例:例:CASE CASE OpcodeOpcode IS IS WHEN 001 = WHEN 001 = tmptmp := := regarega AND AND regbregb ; ; WHEN 101 = WHEN 101 = tmptmp := := rega
7、rega OR OR regbregb ; ; WHEN 110 = WHEN 110 = tmptmp := NOT := NOT regarega ; ; WHEN OTHERS = WHEN OTHERS = NULL NULL ; ; END CASE ; END CASE ;3)说明:)说明:在上例的在上例的CASE语句中,语句中,NULL用于排除一些不用的条件。用于排除一些不用的条件。 等同:等同:WHEN OTHERS = tmp := rega ;2 2)举例:)举例:10.210.2 并行语句并行语句 结构体中的并行语句种类:结构体中的并行语句种类:1 1、并行信号赋值语句(
8、、并行信号赋值语句(Concurrent Signal AssignmentsConcurrent Signal Assignments)。)。2 2、进程语句、进程语句( (Process Statements)Process Statements)。3 3、块语句、块语句( (Block Statements)Block Statements)。4 4、条件信号赋值语句、条件信号赋值语句( (Selected Signal Assignments)Selected Signal Assignments)。5 5、元件例化语句、元件例化语句( (Component Instantiation
9、s)Component Instantiations),其中包括类属其中包括类属 、 配置语句。配置语句。6 6、生成语句、生成语句( (Generate Statements)Generate Statements)。7 7、并行过程调用语句、并行过程调用语句( (Concurrent Procedure Calls)Concurrent Procedure Calls)。 并行语句位置:并行语句位置: ARCHITECTURE ARCHITECTURE 结构体名结构体名 OF OF 实体名实体名 ISIS 说明语句说明语句 BEGINBEGIN 并行语句并行语句 END END 结构体名结
10、构体名;.1 并行信号赋值语句并行信号赋值语句1. 1. 简单信号赋值语句简单信号赋值语句 格式:格式:赋值目标赋值目标 = 表达式表达式例:例: ARCHITECTURE curt OF bc1 IS SIGNAL s1, e, f, g, h : STD_LOGIC ; BEGIN output1 = a AND b ; output2 = c + d ; g = e OR f ; h = e XOR f ; s1 = g ; END curt;注:注:例中的五条信号赋值语句的例中的五条信号赋值语句的执行是并行发生的。执行是并行发生的。2. 2. 条件信号赋值语句条件信
11、号赋值语句赋值目标赋值目标 = 表达式表达式1 WHEN 赋值条件赋值条件1 ELSE 表达式表达式2 WHEN 赋值条件赋值条件2 ELSE . 表达式表达式n ;1 1)格式:)格式:2)举例:)举例:【例【例1】 ENTITY mux IS PORT ( a,b,c : IN BIT ; p1,p2 : IN BIT ; z : OUT BIT ); END mux; ARCHITECTURE behv OF mux IS BEGIN z = a WHEN p1 = 1 ELSE b WHEN p2 = 1 ELSE c ; END;例例1的逻辑电路图见的逻辑电路图见 图图13. 3.
12、选择信号赋值语句选择信号赋值语句WITH 选择表达式选择表达式 SELECT 赋值目标信号赋值目标信号 连接端口名,连接端口名,.) ; - - - - 元件例化元件例化(调用)语句(调用)语句。1 1)格式格式:(1 1) 元件声明语句用于调用已生成的元件元件声明语句用于调用已生成的元件, ,这些元件可能在库中这些元件可能在库中, , 也可能是预先编写的元件实体描述也可能是预先编写的元件实体描述. .;(2 2) 元件语句可以在元件语句可以在ARCHITECTURE,PACKAGEARCHITECTURE,PACKAGE和和BLOCKBLOCK的说明部分的说明部分. .(3 3)元件例化中,
13、两层端口名(信号)之间的关系为映射关系)元件例化中,两层端口名(信号)之间的关系为映射关系: : 2 2)说明:)说明:3 3) 举例:举例: 例例11 , ,例例 2 ,例例 310.2.5 生成语句生成语句标号:标号: FOR 循环变量循环变量 IN 取值范围取值范围 GENERATE 说明说明 BEGIN 并行语句并行语句 END GENERATE 标号标号 ;2 2)格式格式:标号:标号: IF 条件条件 GENERATE 说明说明 Begin 并行语句并行语句 END GENERATE 标号标号 ;取值范围的语句格式,有两种形式:取值范围的语句格式,有两种形式:表达式表达式 TO 表
14、达式表达式 ; - 递增方式,如递增方式,如1 TO 5表达式表达式 DOWNTO 表达式表达式 ; -递减方式,如递减方式,如5 DOWNTO 13 3)说明说明:1 1)作用作用:复制作用,根据某些条件,设定好某一元件或设计单位,就可利用复制作用,根据某些条件,设定好某一元件或设计单位,就可利用 生成语句复制一组完全相同的并行元件或设计单位。生成语句复制一组完全相同的并行元件或设计单位。 生成语句生成语句四部分组成:四部分组成:(2 2)生成方式)生成方式(3 3)说明部分)说明部分(4 4)并行语句)并行语句(1 1)标号)标号* 【例【例1】* 【例【例2】* 【例【例3】 举例:举例
15、:10.2.610.2.6 REPORTREPORT语句语句-报告相关信息语句。报告相关信息语句。-格式:格式: REPORT REPORT ;10.2.7 断言语句断言语句-时序仿真和程序调试的人机对话。时序仿真和程序调试的人机对话。-格式:格式: ASSERT REPORT SEVERITY10.3 属性描述与定义语句属性描述与定义语句 可综合属性:可综合属性: LEFT、RIGHT、HIGH、LOW、RANGE、REVERS RANGE、 LENGTH、EVENT及及STABLE。 格式:格式: 属性测试项目名属性测试项目名 属性标识符属性标识符 1. 1. 信号类属性信号类属性 # (
16、 (NOT clockSTABLE AND clock =1) NOT clockSTABLE AND clock =1) - - - - 不可综合不可综合 # # (clockEVENT AND clock =1)(clockEVENT AND clock =1) 以上两语句的功能是一样的。以上两语句的功能是一样的。注注 意意1)EVENT与与STABLE测试功能相反。测试功能相反。 2)语句)语句“NOT(clockSTABLE AND clock =1) ”的表达方式是不可综合的。的表达方式是不可综合的。2 2、数据区间类属性、数据区间类属性【例【例】.SIGNAL range1 : I
17、N STD LOGIC VECTOR (0 TO 7) ;.FOR i IN range1RANGE LOOP.3、数值类属性、数值类属性.PROCESS (clock, a, b);TYPE obj IS ARRAY (0 TO 15) OF BIT ;SIGNAL ele1, ele2, ele3, ele4 : INTEGER ;BEGIN ele1 = objRIGNT ; ele2 = objLEFT ; ele3 = objHIGH ; ele4 = objLOW ;.4 4、数组属性、数组属性LENGTHLENGTH.TYPE arry1 ARRAY (0 TO 7) OF BI
18、T ;VARIABLE wth: INTEGER;.wth1: =arry1LENGTH; - wth1 = 8.5、用户定义属性、用户定义属性ATTRIBUTE 属性名属性名 : 数据类型数据类型;ATTRIBUTE 属性名属性名 OF 对象名对象名 : 对象类型对象类型IS 值值;SynplifySynplify综合器支持的特殊属性都在综合器支持的特殊属性都在synplify.attributessynplify.attributes程序包中,程序包中,使用前加入下面语句:使用前加入下面语句:LIBRARY LIBRARY synplify;synplify;USE USE synplic
19、ity.attributes.all;synplicity.attributes.all;6、说明、说明7、举例、举例* * 【例【例1 1】* * 【例【例2 2】 本章程序举例本章程序举例例例10.2 寄存器寄存器 结束结束例子:设计一个实体图如图,功能为例子:设计一个实体图如图,功能为32位计数器位计数器例例10.2 寄存器寄存器ENTITY reginf ISPORT(d, clk, clr, pre, load, data : IN BIT; q1, q2, q3, q4, q5, q6, q7 : OUT BIT); END reginf; ARCHITECTURE maxpld
20、OF reginf IS BEGIN PROCESS -高电平时钟触发高电平时钟触发 BEGIN WAIT UNTIL clk = 1; q1 = d; END PROCESS; PROCESS -低电平时钟触发低电平时钟触发 BEGIN WAIT UNTIL clk = 0; q2 = d; END PROCESS; PROCESS (clk, clr ) -上升沿触发上升沿触发/同步清除同步清除 BEGIN IF clr = 1 THEN q3 = 0; ELSIF clkEVENT AND clk = 1 THEN q3 = d; END IF; END PROCESS;PROCESS
21、(clk, clr) -下降沿触发下降沿触发/同步清除同步清除 BEGIN IF clr = 0 THEN q4 = 0; ELSIF clkEVENT AND clk = 0 THEN q4 = d; END IF; END PROCESS; PROCESS (clk, pre) -上升沿触发上升沿触发/同步预置同步预置”1” BEGIN IF pre = 1 THEN q5 = 1; ELSIF clkEVENT AND clk = 1 THEN q5 = d; END IF; END PROCESS;( 续)续)例例10.2 寄存器寄存器 PROCESS (clk, load, data
22、) -上升沿触发上升沿触发/同步预置数据同步预置数据 BEGIN IF load = 1 THEN q6 = data; ELSIF clkEVENT AND clk = 1 THEN q6 = d; END IF;END PROCESS; PROCESS (clk, clr, pre) -上升沿触发上升沿触发/同步置同步置”1”和清除和清除 BEGIN IF clr = 1 THEN q7 = 0; ELSIF pre = 1 THEN q7 = 1; ELSIF clkEVENT AND clk = 1 THEN q7 = d; END IF;END PROCESS;END maxpld;
23、例例10.2 寄存器(寄存器( 续)续)LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity count12 isport(clk,reset,en: in std_logic; qa,qb,qc,qd: out std_logic);end count12;architecture behave of count12 issignal count_4: std_logic_vector(3 downto 0);begin qa=count_4(0); qb=count_4(1); qc=
24、count_4(2); qd=count_4(3); process(clk,reset) begin if (reset=0) then count_4=0000; elsif(clkevent and clk=1) then if(en=1) then if(count_4=1011) then count_4=0000; else count_4=count_4+1; end if; end if; end if; end process;end behave;引脚定义引脚定义: reset 复位;复位;en 计数控制;计数控制; clk 时钟;时钟; qa,qb,qc,qd 计数器输出
25、计数器输出例例10.110.1 十二进制同步计数器十二进制同步计数器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; -设计设计DFF元件元件 ENTITY d_ff IS PORT ( d, clk_s : IN STD_LOGIC ; q : OUT STD_LOGIC ; nq : OUT STD_LOGIC ); END ENTITY d_ff;ARCHITECTURE a_rs_ff OF d_ff IS BEGIN bin_rs_ff : PROCESS (CLK_S) BEGIN IF clk_s = 1 AND clk_sEVENT THEN
26、q = d ; nq = NOT d; END IF; END PROCESS;END ARCHITECTURE a_rs_ff; 接下页接下页例例3LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY cnt_bin_n is GENERIC (n : INTEGER := 6); PORT (q : OUT STD_LOGIC_VECTOR (0 TO n-1); in_1 : IN STD_LOGIC ); END ENTITY cnt_bin_n;ARCHITECTURE behv OF cnt_bin_n IS COMPONENT d_ff
27、 PORT ( d, clk_s : IN STD_LOGIC; Q, NQ : OUT STD_LOGIC); END COMPONENT d_ff; SIGNAL s : STD_LOGIC_VECTOR(0 TO n); BEGIN s(0) = in_1; q_1 : FOR i IN 0 TO n-1 GENERATE dff : d_ff PORT MAP (s(i+1), s(I), q(i), s(i+1); END GENERATE; END ARCHITECTURE behv;LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY
28、 SN74373 IS PORT ( D : IN STD_LOGIC_VECTOR ( 8 DOWNTO 1 ) ; OEN , G : IN STD_LOGIC; Q : OUT STD_LOGIC_VECTOR (8 DOWNTO 1 ); END ENTITY SN74373;ARCHITECTURE two OF SN74373 IS SIGNAL sigvec_save : STD_LOGIC_VECTOR(8 DOWNTO 1); BEGIN PROCESS ( D, OEN, G , sigvec_save ) BEGIN IF OEN = 0 THEN Q = sigvec_
29、save; ELSE Q = ZZZZZZZZ; END IF; IF G = 1 THEN Sigvec_save = D ; END IF; END PROCESS; END ARCHITECTURE two; 接下页接下页例例2(续)(续)ARCHITECTURE one OF SN74373 IS COMPONENT LatchPORT ( D, ENA : IN STD_LOGIC; Q : OUT STD_LOGIC ); END COMPONENT; SIGNAL sig_mid : STD_LOGIC_VECTOR( 8 DOWNTO 1 ); BEGIN GeLatch :
30、FOR D(inNum) IN 1 TO 8 GENERATE Latchx : Latch PORT MAP ( D(inNum), G , sig_mid(inNum); END GENERATE; Q a(i),y=b(i);END GENERATE gen, .【例【例 1 】下图下图 是是 生成语句生成语句产生产生的的8个相同的电路模块个相同的电路模块C O M PIN P U TO U TP U TC O M PIN P U TO U TP U TC O M PIN P U TO U TP U Ta0 b 0 a1 b 1 a7 b 7 . . .LIBRARY IEEE;USE
31、IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY rs ISPORT (set, reset : IN BIT; q,qb : BUFFER BIT);END rs;ARCHITECTURE rsff1 OF rs IS COMPONENT nand2 PORT (a,b : IN BIT; c: OUT BIT ); END COMPONENT; BEGIN U1: nand2 PORT MAP (a=set, b=qb, c=q); U2 : nand2 PORT MAP (a=reset, b=q, c=qb);
32、END rsff1;例例 3 RS触发器电路实现触发器电路实现 . b1 : BLOCK SIGNAL s1: BIT ; BEGIN S1 = a AND b ; b2 : BLOCK SIGNAL s2: BIT ; BEGIN s2 = c AND d ; b3 : BLOCK BEGIN Z = s2 ; END BLOCK b3 ; END BLOCK b2 ; y l_time,gb2 = s_timeGENERIC MAP (gb1 = l_time,gb2 = s_time) ) ;-局部端口参量设定局部端口参量设定 PORT (PORT (pbpb : IN BIT; pb2
33、 : INOUT BIT ); : IN BIT; pb2 : INOUT BIT ); - - 块结构中局部端口定义块结构中局部端口定义 PORT MAP (pb1 = b1, pb2 = a1 ) ; PORT MAP (pb1 = b1, pb2 = a1 ) ; - - 块结构端口连接说明块结构端口连接说明 CONSTANT delay : Time := 1 ms ; CONSTANT delay : Time := 1 ms ; - - 局部常数定义局部常数定义 SIGNAL s1 : BIT ; SIGNAL s1 : BIT ; - - 局部信号定义局部信号定义 BEGINBE
34、GIN s1 = pb1 AFTER delay ; s1 = pb1 AFTER delay ; pb2 = s1 AFTER gb1, b1 AFTER gb2 ; pb2 = s1 AFTER gb1, b1 AFTER gb2 ; END BLOCK Blk1 ;END BLOCK Blk1 ; END ARCHITECTURE END ARCHITECTURE funcfunc ; ;【例【例2】 块语句例块语句例LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY decode
35、r IS PORT ( a, b, c : IN STD_LOGIC; data1,data2 : IN STD_LOGIC; dataout : OUT STD_LOGIC );END decoder;ARCHITECTURE concunt OF decoder IS SIGNAL instruction : STD_LOGIC_VECTOR(2 DOWNTO 0) ; BEGIN instruction = c & b & a ; WITH instruction SELECT dataout = data1 AND data2 WHEN 000 , data1 OR d
36、ata2 WHEN 001 , data1 NAND data2 WHEN 010 , data1 NOR data2 WHEN 011 , data1 XOR data2 WHEN 100 , data1 XNOR data2 WHEN 101 , Z WHEN OTHERS ; END concunt ;【例【例2】.WITH selt SELECTmuxout out1 out1 out1 out110 ; - 当当a大于大于10时跳出循环时跳出循环 END LOOP L2; .例例.1【例例2 】循环语句举例循环语句举例 LIBRARY IEEE; USE IEEE.STD_LOGIC
37、_1164.ALL;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; 例例循环语句举例循环语句举例SIGNA
38、L a, b, c : STD_LOGIC_VECTOR (1 TO 3);.FOR n IN 1 To 3 LOOP a(n) = b(n) AND c(n);END LOOP;例例3此段程序等效于顺序执行以下三个信号赋值操作:此段程序等效于顺序执行以下三个信号赋值操作:a(1)=b(1) AND c(1);a(2)=b(2) AND c(2); a (3) f); s3: b(k+8) := 0; k := k+1; NEXT LOOP L_y ; NEXT LOOP L_x ; .说明说明: 当当(ef) 时时,执行,执行NEXT L_x ,跳转到,跳转到L_x执行,执行,当当ef不成立
39、不成立时,执行时,执行s3语句语句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 b EXIT ; ELSIF (a(i)=0 AND b(i)=1) THEN a_less_then_b = TRUE ; - a b时时 ,由,由EXIT跳出循环比较程序,并报告结果。跳出循环比较程序,并
40、报告结果。1)WAIT ON 信号表结构信号表结构 -用于仿真用于仿真SIGNAL s1,s2 : STD_LOGIC;.PROCESSBEGIN.WAIT ON s1,s2 ;-执行到此句被挂起来,待执行到此句被挂起来,待s1,s2s1,s2任一信号改变,进程才重新开始。任一信号改变,进程才重新开始。END PROCESS ;2 2) WAIT_ON WAIT_ON 结构结构 -用于仿真用于仿真 LOOP Wait on enable; EXIT WHEN enable =1; END LOOP; 3) WAIT_UNTIL条件表达式结构条件表达式结构 -用于综合用于综合 . Wait un
41、til enable =1; .【例【例1】 例例 2)、)、3)中:)中: 待待enable上升沿。(即:两条件上升沿。(即:两条件enable改变改变AND nable=1同时满足同时满足)例例 2 WAIT语句举例语句举例【例【例2】用一个硬件求实现平均值的功能用一个硬件求实现平均值的功能.PROCESSBEGINWAIT UNTIL clk =1;ave = a;WAIT UNTIL clk =1;ave = ave + a;WAIT UNTIL clk =1;ave = ave + a;WAIT UNTIL clk =1;ave = (ave + a)/4 ;END PROCESS
42、; 【例【例3】-用用WAIT语句实现具有同步复位功能语句实现具有同步复位功能 PROCESSPROCESS BEGIN BEGIN rst_looprst_loop : LOOP : LOOP WAIT UNTILWAIT UNTIL clock =1 AND clockEVENT; - clock =1 AND clockEVENT; - 等待时钟信号等待时钟信号 NEXT NEXT rst_looprst_loop WHEN ( WHEN (rstrst=1); - =1); - 检测复位信号检测复位信号rstrst x = a ; - x = a ; - 无复位信号,执行赋值操作无复位
43、信号,执行赋值操作 WAIT UNTILWAIT UNTIL clock =1 AND clockEVENT; - clock =1 AND clockEVENT; - 等待时钟信号等待时钟信号 NEXT NEXT rst_looprst_loop When ( When (rstrst=1); - =1); - 检测复位信号检测复位信号rstrst y = b ; - y ) data(highdata(high) THEN - ) THEN - 检测数据检测数据 temp := temp := data(lowdata(low) ;) ; data(lowdata(low) := ) :=
44、 data(highdata(high);); data(highdata(high) := temp ;) := temp ; END IF END IF ; END END swapswap ; ; - - 过程过程swapswap结束结束VARIABLEVARIABLE my_arraymy_array : : data_arraydata_array ; ; BEGIN BEGIN - - 进程开始进程开始 my_array := in_array ; my_array := in_array ; - 将输入值读入变量将输入值读入变量swapswap(my_array, 1, 2);
45、(my_array, 1, 2); - my_array my_array、1 1、2 2是对应于是对应于datadata、lowlow、highhigh的实参的实参 swap(my_array, 2, 3); swap(my_array, 2, 3); - - 位置关联法调用,位置关联法调用, 第第2 2第第3 3元素交换元素交换 swap(my_array, 1, 2); swap(my_array, 1, 2); - -第第1 1第第2 2元素再次交换元素再次交换 out_array = my_array ;out_array y THEN IF x y THEN tmptmp := x
46、; x := y; y := := x; x := y; y := tmptmp; ; END IF; END IF;END sort2;END sort2;BEGINBEGIN PROCESS (a, b, c, d) PROCESS (a, b, c, d) VARIABLE VARIABLE vava, , vbvb, , vcvc, , vdvd : BIT_VECTOR(0 TO top); : BIT_VECTOR(0 TO top);BEGINBEGIN vava := a; := a; vbvb := b; := b; vcvc := c; := c; vdvd := d; :
47、= d; sort2(va, sort2(va, vcvc); sort2(vb, ); sort2(vb, vdvd);); sort2(va, sort2(va, vbvb); sort2(vc, ); sort2(vc, vdvd);); sort2(vb, sort2(vb, vcvc);); rara = = vava; ; rbrb = = vbvb; ; rcrc = = vcvc; rd = ; rd = vdvd; ; END PROCESS; END PROCESS;END END muxesmuxes; ; 例例2 过程调用举例过程调用举例PROCEDURE rs (SI
48、GNAL 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 ; 例例1 当信号当信号s =1 AND r =1满足时,满足时, RETURN 将中断过程。 FUNCTION opt (a,
49、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 ; 例例2 .PROCEDURE adder(SIGNAL a, b :IN STD_LOGIC ; -过程名为过程名为adder SIGNAL sum : OUT STD_LOGIC ); . adder(a1,b1,sum1) ; - 并行过程调用并行过程调用 . - 在此,在此,a1、b1、sum1即为分别对应于即为分别对应于a、b、
50、sum的关联参量名的关联参量名 PROCESS( c1,c2) ; - 进程语句执行进程语句执行 BEGIN Adder(c1,c2,s1) ; - 顺序过程调用,在此顺序过程调用,在此c1、c2、s1即为分别对即为分别对 应于应于a、b、sum的关联参量名的关联参量名 END PROCESS ; 【例【例1 1】 PROCEDURE check (SIGNAL a : IN STD_LOGIC_VECTOR; SIGNAL error : OUT BOOLEAN ) IS - 在调用时再定位宽在调用时再定位宽 VARIABLE found_one : BOOLEAN := FALSE ; -
51、 设初始值设初始值 BEGIN FOR i IN aRANGE LOOP - 对位矢量对位矢量a的所有的位元素进行循环检测的所有的位元素进行循环检测 IF a(i) = 1 THEN - 发现发现a中有中有 1 IF found_one THEN - 若若found_one为为TRUE,表明发现了一个以上的表明发现了一个以上的1 ERROR = TRUE; - 发现了一个以上的发现了一个以上的1,令,令found_one为为TRUE RETURN; - 结束过程结束过程 END IF; Found_one := TRUE; - 在在a中已发现了一个中已发现了一个1 End IF; End LO
52、OP; - 再测再测a中的其它位中的其它位 error = NOT found_one; - 如果没有任何如果没有任何1 被发现,被发现,error 将被置将被置TRUE END PROCEDURE check; 【例【例2 2】. CHBLK:BLOCK SIGNAL s1: STD_LOGIC_VECTOR (0 TO 0); -过程调用前设定位矢尺寸过程调用前设定位矢尺寸 SIGNAL s2: STD_LOGIC_VECTOR (0 TO 1); SIGNAL s3: STD_LOGIC_VECTOR (0 TO 2); SIGNAL s4: STD_LOGIC_VECTOR (0 TO
53、 3); SIGNAL e1, e2, e3, e4: Boolean; BEGIN Check (s1, e1); - 并行过程调用,关联参数名为并行过程调用,关联参数名为s1、e1 Check (s2, e2); - 并行过程调用,关联参数名为并行过程调用,关联参数名为s2、e2 Check (s3, e3); - 并行过程调用,关联参数名为并行过程调用,关联参数名为s3、e3 Check (s4, e4); - 并行过程调用,关联参数名为并行过程调用,关联参数名为s4、e4 END BLOCK; . * 【例【例3】 【例【例1】奇偶校验判别信号发生器,利用属性函数奇偶校验判别信号发生器
54、,利用属性函数 low low 和和highhighLIBRARY IEEE; -PARITY GENERATORUSE IEEE.STD_LOGIC_1164.ALL;ENTITY parity IS GENERIC (bus_size : INTEGER := 8 ); PORT (input_bus : IN STD_LOGIC_VECTOR(bus_size-1 DOWNTO 0); even_numbits, odd_numbits : OUT STD_LOGIC ) ;END parity ; ARCHITECTURE behave OF parity ISBEGINPROCESS
55、 (input_bus) VARIABLE temp: STD_LOGIC;BEGIN temp := 0; FOR i IN input_busLOW TO input_busHIGH LOOPtemp := temp XOR input_bus( i ) ; END LOOP ; odd_numbits = temp ; even_numbits = NOT temp;END PROCESS;END behave;LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY cntbuf IS PORT( Dir: IN STD_LOGIC; Clk,
56、Clr,OE: IN STD_LOGIC; A,B: INOUT STD_LOGIC_VECTOR (0 to 1); Q: INOUT STD_LOGIC_VECTOR (3 downto 0) ); ATTRIBUTE PINNUM : STRING; ATTRIBUTE PINNUM OF Clk: signal is 1; ATTRIBUTE PINNUM OF Clr: signal is 2; ATTRIBUTE PINNUM OF Dir: signal is 3; ATTRIBUTE PINNUM OF OE: signal is 11; ATTRIBUTE PINNUM OF
57、 Q: signal is 17,16,15,14;END cntbuf;【例【例2】ENTITY mux IS PORT (d0,d1,sel: IN BIT; q: OUT BIT); END mux; ARCHITECTURE connect OF mux IS SIGNAL tmp1,tmp2,tmp3: BIT; BEGIN cale: BLOCK BEGIN tmp1=d0 AND sel; tmp2=d1 AND (NOT sel); tmp3=tmp1 OR tmp2; qa, in_b=b,out_s=v,out_co=u);U2: h_adder port map (in_a=v, in_b=ci,out_s=s,out_co=w);U3: o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 执业医师定期考核个人述职报告7篇
- 应聘应届生的自我介绍范文
- 建筑工程入门基础知识普及
- 家电导购培训
- 大学法制安全教育主题班会
- 2018山西道法试卷+答案+解析
- 2024年中国自动化设备行业市场发展趋势预测报告-智研咨询重磅发布
- 多模GNSS精密单点定位选星方法研究
- 线粒体乳酸摄取氧化复合物促进失巢乳腺癌干细胞特性和转移潜能
- 二零二五年度个人担保合同电子化签订与存证服务
- 《基础会计》教学课件-整套教程电子讲义
- 微粒贷逾期还款协议书范本
- 人教版七年级上册数学全册课时练习带答案
- NBT 47013.4-2015 承压设备无损检测 第4部分:磁粉检测
- 2024年上海市中考数学真题试卷及答案解析
- 2024年全国卷1高考理综试题及答案
- 工程防渗漏培训课件
- 牛津3000核心词汇表注释加音标1-4 完整版
- 高中英语以读促写教学策略与实践研究课件
- (完整版)金融市场基础知识知识点归纳-图文
- 综合素质能力提升培训
评论
0/150
提交评论