第8章PLD技术及其应用.ppt_第1页
第8章PLD技术及其应用.ppt_第2页
第8章PLD技术及其应用.ppt_第3页
第8章PLD技术及其应用.ppt_第4页
第8章PLD技术及其应用.ppt_第5页
已阅读5页,还剩102页未读 继续免费阅读

下载本文档

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

文档简介

1、概述 12.1 可编程逻辑器件 12.2 可编程逻辑器件开发环境 12.3 VHDL介绍,第12章 目录,第12章 PLD技术及其应用,概述,自顶向下的综合技术,传统电子系统的设计方法,ISP技术介绍,数字系统的设计,PLD的发展,第12章 概述,PLD的发展,可编程逻辑器件 (Programmble Logic Device)简称 PLD,制造商,通用集成电路,用户,专用集成电路,第11章 11.1,第12章 概述,可编程逻辑器件的分类,从互连特性上分类 从可编程特性上分类 从器件容量上分类 从结构的复杂程度上分类,第11章 11.1,第12章 概述,可编程逻辑器件的发展,PROM PLA

2、PAL GAL,SPLD,CPLD FPGA,ISP技术,什么是ISP技术!,?,第11章 11.1,第12章 概述,数字系统的设计,积木块式的设计方法 根据需要选择器件 搭系统 调试,传统电子系统的设计方法,固定功能元件,电路板设计,电子系统,缺点,1.器件多,数目大; 2.可靠性差; 3.不能实时修改。,第12章 概述,自顶向下的综合技术,系统,子功能块1,子功能块2,子功能块n,逻辑块11,逻辑块12,逻辑块1m,逻辑块21,逻辑块111,Top-Down方法的关键在于:利用功能分割手段将设计由上到下进行层次化和模块化,第12章 概述,自顶向下设计方法的优点,设计与具体的器件和工艺无关

3、方便在各种集成电路或PLD器件之间移植 适合多个设计者同时进行设计,设计原则,1、逐层分解功能,分层次进行设计 2、在各设计层次上,进行仿真验证,第12章 概述,ISP 技术介绍,只要将器件插在系统内或者电路板上,就能对其编程或再编程。 可以先装配后编程,成为产品后还可反复编程。 可以实时地进行灵活和方便的更改和开发,真正做到了硬件的“软件化”自动设计。,第12章 概述,CPLD的ISP技术使得硬件像软件一样被编程配置,实时设计、实时修改、实时实现,为电子技术的发展开辟了广阔的前景。,第12章 概述,12.1 可编程逻辑器件,可编程逻辑器件的基本逻辑约定 可编程逻辑器件的基本结构 可编程逻辑器

4、件的介绍,第12章 12.1,第12章 12.1.1,(1)输入缓冲单元,(a) 缓冲器 (b) 真值表,有关逻辑约定,第12章 12.1.1,(2)与门和或门,(a) 与门PLD表示法 (b)与门传统表示法,(c) 或门PLD表示法 (d) 或门传统表示法,有关逻辑约定,有关逻辑约定,第12章 12.1.1,(3) PLD连接方式,(a)固定连接 (b) 可编程连接 (c) 不连接,第12章 12.1.2,早期的可编程逻辑器件,(1)PROM的结构,固定与阵列,可编程或阵列,第12章 12.1.2,(2)PLA的结构,与阵、或阵均可编程,早期的可编程逻辑器件,第12章 12.1.2,(3)P

5、AL的结构,可编程与阵列,固定或阵列,早期的可编程逻辑器件,第12章 12.1.1,(4)GAL的结构,其特点是在它的每个输出端都集成有一个输出逻辑宏单元,因此其输出方式可以配置(Configurable)。,早期的可编程逻辑器件,第12章 12.1.2,CPLD的结构特点,在CPLD中,通常将整个逻辑分为几个逻辑块。每个逻辑块相当于数个GAL的组合,各个逻辑块之间再用互连资源实现连接。 在CPLD芯片中设置了若干I/O单元,它们可直接与引脚相连,然后通过另一组连线连到所需的宏单元上。 CPLD中普遍设有多个时钟输入端,并可以利用芯片中产生的乘积项作为时钟,给系统的设计带来了很大的灵活性。,结

6、构特点,第12章 12.1.2,CPLD的编程工艺,EPROM(Erasable Programmable ROM)工艺 E2ROM(Electrical Erasable ROM)工艺 Flash工艺,第12章 12.1.2,FPGA的结构特点,在构造FPGA时改用了单元结构。即在阵列的各个节点上放的不再是一个单独的门,而是用门、触发器等做成的逻辑单元,并在各个单元之间预先制作了许多连线。所以严格地说,FPGA不是门阵列,而是逻辑单元阵列,它和门阵列只是在阵列结构上相似而已。,结构特点,第12章 12.1.2,FPGA的编程工艺,(1) 反熔丝工艺-编程时不是将熔丝熔断,而是将其熔连。 Ac

7、tel公司的FPGA采用。 (2) RAM工艺-Xilinx公司的FPGA采用的是另一种工艺,每个连接点代替熔丝的是一个受SR静态触发器控制的开关,当触发器被置1时,开关接通,否则开关断开。,第12章 12.1.2,FPGA/CPLD的比较,延迟可预测能力 CPLD的时序延迟是均匀的和可预测的, FPGA的时序延迟不可预测。,布线能力 CPLD独特的内连线结构使其内连率很高,更适合于芯片设计的可编程器件验证。,适用场合 CPLD更适合于完成各种算法和组合逻辑, FPGA更适合于完成时序较多的逻辑电路。,主要区别,第12章 12.1.3,Altera公司的主要产品,器件的可用资源逐渐增多,输入输

8、出管脚也随之增加。,Classic系列,MAX系列,ACEX系列,FLEX系列,APEX系列,12.2 可编程逻辑器件开发环境,MAX+PLUS II的设计流程,主要设计输入方法,原理图输入方式,文本设计输入方法,编译设计项目,设计项目的模拟仿真,器件编程,时间分析,第12章 12.2,MAX+PLUS II的设计流程,(1)设计输入。可以采用原理图输入、HDL语言描述、EDIF网表读入及波形输入等方式。(2)语法检查。主要为检验输入是否有误。(3)编译。主要完成器件的选择及适配,逻辑的综合及器件的装入,延时信息的提取。 (4)仿真。将编译产生的延时信息加入到设计中,进行布局布线后的仿真。 (

9、5)编程验证。经EPROM或编程电缆配置CPLD,加入实际激励,进行测试,以检查是否完成预定功能。,MAX+PLUS II的 设计流程图,第12章 12.2.1,主要设计输入方法,原理图输入方式 文本设计输入方式 层次设计输入方式 波形设计输入方式,第12章 12.2.1,指定设计项目的名字用MAX+PLUS II编译一个项目前, 必须确定一个设计文件作为当前项目。,原理图输入方式,第12章 12.2.1,建立新文件,原理图输入方式,第12章 12.2.1,原理图输入方式,第12章 12.2.1,输入图原和 宏功能符号,原理图输入方式,第12章 12.2.1,连线,输入引脚,原理图输入方式,第

10、12章 12.1.1,原理图输入方式,图形编辑选项,第12章 12.1.1,保存文件,检查基本错误,原理图输入方式,第12章 12.2.1,原理图输入方式,创建一个默认的图形符号,创建一个默认的图形符号,第12章 12.2.1,第12章 12.2.1,文本设计输入方法,新建文本文件,第12章 12.2.1,文本设计输入方法,新建文本文件,第12章 12.2.1,文本设计输入方法,文本输入,保存文件,文本设计输入方法,第12章 12.2.1,第12章 12.2.1,顶层图形设计方法,创建顶层图形设计文件,创建顶层图形设计文件,第12章 12.2.1,第12章 12.2.2,编译设计项目,打开编辑

11、器窗口,编译设计项目,第12章 12.2.2,第12章 12.2.2,编译设计项目,选择器件,选择器件,编译设计项目,第12章 12.2.2,第12章 12.2.2,编译设计项目,设计规则检查,第12章 12.2.2,编译设计项目,保护位设置,第12章 12.2.2,器件的引脚分配,引脚分配,第12章 12.2.2,打开定时模拟器网表文件提取器,打开Timing SNF Extractor模块,第12章 12.2.2,指定在报告文件中需要产生的部分,如果某些部分还没有被打开,就选中All选项,第12章 12.2.2,阅读报告,打开报告文件,第12章 12.2.2,在底层图编辑器中观察试配结果,

12、器件视图,逻辑阵列块视图,第12章 12.2.3,设计项目的模拟仿真,创建模拟文件,第12章 12.2.3,设计项目的模拟仿真,输入节点,打开仿真器,第12章 12.2.3,设计项目的模拟仿真,模拟仿真,第12章 12.2.3,设计项目的模拟仿真,仿真结果,时序仿真又称为后仿真,在后仿真中由于加入了芯片中的实际延时信息,仿真结果与芯片实际工作状态基本一致。,时序仿真,时序仿真可以发现竞争与冒险现象,若有此问题可从设计中设法消除,仿真与设计输入为一交互过程。,第12章 12.2.4,时间分析,传播延迟分析,第12章 12.2.4,时间分析,时序逻辑电路性能分析,第12章 12.2.4,时间分析,

13、建立和保持时间分析,第12章 12.2.4,器件编程,(1) 打开编程器窗口,打开编程器,第12章 12.2.5,器件编程,编程器设置,第12章 12.2.5,第12章 12.3,12.3 硬件描述语言,VHDL(Very High Speed Intergrated Circuit Hardware Description Language) 即超高速集成电路硬件描述语言,(1) 功能强大,描述力强。可用于门级、电路级甚至系统级的描述、仿真和设计。,主要优点,(2) 可移植性好。对于设计和仿真工具采用相同的描述,对于不同的平台也采用相同的描述。,(4) 可以延长设计的生命周期。因为VHDL的

14、硬件描述与工艺技术无关,不会因工艺变化而使描述过时。,(3) 研制周期短,成本低。由于VHDL支持大规模设计的分解和对已有设备的利用,因此加快了设计流程。,定义,第12章 12.3,硬件描述语言,库,实体,结构体,第12章 12.3,实体,实体名,端口,数据类型,第12章 12.3,端口说明,第12章 12.3,数据类型,BIT 位类型,取值0、1,由STANDARD程序包定义; BIT_VECTOR 位向量类型,是BIT的组合,该端口的取值可能是 一组二进制位的值; STD_LOGIC工业标准的逻辑类型,取值0、1、X、Z,由 STD_LOGIC_1164程序包定义; INTEGER 整数类

15、型,可用作循环的指针或常数,通常不用作I/O信号; STD_LOGIC_VECTOR 工业标准的逻辑向量类型,是STD_LOGIC的组; BOOLEAN 布尔类型,取值FALSE,TRUE。,第12章 12.3,结构体,结构体的一般形式为: Architecture 结构体名 Of 实体名 Is 说明 Begin 功能描述语句 End 结构体名;,Architecture or2x Of or2 Is Begin y=a OR b; End or2x;,结构体名,实体名,第12章 12.3,结构体-Block,进程(Process)语句结构 Block语句结构 子程序(Subprograms)

16、语句结构,ARCHITECTURE a OF demulti_4v IS Begin B Block Begin Case S Is When “00”=Y0Y1Y2Y3=D; End Block B; End a;,Block语句的表达格式如下: 块结构名: Block Begin 并行语句 End Block 块结构名;,三种子结构,第12章 12.3,结构体- Process,Architecture dec4be_arch of dec4be is Begin Process (in_bit) Begin Case in_bit is When 0 = BE0 BE0 BE0=X; B

17、E1=X; End case; End process; End dec4be_arch;,Process语句的表达格式如下: 进程名:Process(信号) Begin 顺序描述语句 End Process;,第12章 12.3,结构体- Subprograms,Procedure mypro ( sig1 ,sig2 ) IS End mypro; 调用语句: mypro(sig1, sig2);,在VHDL中,子程序有两种类型: 过程(Procedure) 函数(Function),1) 过程语句格式如下: Procedure 过程名 (参数表) Is 定义语句 Begin 顺序处理语句

18、 End 过程名;,第12章 12.3,结构体- Subprograms,Package bpac is Function max ( a : Std_logic_vector; b : Std_logic_vector) Return Std_logic_vector; End bpac; Package body bpac is Function max ( a : Std_logic_vector; b : Std_logic_vector) Return Std_logic_vector is Variable temp: Std_logic_vector; Begin If (ab

19、) Then temp:=a; Else temp:=b; End If; Return temp; End; End bpac;,Function 函数名 (参数表) Return 数据类型名 Is 定义语句 Begin 顺序处理语句 Return 返回变量名 End 函数名;,通常各种功能的FUNCTION语句的程序都被集中在包集合(Package)中。,第12章 12.3,包集合,Package Logic is: Type Three_level_logic is(0,1, Z); Constant U:Three_level_logic:= 0; Function lnvert (I

20、nput:Three_level_logic) Return Three_level_logic; End Logic; Package body Logic Is Function lnvert (Input:Three_level_logic) Return Three_level_logic Is; Begin Case lnput Is When 0 Return 1; When 1 Return 0; When Z Return Z; End Case; End lnvert; End Logic;,包集合标题的形式为: Package 包集合名 is 说明语句; End 包集合名;

21、 包集合体的形式为: Package Body 包集合名 is 说明语句; End 包集合名 ;,包集合标题,包集合体,第12章 12.3,库,例如: Library IEEE; Use IEEE.STD_LOGIC_1164.ALL;,库的说明总是放在设计单元的最前面。 格式为: Library 库名;,库大致可以归纳为5种: IEEE库、 STD库、 面向ASIC的库 用户定义的库 WORK库。,第12章 12.3,配置,Architecture one OF NAND IS Begin C=NOT(a AND b); End Architecture one; Architecture

22、two Of NAND Is Begin C= 1 When (a=0) AND (b=0) Else C= 1 When (a=0) AND (b=1) Else C= 1 When (a=1) AND (b=0) Else C= 0 When (a=1) AND (b=1) Else C= 0; End Architecture two;,配置语句的一般格式如下: Configration 配置名 Of 实体名 Is 语句说明 End 配置名;,Configuration second Of NAND Is For two End For; End second; Configuratio

23、n first Of NAND Is For one End For; End first;,第12章 12.3,VHDL语言的数据类型及运算操作符,(1) 常数 常数的说明的一般格式如下: Constant:常数名:数据类型:=表达式; 例如: Constant:VCC:REAL:=3.3; (2) 变量 变量的说明语句格式如下: Variable:变量名:数据类型约束条件:=表达式; 例如: Variable: z :Integer Range 0 To 255:=8; (3) 信号 信号说明语句格式如下: Singal:信号名:数据类型约束条件:=表达式; 例如: Singal: CLK

24、 :BIT:=0;,VHDL中有三类对象: 常数(Constant) 变量(Variable) 信号(Signal),第12章 12.3,VHDL中的数据类型,第12章 12.3,VHDL语言的运算操作符,逻辑(Logical)运算、 关系(Relational)运算 算术(Arithmetic)运算 并置(Concatenation)运算,第12章 12.3,VHDL语言的运算操作符,(1) 逻辑运算符 在VHDL语言中逻辑运算符共有6种: NOT取反; AND与; OR或; NAND与非; NOR或非; XOR异或;,第12章 12.3,VHDL语言的运算操作符,(2) 算术运算符 VHD

25、L有10种算术运算符,它们分别是: + 加; 减; *乘; /除; MOD求模; REM取余; +正;(一元运算) -负;(一元运算) *指数; ABS取绝对值。,第12章 12.3,VHDL语言的运算操作符,(3)关系运算符 VHDL语言中有6种关系运算符,它们分别是: =等于; /=不等于; 大于; = 大于等于。,第12章 12.3,VHDL语言的运算操作符,(4) 并置运算符 并置运算符“,第12章 12.3,VHDL顺序语句,VHDL中有如下几种顺序语句: 变量赋值语句 流程控制语句 等待(WAIT)语句 信号代入语句 断言(ASSERT)语句 返回语句 空操作语句,第12章 12.

26、3,变量赋值语句,变量赋值语句的书写格式为: 目的变量:= 表达式; 其中: 目的变量和表达式所代表的新值的类型必须相同。 目的变量的类型、范围及初值在事先应已给出。 表达式可以是变量、信号或字符。 例如: a:=2 ;,变量值只在进程或子程序中使用,它无法传递到进程之外。它类似于一般高级语言的局部变量。,注意,第12章 12.3,流程控制语句,流程控制语句共有五种: IF语句 CASE语句 LOOP语句 NEXT语句 EXIT语句,第12章 12.3,流程控制语句-IF语句,IF 条件句 Then -第一种IF语句,IF语句的单选择控制 顺序语句 End IF;,IF 条件句 Then -第

27、二种IF语句,IF语句的二选择控制 顺序语句 ELSE 顺序语句 End IF;,IF 条件句 Then -第三种IF语句,IF语句的多选择控制 顺序语句 ELSIF 条件句 Then 顺序语句 ELSE 顺序语句 End IF;,第12章 12.3,流程控制语句 -CASE语句,CASE语句的结构如下: CASE 表达式 IS WHEN 选择值 = 顺序语句; WHEN 选择值 = 顺序语句; End CASE;,条件句中的选择值必须在表达式的取值范围内。 除非所有条件句中的选择值能覆盖CASE语句中表达式的取值,否则最末一个条件句中的选择必须用“OHTERS”表示。 CASE语句中每一条件

28、句的选择值只能出现一次,不能有相同选择值的条件语句出现。 CASE语句执行中必须选中,且只能选中所列条件语句中的一条。,第12章 12.3,流程控制语句 -LOOP语句,1) FOR循环变量 这样的LOOP语句格式如下: 标号:FOR 循环变量 IN 离散范围 LOOP 顺序处理语句; End LOOP标号;,例如:ASUM: FOR i IN 1 TO 128 LOOP sum = i + sum; -sum初值为0 End LOOP ASUM;,第12章 12.3,流程控制语句 -LOOP语句,2) WHILE条件 这样的LOOP语句格式如下: 标号:WHILE 条件 LOOP 顺序处理语

29、句; End LOOP标号;,在该LOOP语句中,如果条件为“真”,则进行循环;如果条件为“假”,则结束循环。 例如:x:=1; ASUM: WHILE(x129) LOOP sum = x + sum; -sum初值为0 x:=x+1; End LOOP ASUM;,第12章 12.3,流程控制语句 -NEXT语句,在LOOP语句中,NEXT语句主要用于跳出本次循环。 其书写格式为: NEXT 标号 WHEN条件,例如: LA:FOR value IN 1 TO 15 LOOP S1:A(value):= 1; NEXT WHEN (b=c); S2:A(value+15):= 0; End

30、 LOOP LA;,说明: NEXT语句执行时将停止本次迭代,而转入下一次新的迭代。 NEXT后跟的“标号”和”WHEN条件”均为可选项,二者均无时,只要执行到该语句就立即无条件跳出本次循环,从LOOP语句的起始位置进入下一次循环,即开始下一次迭代。,第12章 12.3,流程控制语句 -EXIT语句,在LOOP语句中,NEXT语句主要用于跳出本次循环。 其书写格式为: NEXT 标号 WHEN条件,EXIT语句的格式也有三种: EXIT; -第一种 当程序执行到该EXIT语句时就无条件地从当前所属的LOOP语句中跳出,结束循环状态,继续执行LOOP语句后继的语句。 EXIT LOOP 标号;

31、-第二种 执行此EXIT语句时,程序将跳至所说明的标号。 EXIT LOOP 标号 WHEN 条件表达式; -第三种 当执行到此EXIT语句时,只要在所说明的条件为TRUE时,程序将跳至所说明的标号。若无标号说明,下一条要执行的语句是循环外的下一条语句。,第12章 12.3,等待(WAIT)语句,WAIT等待语句有以下四种不同的语句格式,设置不同的结束挂起条件: WAIT -无限等待 WAIT ON 信号表 -敏感信号量变化 WAIT UNTIL 条件表达式 -条件满足 WAIT FOR 时间表达式 -时间到,WAIT UNTILrising_edge(clock); WAIT UNTILcl

32、ockEVENT AND clock =1; WAIT ON a,b; WAIT FOR 10ms; WAIT FOR a+b;,第12章 12.3,信号代入语句,信号代入语句的书写格式为: 目的变量:=表达式;,该语句表明,目的变量的值将由表达式所表达的新值替代,但是两者的类型必须相同。 例如: a:=2; b:=c+d;,第12章 12.3,断言(ASSERT)语句,断言语句的书写格式为: ASSERT 条件 REPORT输出信息 SEVERITY级别; 当执行ASSERT语句时,就会对条件进行判别。如果条件为TRUE,则向下执行另一个语句。如果条件为FALSE,则输出错误信息和错误严重程

33、度的级别。,例如:ASSERT (waitA=1) REPORT “waitA timed out at 1” SEVERITY ERROR;,该断言语句的条件是信号量waitA=1。如果执行到该语句 时,信号量waitA=0,说明条件不满足,就会输出REPORT后跟的文字串。 SEVERITY ERROR语句告诉操作人员,其出错级别为ERROR。 ASSERT语句方便了程序的仿真和调试。,第12章 12.3,返回语句 空操作语句,返回语句有两种语句格式: Return; -第一种语句格式 Return 表达式; -第二种语句格式 第一种语句格式只能用于过程,它只是结束过程,并不返回任何值;第

34、二种语句格式只能用于函数,并且必须返回一个值。返回语句只能用于子程序体中。,空操作语句的语句格式如下: NULL 空操作语句不完成任何操作,它唯一的功能就是使逻辑运行流程跨入下一步语句的执行。,第12章 12.3,VHDL并行语句,在VHDL语言中能进行并行处理的语句有: 进程(Process)语句, 并行信号赋值(Concurrent Signal Assignment)语句 条件信号赋值(Conditional Signal Assignment)语句 选择信号赋值(Selective Signal Assignment)语句 并行过程调用(Concurrent Procedure Cal

35、l)语句 块(Block)语句,第12章 12.3,并行信号赋值语句,并行信号赋值语句的语句格式如下: 赋值目标 = 表达式;,例如: Architecture behav OF a IS Begin Output=f(i); End behav;,说明,赋值语句在进程内部使用时,以顺序语句的形式出现;在结构体的进程之外使用时,以并行语句的形式出现。,第12章 12.3,条件信号赋值语句,其书写格式为: 目的信号量= 表达式1 WHEN 条件1 ELSE 表达式2 WHEN 条件2 ELSE 表达式3 WHEN 条件3 ELSE ELSE 表达式n ;,Architecture rtl OF

36、mux4 IS Signal sel: STD_LOGIC_VECTOR(1 DOWNTO 0); Begin Sel = b End rtl ;,第12章 12.3,并行过程调用语句,并行过程调用语句的语句调用格式与前面讲过的顺序过程调用语句是相同的。即 过程名 (关联参量名);,下面是一个在结构体中采用并行过程调用语句的实例: Architecture Begin Vector_to_int(z,x_flag,q); End ;,第12章 12.3,命名规则和注解的标记,在VHDL语言中为信号、实体、结构体以及变量等命名时应遵守如下规则: (1) 名字的最前面应该是英文字母; (2) 能使用的字符只有英文字母、数字和; (3) 不能连续使用符号,在名字的最后也不能使用符号。,下面是命名语句的例子: SIGNAL a_bus: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL 1_bus:-数字开头的名字是错误的 SIGNAL a_bus:-不能作为名称中的字符,是错误的 SIGNAL a_bus:-不能连续使用符号,是错误的 SIGNAL a_bus_:-在名字的最后也不能使用符号,是错误的,第12章 12.3,组合逻辑电路设计-全加器,Library IEEE; Use IEEE.STD_LOGIC_1164.ALL; Use IEE

温馨提示

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

评论

0/150

提交评论