第九章_VHDL语句1

上传人:猪** 文档编号:243135893 上传时间:2024-09-16 格式:PPT 页数:61 大小:416.50KB
返回 下载 相关 举报
第九章_VHDL语句1_第1页
第1页 / 共61页
第九章_VHDL语句1_第2页
第2页 / 共61页
第九章_VHDL语句1_第3页
第3页 / 共61页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,K,X,康芯科技,EDA,技术,实用教程,第9章,VHDL,基本语句,9.1,顺序语句,赋值语句,流程控制语句,等待语句,子程序调用语句,返回语句,空操作语句,9.1 顺序语句,9.1.1 赋值语句,9.1.2,IF,语句,信号赋值语句,变量赋值语句,赋值目标,赋值符号,赋值源,9.1 顺序语句,9.1.3,CASE,语句,CASE,语句的结构如下:,CASE,表达式,IS,When,选择值 = 顺序语句;,When,选择值 = 顺序语句;,.,END CASE ;,多条件选择值的一般表达式为:,选择值 |选择值 ,选择值可以有四种不同的表达方式:,单个普通数值,如6。,数值选择范围,如(2,TO 4),,表示取值为2、3或4。,并列数值,如3,5,表示取值为3或者5。,混合方式,以上三种方式的混合。,9.1.4,LOOP,语句,(1)单个,LOOP,语句,其语法格式如下:,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;,.,【例9-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;,END opt;,【例9-5】,SIGNAL 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;,此段程序等效于顺序执行以下三个信号赋值操作:,a(1)=b(1) AND c(1);,a(2)=b(2) AND c(2);,a(3)=b(3) AND c(3);,library IEEE;,use IEEE.std_logic_1164.all;,use,IEEE.std_logic_unsigned.all,;,use,IEEE.std_logic_arith.all,;,entity,chuan_bing,is,port(load,: in,std_logic,;,d_in,: in,std_logic,;,d_out:buffer,std_logic_vector(7,downto,0);,clk,:in,std_logic,);,end,chuan_bing,;,architecture arch of,chuan_bing,is,signal l : std_logic_vector(7,downto,0);,串,/,并转换,begin,process(clk,),begin,if(clkevent,and,clk,=1) then,l(0)=,d_in,;,if(load,=0) then,for i in 6,downto,0 loop,l(i+1)=,l(i,);,end loop;,else,d_out,=l;,end if;,end if;,end process;,end arch;,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,USE IEEE.STD_LOGIC_UNSIGNED.ALL;,ENTITY CNT IS,PORT (CLK : IN STD_LOGIC;,CQ : OUT STD_LOGIC_VECTOR(2 DOWNTO 0);,COUT : OUT STD_LOGIC );,END CNT;,ARCHITECTURE,behav,OF CNT IS,BEGIN,PROCESS(CLK),VARIABLE CQI : STD_LOGIC_VECTOR(2 DOWNTO 0);,BEGIN,if CLKEVENT AND CLK=1 THEN,CQI := CQI + 1;,END IF;,IF CQI =111 THEN COUT = 1;,ELSE COUT = 0;,END IF;,CQ f);,s3: b(k+8) := 0;,k := k+1;,NEXT LOOP L_y ;,NEXT LOOP L_x ;,.,9.1.6,EXIT,语句,EXIT; -,第一种语句格式,EXIT LOOP,标号; - 第二种语句格式,EXIT LOOP,标号,WHEN,条件表达式; - 第三种语句格式,【例9-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 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;,ELSE NULL;,END IF;,END LOOP; -,当,i=1,时返回,LOOP,语句继续比较,9.1.7,WAIT,语句,WAIT; -,第一种语句格式,WAIT ON,信号表; - 第二种语句格式,WAIT UNTIL,条件表达式; - 第三种语句格式,WAIT FOR,时间表达式; - 第四种语句格式, 超时等待语句,【例9-9】,SIGNAL s1,s2 : STD_LOGIC;,.,PROCESS,BEGIN,.,WAIT ON s1,s2 ;,END PROCESS ;,【例9-10】,(,a) WAIT,_,UNTIL,结构 (,b) WAIT,_,ON,结构,.,LOOP,Wait until enable =1; Wait on enable;,. EXIT WHEN enable =1;,END LOOP;,9.1.7,WAIT,语句,一般地,只有,WAIT,_,UNTIL,格式的等待语句可以被综合器接受(其余语句格式只能在,VHDL,仿真器中使用) ,,WAIT,_,UNTIL,语句有以下三种表达方式:,WAIT UNTIL,信号=,Value ; - (1),WAIT UNTIL,信号,EVENT AND,信号=,Value; - (2),WAIT UNTIL NOT,信号,STABLE AND,信号=,Value; - (3),如果设,clock,为时钟信号输入端,以下四条,WAIT,语句所设的进程启动条件都是时钟上跳沿,所以它们对应的硬件结构是一样的:,WAIT UNTIL clock =1;,WAIT UNTIL rising_edge(clock) ;,WAIT UNTIL NOT clock,STABLE AND clock =1;,WAIT UNTIL clock =1 AND clockEVENT;,【例9-11】,.,PROCESS,BEGIN,WAIT 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 ;,【例9-12】,PROCESS,BEGIN,rst_loop,: LOOP,WAIT UNTIL,clock =1 AND clock,EVENT,; -,等待时钟信号,NEXT,rst_loop,WHEN (,rst,=1); -,检测复位信号,rst,x = a ; -,无复位信号,执行赋值操作,WAIT UNTIL,clock =1 AND clock,EVENT,; -,等待时钟信号,NEXT,rst_loop,When (,rst,=1); -,检测复位信号,rst,y = b ; -,无复位信号,执行赋值操作,END LOOP,rst_loop,;,END PROCESS;,【例9-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;,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, NULL;,END CASE;,END IF;,END PROCESS;,END behave;,1 函数(,FUNCTION),函数的语言表达格式如下:,FUNCTION,函数名(参数表),RETURN,数据类型 -函数首,FUNCTION,函数名(参数表),RETURN,数据类型,IS -,函数体, 说明部分 ,BEGIN,顺序语句 ;,END FUNCTION,函数名;,9.1.8 子程序调用语句,【例】,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,PACKAGE,packexp,IS -,定义程序包,FUNCTION max( a,b : IN STD_LOGIC_VECTOR) -,定义函数首,RETURN STD_LOGIC_VECTOR ;,FUNCTION func1 ( a,b,c : REAL ) -,定义函数首,RETURN REAL ;,FUNCTION * ( a ,b : INTEGER ) -,定义函数首,RETURN INTEGER ;,FUNCTION as2 (SIGNAL in1 ,in2 : REAL ) -,定义函数首,RETURN REAL ;,END ;,PACKAGE BODY,packexp,IS,FUNCTION max( a,b : IN STD_LOGIC_VECTOR) -,定义函数体,RETURN STD_LOGIC_VECTOR IS,BEGIN,IF a b THEN RETURN a;,ELSE RETURN b;,END IF;,END FUNCTION max; -,结束,FUNCTION,语句,END; -,结束,PACKAGE BODY,语句,接下页,LIBRARY IEEE; -,函数应用实例,USE IEEE.STD_LOGIC_1164.ALL;,USE,WORK.packexp.ALL,;,ENTITY,axamp,IS,PORT(dat1,dat2 : IN STD_LOGIC_VECTOR(3 DOWNTO 0);,dat3,dat4 : IN STD_LOGIC_VECTOR(3 DOWNTO 0);,out1,out2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) );,END;,ARCHITECTURE,bhv,OF,axamp,IS,BEGIN,out1 = max(dat1,dat2); -,用在赋值语句中的并行函数调用语句,PROCESS(dat3,dat4),BEGIN,out2 b THEN RETURN a;,ELSE RETURN b; END IF;,END FUNCTION max; -,结束,FUNCTION,语句,FUNCTION max( a,b :IN INTEGER) -,定义函数体,RETURN INTEGER IS,接下页,BEGIN,IF a b THEN RETURN a;,ELSE RETURN b; END IF;,END FUNCTION max; -,结束,FUNCTION,语句,FUNCTION max( a,b :IN BIT_VECTOR) -,定义函数体,RETURN BIT_VECTOR IS,BEGIN,IF a b THEN RETURN a;,ELSE RETURN b; END IF;,END FUNCTION max; -,结束,FUNCTION,语句,END; -,结束,PACKAGE BODY,语句,- 以下是调用重载函数,max,的程序:,LIBRARY IEEE ;,USE IEEE.STD_LOGIC_1164.ALL ;,USE,WORK.packexp.ALL,;,ENTITY,axamp,IS,PORT(a1,b1 : IN STD_LOGIC_VECTOR(3 DOWNTO 0);,a2,b2 : IN BIT_VECTOR(4 DOWNTO 0);,a3,b3 : IN INTEGER RANGE 0 TO 15;,c1 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);,c2 : OUT BIT_VECTOR(4 DOWNTO 0);,c3 : OUT INTEGER RANGE 0 TO 15);,END;,接上页,ARCHITECTURE,bhv,OF,axamp,IS,BEGIN,c1 = max(a1,b1); -,对函数,max( a,b :IN STD_LOGIC_VECTOR),的调用,c2 = max(a2,b2); -,对函数,max( a,b :IN BIT_VECTOR),的调用,c3 value: 0101 ;,WHEN 0101 = value: 0000 ;,WHEN OTHERS = value: 1111 ;,END CASE ;,END PROCEDURE prg1 ;,4 重载过程(,OVERLOADED PROCEDURE),【例】,PROCEDURE,calcu,( v1, v2 : IN REAL ;,SIGNAL out1 : INOUT INTEGER) ;,PROCEDURE,calcu,( v1, v2 : IN INTEGER ;,SIGNAL out1 : INOUT REAL) ;,.,calcu,(20.15, 1.42,signl,) ; -,调用第一个重载过程,calcu,calcu,(23, 320,sign2 ) ; -,调用第二个重载过程,calcu,.,9.1.8 子程序调用语句,调用过程的语句格式如下:,过程名(形参名= 实参表达式, ,形参名= 实参表达式) ;,过程调用,一个过程的调用将分别完成以下三个步骤:,(1)将,IN,和,INOUT,模式的实参值赋给欲调,用的过程中与它们对应的形参;,(2)执行这个过程;,(3)将过程中,IN,和,INOUT,模式的形参值返回给对应的实参。,【例9-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_types;,USE WORK.data_types.ALL; -,打开以上建立在当前工作库的程序包,data_types,ENTITY 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、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 := 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_VECTOR(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,;,9.1.9 返回语句(,RETURN),RETURN; -,第一种语句格式,RETURN,表达式; - 第二种语句格式,【例9-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,regb,;,WHEN 110 =,tmp,:= NOT,rega,;,WHEN OTHERS = NULL ;,END CASE ;,WHEN OTHERS =,tmp,:=,rega,;,9.2,VHDL,并行语句,结构体中的并行语句主要有七种:,1、并行信号赋值语句(,Concurrent Signal Assignments)。,2、进程语句(,Process Statements)。,3、块语句(,Block Statements)。,4、条件信号赋值语句(,Selected Signal Assignments)。,5、元件例化语句(,Component Instantiations),,其中包括类属配置语句。,6、生成语句(,Generate Statements)。,7、并行过程调用语句(,Concurrent Procedure Calls)。,ARCHITECTURE,结构体名,OF,实体名,IS,说明语句,BEGIN,并行语句,END ARCHITECTURE,结构体名,9.2.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 ARCHITECTURE curt;,2. 条件信号赋值语句,赋值目标 = 表达式,WHEN,赋值条件,ELSE,表达式,WHEN,赋值条件,ELSE,.,表达式 ;,9.2.1 并行信号赋值语句,图9-1 例9-18的逻辑电路图,【例9-18】,ENTITY,mux,IS,PORT ( a,b,c : IN BIT ;,p1,p2 : IN BIT ;,z : OUT BIT );,END;,ARCHITECTURE,behv,OF,mux,IS,BEGIN,z = a WHEN p1 = 1 ELSE,b WHEN p2 = 1 ELSE,c ;,END;,3. 选择信号赋值语句,WITH,选择表达式,SELECT,赋值目标信号 =表达式,WHEN,选择值,表达式,WHEN,选择值,.,表达式,WHEN,选择值;,9.2.1 并行信号赋值语句,【例9-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 ,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 ,,data1 XNOR data2 WHEN 101 ,,Z WHEN OTHERS ;,END,concunt,;,3. 选择信号赋值语句,.,WITH,selt,SELECT,muxout, l_time,gb2 = s_time) ; -,局部端口参量设定,PORT (,pb,: 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 blk1 ;,END ARCHITECTURE,func,;,【例9-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 BLOCK b1 ;,.,9.2.3 并行过程调用语句,过程名(关联参量名);,【例9-22】,.,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) ; -,顺序过程调用,在此,c1、c2、s1,即为分别对,END PROCESS ; -,应于,a、b、sum,的关联参量名,【例9-23】,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,的所有的位元素进行循环检测,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 连接端口名,.) ;,9.2,VHDL,并行语句,9.2.5 生成语句,标号:,FOR,循环变量,IN,取值范围,GENERATE,说明,BEGIN,并行语句,END GENERATE ,标号 ;,标号:,IF,条件,GENERATE,说明,Begin,并行语句,END GENERATE ,标号 ;,四部分组成的:,(1)生成方式,(2)说明部分,(3)并行语句,(4)标号,表达式,TO,表达式 ; - 递增方式,如1,TO 5,表达式,DOWNTO,表达式 ; - 递减方式,如5,DOWNTO 1,取值范围的语句格式,有两种形式:,图9-2 生成语句产生的8个相同的电路模块,【例9-25】,.,COMPONENT comp,PORT (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,.,【,例9-26】,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY Latch IS,PORT( D : IN STD_LOGIC;,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;,【例9-27】,LIBRARY IEEE;,USE IEEE.STD_LOGIC_1164.ALL;,ENTITY 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 = 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;,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!