《EDA 技术实用教程VHDL设计初步7.ppt》由会员分享,可在线阅读,更多相关《EDA 技术实用教程VHDL设计初步7.ppt(59页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、EDA 技术实用教程VHDL设计初步7 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望10.1 顺序语句顺序语句 10.1.1赋值语句赋值语句信号赋值语句信号赋值语句信号赋值语句信号赋值语句变量赋值语句变量赋值语句变量赋值语句变量赋值语句10.1.2IF语句语句10.1.3CASE语句语句单个普通数值,如单个普通数值,如6。数值选择范围,如数值选择范围,如(2 TO 4)(2 TO 4)。并列数值,如并列数值,如3 3 5 5。混合方式,以上三种方式的混合。混合方
2、式,以上三种方式的混合。【例例10-1】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 activ OF mux41 IS SIGNAL sel:INTEGER RANGE 0 TO 15;BEGIN PROCESS(sel,s4,s3,s2,s1)BEGIN sel=0;-输入初始值输入初始值 IF(s1=1)THEN sel=sel+1;ELSIF(s2=1)THEN
3、 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;z4 z1 z2 z3 z4=1;-当当sel为为815中任一值时选中中任一值时选中 END CASE;END PROCESS;END activ;【例例10-1】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux41g IS PORT(s4,s3,s2,s1:IN STD_LOGIC;z4,z3,z
4、2,z1:OUT STD_LOGIC);END mux41g;ARCHITECTURE activ OF mux41g IS BEGIN PROCESS(s4,s3,s2,s1)VARIABLE sel:INTEGER RANGE 0 TO 15;BEGIN sel:=0;-输入初始值输入初始值 IF(s1=1)THEN sel:=sel+1;END IF;IF(s2=1)THEN sel:=sel+2;END IF;IF(s3=1)THEN sel:=sel+4;END IF;IF(s4=1)THEN sel:=sel+8;END IF;z1=0;z2=0;z3=0;z4 z1 z2 z3
5、z4 out1 out1 out1 out1 result result -a、b相等相等 IF(a=b)THEN result=x01;ELSE result -a、b不相等不相等 IF(a/=b)THEN result=x01;ELSE result 10;-当当a大于大于10时跳出循环时跳出循环 END LOOP L2;.10.1 顺序语句顺序语句 10.1.4 LOOP10.1.4 LOOP语句语句 (2)FOR_LOOP语句,语法格式如下:语句,语法格式如下:LOOP标号:标号:FOR 循环变量,循环变量,IN 循环次数范围循环次数范围 LOOP 顺序语句顺序语句ENDLOOPLOO
6、P标号标号;10.1 顺序语句顺序语句【例例10-4】LIBRARY IEEE;USE IEEE.STD_LOGIC_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;E
7、NDopt;10.1 顺序语句顺序语句 10.1.4 LOOP10.1.4 LOOP语句语句 【例例10-5】SIGNAL a,b,c:STD_LOGIC_VECTOR(1 TO 3);.FOR n IN 1 To 3 LOOPa(n)=b(n)AND c(n);END LOOP;此段程序等效于顺序执行以下三个信号赋值操作:此段程序等效于顺序执行以下三个信号赋值操作: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;.10.1 顺序语句顺序语句 10.1.6 EX
8、IT10.1.6 EXIT语句语句 EXIT;-第一种语句格式第一种语句格式EXIT LOOP标号;标号;-第二种语句格式第二种语句格式EXIT LOOP标号标号 WHEN 条件表达式;条件表达式;-第三种语句格式第三种语句格式 10.1 顺序语句顺序语句 10.1.6 EXIT10.1.6 EXIT语句语句 【例例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 A
9、ND 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;ENDLOOP;-当当i=1时返回时返回LOOP语句继续比较语句继续比较10.1 顺序语句顺序语句 10.1.7 WAIT10.1.7 WAIT语句语句 WAIT;-第一种语句格式第一种语句格式WAIT ON 信号表;信号表;-第二种语句格式第二种语句格式 WAIT UNTIL 条件表达式;条件表达式;-第三种语句格式第三种语句格式WAIT FOR 时间表达式;时间表达式;-
10、第四种语句格式,超时等待语句第四种语句格式,超时等待语句 10.1 顺序语句顺序语句 10.1.7 WAIT10.1.7 WAIT语句语句 【例例10-9】SIGNAL s1,s2:STD_LOGIC;.PROCESSBEGIN.WAIT ON s1,s2;ENDPROCESS;【例例10-10】(a)WAIT_UNTIL结构结构 (b)WAIT_ON结构结构.LOOPWait until enable=1;Wait on enable;.EXIT WHEN enable=1;END LOOP;10.1 顺序语句顺序语句 10.1.7 WAIT10.1.7 WAIT语句语句 WAIT UNTI
11、L 信号信号=Value;-(1)WAIT UNTIL 信号信号EVENT AND 信号信号=Value;-(2)WAIT UNTIL NOT 信号信号STABLE AND 信号信号=Value;-(3)WAIT UNTIL clock=1;WAIT UNTIL rising_edge(clock);WAIT UNTIL NOT clockSTABLE AND clock=1;WAIT UNTIL clock=1 AND clockEVENT;10.1 顺序语句顺序语句 10.1.7 WAIT10.1.7 WAIT语句语句 【例例10-11】PROCESSBEGINWAIT UNTIL clk
12、=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;ENDPROCESS;10.1 顺序语句顺序语句 10.1.7 WAIT10.1.7 WAIT语句语句 【例例10-12】PROCESS BEGIN rst_loop:LOOP WAIT UNTIL clock=1 AND clockEVENT;-等待时钟信号等待时钟信号 NEXT rst_loop WHEN(rst=1);-检测复位信号检测复位信号rst x=a;-无复位信号,执行赋值操作无复位信号,执行赋
13、值操作 WAIT UNTIL clock=1 AND clockEVENT;-等待时钟信号等待时钟信号 NEXT rst_loop When(rst=1);-检测复位信号检测复位信号rst y=b;-无复位信号,执行赋值操作无复位信号,执行赋值操作 END LOOP rst_loop;ENDPROCESS;【例例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:
14、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;ARCHITECTURE behave OF shifter IS SIGNAL enable:STD_LOGIC;BEGIN PROCESS BEGIN WAIT UNTIL(RISING_EDGE(clk);-等待时钟上升沿等待时钟上升沿 IF(reset=1)THEN qout qout qout qout NUL
15、L;END CASE;END IF;END PROCESS;END behave;10.1 顺序语句顺序语句 10.1.8 10.1.8 子程序调用语句子程序调用语句 1.1.过程调用过程调用 过程名过程名(形参名形参名=实参表达式实参表达式,形参名形参名=实参表达式实参表达式);【例例10-14】PACKAGE data_types IS -定义程序包定义程序包SUBTYPE data_element IS INTEGER RANGE 0 TO 3;-定义数据类型定义数据类型TYPE data_array IS ARRAY(1 TO 3)OF data_element;END data_ty
16、pes;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_array;-swap的形参名为的形参名为data
17、、low、high low,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 BEGIN -进程开始进程开始 my_array:
18、=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 y THEN tmp:=x;x:=y;y:=tmp;END IF;END sort2;BEGIN PROCESS(a,b,c,d)VARIABLE va,vb,vc,vd:BIT_VE
19、CTOR(0 TO top);BEGIN va:=a;vb:=b;vc:=c;vd:=d;sort2(va,vc);sort2(vb,vd);sort2(va,vb);sort2(vc,vd);sort2(vb,vc);ra=va;rb=vb;rc=vc;rd=vd;END PROCESS;END muxes;2 2函数调用函数调用 10.1 顺序语句顺序语句 10.1.9 RETURN10.1.9 RETURN语句语句 RETURN;-第一种语句格式第一种语句格式RETURN 表达式;表达式;-第二种语句格式第二种语句格式【例例10-16】PROCEDURE rs(SIGNAL s,r:IN
20、 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 regb;WHEN 110=tmp:=NOT rega;WHEN OTHERS =NULL;END CASE;10.2 并行语句并行语句 并行信号赋值语句并行信号赋值语句(ConcurrentSignalAssign
21、ments)。进程语句进程语句(ProcessStatements)。块语句块语句(BlockStatements)。条件信号赋值语句条件信号赋值语句(SelectedSignalAssignments)。元件例化语句元件例化语句(ComponentInstantiations),其中包括类属配置语句。,其中包括类属配置语句。生成语句生成语句(GenerateStatements)。并行过程调用语句并行过程调用语句(ConcurrentProcedureCalls)。ARCHITECTURE 结构体名结构体名 OF 实体名实体名 IS 说明语句说明语句 BEGIN 并行语句并行语句END AR
22、CHITECTURE结构体名结构体名10.2 并行语句并行语句 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;END ARCHITECTURE curt;【例例10-18】ENTITY mux IS PORT(a,b,c:IN BIT;p1,p2:IN BIT;z :OUT BIT);END;ARCHI
23、TECTURE behv OF mux IS BEGIN z =a WHEN p1=1 ELSE b WHEN p2=1 ELSE c ;END;10.2 并行语句并行语句 10.2.1并行信号赋值语句并行信号赋值语句2.2.条件信号赋值语句条件信号赋值语句 赋值目标赋值目标=表达式表达式 WHEN 赋值条件赋值条件 ELSE表达式表达式 WHEN 赋值条件赋值条件 ELSE .表达式表达式;10.2 并行语句并行语句 10.2.1并行信号赋值语句并行信号赋值语句2.2.条件信号赋值语句条件信号赋值语句 图图10-1例例10-18的的RTL电路图(电路图(Synplify综合)综合)10.2
24、并行语句并行语句 10.2.1并行信号赋值语句并行信号赋值语句3.3.选择信号赋值语句选择信号赋值语句 WITH 选择表达式选择表达式 SELECT 赋值目标信号赋值目标信号=表达式表达式 WHEN 选择值选择值表达式表达式 WHEN 选择值选择值.表达式表达式 WHEN 选择值;选择值;【例例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;datao
25、ut :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 data2 WHEN 001,data1 NAND data2 WHEN 010,data1 NOR data2 WHEN 011,data1 XOR data2 WHEN 100,data
26、1 XNOR data2 WHEN 101,Z WHEN OTHERS;END concunt;10.2 并行语句并行语句 10.2.1并行信号赋值语句并行信号赋值语句3.3.选择信号赋值语句选择信号赋值语句 .WITH selt SELECTmuxout l_time,gb2=s_time);-局部端口参量设定局部端口参量设定 PORT(pb:IN BIT;pb2:INOUT BIT);-块结构中局部端口定义块结构中局部端口定义 PORT MAP(pb1=b1,pb2=a1);-块结构端口连接说明块结构端口连接说明 CONSTANT delay:Time:=1 ms;-局部常数定义局部常数定
27、义 SIGNAL s1:BIT;-局部信号定义局部信号定义 BEGIN s1=pb1 AFTER delay;pb2=s1 AFTER gb1,b1 AFTER gb2;END BLOCK blk1;END ARCHITECTURE func;10.2 并行语句并行语句 10.2.2块语句结构块语句结构【例例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=s1;END BLO
28、CK b1;.【例例10-22】LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY f_adder IS PORT(ain,bin,cin:IN std_logic;sum,cout:OUT std_logic);END f_adder;ARCHITECTURE e_ad OF f_adder IS SIGNAL so1,co1,co2:std_logic;BEGIN h_adder1:BLOCK -半加器半加器u1 BEGIN PROCESS(ain,bin)BEGIN so1=NOT(ain XOR(NOT bin);co1=ain AND bi
29、n;END PROCESS;END BLOCK h_adder1;h_adder2:BLOCK -半加器半加器u2 SIGNAL so2:std_logic;BEGIN so2=NOT(so1 XOR(NOT cin);co2=so1 and cin;sum=so2;END BLOCK h_adder2;or2:BLOCK -或门或门u3 BEGIN PROCESS(co2,co1)BEGIN cout=co2 OR co1;END PROCESS;END BLOCK or2;END e_ad;10.2 并行语句并行语句 10.2.2块语句结构块语句结构图图10-2例例10-22的的RTL电路
30、图(电路图(Synplify综合)综合)10.2 并行语句并行语句 10.2.3并行过程调用语句并行过程调用语句过程名过程名(关联参量名关联参量名);【例例10-23】.PROCEDURE adder(SIGNAL a,b:IN STD_LOGIC;-过程名为过程名为adder SIGNAL sum:OUT STD_LOGIC);.adder(a1,b1,sum1);-并行过程调用并行过程调用 .-在此,在此,a1、b1、sum1即为分别对应于即为分别对应于a、b、sum的关联参量名的关联参量名 PROCESS(c1,c2);-进程语句执行进程语句执行 BEGIN Adder(c1,c2,s1
31、);-顺序过程调用,在此顺序过程调用,在此c1、c2、s1即为分别对即为分别对ENDPROCESS;-应于应于a、b、sum的关联参量名的关联参量名10.2 并行语句并行语句 10.2.3并行过程调用语句并行过程调用语句【例例10-24】PROCEDURE check(SIGNAL a:IN STD_LOGIC_VECTOR;-在调用时在调用时 SIGNAL error:OUT BOOLEAN)IS -再定位宽再定位宽 VARIABLE found_one:BOOLEAN:=FALSE;-设初始值设初始值 BEGIN FOR i IN aRANGE LOOP -对位矢量对位矢量a的所有的位元素
32、进行循环检测的所有的位元素进行循环检测 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 LOOP;-再测再测a中的其他位中的其他位 error 连接端口名,连接端口名,.);10.2 并行语句并行语句 10.2.5生成语句生成语
33、句 标号:标号:FOR 循环变量循环变量 IN 取值范围取值范围 GENERATE 说明说明 BEGIN 并行语句并行语句 END GENERATE 标号标号;标号:标号:IF 条件条件GENERATE 说明说明 Begin 并行语句并行语句 END GENERATE 标号标号;10.2 并行语句并行语句 10.2.5生成语句生成语句表达式表达式 TO 表达式表达式;-递增方式,如递增方式,如1 TO 5表达式表达式 DOWNTO 表达式表达式;-递减方式,如递减方式,如5 DOWNTO 1【例例10-25】.COMPONENT compPORT(x:IN STD_LOGIC;y:OUT ST
34、D_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,.10.2 并行语句并行语句 10.2.5生成语句生成语句图图10-3生成语句产生的生成语句产生的8个相同的电路模块个相同的电路模块 10.2 并行语句并行语句 10.2.5生成语句生成语句【例例10-26】LIBRARY IEEE;USE IEEE.STD_LO
35、GIC_1164.ALL;ENTITY Latch IS PORT(D,ENA: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;【例例10-27】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTIT
36、Y 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_save;ELSE Q=ZZZZZZZZ;END IF;IF G=
37、1 THEN Sigvec_save=D;END IF;END PROCESS;END ARCHITECTURE two;ARCHITECTURE one OF SN74373 IS COMPONENT Latch 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 G
38、ENERATE;Q=sig_mid WHEN OEN=0 ELSE ZZZZZZZZ;-当当OEN=1时,时,Q(8)Q(1)输出状态呈高阻态输出状态呈高阻态END ARCHITECTURE one;【例例10-28】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY d_ff ISPORT(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 ISBEGINbin_p_rs_ff:PROCESS(CLK
39、_S)BEGIN IF clk_s=1 AND clk_sEVENT THEN q=d;nq=NOT d;END IF;END PROCESS;END ARCHITECTURE a_rs_ff;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY cnt_bin_n isGENERIC(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
40、COMPONENT d_ff 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;10.2 并行语句并行语句 10.2.5生成语句生成语句图图10-46位二进制计数器原理图位二进制计数器
41、原理图10.2 并行语句并行语句 10.2.6REPORT语句语句【例例10-29】LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY RSFF2 IS PORT(S,R:IN std_logic;Q,QF:OUT std_logic);END RSFF2;ARCHITECTURE BHV OF RSFF2 IS BEGIN P1:PROCESS(S,R)VARIABLE D:std_logic;BEGIN IF R=1 and S=1 THEN REPORT BOTH R AND S IS 1;-报告出错信息报告出错信息 ELSIF R=1 and
42、 S=0 THEN D:=0;ELSIF R=0 and S=1 THEN D:=1;END IF;Q =D;QF=NOT D;END PROCESS;END BHV;10.2 并行语句并行语句 10.2.7断言语句断言语句 ASSERT ASSERT REPORT REPORT SEVERITY SEVERITY ;Note(通报)(通报)报告出错信息,可以通过编译报告出错信息,可以通过编译Warning(警告)(警告)报告出错信息,可以通过编译报告出错信息,可以通过编译Error(错误)(错误)报告出错信息,暂停编译报告出错信息,暂停编译Failure(失败)(失败)报告出错信息,暂停编译
43、报告出错信息,暂停编译表表10-1预定义错误等级预定义错误等级10.2 并行语句并行语句 10.2.7断言语句断言语句1.1.顺序断言语句顺序断言语句 【例例10-30】P1:PROCESS(S,R)VARIABLE D:std_logic;BEGINASSERT not(R=1and S=1)REPORT both R and S equal to 1 SEVERITY Error;IF R=1 and S=0 THEN D:=0;ELSIF R=0 and S=1 THEN D:=1;END IF;Q =D;QF=NOT D;END PROCESS;2.2.并行断言语句并行断言语句 【例例
44、10-31】LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY RSFF2 IS PORT(S,R:IN std_logic;Q,QF:OUT std_logic);END RSFF2;ARCHITECTURE BHV OF RSFF2 IS BEGIN PROCESS(R,S)BEGIN ASSERT not(R=1and S=1)REPORT both R and S equal to 1 SEVERITY Error;END PROCESS;PROCESS(R,S)VARIABLE D:std_logic:=0;BEGIN IF R=1 and
45、 S=0 THEN D:=0;ELSIF R=0 and S=1 THEN D:=1;END IF;Q=D;QF=NOT D;END PROCESS;END;10.3 属性描述与定义语句属性描述与定义语句 1.1.信号类属性信号类属性 (NOT clockSTABLE AND clock=1)(clockEVENTANDclock=1)2.2.数据区间类属性数据区间类属性 .SIGNAL range1:IN STD LOGIC VECTOR(0 TO 7);.FOR i IN range1RANGE LOOP .10.3 属性描述与定义语句属性描述与定义语句 3.3.数值类属性数值类属性 .P
46、ROCESS(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 ;.【例例10-32】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_s
47、ize-1 DOWNTO 0);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 behav
48、e;10.3 属性描述与定义语句属性描述与定义语句 4.4.数组属性数组属性LENGTH LENGTH.TYPE arry1 ARRAY(0 TO 7)OF BIT;VARIABLE wth:INTEGER;.wth1:=arry1LENGTH;-wth1=8.10.3 属性描述与定义语句属性描述与定义语句 5.5.用户定义属性用户定义属性 ATTRIBUTE 属性名属性名:数据类型数据类型;ATTRIBUTE 属性名属性名 OF 对象名对象名:对象类型对象类型IS 值值;LIBRARY synplify;USE synplicity.attributes.all;LIBRARY IEEE;U
49、SE 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;5.5.用户定义属性用户定义属性