1、第第 三三 章章 VHDL有两种类型的语句有两种类型的语句: 1.1.顺序顺序语句语句( (Sequential) ) 2. 2.并发并发语句语句( (Concurrent ) ) 硬件执行硬件执行: : 并发执行并发执行(VHDL(VHDL本质本质) ) 仿真执行仿真执行: : 顺序执行顺序执行 执行顺序与书写顺序一致执行顺序与书写顺序一致, ,与传与传统软件设计语言的特点相似统软件设计语言的特点相似. .顺顺序语句只能用在序语句只能用在进程进程与与子程序子程序中中. . 可用来描述可用来描述1. 赋值语句赋值语句 2. WAIT语句语句3. IF 语句语句4. CASE 语句语句5. L0
2、0P 语句语句6. NEXT语句语句7. EXIT语句语句8. RETURN语句语句9. NULL 语句语句10.过程调用语句过程调用语句11.断言语句断言语句顺序语句:顺序语句:一、对象与一、对象与赋值语句赋值语句要求要求: 表达式的值必须与对象的类型表达式的值必须与对象的类型.宽度一致宽度一致所有对象分所有对象分:变量变量和和信号信号 对象对象表达式表达式; -变量赋值变量赋值 对象对象表达式表达式; -信号赋值信号赋值3)有效范围的不同)有效范围的不同信号:信号:程序包、实体、结构体:全局量程序包、实体、结构体:全局量变量:变量:进程、子程序:局部量进程、子程序:局部量ARCHITECT
3、URESIGNAL Declarations label1:PROCESS VARIABLE Declarations . label2:PROCESS VARIABLE Declarations4) 赋值赋值行为行为的不同的不同 信号赋值信号赋值延迟延迟更新数值、更新数值、时序电路时序电路; 变量赋值变量赋值立即更新数值、立即更新数值、组合电路组合电路;5)信号的多次赋值)信号的多次赋值 a.一个进程一个进程:最后一次赋值有效:最后一次赋值有效 b.多个进程多个进程: 多源驱动多源驱动 线与、线或、三态线与、线或、三态例:信号的多次赋值例:信号的多次赋值architecture rtl of
4、 ex is signal a : std_logic;begin process() begin a = b; end process; process() begin a = c; . end process;end ex;architecture rtl of ex is signal a : std_logic;begin process() begin a = b; a = c; end process;end rtl;信号赋值与变量赋值的比较信号赋值与变量赋值的比较信号赋值信号赋值ARCHITECTURE rt1 of sig is signal a,b : std_logic;
5、-定义了定义了a和和b两个信号两个信号begin process(a,b) begin a=b; b=a; end process;end rt1; -结果是结果是a和和b的值交换的值交换信号赋值与变量赋值的比较信号赋值与变量赋值的比较ARCHITECTURE rt1 of sig is variable a,b : std_logic; begin process(a,b) begin a:=b; b:=a; end process;end rt1; 变量变量赋值赋值-结果是结果是a和和b的值的值b的值的值例例:变量赋值实现循环语句功能变量赋值实现循环语句功能process(indicato
6、r, sig) variable temp: std_logic; begin temp:=0; for i in 0 to 3 loop temp:=temp xor (sig(i) and indicator(i); end loop; output=temp; end process;process(indicator, sig).variable temp : std_logic;.process(indicator, sig,temp)begintemp:=0;temp:=temp xor (sig(0) and indicator(0);temp:=temp xor (sig(1)
7、 and indicator(1);temp:=temp xor (sig(2) and indicator(2);temp:=temp xor (sig(3) and indicator(3);output=temp;end process;等等价价:如改成信号如改成信号,则无法实现原功能则无法实现原功能;.signal temp : std_logic;.process(indicator, sig,temp)begintemp=0;temp=temp xor (sig(0) and indicator(0);temp=temp xor (sig(1) and indicator(1);t
8、emp=temp xor (sig(2) and indicator(2);temp=temp xor (sig(3) and indicator(3);output=temp;end process;进程在仿真时两个状态:进程在仿真时两个状态: 执行执行和和挂起挂起 进程状态的变化受进程状态的变化受WAIT语句语句或或敏感信号变化量敏感信号变化量的控制的控制可设置可设置4种不同的条件:种不同的条件: 二、二、WAIT语句语句 WAIT -无限等待无限等待 WAIT ON -敏感信号量变化敏感信号量变化 WAIT UNTIL 表达式表达式 -表达式成立时进程启动表达式成立时进程启动 WAIT
9、FOR 时间表达式时间表达式 -时间到,进程启动时间到,进程启动WAIT ON 信号信号,信号,信号以下两种描述是完全等价的以下两种描述是完全等价的process(a,b)beginy=a and b;end process;1) WAIT ON语句语句processbeginy=a and b;wait on a,b;end process;敏感信号量例表与敏感信号量例表与WAIT语句只能选一,语句只能选一,两者不能同时用两者不能同时用2、wait until 语句(可综合)语句(可综合)wait until 表达式;表达式;表示式的值为表示式的值为“真真”时,进程被启动,否则被挂起时,进程
10、被启动,否则被挂起wait until 语句的三种表达方法:语句的三种表达方法:wait until 信号信号=value;wait until 信号信号event and 信号信号=value;wait until not(信号信号stable) and 信号信号=value;用用WAIT UNTIL 描述时钟沿描述时钟沿D触发器ARCHITECTURE bhv OF DFF1 ISSIGNAL Q1 : STD_LOGIC ; BEGIN PROCESS BEGIN WAIT UNTIL CLKEVENT AND CLK = 1 Q1 = D ; END PROCESS ;Q = Q1 ;
11、 -将内部的暂存数据向端口输出(双横线将内部的暂存数据向端口输出(双横线-是注是注 释符号)释符号)END bhv;同步复位功能触发器电路同步复位功能触发器电路processbegin rst_loop:loop wait until clkevent and clk=1; if rst=1 then x=0 else x=a; end if; end loop rst_loop; end processIFIF语句根据指定条件确定语句执行顺序,共语句根据指定条件确定语句执行顺序,共3 3种类型种类型三、三、IF语句语句例例: IF(ena=1) then Q=D; END if ;综合器生成
12、锁存器综合器生成锁存器(LATCH)(1) 用于用于门闩控制门闩控制的的IF语句语句把时钟改成时钟沿把时钟改成时钟沿,则生成则生成D触发器触发器Entity dff1 is port(clk,d:in bit; q:out bit);End dff1;Architecture bhv of dff1 is signal q1:bit; begin process(clk,q1) begin if clkevent and clk=1 then q1=d; end if; end process; q=q1;End bhv;(2) 用于用于二选一控制二选一控制的的IF语句语句用条件来选择两条不同
13、程序执行的路径用条件来选择两条不同程序执行的路径此描述的典型电路是二选一电路此描述的典型电路是二选一电路:architecture rt1 of mux21 isbegin process(a,b,sel) begin if(sel=1) then y=a; else y=b; end if; end process; end rt1;(3) 用于用于多选择控制多选择控制的的IF语句语句例:四选一电路例:四选一电路LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY mux4 IS PORT(input : IN std_logic_vector(3
14、DOWNTO 0); sel: IN std_logic_vector(1 DOWNTO 0); y: OUT std_logic);END mux4;ARCHITECTURE rt1 OF mux4 ISBEGIN PROCESS(input, sel) BEGIN IF(sel=“00”) THEN y=input(0); ELSIF (sel=“01”) THEN y=input(1); ELSIF (sel=“10”) THEN y=input(2); ELSE y 顺序处理语句顺序处理语句; WHEN 分支条件表达式的值分支条件表达式的值 顺序处理语句顺序处理语句; END CASE
15、;WHEN 值值 顺序处理语句顺序处理语句;WHEN 值值 toto 值值 顺序处理语句顺序处理语句;WHEN 值值| |值值| |值值 顺序处理语句顺序处理语句;以上三种方法的混合:以上三种方法的混合:WHEN others others 顺序处理语句顺序处理语句;其中分支条件可有以下的形式其中分支条件可有以下的形式: :l分支条件的值分支条件的值必须在必须在表达式的取值范围内容表达式的取值范围内容l两个分支条件两个分支条件不能重叠不能重叠lCASECASE语句是无顺序的语句是无顺序的, ,所有表达式所有表达式并行处理并行处理lCASE语句执行时必须选中,且只能选中一个分语句执行时必须选中,
16、且只能选中一个分支条件支条件l如果没有如果没有othersothers分支条件存在,则分支条件必须分支条件存在,则分支条件必须覆盖表达式所有可能的值覆盖表达式所有可能的值CASE语句使用注意事项语句使用注意事项注意:对注意:对std_logic std_logic_vector数据类数据类型要特别注意使用型要特别注意使用others分支条件分支条件用用CASE语句描述四选一电路语句描述四选一电路语句的误用语句的误用signal value: integer range 0 to 15;signal out_1: bit;case value isend case;case value is w
17、hen o to 10=out_1out_1out_1out_1=0;end case;-缺少条件语句缺少条件语句-分支条件不包含到分支条件不包含到15-在到上发生重叠在到上发生重叠LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY mux41 IS PORT(s4,s3,s2,s1: IN std_logic; z4,z3,z2,z1: OUT std_logic;END mux41;ARCHITECTURE art OF mux41 IS SIGNAL sel:integer range 0 to 15; BEGIN 例例: 根据根据输入输入确定
18、确定输出值输出值PROCESS (s4,s3,s2,s1)BEGIN sel=0; IF s1=1 THEN sel=sel+1; ELSIF s2=1 THEN sel=sel+2; ELSIF s3=1 THEN sel=sel+4; ELSIF s4=1 THEN sel=sel+8; ELSE null; END if ;z1=0; z2=0;z3=0; z4z1z2z3z4=1;END case;END process;END art;IF语句与语句与CASE语句比较语句比较1、IF语句是语句是有序的有序的,先处理最起始、最优先,先处理最起始、最优先的条件,后处理次优先的条件。的条件
19、,后处理次优先的条件。2、case语句是语句是无序的无序的3、case语句的条件表达式的值语句的条件表达式的值必须举穷尽,必须举穷尽,不能重复不能重复, 不能穷尽的条件表达式的值用不能穷尽的条件表达式的值用OTHERS表示表示作业作业: 设计一个简单组合电路设计一个简单组合电路3*8译码器译码器逻辑电路图:逻辑电路图:真值表:LOOP语句使程序能进行有规则的循环,循环次数语句使程序能进行有规则的循环,循环次数受迭代算法控制。与其他高级语言中的语句相似。受迭代算法控制。与其他高级语言中的语句相似。五、五、LOOP语句语句1)无限)无限LOOP语句语句标号标号: LOOP EXIT 标号标号 EN
20、D LOOP ;VHDL重复执行重复执行LOOP循环内的语句,直至遇到循环内的语句,直至遇到EXIT语句结束循环语句结束循环LOOP语句有三种格式:语句有三种格式:.L2:LOOP a:=a+1; exit L2 when a10;end loop L2;.2) FORLOOP语句语句 上述格式中:上述格式中:l循环变量循环变量是是LOOP内部自动声明的局部量,仅在内部自动声明的局部量,仅在 LOOP内可见。内可见。l离散范围必须是可计算的整数范围:离散范围必须是可计算的整数范围: 整数表达式整数表达式 to 整数表达式整数表达式 整数表达式整数表达式 downto 整数表达式整数表达式 书写
21、格式为:书写格式为:标号标号:FOR 循环变量循环变量 IN 离散范围离散范围 LOOP END LOOP 标号标号;用用FOR.LOOP语句描述语句描述8位奇偶校验电路位奇偶校验电路a7.0yin7.0data_out7.0out83) WHILE条件下的条件下的LOOP语句语句书写形式为:书写形式为:标号标号:WHILE 条件条件 LOOP END LOOP 标号标号;例例: sum:=0; i:=0; -与与FOR语句不同语句不同 abcd: while (i10) loop sum:=sum+i; i:=i+1; -与与FOR语句不同语句不同循环变量循环变量i需事先定义需事先定义,赋初
22、值赋初值,并指定其变化方式并指定其变化方式综合器工具不支持综合器工具不支持PROCESS(a) VARIABLE tmp:STD_LOGIC; VARIABLE i:integer; tmp :=0; i := 0; -循环变量需要定义循环变量需要定义 WHILE (i 8) LOOP tmp := tmp XOR a(i); i := i+1; -i变化方式变化方式+1 END LOOP; y = tmp; END PROCESS ;用用while.LOOP语句描述语句描述8位奇偶校验电路位奇偶校验电路在在LOOP循环中循环中NEXT语句用来语句用来跳出循环语句跳出循环语句六、六、NEXT-
23、LOOP语句语句 1) next; -无条件地终止无条件地终止当前循环当前循环,跳回到跳回到本次循环本次循环 LOOP语句开始处语句开始处,开始下次循环开始下次循环 2) next 标号标号 ; -无条件地终止当前循环无条件地终止当前循环,跳回到指跳回到指 定标号的定标号的LOOP语句开始处语句开始处, 开始下次循环开始下次循环 3) next 标号标号 WHEN条件条件; 当条件表达式的值是当条件表达式的值是真真,则执行则执行NEXT语句语句,进入跳转操作进入跳转操作, 否则继续执行下去否则继续执行下去NEXT语句的书写格式为:语句的书写格式为: NEXT 标号标号 WHEN条件条件分三种情
24、况分三种情况:例例1:L1:while i10 loop L2: while jf); S3: b(k+8):=0; k:=k+1; next loop L_Y; next loop L_x;例例2: EXIT语句将语句将结束循环状态结束循环状态书写格式为:书写格式为: EXIT 标号标号 WHEN 条件条件; NEXT语句与语句与EXIT语句的格式与操作功能非常语句的格式与操作功能非常相似相似.区别区别: EXIT语句语句用于跳向用于跳向LOOP语句的语句的终点终点。 而而NEXT语句语句在在LOOP语句中跳向语句中跳向LOOP 语句的语句的起点起点。七、七、EXIT-LOOP语句语句例例:
25、 process(a) variable int_a: integer; begin int_a:=a; for i in 0 to max_limit loop if (int_a=0)then exit; else int_a:=int_a-1; end if; end loop; end process;比较两个数的大小比较两个数的大小signal a,b: std_logic_vector(3 downto 0);signal a_less_than_b: boolean;. a_less_than_b= false;for i in 3 downto 0 loop if a(i)=1
26、 and bi=0 then -最高位比较最高位比较 a_less_than_b=false; exit; elsif a(I)=0 and b(I)=1 then a_less_than_b=true; exit; else null; end if;end loop;八、八、return return 语句语句 return return 语句只能用于子程序中语句只能用于子程序中,并用来,并用来终止终止一个子程序的执行。一个子程序的执行。格式格式:分为:分为:1 1)return return ; 用于过程,只是结束过程,不返回任何值。用于过程,只是结束过程,不返回任何值。 2 2)ret
27、urn return 表达式;表达式; 用于函数,并且必须返回一个值。用于函数,并且必须返回一个值。 return 表达式;例:用于过程的例:用于过程的return语句语句 procedure rs (s,r: in std_logic; q, nq : inout std_logic) is begin if s=1 and r=1 then report “forbidden state: s and r are equal to 1 ”; return; else q=s and nq after 5 ns; nq= a and q after 5 ns; end if; end pro
28、cedure rs;例:用于函数的例:用于函数的returnreturn语句语句 function opt (a,b,sel: std_logic ) return std_logic is begin if sel = 1 then return ( a and b ); else return (a or b ); end if; end function opt;NULL是一个空语句,表示不做任何操作。是一个空语句,表示不做任何操作。类似汇编的类似汇编的NOP语句,执行语句,执行NULL语句只是语句只是使程序到下一个语句。使程序到下一个语句。 格式为:格式为: NULL;常见错误常见错误
29、:y=NULL;九、九、NULL语句语句其它语句和说明其它语句和说明 属性(属性(attribute)描述:)描述: 属性是某一对象的特征表示,是一个内部预定义函属性是某一对象的特征表示,是一个内部预定义函数。格式为:数。格式为: 综合器支持的属性有:综合器支持的属性有: left、 right、 high、 low、range、 rverse_range、 length、event、 stable对象名属性标识符属性属性 event 对在当前的一个极小的时间段对在当前的一个极小的时间段内发生的事件内发生的事件的情况进行检测。如发生事件,则返回的情况进行检测。如发生事件,则返回 true,否则
30、,否则返回返回 false。 发生事件:发生事件:信号电平发生变化。信号电平发生变化。 clockeventclock=1clockeventclock=0clockevent时钟信号的时钟信号的上升沿上升沿描述:描述: clockevent and clock = 1时钟信号的时钟信号的下降沿下降沿描述:描述: clockevent and clock = 0上升沿触发器描述上升沿触发器描述: process(clock) begin if clockevent and clock = 1 then q = data ; end if ; end process;属性属性stable 属性属
31、性 stable 的测试功能与的测试功能与 event刚好相反,刚好相反, 信号在信号在时间段内时间段内无事件无事件发生,则返回发生,则返回 true,否则返回否则返回 false。 以下两语句的功能相同:以下两语句的功能相同: clockevent and clock = 1 not ( clockstable ) and clock = 13.4.2 VHDL并行语句并行语句Architecture并行语句并行语句并行语句信号信号信号信号信号信号Concurrent Signal Assignment -并行信号赋值语句并行信号赋值语句Component instantiations -元
32、件例化语句元件例化语句Process -进程语句进程语句Concurrent Procedure Call -并发过程调用语句并发过程调用语句Block -块语句块语句ASSERT-并行断言语句并行断言语句Genera-生成语句生成语句(硬件的拷贝硬件的拷贝)VHDL语言是并行处理语言,能够进行并行处理的语言是并行处理语言,能够进行并行处理的语句有:语句有:(1) 简单信号简单信号赋值赋值语句语句 (CONCURRENT SIGNAL ASSIGNMENT)(2) 条件信号条件信号赋值赋值语句语句 (CONDITIONAL SIGNAL ASSIGNMENT)(3) 选择信号选择信号赋值赋值语
33、句语句 (SELECTIVE SIGNAL ASSIGNMENT)1、并行信号赋值语句分、并行信号赋值语句分3种类型:种类型:共同特点:共同特点:1、赋值目标必须是、赋值目标必须是信号信号,与其它并发语句同时执行,与其它并发语句同时执行,与书写及是否在块语句中无关。与书写及是否在块语句中无关。2、每一信号赋值语句、每一信号赋值语句等效等效与一个进程语句。与一个进程语句。所有输入信号的变化都将启动该语句的执行所有输入信号的变化都将启动该语句的执行书写格式为:书写格式为:信号信号=表达式;表达式;1)简单信号赋值简单信号赋值语句语句一个简单信号赋值语句相当于一个进程语句的缩写一个简单信号赋值语句相
34、当于一个进程语句的缩写两种表达式完全等同两种表达式完全等同ARCHITECTURE rt1 OF m4 ISBEGINy=a and b;END rt1;ARCHITECTURE rt1 OF m4 ISBEGINprocess(a,b)beginy=a and b;end process;END rt1;两种表达式等效两种表达式等效LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY ex IS PORT(a,b: IN STD_LOGIC; y:OUT STD_LOGIC);END ex2;ARCHITECTURE r1 OF ex ISSIGNA
35、L c: STD_LOGICBEGIN c=a and b; y=c;END r1;LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY ex2 IS PORT(a,b: IN STD_LOGIC; y:OUT STD_LOGIC);END ex2;ARCHITECTURE rt1 OF ex ISSIGNAL c: STD_LOGICBEGIN process1:PROCESS(a,b) BEGIN c=a and b;END PROCESS process1;process2:PROCESS(c)BEGIN y=c;END PROCESS proc
36、ess2;END rt1;两种表达式两种表达式不不等效等效LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY ex2 IS PORT(a,b: IN STD_LOGIC; y:OUT STD_LOGIC);END ex2;ARCHITECTURE r1 OF ex ISSIGNAL c:STD_LOGICBEGIN c=a and b; y=c;END r1;LIBRARY ieeeLIBRARY ieee; ;USE ieee.std_logic_1164.all;USE ieee.std_logic_1164.all;ENTITY ex2 ISE
37、NTITY ex2 IS PORT(a,b PORT(a,b: IN STD_LOGIC;: IN STD_LOGIC; y:OUT y:OUT STD_LOGIC); STD_LOGIC);END ex2;END ex2;ARCHITECTURE r1 OF ex ISARCHITECTURE r1 OF ex ISBEGINBEGINSIGNAL c:STD_LOGIC process1:PROCESS(a,b,c)process1:PROCESS(a,b,c) BEGIN BEGIN c=a and b;c=a and b; y=c; y=c;END PROCESS process1;E
38、ND PROCESS process1;END r1;END r1;(Conditional Signal Assignment)(Conditional Signal Assignment)属于并发描述语句的范畴,可以根据不同的条件将不同的表属于并发描述语句的范畴,可以根据不同的条件将不同的表达式的值代入目标信号。达式的值代入目标信号。书写格式为:书写格式为:目标信号目标信号=表达式表达式1 WHEN条件条件1 ELSE 表达式表达式2 WHEN条件条件2 ELSE 表达式表达式3 WHEN条件条件3 ELSE . 表达式表达式n-1 WHEN条件条件n-1 ELSE 表达式表达式n ;例:
39、四选一电路例:四选一电路LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY mux IS PORT(input : IN std_logic_vector(3 DOWNTO 0); sel: IN std_logic_vector(1 DOWNTO 0); y: OUT std_logic);END mux;ARCHITECTURE rt1 OF mux ISBEGIN y = input(0) WHEN sel=00 ELSE input(1) WHEN sel=01 ELSE input(2) WHEN sel=10 ELSE input(3);
40、END rt1; input3.0sel1.0y条件信号赋值语句与进程中的多选择条件信号赋值语句与进程中的多选择IF语句语句等价等价(功能上功能上):q=a WHEN sela=1 ELSE b WHEN selb=1 ELSE c;PRCESS(sela, selb,a,b,c)BEGINIF sela=1 THEN q=a;ELSIF selb=1 THEN q=b;ELSE q=c;END PROCESS;WITH 表达式表达式 SELECT目标信号目标信号 表达式表达式1 WHEN 条件条件1 , 表达式表达式2 WHEN 条件条件2, 表达式表达式3 WHEN 条件条件3, 表达式表
41、达式n WHEN 条件条件n;1)不能有不能有重叠的条件分支重叠的条件分支.2)最后条件可为最后条件可为others ,否则其它条件必须能包含表达式的否则其它条件必须能包含表达式的 所有可能值所有可能值3)选择信号代入语句与进程中的选择信号代入语句与进程中的case语句等价语句等价例:四选一电路例:四选一电路LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY mux IS PORT(input : IN std_logic_vector(3 DOWNTO 0); sel: IN std_logic_vector(1 DOWNTO 0); y: OUT
42、 std_logic );END mux;ARCHITECTURE rt1 OF mux ISBEGIN WITH sel SELECT y = input(0) WHEN 00 , input(1) WHEN 01 , input(2) WHEN 10 , input(3) WHEN OTHERS;END rt1;input3.0sel1.0y选择信号赋值语句与选择信号赋值语句与进程中进程中的多选择的多选择CASE语语句等价句等价:WITH sel SELECTq q q q q=d; END CASE;END PROCESS;简单的指令译码器简单的指令译码器LIBRARY ieee;USE
43、 ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.all;ENTITY decoder IS PORT(a,b,c: IN std_logic; data1,data2: in std_logic; dataout: out std_logic);END decoder;ARCHITECTURE art OF decoder IS SIGNAL ins:std_logic_vector(2 downto 0);BEGIN ins=c&b&a; WITH ins SELECT dataout=data1 AND data2 WHEN 000
44、, dataout=data1 OR data2 WHEN 001, dataout=data1 NAND data2 WHEN 010, dataout=data1 NOR data2 WHEN 011, dataout=data1 XOR data2 WHEN 100, dataout4) ; port map(x,y,z,carry);元件例化语句元件例化语句(元件声明和元件声明和元件调用元件调用)例化名称:例化名称:元件名称元件名称 generic map (类属名称类属名称=表达式表达式; ,类属名称类属名称=表达式表达式) ; port map (端口名称端口名称=当前端口或者信号
45、当前端口或者信号; ,端口名称端口名称=当前端口或者信号当前端口或者信号) ;元件调用定义:元件调用定义:把把低层元件低层元件安装(调用)到安装(调用)到当前层次当前层次设计实体内部的过程。设计实体内部的过程。 包括:包括:类属参数传递类属参数传递(映射映射)、元件端口映射元件端口映射。 port map(低层次低层次端口名端口名=当前层次当前层次端口名,端口名,.).); 例:例: or2 port map(o=n6, i1=n3,i2=n1); port map(当前层次当前层次端口名端口名, ,当前层次当前层次端口名,端口名,.).);例:例:or2 port map(n3,n1,n6)
46、;注:位置关联方式中,例化的端口表达式(信号)注:位置关联方式中,例化的端口表达式(信号) 必须与元件声明语句中的端口必须与元件声明语句中的端口顺序一致顺序一致。一个低层次设计在被调用前必须有一个元件声明一个低层次设计在被调用前必须有一个元件声明.ENTITY exam is PORT(ea,eb:IN BIT_VECTOR(3 DOWNTO 0); ey: OUT BIT_LOGIC);END exam;ARCHITECTURE exam_arch OF exam IS BEGIN END exam_arch;u1: compare PORT MAP(ea,eb,ey); -元件调用元件调用
47、COMPONENT compare PORT(a:IN BIT_VECTOR(3 DOWNTO 0); b:IN BIT_VECTOR(3 DOWNTO 0); y: OUT BIT); END COMPONENT; -元件声明元件声明4位移位寄存器位移位寄存器4位移位寄存器由位移位寄存器由四个四个结构相同的结构相同的DFF组成组成,对应对应的元件例化语句如下的元件例化语句如下:clkabENTITY shift IS port( a ,clk:IN BIT; b:OUT BIT);END shift;architecture gen_shift of shift is component d
48、ff port(d,clk:in BIT; g: out BIT); end component; SIGNAL X: BIT_VECTOR(0 TO 4);BEGINX(0) = a; ba(i),y=b(i);end generate gen;clkabarchitecture gen_shift of shift is component dff port(d,clk:in BIT; q: out BIT); end component;signal x: std_logic_VECTOR(0 to 4);beginx(0) =a; b=x(4);register1:for i in 0
49、 to 3 generate dffx: dff port map(x(i),clk,x(i+1);end generate; end architecture 4位位移移位位寄寄存存器器architecture gen_shift of shift is component dff port(d,clk:in BIT; g: out BIT); end component;X(0) = a; b=X(4) dff1:dff PORT MAP (X(0),clk,X(1); dff2:dff PORT MAP (X(1),clk,X(2); dff3:dff PORT MAP (X(2),cl
50、k,X(3); dff4:dff PORT MAP (X(3),CLK,X(4);end architecture ;clkab4位移位寄存位移位寄存器等效描述器等效描述条件表达式条件表达式8 bit 并串转换器并串转换器52346170523461708 bit 8 bit 并串转换器并串转换器( (续续) )8 bit 并串转换器仿真结果并串转换器仿真结果其他语句和描述其他语句和描述属性属性(attribute)描述:描述: 属性是某一对象的特征表示,是一个内部属性是某一对象的特征表示,是一个内部预定义函数预定义函数 格式为:格式为: 对象名对象名属性标识符属性标识符 综合器支持的属性有: