第3章vhdl数据类型及顺序语句_第1页
第3章vhdl数据类型及顺序语句_第2页
第3章vhdl数据类型及顺序语句_第3页
第3章vhdl数据类型及顺序语句_第4页
第3章vhdl数据类型及顺序语句_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

第3章VHDL数据类型与顺序语句(1)数据类型规定数据对象的特征和取值的范围,VHDL含有很宽范围的数据类型,用它们可建立简单的或者复杂的对象。(2)一个新的数据类型必须先建立一个类型说明。类型说明规定类型名和类型的范围,在程序包、实体、结构体、子程序和进程的说明部分中都允许有类型说明。(3)VHDL是一种强类型语言,即每一个对象具有一种类型且只能具有该类型的值,或者说施加于某对象上的操作必须与该对象的类型匹配。(4)信号、变量、常数都要指定数据类型,而且VHDL的数据类型定义相当严格,不同类型之间的数据不能直接代入,不同位长之间也不能直接代入。(5)数据类型的分类:标量类型、复合类型、寻址类型和文件类型。标量类型包括所有简单的类型,如象整数和实数;复合类型包括数组和记录;寻址类型在一般编辑语言中等价为指针;最后,文件类型用设计者定义的文件类型为设计者提供所说明的文件对象。也可分为预定义数据类型和用户定义数据类型。3.1 VHDL数据类型VHDL(一种数据类型很强的语言)数据类型(数据对象取值的集合或子集)数据对象(传递信息的载体)Scalar

types(标量数据类型)Enumeration(可枚举数据类型)Integer(整数数据类型)Physical(物理数据类型)Floating

point(实数数据类型)Composite(复合数据类型)Array(数组数据类型)Record(记录数据类型)Access(寻址数据类型)•File

type(文件类型)Constant(常量)Variable(变量)Signal(信号)File(文件)注:蓝色为不可综合的数据对象和数据类型3.1 VHDL数据类型BIT类型和BIT_VECTOR类型BIT类型用来表示数字系统中的一个位,位值用‘0’或‘1’表示,位的取值与整数中的1和0不同,‘1’和‘0’仅表示一个位的两种取值,有时可用显示说明之,如BIT’(‘1’)位数据与布尔数据也不同,可以用转换函数来转换标准程序包STANDARD中定义的源代码:TYPE

BIT

IS

(‘0’,’1’);3.1 VHDL数据类型3.1.1 BIT和BIT_VECTOR类型BIT_VECTOR类型(1)位矢量是用双引号括起来的一组位数据,是基于BIT数据类型的数组。例如:

“001100”,x“00BB”这里,位矢量最前面的x表示是十六进制(2)标准程序包STANDARD中定义的源代码:TYPE

BIT_VECTOR IS

ARRAY

(Nature

Range<>)

OF

BIT;使用位矢量必须注明位宽,即数组元素个数和排列顺序。例如:SIGNAL

a:BIT_VECTOR(7

DOWNTO

0);其位宽为8,最高位(左位)是a(7),最低位(右位)是a(0)。又例如:SIGNAL

a:BIT_VECTOR(0

TO

7);其位宽为8,最高位(左位)是a(0),最低位(右位)是a(7)。用位矢量表示总线状态最形象也最方便3.1 VHDL数据类型3.1.2 STD_LOGIC和STD_LOGIC_VECTOR类型IEEE预定义数据类型----标准逻辑位与矢量VHDL的标准数据类型“BIT”是一个逻辑型的数据类型,这类数据取值只能是“0”或“1”,由于不存在不定状态“X”,故不便于仿真,而且它也不存在高阻状态,因此很难用它来描述双向数据总线,所以IEEE在1993年制订出了新标准STD_LOGIC_1164

,该程序包中定义的两个重要数据类型:标准逻辑位“STD_LOGIC”、标准逻辑矢量“STD_LOGIC_VECTOR”,使得“STD_LOGIC”型数据可以具有9种不同得值。1、标准逻辑位“STD_LOGIC”STD_LOGIC_1164

程序包中定义的标准逻辑位

“STD_LOGIC”数据类型如下:TYPE

STD_LOGIC IS(“U”--------未初始化的“X”--------强不定“0”--------强0“1”--------强1“Z”--------高阻“W”--------弱信号不定“L”--------弱信号0“H”--------弱信号1“-”--------无关项);注:蓝色数据能在数字电路中实现,其余的主要用于仿真。由该定义可知STD_LOGIC”数据类型是BIT数据类型的扩展,前者更常用,、由于STD_LOGIC”数据类型为九值逻辑,不在是传统的二值逻辑,故编程时在条件句中应将所有的情况包括进去,以免引入不必要的锁存器。2、标准逻辑位矢量“STD_LOGIC

_VECTOR”STD_LOGIC_1164程序包中定义的标准逻辑位矢量“STD_LOGIC_LOGIC”数据类型如下:TYPE

STD_LOGIC_

VECTOR

IS

ARRAY(NATURALRANGE<>)

OFSTD_LOGIC;可见STD_LOGIC_

VECTOR是一个标准的一维数组,数组中的每一个元素的数据类型是上面定义的标准逻辑位“STD_LOGIC”数据类型;以上两种数据类型在使用前需加入下面的语句:LIBRARY

IEEE;USE

IEEE.STD_LOGIC_1164.ALL;3.1 VHDL数据类型3.1.3

整数类型INTEGER范围:-(231-1)~

231-1,相当于32位有符号的二进制数表示,当需要进位操作时,可用转换函数(有些EDA工具能够自动将整数转换成位矢量),将整数转换成位矢量,目前,在有的CAD厂家提供的工具中,允许对有符号和无符号的整型数进行算术逻辑运算,其中仿真器中通常作为有符号数处理,综合器中通常作为无符号数处理。3.1 VHDL数据类型3.1.4

布尔数据类型BOOLEAN(1)一个布尔量只有两种状态----“真”和“假”,综合器赋予1或0信号值,对应硬件中的一根连线,但是它和位不同,没有数值的含义,也不能进行数值运算,它只能进行关系运算。例如,它可以在IF语句中被测试,测试结果产生一个布尔量TRUE或FALSE。(2)标准程序包STANDARD中定义的源代码:3.1.5 SIGNED和UNSIGNED类型VHDL综合工具自带的扩展程序包中定义了一些有用的数据类型,如

Synopsys公司在IEEE中加入的程序包STD_LOGIC_ARITH中定义有以下的数据类型:1、无符号数据类型(UNSIGNED):在综合器中,这个数值被解释为一个二进制数,该二进制数的最左位为其最高位,例如:UNSIGNED’(“1101”)------代表十进制数的13,其中UNSIGNED’表示指定其后面的字符串为无符号数据类型

VARIABLE

var:UNSIGNED(0

TO

7);--最高位为var(0)

VARIABLE

temp:UNSIGNED(7

DOWNTO

0);--最高位为temp(7)2、有符号数据类型(SIGNED):在综合器中,这个数值被解释为一个二进制数的补码,该二进制数的最左位为其符号位,例如:SIGNED’(“1101”)------代表十进制数的-3,其中SIGNED’表示指定其后面的字符串为有符号数据类型3、以上两种数据类型在可综合的数学运算程序中常用,使用前需加入下面的语句:LIBRARY

IEEE;USE

IEEE.STD_LOGIC_ARITH.ALL;若综合器中没有该程序包,则可用NUMERIC_STD,NUMERIC_BIT;这些程序包中也有这两种数据类型3.1 VHDL数据类型3.1 VHDL数据类型3.1.6

其他预定义类型1.字符类型(Character)字符也是一种数据类型,所定义的字符量常用单引号括起来,如‘A’、‘a’,由于字符是用ASCII码来表示的,所以‘A’、‘a’是不同的。标准程序包STANDARD中定义的源代码:TYPE

CHARACTER

is(所有字符包括不可显示的字符);当要明确指出是字符时可用:character’(‘1’)2.字符串类型(String)字符串是由双引号括起来的一个字符序列,也称作字符矢量或字符串数组例如,“integer

range”,常用于子程序的提示和说明文字字符串----双引号引起来的一串文字,数位字符串----也称位矢量,其长度为对应的二进制数的位数,其表示形式为:基数“基于基的整数”。3.实数类型(1)也称为浮点数,取值范围:-1.0E+38--+1.0E+38书写时一定要有小数点例如:-1.0,+2.5,2.5,-1.0E38综合器不支持,仅用于仿真。注:‘1’,1,“1”,1.0四者的区别----分别是字符1,十进制整数1,字符串1,实数13.1 VHDL数据类型4.时间类型VHDL中唯一的预定义物理类型。完整的时间量数据应包含整数和单位两部分,而且整数和单位之间至少应留一个空格的位置,例如:55

sec,2

min……,20us,100ns在系统仿真时,时间数据可以表示信号延时,从而使模型系统能更逼近实际系统的运行环境,且仅用于仿真。3.1 VHDL数据类型5.文件类型3.1 VHDL数据类型3.1.7

数据类型转换函数3.1 VHDL数据类型3.1.7

数据类型转换函数3.1 VHDL数据类型3.1.7

数据类型转换函数3.1 VHDL数据类型3.2 VHDL最常用的顺序语句1、VHDL对系统与电路提供的最基本的描述方法结构描述对与一个硬件的结构进行描述,主要是描述它由哪些子元件组成,以及各个元件之间的互连关系,它与系统的原理图设计很类似;行为描述的主要特点在于它能从行为上描述系统和电路,采用的方法主要是通过一系列的顺序语句和一系列系列并行语句来进行描述,并行语句则用来各摸型算法之间的连接关系;按语句执行顺序对其进行分类,可以分为顺序(sequential)描述语句和并行(concurrent)描述语句。例如:进程语句(process

statement)它是一个并行语句。在一个结构体内可以有几个进程语句同时存在,各进程语句是并发执行的。但是,在进程内部所有语句应是顺序描述语句,这两类语句的灵活运用就可以正确的描述系统的并发行为和顺序行为。信号、变量赋值语句;流程控制语句:IF语句,CASE语句,LOOP语句,

NEXT语句,EXIT语句;等待语句:WAIT语句;子程序调用语句;返回语句:RETURN语句;空操作语句:NULL语句;其它语句:ATTRIBUTE(属性),TEXTIO(文本文件操作),ASSERT(断言语句),REPORT(报告语句),Resolution(决断函数)3.2 VHDL最常用的顺序语句3.2.1

赋值语句信号赋值语句变量赋值语句赋值目标赋值符号赋值源注意事项:信号、变量赋值目标与赋值源的数据类型及位长度应严格一致;在应用时须注意上、下文的含义和说明,因为代入符号与关系操作符的“〈=”(相当于执行的意思)非常相似的;集合赋值的两种方式----位置映射和名称映射;例:SIGNAL

a,b,c,d:STD_LOGIC;SIGNAL S:STD_LOGIC_VECTOR(1TO

4);VARIABLE e,f:

STD_LOGIC;VARIABLE g:

STD_LOGIC

VECTOR(1

TO

2);VARIABLE h:

STD_LOGIC

VECTOR(1

TO

4);------------s<=(‘1’,‘0’,‘1’,‘0’);(a,b,c,d)<=s;h:=(3=>e,4=>f,2=>g(1),1=>g(2));------h(3):=e;h(4):=f;h(2):=g(1);h(1):=g(2);位置映射:注意位置顺序;名称映射:与顺序无关;3.2.2

IF语句IF语句是根据所指定的条件来确定执行那些语句其书写格式通常可分为以下几种:1、IF语句的门闩控制

书写格式:IF

条件THEN顺序处理语句END

IF当程序执行到该IF语句时,就要判断此IF语句所指定的条件是否成立,如果成立,自执行IF语句所包括的顺序处理语句;如果条件不成立,程序将跳过IF语句所包含的顺序处理语句,而向下执行IF语句后继的语句这里的条件起门闩作用。例如:IF

(a=‘1’)

THENc〈=not

b;END

IF;当a=‘1’时,c〈=not

b;否则将不执行c〈=not

b而执行下面的语句。2、IF语句的二选择控制IF

条件THEN顺序处理语句;ELSE顺序处理语句;END

IF

;该语句的功能是:当条件满足时,执行THEN与ELSE之间的顺序处理语句,否则执行ELSE和IF之间的顺序处理语句。这种描述的典型逻辑电路实例是二选一电路。例如:ARCHITECTURE

rtl

OF

mux2

ISBEGINPROCESS(a,b,sel)IF

(sel

=‘1’)THENy〈=a;ELSEy〈=b;END

IF;END

PROCESS;END

rtl;3、IF语句的多选择控制IF语句的多选择控制又称IF语句的嵌套,其书写格式为:

IF

条件THEN顺序处理语句;ELSIF

条件THEN顺序处理语句;…ELSIF

条件THEN顺序处理语句;ELSE顺序处理语句;END

IF;在这种多选择控制的IF语句中,设置了多个条件,当满足所设置的多个条件之一时,就执行该条件后跟的顺序处理语句,如果所有设置的条件都不满足,则执行最后一个ELSE

和END

IF之间的顺序处理语句,顺序处理语句的执行条件具有向上相与的功能。其典型的描述是多选一电路例:四选一电路LIBRARY

IEEE;USE

IEEE.STD_LOGIC_1164.ALL;ENTITYmux4

ISPORT

(input:IN STD_LOGIC_VECTOR(3

DOWNTO

0);sel:IN STD_LOGIC_VECTOR(1

DOWNTO

0);y:OUT

STD_LOGIC);END

mux4;ARCHITECTURE

rtl

OF

mux4

ISBEGINPROCESS(input,sel)BEGINIF

(sel

=

“00”)

THENy

<=

input(0);ELSIF

(sel=“01”)THENy

<=

input(1);ELSIF

(sel=

“10”)THENy

<=

input(2);ELSEy

<=

input(3);END

IF;END

PROCESS;END

rtl;IF语句不仅可用于选择器设计,还可用于比较器、译码器、编码器等进行条件控制的逻辑电路设计,注意:(1)IF语句的条件判断输出是布尔量(TRUEOR

FALSE)。(2)故在IF语句中的IF条件表达式中,只能使用关系运算操作(=、/=、〈、〉、〈=、=〉)及其组合表达式。例:编码器library

ieee;use

ieee.std_logic_1164.all;entity

encoder8_3

isport

(

a,

b,

c,

d,

e,

f,

g,

h

:

in

std_logic;out2,

out1,

out0

:

out

std_logic);end

encoder8_3;architecture

behave

of

encoder8_3

issignal

k:std_logic_vector(2

downto

0);beginprocess

(a,

b,

c,

d,

e,

f,

g,

h)beginif

(

a='0')

thenk<=

"000";elsif(

b='0')

thenk<=

"001";elsif(

c='0')

thenk<=

"010";elsif(

d='0')

thenk<=

"011";elsif(

e='0')

thenk<=

"100";elsif(

f='0')

thenk<=

"101";elsif(

g='0')

thenk<=

"110";elsek<=

"111";end

if;out2<=k(2);out1<=k(1);out0<=k(0);end

process;end

behave;3.2 VHDL最常用的顺序语句3.2.2 IF语句3.2.3 IF语句使用示例3.2.3.1 D触发器的VHDL描述3.2.3 IF语句使用示例上升沿检测表达式和信号属性函数EVENT不完整条件语句与时序电路3.2.3 IF语句使用示例上升沿检测表达式和信号属性函数EVENT不完整条件语句与时序电路3.2.3 IF语句使用示例3.2.3 IF语句使用示例3.2.3.2

含异步复位和时钟使能的D触发器的VHDL描述3.3.2

含异步复位和时钟使能的D触发器的VHDL描述3.2.3 IF语句使用示例3.2.3.3

基本锁存器的VHDL描述3.2.3 IF语句使用示例3.2.3.3

基本锁存器的VHDL描述3.2.3 IF语句使用示例3.2.3.4

含清0控制的锁存器的VHDL描述3.2.3 IF语句使用示例3.2.3.5 VHDL实现时序电路的不同表述方式3.2.3 IF语句使用示例3.2.3.5 VHDL实现时序电路的不同表述方式3.2.3 IF语句使用示例3.2.3.6 4位二进制加法计数器设计3.2.3 IF语句使用示例3.2.3.7

计数器更常用的VHDL表达方式3.2.3 IF语句使用示例3.2.3.7

计数器更常用的VHDL表达方式3.2.3.8

实用计数器的VHDL设计3.2.3 IF语句使用示例3.2.3.8

实用计数器的VHDL设计3.2.3 IF语句使用示例3.2.3.8

实用计数器的VHDL设计3.2.3 IF语句使用示例3.2.3.9

含同步并行预置功能的8位移位寄存器设计3.2.3 IF语句使用示例3.2.3.9

含同步并行预置功能的8位移位寄存器设计3.2.3 IF语句使用示例3.2.3.10

优先编码器设计3.2.3 IF语句使用示例3.2.3.10

优先编码器设计3.2.4 CASE语句CASE语句用来描述总线或编码、译码的行为从许多不同的序列中选择其中之一执行虽然IF语句也有类似的功能,但CASE语句的可读性要好得多阅读者很容易找出条件式和动作的对应关系1、CASE的书写格式如下:CASE

表达式ISWHEN

条件表达式=〉顺序处理语句

END

CASE;2、CASE语句中的条件表达式可有如下4种不同的表示形式:单值:WHEN

值=〉顺序处理语句;并列:WHEN

值|[值]|[值]…[值]=〉顺序处理语句;区间:WHEN

值TO

值=〉顺序处理语句;混合:WNEN

OTHERS=〉顺序处理语句;当CASE和IF之间的表达式的取值满足指定的条件表达式的值时,程序将执行后跟的,由符号=〉所指定的顺序处理语句条件表达式的值可以是一个值,也可是多个值的“或”关系,或者是一个值的取值范围,或表示其它所有的缺省值3、CASE的使用说明选择值应在取值范围内;除非所有条件句中的选择值能覆盖其表达式的取值,否则“WNENOTHERS=〉顺序语句”不可少;条件句中的选择值只能出现一次,不能重复;至少应有一个条件句;3.2 VHDL最常用的顺序语句3.2.4 CASE语句LIBRARY

IEEE;USE

IEEE.STD_LOGIC_1164.ALL;ENTITY

decoder3_8

ISPORT

(a,b,c,G1,G2A,G2B:IN

STD_LOGIC);y:OUT

STD_LOGIC_VECTOR(7

DOWNTO

0));END

decoder3_8;ARCHITECTURE

rtl

OF

decoder3_8

ISSIGNAL

indata:STD_LOGIC_VECTOR(2

DOWNTO

0);BEGINindata

<=

c

&

b

&

a;PROCESS

(indata,G1,G2A,G2B)BEGINIF

(G1

=

’1’

AND

G2A

=

’0’

AND

G2B

=

’0’)

THENCASE

indata

ISWHEN

“000”

=>

y<=

”11111110”;WHEN

“001”

=>

y<=

”11111101”;WHEN

“010”

=>

y<=

”11111011”;WHEN

“011”

=>

y<=

”11110111”;WHEN

“100”

=>

y<=

”11101111”;WHEN

“101”

=>

y<=

”11011111”;WHEN

“110”

=>

y<=

”10111111”;WHEN

“111”=>

y<=”01111111”;WHEN

OTHERS

=>y<=”XXXXXXXX”;END

CASE;ELSEy

<=

”11111111”;END

IF;END

PROCESS;END

rtl;3-8译码器在上例中,indata是矢量型数据,除了取值为”0”和”1”之外,还有可能取值为“x”,“z”和“u”,尽管这些取值在逻辑电路综合时没有用,但是,在CASE却必须把所有的可能取值都要描述出来故在本例中加一项WHEN

OTHERS,使得它包含了y输出的所有缺省值当WHEN后跟的值不同,但是输出却相同时,则可用下面描述:如本例中:WHEN

OTHERS

项也可以写为:WHEN

“UZX”|“ZXU”|“UUZ”|…|“UUU”=〉y〈=“XXXXXXXX”;4、IF语句与CASE语句的区别前者有顺序,后者没有顺序;前者具有条件相与,后者具有条件相或;前者具有将“-”(忽略)自动包含,后者不具有这一性质必需加一项WHEN

OTHERS;3.2 VHDL最常用的顺序语句3.2.5 PROCESS语句特点:1、进程之间的并发性;2、进程内部的顺序性;3、进程的启动;靠敏感信号表中的信号的变化而启动,只要其中任一信号变化则进程就被激活而启动执行一次;当PROCESS语句的敏感信号表中没有信号时,靠WAIT语句启动(有些综合器不支持);当PROCESS语句的敏感信号表中有信号时,WAIT语句不能出现,避免进程产生误触发;(3)敏感信号表中不能有两个描述时序电路的时钟信号4、进程之间的通信通过传递信号和共享变量来实现的。进程A进程B信号信号信号信号进程C信号信号例如:以下两种描述等价一个简单并行信号赋值语句是一个进程的缩写。architecture

behavofa_varisbeginoutput<=a(i);end

behav;architecture

behavofa_varisbeginprocess(a)beginoutput<=a(i);end

process;end

behav;LIBRARY

ieee;USE

ieee.std_logic_1164.all;ENTITYsimp

ISPORT(a,

b

:

IN

STD_LOGIC;y

:

OUT

STD_LOGIC);END

simp;ARCHITECTURE

logic

OF

simp

ISSIGNAL

c

:

STD_LOGIC;BEGINc

<=

a

and

b;y

<=

c;END

logic;LIBRARY

ieee;USE

ieee.std_logic_1164.all;ENTITYsimp_prc

ISPORT(a,b

:

IN

STD_LOGIC;

y

:

OUT

STD_LOGIC);END

simp_prc;ARCHITECTURE

logic

OF

simp_prc

ISSIGNAL

c

:

STD_LOGIC;BEGINprocess1:

PROCESS(a,

b)BEGINc

<=

a

and

b;END

PROCESS

process1;process2:

PROCESS(c)BEGINy

<=

c;END

PROCESS

process2;END

logic;等效LIBRARY

ieee;USE

ieee.std_logic_1164.all;ENTITYsimp

ISPORT(a,

b

:

IN

STD_LOGIC;y

:

OUT

STD_LOGIC);END

simp;ARCHITECTURE

logic

OF

simp

ISSIGNAL

c

:

STD_LOGIC;BEGINc

<=

a

and

b;y

<=

c;END

logic;LIBRARY

ieee;USE

ieee.std_logic_1164.all;ENTITYsimp_prc

ISPORT(a,b

:

IN

STD_LOGIC;

y

:

OUT

STD_LOGIC);END

simp_prc;ARCHITECTURE

logic

OF

simp_prc

ISSIGNAL

c

:

STD_LOGIC;BEGINPROCESS(a,

b)BEGINc

<=

a

and

b;y

<=

c;END

PROCESS;END

logic;串行并行不等效3.2.6

并置操作符&3.4 VHDL其它顺序语句3.4.1 LOOP循环语句(1)单个LOOP语句该语句常要和EXIT配合使用3.4 VHDL其它顺序语句3.4.1 LOOP循环语句(2)FOR_LOOP语句LOOP语句中的循环变量的值在每次循环中都将发生变化,而IN后跟的离散范围表示循环变量在循环过程中依次取值的范围LIBRARY

IEEE;USE

IEEE.STD_LOGIC_1164.ALLENTITY

parity_check

ISPORT

(a:IN

STD_LOGIC_VECTOR

(7

DOWNTO

0);yeven

,

yodd

:OUT

STD_LOGIC);END

parity_check

;ARCHITECTURE

rtl

OF

parity_check

ISBEGINPROCESS(a)VARIABLE

tmp:STD_LOGIC;BEGINtmp

:=

’0’;FOR

I

IN

0

TO

7

LOOPtmp

:=

tmp

XOR

a(I);END

LOOP;yeven

<=

tmp;yodd <=

not

tmp;END

PROCESS;END

rtl;例如:8位的奇偶产生/校验电路在该LOOP语句中,如果条件为“真”,则进

温馨提示

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

评论

0/150

提交评论