《第十章_VHDL语句1.ppt》由会员分享,可在线阅读,更多相关《第十章_VHDL语句1.ppt(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、EDAEDA技术技术实用教程实用教程第第10章章 VHDL基本语句基本语句K KX康芯科技康芯科技10.1 顺序语句z赋值语句z流程控制语句z等待语句z子程序调用语句z返回语句z空操作语句K KX康芯科技康芯科技10.1 顺序语句顺序语句10.1.1 赋值语句赋值语句10.1.2 IF 语句语句信号赋值语句信号赋值语句变量赋值语句变量赋值语句赋值目标赋值符号赋值源K KX康芯科技康芯科技10.1 顺序语句顺序语句10.1.3 CASE语句语句CASE语句的结构如下:语句的结构如下:CASE CASE 表达式表达式 ISISWhen When 选择值选择值=顺序语句;顺序语句;When When
2、 选择值选择值=顺序语句;顺序语句;.END CASE END CASE;多条件选择值的一般表达式为:多条件选择值的一般表达式为:选择值选择值|选择值选择值 选择值可以有四种不同的表达方式:选择值可以有四种不同的表达方式:单个普通数值,如单个普通数值,如6 6。数值选择范围,如数值选择范围,如(2(2 TO 4)TO 4),表示取值为表示取值为2 2、3 3或或4 4。并列数值,如并列数值,如3 3 5 5,表示取值为,表示取值为3 3或者或者5 5。混合方式,以上三种方式的混合。混合方式,以上三种方式的混合。K KX康芯科技康芯科技10.1.4 LOOP语句语句(1)单个)单个LOOP语句,
3、其语法格式如下:语句,其语法格式如下:LOOP标号:标号:LOOP 顺序语句顺序语句 END LOOP LOOP标号标号;(2)FOR_LOOP语句,语法格式如下:语句,语法格式如下:LOOP标号:标号:FOR 循环变量,循环变量,IN 循环次数范围循环次数范围 LOOP 顺序语句顺序语句 END LOOP LOOP标号标号;用法示例如下:用法示例如下:.L2:LOOP a:=a+1;EXIT L2 WHEN a 10;-当当a大于大于10时跳出循环时跳出循环 END LOOP L2;.K KX康芯科技康芯科技10.1.5 NEXT语句语句NEXT;-第一种语句格式第一种语句格式NEXT LO
4、OP标号;标号;-第二种语句格式第二种语句格式NEXT LOOP标号标号 WHEN 条件表达式;条件表达式;-第三种语句格式第三种语句格式【例【例10-6】.L1:FOR cnt_value IN 1 TO 8 LOOPs1:a(cnt_value):=0;NEXT WHEN(b=c);s2:a(cnt_value+8):=0;END LOOP L1;【例【例10-7】.L_x:FOR cnt_value IN 1 TO 8 LOOP s1:a(cnt_value):=0;k:=0;L_y:LOOP s2:b(k):=0;NEXT L_x WHEN(ef);s3:b(k+8):=0;k:=k+
5、1;NEXT LOOP L_y;NEXT LOOP L_x;.K KX康芯科技康芯科技10.1.6 EXIT语句语句EXIT;-第一种语句格式第一种语句格式EXIT LOOP标号;标号;-第二种语句格式第二种语句格式EXIT LOOP标号标号 WHEN 条件表达式;条件表达式;-第三种语句格式第三种语句格式【例【例10-8】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 AN
6、D 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;ELSE NULL;END IF;END LOOP;-当当 i=1时返回时返回LOOP语句继续比较语句继续比较K KX康芯科技康芯科技10.1.7 WAIT语句语句WAIT;-第一种语句格式第一种语句格式WAIT ON 信号表;信号表;-第二种语句格式第二种语句格式 WAIT UNTIL 条件表达式;条件表达式;-第三种语句格式第三种语句格式WAIT FOR 时间表达式;时间表达式;-第四种语句格式,第四种语句
7、格式,超时等待语句超时等待语句【例【例10-10】SIGNAL s1,s2:STD_LOGIC;.PROCESSBEGIN.WAIT ON s1,s2;END PROCESS;【例【例10-10】(a)WAIT_UNTIL结构结构 (b)WAIT_ON结构结构.LOOPWait until enable=1;Wait on enable;.EXIT WHEN enable=1;END LOOP;K KX康芯科技康芯科技10.1.7 WAIT语句语句一一般般地地,只只有有WAIT_UNTIL格格式式的的等等待待语语句句可可以以被被综综合合器器接接受受(其其余余语语句句格格式式只只能能在在VHDL
8、仿仿真真器器中中使使用用),WAIT_UNTIL语语句句有有以以下下三三种种表表达达方式:方式:WAIT UNTIL WAIT UNTIL 信号信号=Value Value;-(1)-(1)WAIT UNTIL WAIT UNTIL 信号信号EVENT AND EVENT AND 信号信号=Value;-(2)Value;-(2)WAIT UNTIL NOT WAIT UNTIL NOT 信号信号STABLE AND STABLE AND 信号信号=Value;-(3)Value;-(3)如如果果设设clock为为时时钟钟信信号号输输入入端端,以以下下四四条条WAIT语语句句所所设设的的进进程
9、程启启动动条条件都是时钟上跳沿,所以它们对应的硬件结构是一样的:件都是时钟上跳沿,所以它们对应的硬件结构是一样的:WAIT UNTIL clock=1;WAIT UNTIL clock=1;WAIT UNTIL rising_edge(clock);WAIT UNTIL rising_edge(clock);WAIT UNTIL NOT clockWAIT UNTIL NOT clockSTABLE AND clock=1;STABLE AND clock=1;WAIT UNTIL clock=1 AND clockEVENT;WAIT UNTIL clock=1 AND clockEVENT
10、;K KX康芯科技康芯科技【例【例10-13】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shifter IS PORT(data:IN STD_LOGIC_VECTOR(7 DOWNTO 0);shift_left:IN STD_LOGIC;shift_right:IN STD_LOGIC;clk:IN STD_LOGIC;reset:IN STD_LOGIC;mode:IN STD_LOGIC_VECTOR(1 DOWNTO 0);qout:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);END shifter;A
11、RCHITECTURE behave OF shifter IS SIGNAL enable:STD_LOGIC;BEGIN PROCESS BEGIN WAIT UNTIL(RISING_EDGE(clk);-等待时钟上升沿等待时钟上升沿 IF(reset=1)THEN qout qout qout qout NULL;END CASE;END IF;END PROCESS;END behave;K KX康芯科技康芯科技1 函数(函数(FUNCTION)函数的语言表达格式如下:函数的语言表达格式如下:FUNCTION 函数名(参数表)函数名(参数表)RETURN 数据类型数据类型 -函数首函
12、数首FUNCTION 函数名(参数表)函数名(参数表)RETURN 数据类型数据类型 IS -函数体函数体 说明部分说明部分 BEGIN 顺序语句顺序语句;END FUNCTION 函数名函数名;10.1.8 子程序调用语句子程序调用语句K KX康芯科技康芯科技【例】【例】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY func IS PORT (a:IN STD_LOGIC_VECTOR(0 to 2);m:OUT STD_LOGIC_VECTOR(0 to 2));END ENTITY func;ARCHITECTURE demo OF fu
13、nc IS FUNCTION sam(x,y,z:STD_LOGIC)RETURN STD_LOGIC IS BEGIN RETURN(x AND y)OR Z;END FUNCTION sam;BEGIN PROCESS(a)BEGIN m(0)=sam(a(0),a(1),a(2);m(1)=sam(a(2),a(0),a(1);m(2)=sam(a(1),a(2),a(0);END PROCESS;END ARCHITECTURE demo;K KX康芯科技康芯科技2 重载函数(重载函数(OVERLOADED FUNCTION)接下页接下页【例】【例】LIBRARY IEEE;-程序包首
14、程序包首 USE IEEE.std_logic_1164.all;USE IEEE.std_logic_arith.all;PACKAGE STD_LOGIC_UNSIGNED is function+(L:STD_LOGIC_VECTOR;R:INTEGER)return STD_LOGIC_VECTOR;function+(L:INTEGER;R:STD_LOGIC_VECTOR)return STD_LOGIC_VECTOR;function+(L:STD_LOGIC_VECTOR;R:STD_LOGIC)return STD_LOGIC_VECTOR;function SHR(ARG:
15、STD_LOGIC_VECTOR;COUNT:STD_LOGIC_VECTOR)return STD_LOGIC_VECTOR;.end STD_LOGIC_UNSIGNED ;K KX康芯科技康芯科技接上页接上页 LIBRARY IEEE;-程序包体程序包体 use IEEE.std_logic_1164.all;use IEEE.std_logic_arith.all;package body STD_LOGIC_UNSIGNED is function maximum(L,R:INTEGER)return INTEGER is begin if L R then return L;els
16、e return R;end if;end;function+(L:STD_LOGIC_VECTOR;R:INTEGER)return STD_LOGIC_VECTOR is Variable result:STD_LOGIC_VECTOR(Lrange);Begin result:=UNSIGNED(L)+R;return std_logic_vector(result);end;.end STD_LOGIC_UNSIGNED;K KX康芯科技康芯科技3 过程(过程(PROCEDURE)过程的语句格式是:过程的语句格式是:PROCEDURE 过程名过程名(参数表参数表)-过程首过程首PROC
17、EDURE 过程名过程名(参数表参数表)IS 说明部分说明部分 BIGIN -过程体过程体 顺序语句顺序语句;END PROCEDURE 过程名过程名;以下是三个过程首的定义示例:PROCEDURE pro1 (VARIABLE a,b:INOUT REAL);PROCEDURE pro2(CONSTANT a1:IN INTEGER;VARIABLE b1:OUT INTEGER);PROCEDURE pro3 (SIGNAL sig:INOUT BIT);K KX康芯科技康芯科技调用过程的语句格式如下:过程名过程名(形参名形参名=实参表达式实参表达式 ,形参名形参名=实参表达式实参表达式)
18、;过程调用过程调用一个过程的调用将分别完成以下三个步骤:(1)将)将IN和和INOUT模式的实参值赋给欲调模式的实参值赋给欲调用的过程中与它们对应的形参;用的过程中与它们对应的形参;(2)执行这个过程;)执行这个过程;(3)将过程中)将过程中IN和和INOUT模式的形参值返回给对应的实参。模式的形参值返回给对应的实参。K KX康芯科技康芯科技【例【例10-14】PACKAGE data_types IS -定义程序包定义程序包SUBTYPE data_element IS INTEGER RANGE 0 TO 3;-定义数据类型定义数据类型TYPE data_array IS ARRAY(1
19、TO 3)OF data_element;END data_types;USE WORK.data_types.ALL;-打开以上建立在当前工作库的程序包打开以上建立在当前工作库的程序包data_typesENTITY sort IS PORT(in_array:IN data_array;out_array:OUT data_array);END sort;ARCHITECTURE exmp OF sort IS BEGIN PROCESS(in_array)-进程开始,设进程开始,设data_types为敏感信号为敏感信号 PROCEDURE swap(data:INOUT data_ar
20、ray;-swap的形参名为的形参名为data、low、highlow,high:IN INTEGER)IS VARIABLE temp:data_element;BEGIN -开始描述本过程的逻辑功能开始描述本过程的逻辑功能 IF(data(low)data(high)THEN -检测数据检测数据 temp:=data(low);data(low):=data(high);data(high):=temp;END IF;END swap;-过程过程swap定义结束定义结束 VARIABLE my_array:data_array;-在本进程中定义变量在本进程中定义变量my_array接下页接
21、下页K KX康芯科技康芯科技 BEGIN -进程开始进程开始 my_array:=in_array;-将输入值读入变量将输入值读入变量swap(my_array,1,2);-my_array、1、2是对应于是对应于data、low、high的实参的实参 swap(my_array,2,3);-位置关联法调用,位置关联法调用,第第2、第、第3元素交换元素交换 swap(my_array,1,2);-位置关联法调用,位置关联法调用,第第1、第、第2元素再次交换元素再次交换 out_array=my_array;END Process;END exmp;接上页接上页K KX康芯科技康芯科技10.1.
22、10 返回语句返回语句(RETURN)RETURN;-第一种语句格式第一种语句格式RETURN 表达式;表达式;-第二种语句格式第二种语句格式【例【例10-16】PROCEDURE rs(SIGNAL 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 tmp:=rega AND regb;WHEN 101=tmp:=rega OR r
23、egb;WHEN 110=tmp:=NOT rega;WHEN OTHERS =NULL;END CASE;WHEN OTHERS=tmp:=rega ;K KX康芯科技康芯科技10.2 VHDL并行语句并行语句结构体中的并行语句主要有七种:1 1、并行信号赋值语句(、并行信号赋值语句(Concurrent Signal AssignmentsConcurrent Signal Assignments)。)。2 2、进程语句、进程语句(Process Statements)Process Statements)。3 3、块语句、块语句(Block Statements)Block Statem
24、ents)。4 4、条件信号赋值语句、条件信号赋值语句(Selected Signal Assignments)Selected Signal Assignments)。5 5、元件例化语句、元件例化语句(Component Instantiations)Component Instantiations),其中包括类属配置语句。其中包括类属配置语句。6 6、生成语句、生成语句(Generate Statements)Generate Statements)。7 7、并行过程调用语句、并行过程调用语句(Concurrent Procedure Calls)Concurrent Procedure
25、 Calls)。ARCHITECTURE 结构体名结构体名 OF 实体名实体名 IS 说明语句说明语句 BEGIN 并行语句并行语句END ARCHITECTURE 结构体名结构体名K KX康芯科技康芯科技10.2.1 并行信号赋值语句并行信号赋值语句1.1.简单信号赋值语句简单信号赋值语句赋值目标赋值目标 =表达式表达式以下结构体中的五条信号赋值语句的执行是并行发生的。ARCHITECTURE curt OF bc1 ISSIGNAL 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;
26、END ARCHITECTURE curt;K KX康芯科技康芯科技2.2.条件信号赋值语句条件信号赋值语句赋值目标赋值目标=表达式表达式 WHEN 赋值条件赋值条件 ELSE 表达式表达式 WHEN 赋值条件赋值条件 ELSE .表达式表达式;10.2.1 并行信号赋值语句并行信号赋值语句K KX康芯科技康芯科技3.3.选择信号赋值语句选择信号赋值语句WITH 选择表达式选择表达式 SELECT 赋值目标信号赋值目标信号=表达式表达式 WHEN 选择值选择值表达式表达式 WHEN 选择值选择值.表达式表达式 WHEN 选择值;选择值;10.2.1 并行信号赋值语句并行信号赋值语句K KX康芯
27、科技康芯科技【例【例10-19】LIBRARY IEEE;USE 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 concunt OF decoder IS SIGNAL instruction:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN instruction=c&b&a
28、;WITH instruction SELECT dataout l_time,gb2=s_time);-局部端口局部端口参量设定参量设定 PORT(pb1:IN BIT;pb2:INOUT BIT);-块结构中局部端块结构中局部端口定义口定义 PORT MAP(pb1=b1,pb2=a1);-块结构端口连接说明块结构端口连接说明 CONSTANT delay:Time:=1 ms;-局部常数定义局部常数定义 SIGNAL s1:BIT;-局部信号定义局部信号定义 BEGIN s1=pb1 AFTER delay;pb2=s1 AFTER gb1,b1 AFTER gb2;END BLOCK
29、blk1;END ARCHITECTURE func;K KX康芯科技康芯科技【例【例10-21】.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 连接端口名,连接端口名,.);10.2 VHDL并行语句并行语句K KX康芯科技康芯科技10.2.5 生成语句生成语句标号:标号:FOR 循环变量循环变量 IN 取值范围取值范围 GENERATE 说明说明 BEGIN 并行语句并行语句 END
30、 GENERATE 标号标号;标号:标号:IF 条件条件GENERATE 说明说明 Begin 并行语句并行语句 END GENERATE 标号标号;四部分组成的:(1 1)生成方式)生成方式(2 2)说明部分)说明部分(3 3)并行语句)并行语句(4 4)标号)标号表达式表达式 TO 表达式表达式;-递增方式,如递增方式,如1 TO 5表表达达式式 DOWNTO 表表达达式式;-递递减减方方式式,如如5 DOWNTO 1取值范围的语句格式,有两种形式:K KX康芯科技康芯科技图图10-2 生成语句产生成语句产生的生的8个相同的电路个相同的电路模块模块【例【例10-25】.COMPONENT
31、compPORT(x:IN STD_LOGIC;y:OUT STD_LOGIC);END COMPONENT;SIGNAL a:STD_LOGIC_VECTOR(0 TO 7);SIGNAL b:STD_LOGIC_VECTOR(0 TO 7);.gen:FOR i IN aRANGE GENERATE u1:comp PORT MA(x=a(i),y=b(i);END GENERATE gen,.K KX康芯科技康芯科技【例例10-26】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Latch IS PORT(D:IN STD_LOGIC;E
32、NA:IN STD_LOGIC;Q:OUT STD_LOGIC );END ENTITY Latch;ARCHITECTURE one OF Latch IS SIGNAL sig_save:STD_LOGIC;BEGIN PROCESS(D,ENA)BEGIN IF ENA=1 THEN sig_save=D;END IF;Q=sig_save;END PROCESS;END ARCHITECTURE one;K KX康芯科技康芯科技【例【例10-27】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SN74373 IS PORT(D:IN S
33、TD_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_save;ELSE Q=ZZZZZZZZ;END IF;IF G=1 THEN Sigvec_save=D;END
34、 IF;END PROCESS;END ARCHITECTURE two;ARCHITECTURE one OF SN74373 IS COMPONENT Latch 接下页接下页K KX康芯科技康芯科技PORT(D,ENA:IN STD_LOGIC;Q:OUT STD_LOGIC);END COMPONENT;SIGNAL sig_mid:STD_LOGIC_VECTOR(8 DOWNTO 1);BEGIN GeLatch:FOR iNum IN 1 TO 8 GENERATE Latchx:Latch PORT MAP(D(iNum),G,sig_mid(iNum);END GENERAT
35、E;Q=sig_mid WHEN OEN=0 ELSE ZZZZZZZZ;-当当OEN=1时,时,Q(8)Q(1)输出状态呈高阻态输出状态呈高阻态END ARCHITECTURE one;K KX康芯科技康芯科技语语句句“NOT(clockSTABLE AND clock=1)”的的表达方式是不可综合的。表达方式是不可综合的。10.3 属性描述与定义语句属性描述与定义语句1.1.信号类属性信号类属性综合器支持的属性有:LEFTLEFT、RIGHTRIGHT、HIGHHIGH、LOWLOW、RANGERANGE、REVERS REVERS RANGERANGE、LENGTHLENGTH、EVEN
36、TEVENT及及STABLESTABLE。以下两语句的功能是一样的。(NOT clockNOT clockSTABLE AND clock=1)STABLE AND clock=1)(clockEVENT AND clock=1)(clockEVENT AND clock=1)注注 意:意:K KX康芯科技康芯科技2.2.数据区间类属性数据区间类属性【例【例10-210】.SIGNAL range1:IN STD LOGIC VECTOR(0 TO 7);.FOR i IN range1RANGE LOOP.3、数值类属性、数值类属性.PROCESS(clock,a,b);TYPE obj I
37、S ARRAY(0 TO 15)OF BIT;SIGNAL ele1,ele2,ele3,ele4 :INTEGER;BEGIN ele1=objRIGNT;ele2=objLEFT;ele3=objHIGH;ele4=objLOW ;.K KX康芯科技康芯科技【例【例10-30】LIBRARY 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)
38、;even_numbits,odd_numbits:OUT STD_LOGIC);END parity;ARCHITECTURE behave OF parity ISBEGINPROCESS(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;K KX康芯科技康芯科技4
39、 4、数组属性、数组属性LENGTHLENGTH.TYPE arry1 ARRAY(0 TO 7)OF BIT;VARIABLE wth:INTEGER;.wth1:=arry1LENGTH;-wth1=8.5、用户定义属性、用户定义属性ATTRIBUTE 属性名属性名:数据类型数据类型;ATTRIBUTE 属性名属性名 OF 对象名对象名:对象类型对象类型IS 值值;例例如如SynplifySynplify综综合合器器支支持持的的特特殊殊属属性性都都在在synplify.attributessynplify.attributes程程序序包中,使用前加入以下语句即可:包中,使用前加入以下语句即
40、可:LIBRARY synplify;USE synplicity.attributes.all;K KX康芯科技康芯科技【例【例10-31】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY cntbuf IS PORT(Dir:IN STD_LOGIC;Clk,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 Q:signal is 17,16,15,14;END cntbuf;