第4讲 VHDL编程基础_第1页
第4讲 VHDL编程基础_第2页
第4讲 VHDL编程基础_第3页
第4讲 VHDL编程基础_第4页
第4讲 VHDL编程基础_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、EDA技术技术讲授:戴正科讲授:戴正科 E D A 技技 术术 课课 程程 教教 学学讲授:戴正科2021年11月20日星期六湖南文理学院电气与信息工程学院EDA技术技术讲授:戴正科讲授:戴正科第第 四四 讲讲 VHDLVHDL编程基础(编程基础(2 2) 教学目的教学目的:使学生掌握使学生掌握VHDLVHDL并行语句结构及使用方法并行语句结构及使用方法。 教学重点教学重点:VHDLVHDL并行语句并行语句。 教学难点教学难点:进程语句、元件例化语句。进程语句、元件例化语句。 教学方法教学方法:讲授法、计算机辅助法。讲授法、计算机辅助法。 课时计划课时计划:2 2学时学时 使用教材使用教材:E

2、DAEDA技术及应用谭会生等西安:西安电子科技大学出版社技术及应用谭会生等西安:西安电子科技大学出版社 主要参考文献主要参考文献: 1 1 徐光辉等徐光辉等CPLD/FPGACPLD/FPGA的开发和应用的开发和应用 MM北京:电子工业出版社北京:电子工业出版社 2 2 侯伯亨等侯伯亨等. .VHDLVHDL硬件描述语言与数字逻辑电路设计硬件描述语言与数字逻辑电路设计 M.M.西安:西安电子科技大学出版社西安:西安电子科技大学出版社 3 3 http:/http:/ 4 4 周立功等周立功等SOPCSOPC嵌入式系统基础教程嵌入式系统基础教程 MM北京:北京航空航天大学出版社北京:北京航空航天

3、大学出版社EDA技术技术讲授:戴正科讲授:戴正科一、进程语句一、进程语句二、块语句二、块语句三、并行信号赋值语句三、并行信号赋值语句四、并行过程调用语句四、并行过程调用语句五、元件例化语句五、元件例化语句六、生成语句六、生成语句七、课堂小结七、课堂小结八、作业八、作业课题:课题: VHDL并行语句并行语句EDA技术技术讲授:戴正科讲授:戴正科课题:课题: VHDL并行语句并行语句并行语句并行语句出现在出现在结构体结构体中,各语句中,各语句并行(同步)运行并行(同步)运行,与书写的与书写的顺序无关顺序无关。使用格式如下:使用格式如下:ARCHITECTURE 结构体名结构体名 OF 实体名实体名

4、 IS 说明语句说明语句BEGIN 并行语句并行语句END ARCHITECTURE 结构体名;结构体名; 注:注:并行语句并行语句与与顺序语句顺序语句并不是相互对立的语句,它并不是相互对立的语句,它们往往们往往互相包含互相包含、互为依存互为依存,它们是一个矛盾的统一体。,它们是一个矛盾的统一体。例如,例如, 相对于其他的并行语句,相对于其他的并行语句,进程进程属于属于并行语句并行语句,而进,而进程程内部运行内部运行的都是的都是顺序语句顺序语句,而一个单句并行赋值语句,而一个单句并行赋值语句,从表面上看是一条完整的并行语句,但实质上却是一条进从表面上看是一条完整的并行语句,但实质上却是一条进程

5、语句的缩影,它完全可以用一个相同功能的进程来替代。程语句的缩影,它完全可以用一个相同功能的进程来替代。所不同的是,所不同的是,进程进程中中必须必须列出列出所有所有的的敏感信号敏感信号,而单纯的,而单纯的并行赋值语句的敏感信号是隐性列出的。并行赋值语句的敏感信号是隐性列出的。EDA技术技术讲授:戴正科讲授:戴正科v结构体中的并行语句模块结构体中的并行语句模块生生成成语语句句条条件件信信号号赋赋值值语语句句元元件件例例化化语语句句并并行行信信号号赋赋值值语语句句块块语语句句进进程程语语句句并并行行过过程程调调用用语语句句信号信号信号信号信号信号信号信号信号信号信号信号ARCHITECTUREEND

6、 ARCHITECTUREEDA技术技术讲授:戴正科讲授:戴正科一、进程语句(一、进程语句(PROCESS)1PROCESS语句格式语句格式 格式如下:格式如下: 进程标号:进程标号:PROCESS(敏感信号参数表敏感信号参数表)IS 进程说明部分进程说明部分 - -进程说明部分用于进程说明部分用于定义定义该该进程进程所需的所需的局部数据局部数据环境环境 BEGIN 顺序描述语句顺序描述语句 END PROCESS进程标号进程标号; 注注:一个结构体一个结构体中可含有中可含有多个多个PROCESS结构,每一结构,每一PROCESS结构对于其敏感结构对于其敏感信号参数表中定义的信号参数表中定义的

7、任一敏任一敏感参量感参量的变化,每个的变化,每个进程进程可可以在任何时刻被激活或者称以在任何时刻被激活或者称为启动,所有被为启动,所有被激活激活的的进程进程都是都是并行运行并行运行的。进程之间的。进程之间的通信是通过的通信是通过传递信号传递信号和和共共享变量值享变量值来实现的。来实现的。 PROCESS语句结构由三个语句结构由三个部分组成:部分组成:进程说明部分进程说明部分(主要定义一些局主要定义一些局部量,可包括数据类型、常数、属性、部量,可包括数据类型、常数、属性、子程序等。但需注意,在进程说明部分子程序等。但需注意,在进程说明部分中不允许定义信号和共享变量中不允许定义信号和共享变量) ;

8、顺序描述语句部分顺序描述语句部分(变量赋值变量赋值语句、进程启动语句、子程序调用语句、语句、进程启动语句、子程序调用语句、顺序描述语句和进程跳出语句顺序描述语句和进程跳出语句 );敏感信号参数表敏感信号参数表(当有当有WAIT语语句时例外句时例外)。)。EDA技术技术讲授:戴正科讲授:戴正科 2未未列出列出敏感信号敏感信号,进程,进程需需WAIT语句来语句来启动启动 【例】【例】 ARCHITECTURE ART OF STAT IS BEGIN P1:PROCESS - 该进程该进程未列出敏感信号未列出敏感信号,进程需靠,进程需靠WAIT语句来启动语句来启动 BEGIN WAIT UNTIL

9、 CLOCK ; - 等待等待CLOCK激活激活进程进程 IF (DRIVER=1) THEN - 当当DRIVER为高电平时进入为高电平时进入CASE语句语句 CASE OUTPUT IS WHEN S1= OUTPUT OUTPUT OUTPUT OUTPUT=S1; END CASE; END PROCESS P1; END ARCHITECTURE ART;一、进程语句(一、进程语句(PROCESS)EDA技术技术讲授:戴正科讲授:戴正科 3敏感信号启动进程敏感信号启动进程【例】【例】 SIGNAL CNT4:INTEGER RANGE 0 TO 15;-注意注意CNT4的数据类型的数

10、据类型 . PROCESS(CLK,CLEAR,STOP) - -该进程定义了该进程定义了3个敏感信号个敏感信号 CLK、CLEAR、STOP BEGIN - -当其中任何一个改变时,都将启动进程的运行当其中任何一个改变时,都将启动进程的运行 IF CLEAR=0 THEN CNT4=0; ELSIF CLKEVENT AND CLK=1 THEN -如果遇到时钟上升沿,如果遇到时钟上升沿,则则 IF STOP=0 THEN -如果如果STOP为低电平,则进行加法计数,否则停止计数为低电平,则进行加法计数,否则停止计数 CNT4=CNT4+1; END IF; END IF; END PROC

11、ESS;一、进程语句(一、进程语句(PROCESS)EDA技术技术讲授:戴正科讲授:戴正科 【例】十进制加法器【例】十进制加法器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 IS PORT(CLR: IN STD_LOGIC; IN1:IN STD_LOGIC_VECTOR(3 DOWNTO 0); OUT1:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END CNT10;ARCHITECTURE ART OF CNT10 IS BEGIN PRO

12、CESS (IN1,CLR) BEGIN IF (CLR= 1 OR IN1= 1001) THEN OUT1=0000; ELSE OUT1=IN1+1; END IF; END PROCESS;END ART;【例】十进制时序逻辑加法计数器【例】十进制时序逻辑加法计数器LIBRARY IEEEUSE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 IS PORT(CLR:IN STD_LOGIC; CLK:IN STD_LOGIC; CNT: BUFFER STD_LOGIC_VECTOR(3 DOW

13、NTO 0);END CNT10;ARCHITECTURE ART OF CNT10 ISBEGINPROCESSBEGIN WAIT UNTIL CLKEVENT AND CLK = 1; IF (CLR= 1OR CNT=9) THEN CNT=0000; ELSE CNT=CNT+1; END IF; END PROCESS;END ART;一、进程语句(一、进程语句(PROCESS)EDA技术技术讲授:戴正科讲授:戴正科PACKAGE MTYPE IS TYPE STATE_T IS (S0,S1,S2,S3); -利用程序包定义数据类型利用程序包定义数据类型END MTYPE;LIB

14、RARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE WORK.MTYPE.ALL; -打开程序包打开程序包ENTITY S4_MACHINE IS PORT(CLK,INC,A1,B1:INSTD_LOGIC; RST: IN BOOLEAN; OUT1:OUT STD_LOGIC);END ENTITY S4_MACHINE;ARCHITECTURE ART OF S4_MACHINE IS SIGNAL CURRENT_STATE,NEXT_STATE:STATE_T; BEGIN SYNC:PROCESS(CLK,RST) BEGIN IF (RST) T

15、HEN CURRENT_STATE=S0; ELSIF(CLKEVENT AND CLK=1) THEN CURRENT_STATE=NEXT_STATE; END IF; END PROCESS SYNC;FSM:PROCESS(CURRENT_STATE, A1,B1) BEGIN OUT1=A1; NEXT_STATE NEXT_STATE NEXT_STATE=S2;OUT NEXT_STATE NULL END CASE; END IF;END PROCESS FSM;END ART;【例】【例】 4状态同步有限状态机状态同步有限状态机一、进程语句(一、进程语句(PROCESS)ED

16、A技术技术讲授:戴正科讲授:戴正科A_OUT =A WHEN (ENA) ELSE Z;B_OUT =B WHEN (ENB) ELSE Z;C_OUT =C WHEN (ENC) ELSE Z;PROCESS (A_OUT)BEGIN BUS_OUT =A_OUT;END PROCESS;BUS_OUTC_OUTENCOT11B_OUTENBOT11BCA_OUTENAOT11APROCESS (B_OUT)BEGIN BUS_OUT =B_OUT;END PROCESS;PROCESS (C_OUT)BEGIN BUS_OUT L-TIME,GB2=S-TIME);- -局部端口局部端口参

17、量设定参量设定 PORT (PB1:IN BIT;PB2:INOUT BIT); - -块结构中局部端口定义块结构中局部端口定义 POTR 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 ART;EDA技术技术讲授:戴正科讲授:戴正科【例】块嵌套方式

18、【例】块嵌套方式 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; 需特别注意的是,需特别注意的是,块中定义块中定义的所有的的所有的数据类型、数据对象数据类型、数据对象(信号、变量、常量信号、变量、常量)和子程序和子程序等都是等都是局部的局部的;对于;对于多层嵌套的块结构多层嵌套的块结构,这些,这些局部定义局部定义量只适用于量只适用于当前当前块块

19、,以及嵌套于本层块的所有层次的,以及嵌套于本层块的所有层次的内部块内部块,而对此块的外部来说是不可见的。,而对此块的外部来说是不可见的。二、块语句(二、块语句(BLOCK)【例】不同层次的块中可定义同名的信号【例】不同层次的块中可定义同名的信号 B1:BLOCK -定义块定义块B1 SIGNAL S: BIT;-在在B1块中定义块中定义S BEGIN S=A AND B; -向向B1中的中的S赋值赋值B2:BLOCK -定义块定义块B2,套于,套于B1块中块中 SIGNAL S: BIT; -定义定义B2块中的信号块中的信号S BEGIN S=A AND B; -向向B2中的中的S赋值赋值B3

20、 :BLOCK BEGIN Z= S; -此此S来自来自B2块块END BLOCK B3;END BLOCK B2; Y= S; -此此S来自来自B1块块END BLOCK B1;EDA技术技术讲授:戴正科讲授:戴正科三、并行信号赋值语句三、并行信号赋值语句并行信号赋值语句形式:并行信号赋值语句形式:简单信号赋值简单信号赋值语句、语句、条件信号赋值条件信号赋值语句和语句和选择信号赋值选择信号赋值语句。语句。 1. 简单信号赋值语句简单信号赋值语句 语句格式:语句格式:信号赋值目标信号赋值目标=表达式;表达式; - -信号赋值目标的信号赋值目标的数据类型数据类型必须与赋值符号右边表达式的数据类型

21、必须与赋值符号右边表达式的数据类型一致一致。【例】【例】ARCHITECTURE ART OF XHFZ IS SIGNAL S1: STD_LOGIC;BEGIN OUTPUT 1= A AND B ; OUTPUT 2= C+D;B1:BLOCK SIGNAL E, F, G, H: STD_LOGIC;BEGIN G=E OR F; H=E XOR F;END BLOCK B1 ; S1=G;END ARCHITECTURE ART;EDA技术技术讲授:戴正科讲授:戴正科 2条件信号赋值语句条件信号赋值语句 语句格式:语句格式: 赋值目标赋值目标 = 表达式表达式 WHEN 赋值条件赋值

22、条件 ELSE 表达式表达式 WHEN 赋值条件赋值条件 ELSE 表达式;表达式; 三、并行信号赋值语句三、并行信号赋值语句 【例】【例】 Z = A WHEN P1=1 ELSE B WHEN P2=0 ELSE C; 注意:由于条件测试的注意:由于条件测试的顺序性顺序性,第一句具有,第一句具有最高赋值优最高赋值优 先级,第二句其次,第三句最后先级,第二句其次,第三句最后。这就是说,如。这就是说,如 果当果当P1和和P2同时为同时为1 时,时,Z获得的赋值是获得的赋值是A。EDA技术技术讲授:戴正科讲授:戴正科3选择信号赋值语句选择信号赋值语句 语句格式:语句格式: WITH 选择表达式选

23、择表达式 SELECT 赋值目标信号赋值目标信号=表达式表达式 WHEN 选择值选择值, 表达式表达式 WHEN 选择值选择值, 表达式表达式 WHEN 选择值选择值;- -选择信号赋值选择信号赋值语句本身语句本身不能在进程中应用不能在进程中应用,但其功能却,但其功能却与与进程中的进程中的CASE语句的语句的功能相似功能相似。三、并行信号赋值语句三、并行信号赋值语句【例】指令译码器【例】指令译码器DECODER- -库程序包的使用库程序包的使用LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;- -

24、实体描述实体描述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 ISBEGINSIGNAL INSTRUCTION:STD_LOGIC_VECTOR(2 DOWNTO 0);INSTRUCTION =C & B & A;WITH INSTRUCTION SELECT DATAOUT =DATA1 AND DATA2 WHEN 000, DATA1 OR DATA

25、2 WHEN 001, DATA1 NAND DATA2 WHEN 010, DATA1 NOR DATA2 WHEN 011, DATA1 XOR DATA2 WHEN 100, DATA1 NXOR DATA2 WHEN 101, Z WHEN OTHERS;END ARCHITECTURE ART;EDA技术技术讲授:戴正科讲授:戴正科语句格式:语句格式:过程名过程名(关联参量名关联参量名); - -并行过程的调用,常用于获得被调用过程的多个并行工作的复制电并行过程的调用,常用于获得被调用过程的多个并行工作的复制电路。路。四、并行过程调用语句四、并行过程调用语句【例】位矢量信号检测过程定

26、义【例】位矢量信号检测过程定义- -检测检测位矢量位矢量中中只只能有能有一个一个位是位是1,而其余的位都是,而其余的位都是0,否则报告出错。,否则报告出错。PROCEDURE CHECK(SIGNAL A:IN STD_LOGIC_VECTOR; SIGNANL ERROR:OUT BOOLEAN) IS VARIABLE FOUND_ONE:BOOLEAN:=FALSE;BEGIN FOR I IN ARANGE LOOP IF A(I)=1 THEN IF FOUND_ONE THEN -FOUND_ONE为为TRUE,则表明发现了一个以上的,则表明发现了一个以上的1 ERROR=TRUE

27、; RETURN; -结束过程结束过程 END IF; FOUND_ONE:=TRUE; -在在A中发现了一个中发现了一个1 END IF; END LOOP; ERROR 连接实体端口名,连接实体端口名,); 五、元件例化语句五、元件例化语句元件例化语句中元件例化语句中所定义的例化元件的端口名所定义的例化元件的端口名与与当前系统的连接实体端口当前系统的连接实体端口名名的接口表达方式:的接口表达方式:名字关联方式名字关联方式。在这种关联方式下,例化元件的。在这种关联方式下,例化元件的端口名端口名和和关联关联(连接连接)符符 号号“=”两者两者都是必须存在的。这时,例化元件端口名与连接实体端口都

28、是必须存在的。这时,例化元件端口名与连接实体端口 名的名的对应式对应式,在,在PORT MAP句中的句中的位置可以位置可以是是任意任意的。的。位置关联方式位置关联方式。若使用这种方式,端口名和关联连接符号都可省去,在。若使用这种方式,端口名和关联连接符号都可省去,在 PORT MAP子句中,只要列出当前系统中的子句中,只要列出当前系统中的连接实体端口名连接实体端口名就行了,就行了, 但要求连接实体端口名的排列方式与所需但要求连接实体端口名的排列方式与所需例化的元件端口定义例化的元件端口定义中的中的端端 口名一一对应口名一一对应。EDA技术技术讲授:戴正科讲授:戴正科A1U1U2Z1U3B1C1

29、D1ABABABCCCS1S2ND2ND2ND2五、元件例化语句五、元件例化语句- ND2.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ND2 IS PORT(A,B:IN STD_LOGIC; C:OUT STD_LOGIC);END ND2;ARCHITECTURE ARTND2 OF ND2 IS BEGIN YC1,C=S2,B=D1); - -名字关联方式名字关联方式U3:ND2 PORT MAP (S1,S2,C=Z1); - -混合关联方式混合关联方式END ARCHITECTURE ARTORD41;EDA技术技术讲授:

30、戴正科讲授:戴正科生成语句可以生成语句可以简化简化为为有规则设计结构有规则设计结构的的逻辑描述逻辑描述。生成语句有一。生成语句有一种种复制复制作用,在设计中,只要根据某些条件,设定好某一元件或设作用,在设计中,只要根据某些条件,设定好某一元件或设计单位,就可以利用计单位,就可以利用生成语句复制一组完全相同的并行元件生成语句复制一组完全相同的并行元件或设计或设计单元电路结构。单元电路结构。语句格式:语句格式: 标号:标号:FOR 循环变量循环变量 IN 取值范围取值范围 GENERATE 说明说明 BEGIN 并行语句并行语句 END GENERATE标号标号; 标号:标号:IF 条件条件 GE

31、NERATE 说明说明 BEGIN 并行语句并行语句 END GENERATE标号标号;六、生成语句六、生成语句生成方式:用于规定并行语句的复制方式生成方式:用于规定并行语句的复制方式并行语句是用来并行语句是用来“COPY”的基的基本单元,主要包括本单元,主要包括元件、进程语元件、进程语句、块语句、并行过程调用语句、句、块语句、并行过程调用语句、并行信号赋值语句、并行信号赋值语句、甚至甚至生成语生成语句句。EDA技术技术讲授:戴正科讲授:戴正科A0COMPINPUTOUTPUTB0A1COMPINPUTOUTPUTB1A7COMPINPUTOUTPUTB7-【例】【例】生成语句产生的生成语句产

32、生的8个相同的电路模块个相同的电路模块COMPONENT COMP PORT (X:IN STD_LOGIC;Y: OUT STD_LOGIC);END COMPONENT;SIGNAL A,B:STD_LOGIC_VECTOR (0 TO 7);GEN: FOR I IN ARANGE GENERATE U1:COMP PORT MAP (X= A(I), Y=B(I);END GENERATE GEN;五、生成语句五、生成语句EDA技术技术讲授:戴正科讲授:戴正科74373引脚图引脚图74373D8D7D6D5D4D3D2D1OENGQ8Q7Q6Q5Q4Q3Q2Q1O ENLATCHLAT

33、CHLATCHLATCHLATCHLATCHLATCHLATCHQ QQ QQ QQ QQ QQ QQ QQ QENAD DENAD DDENADDENADDENADDENADDENADDENADGD8D7D6D5D4D3D2D1O T11O T11O T11O T11O T11O T11O T11Q 8Q 7Q 6Q 5Q 4Q 3Q 2Q 1O T11SN74373的内部逻辑结构的内部逻辑结构五、生成语句五、生成语句-1位锁存器位锁存器LATCH的逻辑描述的逻辑描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LATCH IS PORT(D

34、: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; EDA技术技术讲授:戴正科讲授:戴正科-SN74373的的生成语句生成语句描述描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SN74373 IS PORT (D:IN STD_LOGIC_VECTOR(8 DOWNTO 1); OEN:IN STD_LOGIC; G:IN STD_LOGIC; Q:OUT STD_LOGIC_VECTOR(8 DOWNTO 1); END ENTITY SN74373;ARCHITECTURE ONE OF SN74373 IS COMPONENT LATCH PORT(D,ENA:IN STD_LOGIC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论