《電子技術(shù)綜合設(shè)計與實踐教程》課件第5章_第1頁
《電子技術(shù)綜合設(shè)計與實踐教程》課件第5章_第2頁
《電子技術(shù)綜合設(shè)計與實踐教程》課件第5章_第3頁
《電子技術(shù)綜合設(shè)計與實踐教程》課件第5章_第4頁
《電子技術(shù)綜合設(shè)計與實踐教程》課件第5章_第5頁
已閱讀5頁,還剩64頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第5章VerilogHDL語言簡介5.1VerilogHDL程序的基本構(gòu)成 5.2VerilogHDL語言的數(shù)據(jù)類型 5.3詞匯規(guī)定 5.4模塊和端口 5.5行為描述 5.6VerilogHDL語言編程練習

VerilogHDL是一種硬件描述語言,用于從算法級、門級到開關(guān)級的多種抽象設(shè)計層次的數(shù)字系統(tǒng)建模。被建模的數(shù)字系統(tǒng)對象的復雜性可以介于簡單的門和完整的電子數(shù)字系統(tǒng)之間。數(shù)字系統(tǒng)能夠按層次描述,并可在相同描述中顯式地進行時序建模。VerilogHDL語言具有下述描述能力:設(shè)計的行為特性、設(shè)計的數(shù)據(jù)流特性、設(shè)計的結(jié)構(gòu)組成以及包含響應(yīng)監(jiān)控與設(shè)計驗證方面的時延和波形產(chǎn)生機制。

VerilogHDL語言是于1983年由GatewayDesignAutomation公司為其模擬器產(chǎn)品開發(fā)的硬件建模語言。最初它只是一種專用語言,后來由于模擬、仿真器產(chǎn)品的廣泛使用,VerilogHDL作為一種方便且實用的語言逐漸為眾多設(shè)計者所接受。VerilogHDL語言于1990年被推向公眾領(lǐng)域。OpenVerilogInternational(OVI)是促進Verilog發(fā)展的國際性組織。1992年,OVI決定致力將VerilogOVI標準推廣成為IEEE標準。這一努力最后獲得成功,Verilog語言于1995年成為IEEE標準,稱為IEEEStd1364-1995。Verilog硬件描述語言參考手冊中詳細描述了該標準。本章主要對VerilogHDL語言作一簡介,詳細的編程使用請參考夏宇聞編寫的《Verilog數(shù)字系統(tǒng)設(shè)計教程》一書。

VerilogHDL程序設(shè)計的基本單元是模塊(module)。一個模塊由兩部分組成,一部分描述接口,另一部分描述邏輯功能,即定義輸入是如何影響輸出的。Verilog模塊設(shè)計描述了一個模塊的對外特性和內(nèi)部功能,包括模塊端口定義、I/O說明、內(nèi)部信號聲明和功能定義等四部分,如圖5-1所示。5.1VerilogHDL程序的基本構(gòu)成

圖5-1VerilogHDL程序模塊結(jié)構(gòu)圖模塊是Verilog的基本描述單位,用于描述某個設(shè)計的功能或結(jié)構(gòu)及與其它模塊通信的外部端口。一個設(shè)計的結(jié)構(gòu)可使用開關(guān)級原語、門級原語和用戶定義的原語方式描述;設(shè)計的數(shù)據(jù)流行為使用連續(xù)賦值語句進行描述;時序行為使用過程結(jié)構(gòu)進行描述。一個模塊可以在另一個模塊中使用,進行層次嵌套。正因為如此,才可以將大型的數(shù)字電路設(shè)計分割成不同的子模塊來實現(xiàn)特定的功能,最后通過頂層模塊調(diào)用子模塊來實現(xiàn)整體功能。

1.模塊端口的定義

模塊端口定義聲明了輸入/輸出口,其格式如下:

Module模塊名(口1,口2,口3,…)

端口定義的圓括弧中的內(nèi)容,是設(shè)計電路模塊與外界聯(lián)系的全部輸入/輸出端口信號或引腳,它是設(shè)計實體對外的一個通信界面,是外界可以看到的部分(不包含電源和接地端),多個端口名之間用“,”分隔。例如:

moduleadder(sum,cont,ina,inb,cin);

2.I/O說明

模塊的I/O說明用來聲明模塊端口定義中各端口數(shù)據(jù)的流動方向,包括輸入(input)、輸出(output)和雙向(inout)。其格式如下:

輸入:input[信號位寬-1:0]端口名

輸出:out[信號位寬-1:0]端口名

輸入輸出:inout[信號位寬-1:0]端口名

3.內(nèi)部信號聲明

內(nèi)部信號聲明用來說明設(shè)計電路的功能描述中所用信號的數(shù)據(jù)類型以及函數(shù)聲明。其格式如下:

reg[width-1:0]變量1,變量2

wire[width-1:0]變量1,變量2

4.功能定義

功能定義是VerilogHDL程序設(shè)計中最主要的部分,用來描述設(shè)計模塊的內(nèi)部結(jié)構(gòu)和模塊端口間的邏輯關(guān)系,在電路上相當于器件的內(nèi)部電路結(jié)構(gòu)。功能定義采用三種方法產(chǎn)生邏輯,其格式如下:

(1)使用assign聲明語句。

如:assigna=b&c;

(2)用實例元件(instantiate)。

如:and#2u1(q,a,b);

(3)使用always塊。

如:always@(posedgeclkorposedgeclr)

begin……

end

在每個模塊中,可用四種方式描述一個設(shè)計:數(shù)據(jù)流方式、行為方式、結(jié)構(gòu)方式、上述描述方式的混合。

1)數(shù)據(jù)流方式

用數(shù)據(jù)流方式描述一個設(shè)計建模的最基本的機制就是使用連續(xù)賦值語句。在連續(xù)賦值語句中,某個值被指派給線網(wǎng)變量。連續(xù)賦值語句的語法如下:

assign[delay]LHS_net=RHS_expression;

其中,右邊表達式使用的操作數(shù)無論何時發(fā)生變化,表達式值都會重新計算,并且在指定時延后被賦予左邊的線網(wǎng)變量。時延定義了右邊表達式操作數(shù)變化與賦值給左邊表達式之間的持續(xù)時間。如果沒有定義時延值delay,則缺省時延為0。連續(xù)賦值語句對電路的數(shù)據(jù)流行為采用的建模方式是隱式而非顯式的。此外,連續(xù)賦值語句是并發(fā)執(zhí)行的,也就是說各語句的執(zhí)行順序與其在描述中出現(xiàn)的順序無關(guān)。

2)行為方式

設(shè)計的行為功能采用下述過程語句結(jié)構(gòu)描述:

(1)

initial語句:此語句只執(zhí)行一次。

(2)

always語句:此語句總是循環(huán)執(zhí)行,或者說此語句重復執(zhí)行。

只有寄存器類型的數(shù)據(jù)能夠在這兩種語句中被賦值。寄存器類型的數(shù)據(jù)在被賦新值前保持原有值不變。所有的初始化語句和always語句在0時刻并發(fā)執(zhí)行。

3)結(jié)構(gòu)方式

在VerilogHDL語言中可使用四種方式描述結(jié)構(gòu):內(nèi)置門原語(在門級);開關(guān)級原語(在晶體管級);用戶定義的原語(在門級);模塊實例(創(chuàng)建層次結(jié)構(gòu))。

(1)內(nèi)置門原語(在門級)。VerilogHDL語言中提供下列內(nèi)置基本門:

●多輸入門:and,nand,or,nor,xor,xnor。

●多輸出門:buf,not。

●三態(tài)門:bufif0,bufif1,notif0,notif1。

●上拉、下拉電阻:pullup,pulldown。

(2)開關(guān)級原語(在晶體管級)。

MOS開關(guān):cmos,nmos,pmos,rcmos,rnmos,rpmos。

●雙向開關(guān):tran,tranif0,tranif1,rtran,rtranif0,rtranif1。

門級邏輯設(shè)計描述中可使用具體的門實例語句。下面是簡單的門實例語句格式:

gate_type[instance_name](term1,term2,…,term);N

注意,instance_name是可選的;gate_type為前面列出的某種門類型。各term用于表示與門的輸入/輸出端口相連的線網(wǎng)或寄存器。同一門類型的多個實例能夠在一個結(jié)構(gòu)形式中定義。語法如下:

gate_type

[instance_name1](term11,term12,…,term)1,N

[instance_name2](term21,term22,…,term)2,N

[instance_nameM](termM1,termM2,…,term)M;N

(3)用戶定義的原語(UDP,在門級)。

以下語法的UDP說明可用來定義UDP:

PrimitiveUDP_name(OutputName,List_of_inpu)ts

Output_declaration

List_of_input_declarations

[Reg_declaration]

[Initial_statement]

table

List_of_tabel_entries

endtable

endprimitive

UDP的定義不依賴于模塊定義,因此出現(xiàn)在模塊定義以外,也可以在單獨的文本文件中定義UDP。

UDP只能有一個輸出和一個或多個輸入。第一個端口必須是輸出端口。此外,輸出

可以取值0、1或x(不允許取z值)。輸入中出現(xiàn)z值時以x處理。UDP的行為以表的形式描述。在UDP中可以描述下面兩類行為:

●組合電路。在組合電路UDP中,規(guī)定了不同的輸入組合和相對應(yīng)的輸出值。沒有指定的任意組合輸出為x。

●時序電路(邊沿觸發(fā)和電平觸發(fā))。在時序電路UDP中,使用1位寄存器描述內(nèi)部狀態(tài)。該寄存器的值是時序電路UDP的輸出值。共有兩種不同類型的時序電路UDP:一種模擬電平觸發(fā)行為;另一種模擬邊沿觸發(fā)行為。時序電路UDP使用寄存器的當前值和輸入值來決定寄存器的下一狀態(tài)(和后繼的輸出)。

(4)模塊實例(創(chuàng)建層次結(jié)構(gòu))。

首先構(gòu)建基本模塊,再逐層實例化,構(gòu)成高級模塊。

moduleDFF(d,clk,clr,q,qb);

....//定義各種邏輯

endmodule//構(gòu)建基本模塊DEF

moduleREG4(d,clk,clr,q,qb);

output[3:0]q,qb;

input[3:0]d;

inputclk,clr;

DFFd0(d[0],clk,clr,q[0],qb[0]);

DFFd1(d[1],clk,clr,q[1],qb[1]);

DFFd2(d[2],clk,clr,q[2],qb[2]);

DFFd3(d[3],clk,clr,q[3],qb[3]);

endmodule//在REG4模塊內(nèi),通過實例化基本模塊DEF構(gòu)建高層模塊

4)上述描述方式的混合

在模塊中,結(jié)構(gòu)方式和行為方式的描述可以自由混合。也就是說,模塊描述中可以包含實例化的門、模塊實例化語句、連續(xù)賦值語句以及always語句和initial語句的混合。它們之間也可以相互包含。來自always語句和initial語句(切記只有寄存器類型的數(shù)據(jù)才可以在這兩種語句中被賦值)的值能夠驅(qū)動門或開關(guān),而來自于門或連續(xù)賦值語句(只能驅(qū)動線網(wǎng))的值能夠反過來用于觸發(fā)always語句和initial語句。

VerilogHDL語言有兩種數(shù)據(jù)類型。

(1)線網(wǎng)類型(nettype):表示Verilog結(jié)構(gòu)化元件間的物理連線。它的值由驅(qū)動元件的值決定,例如連續(xù)賦值或門的輸出。如果沒有驅(qū)動元件連接到線網(wǎng),則線網(wǎng)的缺省值為z。

5.2VerilogHDL語言的數(shù)據(jù)類型

(2)寄存器類型(registertype):表示一個抽象的數(shù)據(jù)存儲單元,它只能在always語句和initial語句中被賦值,并且它的值從一個賦值到另一個賦值被保存下來。寄存器類型的變量具有x的缺省值。5.2.1線網(wǎng)類型

線網(wǎng)數(shù)據(jù)包含以下不同的線網(wǎng)子類型:wire、tri、wor、trior、wand、triand、trireg、tri1、tri0、supply0、supply1。

通用的線網(wǎng)類型說明語法如下:

net_kind[msb:lsb]net1,net2,...,netN;

線網(wǎng)子類型描述如表5-1所示。

表5-1線網(wǎng)子類型描述

1.wire和tri線網(wǎng)

用于連接單元的連線(wire)是最常見的線網(wǎng)類型。三態(tài)線(tri)與連線的語法和語義一致。三態(tài)線可以用于描述多個驅(qū)動源驅(qū)動同一根線的線網(wǎng)類型,并且沒有其它特殊的意義。

2.wor和trior線網(wǎng)

線或(wor)指如果某個驅(qū)動源為1,那么線網(wǎng)的值也為1。三態(tài)線或(trior)與線或在語法和功能上是一致的。

3.wand和triand線網(wǎng)

線與(wand)指如果某個驅(qū)動源為0,那么線網(wǎng)的值為0。三態(tài)線與(triand)和線與在語法和功能上是一致的。

4.trireg線網(wǎng)

三態(tài)寄存器(trieg)線網(wǎng)用于存儲數(shù)值(類似于寄存器)及電容節(jié)點的建模。當三態(tài)寄存器線網(wǎng)的所有驅(qū)動源都處于高阻態(tài)時,也就是說,當值為z時,三態(tài)寄存器線網(wǎng)保存作用在線網(wǎng)上的最后一個值。此外,三態(tài)寄存器線網(wǎng)的缺省初始值為x。例如:

trireg[1:8]Dbus,Abus;

5.tri0和tri1線網(wǎng)

這類線網(wǎng)可用于線邏輯的建模,即線網(wǎng)有多于一個的驅(qū)動源。tri0(tri1)線網(wǎng)的特征是,若無驅(qū)動源驅(qū)動,則它的值為0(tri1的值為1)。

6.supply0和supply1線網(wǎng)

supply0用于對“地”建模,即低電平0;supply1用于對電源建模,即高電平1。例如:

supply0Gnd,ClkGnd;

supply1[2:0]Vcc;5.2.2寄存器類型

VerilogHDL語言中有五種不同的寄存器類型:reg、integer、time、real、realtime。

1.reg寄存器類型

reg寄存器類型是最常見的數(shù)據(jù)類型。簡單的寄存器類型說明如下:

reg[msb:lsb]reg1,reg2,…,regN;其中,msb和lsb定義了范圍,并且均為常數(shù)值表達式。范圍定義是可選的,如果沒有定義范圍,則缺省值為1位寄存器。該寄存器可以取任意長度。寄存器中的值通常被解釋為無符號數(shù)。例如:

reg[3:0]Sat; //Sat為4位寄存器

regCnt; //1位寄存器

reg[1:32]Kisp,Pisp,Lisp; //32位寄存器

2.存儲器類型

存儲器是一個寄存器數(shù)組。在賦值語句中需要注意如下區(qū)別:存儲器賦值不能在一條賦值語句中完成,但是寄存器可以。因此在存儲器被賦值時,需要定義一個索引。

存儲器使用如下說明方式:

reg[msb:lsb]memory1[upper1:lower1], //msb、lsb分別表示寄存器的最高位、

memory2[upper2:lower2],...; //最低位,upper1、lower1分別表示

//存儲器包含的最高寄存器編號、最低

//寄存器編號

例如:

reg[0:3]MyMem[0:63] //MyMem為64個4位寄存器的數(shù)組

regBog[1:5] //Bog為5個1位寄存器的數(shù)組

3.integer寄存器類型

integer(整數(shù))寄存器的值為整數(shù)值。整數(shù)寄存器可以作為普通寄存器使用,其典型應(yīng)用為高層次行為建模。

使用整數(shù)型的說明如下:

integerinteger1,integer2,...,intergerN[msb:lsb];

其中,msb和lsb是定義整數(shù)數(shù)組界限的常量表達式,數(shù)組界限的定義是可選的。

4.time寄存器類型

time(時間)類型的寄存器用于存儲和處理時間。

5.real和realtime寄存器類型

real(實數(shù))寄存器類型和realtime(實數(shù)時間)寄存器類型中的參數(shù)是常量。該參數(shù)經(jīng)常用于定義時延和變量的寬度。

real類型說明的變量的缺省值為0。

real類型寄存器說明如下:

realreal_reg1,real_reg2,…,real_regN;

realtime類型寄存器說明如下:

realtimerealtime_reg1,realtime_reg2,...,realtime_regN;

realtime與real類型完全相同。例如:

realSwing,Top;

realtimeCurrTime;5.2.3常量

常量是一個恒定不變的值數(shù),一般在程序前部定義。常量定義格式如下:

parameter常量名1=表達式,常量名2=表達式,…,常量名n=表達式;

parameter是常量定義關(guān)鍵字,常量名是用戶定義的標識符,表達式是為常量賦的值。例如:

parameterVcc=5,fbus=8'b11010001;

使用參數(shù)說明的參數(shù)只被賦值一次。參數(shù)說明如下:

parameterparam1=const_expr1,param2=const_expr2,...,paramN=const_exprN;

1.空白符和注釋

VerilogHDL語言中的空白符包括空格、tab符號、換行和換頁。空白符如果不是出現(xiàn)在字符串中,則在編譯源程序時將被忽略。

注釋分為行注釋和塊注釋兩種方式。行注釋用符號//(兩個斜杠)開始,注釋到本行結(jié)束。塊注釋用/*開始,用*/結(jié)束。塊注釋可以跨越多行,但它們不能被嵌套。5.3詞匯規(guī)定

2.常數(shù)

VerilogHDL語言中的常數(shù)包括數(shù)字、未知x和高阻z三種。數(shù)字可以用二進制、十進制、八進制和十六進制等4種不同數(shù)制來表示,完整的數(shù)字格式如下:

<位寬>'<進制符號><數(shù)字>

其中,位寬表示數(shù)字對應(yīng)的二進制數(shù)的位數(shù)寬度;進制符號包括b或B(表示二進制數(shù)),d或D(表示十進制數(shù)),h或H(表示十六進制數(shù)),o或O(表示八進制數(shù))。例如:

8'b10110001 //表示位寬為8位的二進制數(shù)

8'hf5 //表示位寬為8位的十六進制數(shù)

十進制數(shù)的位寬和進制符號可以缺省,例如:

125 //表示十進制數(shù)125

8'b1111xxxx //等價于8'hfx

8'b1101zzzz //等價于8'hdz

3.字符串

字符串是用雙引號括起來的可打印字符序列,它必須包含在同一行中。例如,"ABC"、"ABOY."、"A"、"1234"都是字符串。

4.標識符

標識符是用戶編程時為常量、變量、模塊、寄存器、端口、連線、示例和begin-end塊等元素定義的名稱。標識符可以是字母、數(shù)字和下劃線“_”等符號組成的任意序列。定義標識符時應(yīng)遵循如下規(guī)則:

(1)首字符不能是數(shù)字。

(2)字符數(shù)不能多于1024個。

(3)大小寫字母是不同的。

(4)不要與關(guān)鍵字同名。

5.關(guān)鍵字

關(guān)鍵字是VerilogHDL預先定義的單詞,它們在程序中有不同的使用目的。例如,用module和endmodule來指出源程序模塊的開始和結(jié)束;用assign來描述一個邏輯表達式等。VerilogHDL的關(guān)鍵字有97個。

6.操作符

操作符也稱為運算符,是VerilogHDL預先定義的函數(shù)名字,這些函數(shù)對被操作的對象(即操作數(shù))進行規(guī)定的運算,得到一個結(jié)果。

操作符通常由1~3個字符組成,例如,“+”表示加操作,“==”(兩個

=

字符)表示邏輯等操作,“=

=

=”(3個

=

字符)表示全等操作。有些操作符的操作數(shù)只有1個,稱為單目操作;有些操作符的操作數(shù)有2個,稱為雙目操作;有些操作符的操作數(shù)有3個,稱為三目操作。

1)算術(shù)操作符(Arithmeticoperators)

常用的算術(shù)操作符包括:+

(加)、-

(減)、*

(乘)、/

(除)、%(求余)。其中%是求余操作符,在兩個整數(shù)相除的基礎(chǔ)上,取出其余數(shù)。例如,5%6的值為5,13%5的值是3。

2)邏輯操作符(Logicaloperators)

邏輯操作符包括:&&(邏輯與)、||

(邏輯或)、!(邏輯非)。

3)位運算(Bitwiseoperators)

位運算是將兩個操作數(shù)按對應(yīng)位進行邏輯操作。位運算操作符包括:~

(按位取反)、&

(按位與)、|

(按位或)、^

(按位異或)、^~

~^

(按位同或)。

在進行位運算時,當兩個操作數(shù)的位寬不同時,計算機會自動將兩個操作數(shù)按右端對齊,位數(shù)少的操作數(shù)會在高位用0補齊。

4)關(guān)系操作符(Pelationaloperators)

關(guān)系操作符包括:<

(小于)、<=

(小于等于)、>

(大于)、>=

(大于等于)。其中,<=

也是賦值運算的賦值符號。

關(guān)系運算的結(jié)果是1位邏輯值。在進行關(guān)系運算時,如果關(guān)系是真,則計算結(jié)果為1;如果關(guān)系是假,則計算結(jié)果為0;如果某個操作數(shù)的值不定,則計算結(jié)果不定(未知),表示結(jié)果是模糊的。

5)等式操作符(Equalityoperators)

等值操作符包括:==

(等于)、!=

(不等于)、===

(全等)、!==

(不全等)。

等值運算的結(jié)果也是1位邏輯值,當運算結(jié)果為真時,返回值1;為假則返回值0。

相等操作符(==)與全等操作符(===)的區(qū)別是:相等運算時,兩個操作數(shù)必須逐位相等,其比較結(jié)果的值才為1(真);如果某些位是不定或高阻狀態(tài),其相等比較的結(jié)果就會是不定值。

全等運算時,對不定或高阻狀態(tài)位也進行比較,當兩個操作數(shù)完全一致時,其結(jié)果的值才為1(真),否則結(jié)果為0(假)。

6)縮減操作符(Reductionoperators)

縮減操作符包括:&(與)、~&(與非)、|

(或)、~|

(或非)、^

(異或)、^~

或~^

(同或)。

運算結(jié)果有1位:1或0。

例如,A=8'b11010001,則&A=0(在與縮減運算中,只有A中的數(shù)字全為1時,結(jié)果才為1);|A=1(在或縮減運算中,只有A中的數(shù)字全為0時,結(jié)果才為0)。

7)轉(zhuǎn)移操作符(Shiftoperators)

轉(zhuǎn)移操作符包括:>>(右移)、<<(左移)。

操作數(shù)>>n;//將操作數(shù)的內(nèi)容右移n位,同時從左邊開始用0來填補移出的位數(shù)

操作數(shù)<<n;//將操作數(shù)的內(nèi)容左移n位,同時從右邊開始用0來填補移出的位數(shù)

例:設(shè)A=8'b11010001,則A>>4的結(jié)果是A=8'b00001101;而A<<4的結(jié)果是A=8'b00010000。

8)條件操作符(Conditionaloperators)

條件操作符的操作數(shù)有3個,其使用格式如下:

操作數(shù)=條件?表達式1:表達式2;

當條件為真(條件結(jié)果值為1)時,操作數(shù)=表達式1;為假(條件結(jié)果值為0)時,操作數(shù)=表達式2。

9)并接操作符(Concatenationoperators)

并接操作符為{}。

并接操作符的使用格式如下:

{操作數(shù)1,操作數(shù)2,…,操作數(shù)n}; //將操作數(shù)1、操作數(shù)2…操作數(shù)n

//并接在一起

例如,將1位全加器進位cout與和sum并接在一起使用,它們的結(jié)果由兩個加數(shù)ina、inb及低位進位cin相加決定,表達式如下:

{cout,sum}=ina+inb+cin;

下面通過一個實例來說明模塊的說明,圖5-2(a)是邏輯功能模塊,圖5-2(b)是用Verilo

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論