[信息与通信]VHDL程序的主要描述语句.ppt
3.5 VHDL的 主 要 描 述 语 句,VHDL程序组成部分及其功能,VHDL程序,实体(Entity)结构体(Architecture)配置(Configuration)包集合(Package)库(Library),基本设计单元所必需的部分,实体-规定设计单元的输入输出接口信号和引脚构造体-定义设计单元的具体构造或功能(行为),vhdl中的主要描述语句分为两类:描述行为和描述结构。,描述行为,并行信号赋值 进程 断言 子程序,描述结构,元件 端口映射生成参数说明,一描述行为:描述信号的变换、组合、传输。,描述行为,并行信号赋值 进程 断言 子程序,1.并行信号赋值,包括:(1)基本型;(2)条件型;(3)选择型;其中,条件语句内部有优先级,按顺序执行,基本及选择语句都是并行语句,(1)基本型,格式:信号名=敏感信号量表达式 after 时间表达式例:s=x xor y;sum=s xor cin after 1ns;说明:若未注明延时表示延时很小,延时。延时可分为两类:传输延时与惯性延时,传输延时:模拟信号在连线(或传输线)上的延时。格式:b=transport a after 20ns;,惯性延时:用于模拟器件或系统的延时特性,也称固有延时。格式:b=inertial a after 20ns;或b=a after 20ns;即缺省时指inertial固有延时,例:2选1多路选择器,实体的语法格式:,entity 实体名 is generic(参数名:数据类型:初始值);对类属参数进行说明 port(端口名1:方向 数据类型;.端口名n:方向 数据类型);end 实体名;(1076-1987 version)end entity实体名;(1076-1993 version),端口方向(端口类型),结构体的语法格式:,architecture 结构体名称 of 实体名称 is 说明语句内部信号、常数、数据类型、子程序(函数、过程)、元件等的说明;begin 功能描述语句;end architecture 结构体名称;,vhdl中的主要描述语句分为两类:描述行为和描述结构。,描述行为,并行信号赋值 进程 断言 子程序,描述结构,元件 端口映射生成参数说明,1.并行信号赋值,包括:(1)基本型;(2)条件型;(3)选择型;其中,条件语句内部有优先级,按顺序执行,基本及选择语句都是并行语句,(2)条件型,根据不同的条件给目标信号赋不同的值。格式:目标信号=表达式1 when 条件1 else 表达式2 when 条件2 else.表达式n-1 when 条件n-1 else 表达式n when 条件n;,(2)条件型说明:,(1)赋值情况:满足某个条件,就将对应的表达式的值代入目标信号。(2)最后一个表达式可以不跟条件,表示上述条件均不满足时,将该表达式的值代入目标信号。(3)执行:条件型信号赋值语句是按顺序执行的,与进程中的多if语句等价,因此有优先级,前面的优先级最高,但if语句可以嵌套,该语句不能嵌套,但if语句只能在进程中使用。,例:2选1多路选择器,例:用条件型语句设计一个四选一的数据选择器,例:用条件型语句设计一个四选一的数据选择器,练习:用条件型语句设计一个八选一的数据选择器,vhdl中的主要描述语句分为两类:描述行为和描述结构。,描述行为,并行信号赋值 进程 断言 子程序,描述结构,元件 端口映射生成参数说明,1.并行信号赋值,包括:(1)基本型;(2)条件型;(3)选择型;其中,条件语句内部有优先级,按顺序执行,基本及选择语句都是并行语句,(2)条件型,根据不同的条件给目标信号赋不同的值。格式:目标信号=表达式1 when 条件1 else 表达式2 when 条件2 else.表达式n-1 when 条件n-1 else 表达式n when 条件n;,(3)选择型,根据选择条件表达式的值不同,给目标信号赋不同的值。格式:with 信号 select目标信号=表达式1 when 条件1,表达式2 when 条件2,.表达式n when 条件n;表达式n when others;,(3)选择型说明:,(1)赋值情况:当被选择的信号发生变化时,启动执行,满足哪一个条件,就将其对应的表达式代入目标信号。(2)选择型语句中各行结尾均未“,”,只有最后一行用“;”,不能有重叠的条件分支,最后条件可为 others,若最后条件不为 others,则其它条件必须包含表达式的所有可能值。(3)执行:选择型信号赋值语句无优先级顺序,与进程中的 case 语句等价。,例:用选择型语句设计一个四选一的数据选择器,例:用选择型语句设计一个四选一的数据选择器,练习:用选择型语句设计一个八选一的数据选择器,三种并行信号赋值语句的共同特点:,(1)赋值目标必须时信号,与其他并行语句同时执行,与书写顺序无关;(2)每一个信号赋值语句等效于一个进程语句,所有输入信号的变化都将启动该语句的执行。c=a xor b;,一描述行为:描述信号的变换、组合、传输。,描述行为,1.并行信号赋值 2.进程 3.断言 4.子程序,2.进程,进程的特点:(1)进程内部的顺序性;(2)进程的启动与挂起;(3)进程与进程,或其它并发语句之间的并发性及通信;,2.进程,进程的格式:进程名:process(敏感信号表)说明语句;(变量、数据类型和子程序,可无)begin 顺序描述语句;end process 进程名;,例:二选一的数据选择器,例:二选一的数据选择器,architecture arch of mux21a isbegin p1:process(a,b,s)variable d,e,:bit;begin d:=a and(not s);e:=b and s;y=d or e;end process p1;end arch,进程说明:,(1)process语句可由敏感量启动,启动后将从上至下逐句执行一遍,中间不能控制其启、停,若process后无敏感量,则必须由wait语句,若都无,则程序会周而复始的循环执行;进程也可由wait语句来启动,但不能同时使用敏感信号和wait,也不能同时没有。(2)一个结构体中的多个进程之间是并行执行的,进程内部是顺序执行的。,进程说明:,(3)进程之间的通信是通过信号量来实现的,信号量可以将值带出进程,而变量的值要从进程内部输出,则必须将其值代入信号量,由信号量带出进程。(4)同步进程的敏感信号表中只有时钟信号,而异步进程的敏感信号表总除了时钟信号外还有其他信号。,进程中的语句,等待语句;顺序信号赋值;控制语句,控制语句是均按顺序执行的语句;包括,进程中控制语句,进程中的语句,等待语句;顺序信号赋值;控制语句;,2.进程,进程的格式:进程名:process(敏感信号表)说明语句;(变量、数据类型和子程序,可无)begin 顺序描述语句;end process 进程名;,(1)进程中的wait语句,wait语句用于控制进程的启、停只能用于进程的开始或结尾处,有四种形式:wait on 信号表;表示待表中信号有变化时进程启动。wait until条件表达式;当条件满足(真),进程启动。wait for 时间表达式;等到状态时限到,进程启动,不可综合,不讨论。wait;无限等待。注意:条件表达式及时间表达式若为表达式需加括号。,例:以二选一数据选择器为例,分别写出四种进程,判断对错。,architecture arch of mux21a isbegin p1:process(a,b,s)variable d,e,:bit;begin d:=a and(not s);e:=b and s;y=d or e;end process p1;end arch,例:以二选一数据选择器为例,分别写出四种进程,判断对错。,architecture arch of mux21a isbegin p2:process variable d,e,:bit;begin d:=a and(not s);e:=b and s;y=d or e;end process p2;end arch,例:以二选一数据选择器为例,分别写出四种进程,判断对错。,architecture arch of mux21a isbegin p3:process(a,b,s)variable d,e,:bit;begin d:=a and(not s);e:=b and s;y=d or e;wait on a,b,s;end process p3;end arch;,例:以二选一数据选择器为例,分别写出四种进程,判断对错。,architecture arch of mux21a isbegin p4:process(a,b,s)variable d,e,:bit;begin d:=a and(not s);e:=b and s;y=d or e;wait on a,b,s;end process p4;end arch,进程中的语句,等待语句;顺序信号赋值;控制语句,控制语句是均按顺序执行的语句;包括,(2)顺序语句,顺序信号赋值语句:形式与并行信号赋值语句相同,但执行方式不同,顺序语句的执行严格按照语句的先后顺序,,例:二选一的数据选择器,architecture arch of mux21a isbegin p1:process(a,b,s)variable d,e,:bit;begin d:=a and(not s);e:=b and s;y=anots or bs;end process p1;end arch,进程中的语句,(2)进程等待语句;顺序信号赋值;控制语句,控制语句是均按顺序执行的语句;包括,(3)控制语句控制语句:控制程序的分支和循环。,if 语句:只能在进程内部使用。,if 语句有三种:(1)if 语句的门闩控制(ifthen)(2)if 二分支(ifthenelse)(3)if 多分支(ifthenelsif.else),if 语句:只能在进程内部使用。,if 语句的门闩控制(ifthen)格式:if 条件 then 顺序语句;end if;例:if(ena=1)then q=d;end if;综合后生成锁存器(latch)条件改为时钟沿,则生成 D触发器:,寄存器的数量?,上升沿的描述,上升沿的描述,上升沿的描述,if 二分支(ifthenelse),格式:if 条件 then 顺序语句;else 顺序语句;end if;用条件来选择两条不同执行路径。,例:二选一选择器,architecture rtl of mux2 isbeginprocess(a,b,sel)begin if(sel=1)then y=a;else y=b;end if;end process;end rtl;,if 多分支(ifthenelsif.else),if语句的多选择控制又称为 if 语句的嵌套。格式:if 条件 then 顺序语句;elsif 条件 then 顺序语句;elsif 条件 then 顺序语句;else 顺序语句;end if;,例:四选一选择器,If语句的说明:,(1)if语句的条件判断输出是布尔量,即真(true)假(false),因此在if语句的条件表达式中只能使用关系操作符及逻辑运算操作的组合表达式;(2)if 多分支语句中隐含了优先级别的判断,最先出现的条件优先级最高,可用于设计具有优先级的电路,如8-3优先级编码器等。,(3)不完整条件语句,综合结果,完整条件语句,综合结果:,q=a WHEN sela=1 ELSE b WHEN selb=1 ELSE c;,If-Then Statements,Similar to Conditional Signal Assignment,PROCESS(sela,selb,a,b,c)BEGIN IF sela=1 THEN q=a;ELSIF selb=1 THEN q=b;ELSE q=c;END IF;END PROCESS;,练习:用if语句及条件型语句设计8-3优先级编码器。,8-3优先级编码器。,库及实体的描述,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY priorityencoder ISPORT(input:IN STD_LOGIC_VECTOR(7 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END priorityencoder;,结构体的描述,ARCHITECTURE rtl OF priorityencoder ISBEGINPROCESS(input)BEGIN IF(input(0)=0)THEN y=“111”;ELSIF(input(1)=0)THEN y=“110”;ELSIF(input(2)=0)THEN y=“101”;ELSIF(input(3)=0)THEN y=“100”;ELSIF(input(4)=0)THEN y=“011”;ELSIF(input(5)=0)THEN y=“010”;ELSIF(input(6)=0)THEN y=“001”;ELSIF(input(7)=0)THEN y=“000”;ELSE y=“XXX”;END IF;END PROCESS;END rtl;,(3)控制语句控制语句:控制程序的分支和循环。,case 语句,case 语句常用来描述总线或编码、译码行为,可读性比if 语句强。格式:case 选择条件 iswhen 分支条件1=顺序语句;when 分支条件2=顺序语句;.when 分支条件n=顺序语句;end case;,case 语句,其中的分支条件可有以下四种形式:when 值=顺序语句;指满足某一值执行后面的语句。when 值 to 值=顺序语句;指满足某一取值范围执行后面的语句。when 值|值|值|值=顺序语句;多值,或的关系,只要满足其中的一个值即可执行后面的语句。when others=顺序语句;其他所有缺省值。,case 语句说明(1):,1)分支条件的值必须在选择条件的取值范围内。2)两个分支条件不能重叠,case语句执行时必须选中,且只能选中一个分支条件,如果没有 others 分支条件存在,则分支条件必须覆盖表达式所有可能的值。3)对std_logc,std_logic_vector数 据类型要特别注意使用others分支条 件。,case 语句说明(2):,4)符号“=”表示值和执行语句的对应关系;5)case语句中所有值是并行处理的,与if语句不同,if语句有优先级,此外,case语句对任意项无法描述,例优先编码器,用case语句不好描述,但用if语句却容易描述,但ieee正在讨论任意项的描述,也许将来可以用case语句来描述。,例1:用case 语句描述四选一电路,a,i0,i1,i2,i3,b,q,Similar to Selected Signal Assignment,PROCESS(sela,selb,a,b,c)BEGIN CASE sel IS WHEN“00”=q q q q q=X;END CASE;END PROCESS;,WITH sel SELECT q=i0 WHEN“00”,i1 WHEN“01”,i2 WHEN“10”,i3 WHEN“11”,X WHEN OTHERS;,Case Statement,练习:设计38译码器,g1,g2a,g2b为控制端,当g1为高电平并且g2a和g2b均为低电平时才正常译码,否则输出均为高电平。,38译码器,case 语句,注意:通常在case语句中,when语句可以颠倒次序而不至于发生错误,但在if语句中,颠倒条件的次序往往会使逻辑功能发生变化,因为if语句有优先级的问题,在前面的优先级高于后面。,