第6章VHDL程序設(shè)計_第1頁
第6章VHDL程序設(shè)計_第2頁
第6章VHDL程序設(shè)計_第3頁
第6章VHDL程序設(shè)計_第4頁
第6章VHDL程序設(shè)計_第5頁
已閱讀5頁,還剩70頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章VHDL程序設(shè)計6.1VHDL

目前最主要的硬件記述語言是VHDL和VerilogHDL。VHDL發(fā)展的較早,語法嚴格,而VerilogHDL是在C語言的基礎(chǔ)上發(fā)展起來的一種硬件記述語言,語法較自由。VHDL和VerilogHDL兩者相比,VHDL的書寫規(guī)則比Verilog煩瑣一些,但verilog自由的語法也容易讓少數(shù)初學(xué)者出錯。國外電子專業(yè)很多會在本科階段教授VHDL,在研究生階段教授verilog。從國內(nèi)來看,VHDL的參考書很多,便于查找資料,而VerilogHDL的參考書相對較少,這給學(xué)習(xí)VerilogHDL帶來一些困難。

VHDL的英文全名是VHSIC(VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage),于1983年由美國國防部(DOD)發(fā)起創(chuàng)建,由IEEE(TheInstituteofElectricalandElectronicsEngineers)進一步發(fā)展,并在1987IEEE標準1076”發(fā)布。從此,VHDL成為硬件記述語言的業(yè)界標準之一。此后VHDL在電子設(shè)計領(lǐng)域得到了廣泛應(yīng)用,并逐步取代了原有的非標準硬件記述語言。第6章VHDL程序設(shè)計VHDL作為一個規(guī)范語言和建模語言,后期出現(xiàn)了一些支持該語言的行為仿真器。由于創(chuàng)建VHDL的最初目標是用于標準文檔的建立和電路功能模擬,其目的是在高層次上記述系統(tǒng)和元件的行為。VHDL不僅可以作為系統(tǒng)模擬的建模工具,而且可以作為電路系統(tǒng)的設(shè)計工具;可以利用軟件工具將VHDL源碼自動地轉(zhuǎn)化為文本方式表達的基本邏輯元件連接圖,即網(wǎng)表文件。這種方法顯然對于電路設(shè)計是一個極大的推進。很快,電子設(shè)計領(lǐng)域出現(xiàn)了第一個軟件設(shè)計工具,即VHDL邏輯綜合器,它可以標準地將VHDL的部分語句記述轉(zhuǎn)化為具體電路實現(xiàn)的網(wǎng)表文件。VHDL語言具有很強的電路記述和建模能力,能從多個層次對數(shù)字系統(tǒng)進行建模和記述,從而大大簡化了硬件設(shè)計任務(wù),提高了設(shè)計效率和可靠性。VHDL具有與具體硬件電路無關(guān)和與設(shè)計平臺無關(guān)的特性,并且具有良好的電路行為記述和系統(tǒng)記述的能力,并在語言易讀性和層次化結(jié)構(gòu)化設(shè)計方面,表現(xiàn)了強大的生命力和應(yīng)用潛力。在CPLD的開發(fā)應(yīng)用中,硬件電路構(gòu)成的數(shù)據(jù)必須寫入CPLD芯片內(nèi)部。對硬件電路構(gòu)成的設(shè)計就要使用相應(yīng)的工具。VHDL就能很好的實現(xiàn)硬件設(shè)計。本節(jié)將詳細介紹VHDL的概念及使用。第6章VHDL程序設(shè)計應(yīng)用VHDL進行工程設(shè)計的優(yōu)點是多方面的。1)與其他的硬件記述語言相比,VHDL具有更強的行為記述能力,從而決定了他成為系統(tǒng)設(shè)計領(lǐng)域最佳的硬件記述語言。強大的行為記述能力是避開具體的器件結(jié)構(gòu),從邏輯行為上記述和設(shè)計大規(guī)模電子系統(tǒng)的重要保證。2)VHDL豐富的仿真語句和庫函數(shù),使得在任何大系統(tǒng)的設(shè)計早期就能查驗設(shè)計系統(tǒng)的功能可行性,隨時可對設(shè)計進行仿真模擬。3)VHDL語句的行為記述能力和程序結(jié)構(gòu)決定了他具有支持大規(guī)模設(shè)計的分解和已有設(shè)計的再利用功能。符合市場需求的大規(guī)模系統(tǒng)高效,高速的完成必須有多人甚至多個代發(fā)組共同并行工作才能實現(xiàn)。4)對于用VHDL完成的一個確定的設(shè)計,可以利用EDA工具進行邏輯綜合和優(yōu)化,并自動的把VHDL記述設(shè)計轉(zhuǎn)變成門級網(wǎng)表。5)VHDL對設(shè)計的記述具有相對獨立性,設(shè)計者可以不懂硬件的結(jié)構(gòu),也不必管理最終設(shè)計實現(xiàn)的目標器件是什么,而進行獨立的設(shè)計。第6章VHDL程序設(shè)計6.2VHDL設(shè)計基礎(chǔ)一般情況下,一個完整的VHDL語言程序通常被稱作一個設(shè)計實體,它是VHDL語言設(shè)計中的基本單元。在硬件電路設(shè)計中,設(shè)計實體既可以記述像微處理器那樣的復(fù)雜電路,也可以記述像門電路那樣簡單的電路,從而體現(xiàn)了VHDL語言記述的靈活性。在一個設(shè)計實體中,它通常包括庫(library),程序包(pachage),實體說明(entitydeclaration),結(jié)構(gòu)體(architecturebody)和配置(configuration)5個部分,其中實體說明和結(jié)構(gòu)體是設(shè)計實體所必需的,而庫、程序包和配置不是必需的,他們一般是根據(jù)設(shè)計需要來添加的。這里只講述實體和結(jié)構(gòu)體。第6章VHDL程序設(shè)計6.2.1RTL記述法對即將開發(fā)的系統(tǒng)(System)來講,VHDL能夠?qū)ο到y(tǒng)進行非常抽象的記述(即描述),一般對實體的邏輯電路設(shè)計時通常采用寄存器傳輸記述方法(RegisterTransferLevel)。在使用VHDL對實體記述時,設(shè)計電路由寄存器(Register)和邏輯電路連接接續(xù)而成。簡單用圖表示如圖6.1所示,圖中所有寄存器由相同時鐘驅(qū)動動作稱為同步電路。圖6.1RTL記述法順序框圖第6章VHDL程序設(shè)計6.2.2VHDL記述的基本構(gòu)成由上述RTL記述法,使用VHDL可決定書寫的構(gòu)成、結(jié)構(gòu)?;緲?gòu)成有兩大部分即實體(entity)和結(jié)構(gòu)體(architecture)。如再加入一些相應(yīng)的各種定義,宣言部分即可構(gòu)成完整的全體構(gòu)造圖,如圖6.2所示。以下對各部分進行詳細說明。實體部是定義設(shè)計電路的輸入輸出條件(Port定義),位的長短等參數(shù)。結(jié)構(gòu)體部是設(shè)計電路的邏輯中心。二者關(guān)系及實例如圖6.3所示。

1.宣言,定義什么叫程序包(Pakage)?程序包就是運算符,標準函數(shù)的集合定義,符合IEEE的標準。VHDL語言的程序包括兩個部分:程序包說明部分和程序包包體部分。其中程序包說明主要是對數(shù)據(jù)類型、子程序、常量、元件、屬性和屬性指定進行說明,也就是這里所講的宣言及定義,主要實現(xiàn)程序包的指定。程序包包體部分由程序包說明指定的過程和函數(shù)的程序體組成,即用來規(guī)定程序包的實際功能。宣言及定義是記述時必須使用的。另外還有別的算術(shù)運算符指定。第6章VHDL程序設(shè)計圖6.2全體構(gòu)成圖圖6.3實體和結(jié)構(gòu)體第6章VHDL程序設(shè)計一般經(jīng)常使用的標準格式如下所示必須的LibrarylibraryIEEE;useIEEE.std_logic_1164.all;--基本函數(shù)算術(shù)運算需要的LibraryuseIEEE.std_logic_unsigned.all;--無符號運算函數(shù)

useIEEE.std_logic_arith.all;--算術(shù)運算函數(shù)在以上標準格式中,.all表示該Library內(nèi)部所有函數(shù)使用可能。2.實體說明實體即為該CPLD與外部的輸入輸出端口的定義,也即為CPLD的端口引腳的信號的定義。實體說明主要記述的是一個設(shè)計的外貌。定義CPLD與外部的端口通常定義為Port,其標準格式如下所示。在最后行不需;,且最后由);結(jié)束。entity<entity名>isport(<信號名>{,<信號名>}:<方向><型>;<信號名>{,<信號名>}:<方向><型>;―――――――<信號名>{,<信號名>}:<方向><型>);end<entity名>;第6章VHDL程序設(shè)計在VHDL的實體書寫中,型的指定非常重要。在運算中如果型指定不一致會出現(xiàn)錯誤。在VHDL中,雖然型的指定類型非常多,但經(jīng)常使用的有兩種如下:std_logic:標準邏輯std_logic_vector(ndownto0):n+1位寬另外信號的輸入輸出方向有以下三種選擇

in:輸入

out:輸出

inout:雙向例1:

port(a,b,c:instd_logic;a,b和c為標準邏輯輸入口

y:outstd_logic);y為標準邏輯輸出口例2:配列port(a,b:instd_logic_vector(2downto0);y:outstd_logic_vector(2downto0));第6章VHDL程序設(shè)計另外在實體中還有屬性定義(attribute),以下詳細介紹。在XilinxProjectNavigator中能使用的屬性有很多種,如下attributePIN_ASSIGNofobject:object_typeispin_name;attributeLOCofobject_list:object_typeisfunction_block_name;attributeKEEPofobject_list:object_typeisTRUE;attributeDONT_OPTIMIZEofobject_list:object_typeisTRUE;attributeFAST/SLOWofobject_list:object_typeisTRUE;attributeBUFGofobject_list:object_typeisCLK/OE/SR;attributeINITofobject_list:object_typeisS/R;attributePWR_MODEofobject_list:object_typeisLOW/STD;attributeREGofobject_list:object_typeisCE/TFF;attributeTNMofobject_list:object_typeisstring;在屬性定義前還必須定義attributeattribute_name:string;

關(guān)于對Pin端口的配置和其屬性定義,可由下例詳細說明。第6章VHDL程序設(shè)計例3:A,B,Y端口分配至1,2,3Pin端口

libraryieee;useieee。std_logic_1164.all;entityEx1isport(A:instd_logic;B:instd_logic;Y:outstd_logic);attributepin_assign:string;attributepin_assignofA:signalis"1";attributepin_assignofB:signalis"2";attributepin_assignofY:signalis"3";endarchitectureSAMPLEofEx1isbeginY<=AnandB;endSAMPLE;第6章VHDL程序設(shè)計

TTTTTTVTIIIIIICIEEEybaEEECE--------------------------------/6543214443424140\TIE|739|TIETIE|838|TIETIE|937|TIEGND|1036|TIETIE|11XC9536-5-PC4435|TIETIE|1234|TIETIE|1333|TIETIE|1432|VCCTDI|1531|GNDTMS|1630|TDOTCK|1729|TIE\1819202122232425262728/--------------------------------TTTVTGTTTTTIIICINIIIIIEEECEDEEEEE第6章VHDL程序設(shè)計結(jié)構(gòu)體設(shè)計實體中的結(jié)構(gòu)體主要用來記述設(shè)計的行為和結(jié)構(gòu),即用來記述設(shè)計實體的具體功能。結(jié)構(gòu)體(Architecture)是CPLD設(shè)計的中心工作,它是CPLD內(nèi)部邏輯實際動作的設(shè)計。一般來說,結(jié)構(gòu)體記述了實體硬件的結(jié)構(gòu)、硬件的類型和功能、元件的互連關(guān)系、信號的傳輸和變幻以及動態(tài)行為等方面。在architecture內(nèi)有很多種記述,也有很多規(guī)定。其基本的格式如下:architecture<architecture名>of<entity名>is<定義文>begin<VHDL程序>end<architecture名>;其中定義文對信號signal名、常數(shù)、函數(shù)component等進行定義。例4說明它的信號signal定義文。例4:libraryieeeuseieee.std_logic_1164.all;

entityEx2isport(A:instd_logic;B:instd_logic;C:instd_logic;D:instd_logic;Y:outstd_logic);end;第6章VHDL程序設(shè)計architectureSAMPLEofEx2issignalS0,S1:std_logic;beginS0<=AnandB;S1<=S0nandC;Y<=S1andD;endSAMPLE在例4中,S0和S1僅為CPLD內(nèi)部使用的信號,另外可看到信號的定義與Port的定義一樣需設(shè)置類型。6.2.3VHDL程序的記述方法

VHDL程序的記述方法有兩種,即同時處理(并列處理)集合和順序處理(過程處理)集合。根據(jù)一般開發(fā)經(jīng)驗,同時處理文比較適合于簡單的組合邏輯電路的設(shè)計,而順序處理文適合于復(fù)雜的組合邏輯電路設(shè)計。以下小節(jié)將分別介紹這兩者的特點和使用。同時處理(并列處理)文的處理與時間無關(guān)同時處理。順序處理則根據(jù)程序的次順進行處理。無論是書寫同時處理還是順序處理都必須付合書寫文法規(guī)定。下面先介紹這些規(guī)定。第6章VHDL程序設(shè)計1.說明性文字在定義文中如需書寫說明文字時,如下列所示書寫2個以上–記號即可在記號后至行尾書寫說明文。用此方法,可從行開頭,行中間任何地方自由地加入說明文。––<英文說明性文字>例––SelectClock––DecimalCounterBlock等2.標識名在書寫VHDL程序時,均能對信號等定義名稱。標識及定義名稱的限制如下(1)大小寫無區(qū)別(2)最初文字必為英文字(3)能使用的文字限英文字母,數(shù)字等(4)VHDL專用語使用禁止3.信號的類型和文字常數(shù)的用法在VHDL中使用的信號種類除1、0外還有不定(X)、高阻(Z)等近10種類型。在本書中僅使用了1、0、不定(X)和高阻(Z)等4種。在用文字列來表示信號的種類時,請參照以下說明。第6章VHDL程序設(shè)計在采用X表示信號不定時,文字常數(shù)就有大小寫區(qū)別。在表示不定信號時請一定使用大寫文字X。同樣,Z也是使用大寫文字。如下所示例1位信號′0′′1′′X′′Z′

多位信號′0000101′′XXXXXXXX′′ZZZZ′6.2.4信號代入和運算符

VHDL文中進行信號代入時使用<=記號。如下例所示信號的代入和代入運算結(jié)果的處理文。例clkout<=inclk;A<=B+C;

在實體中定義的輸出(out)端口(port)輸出信號時,該信號在過程中并非直接輸出,而是使用內(nèi)部定義的信號進行輸出。如下例所示,這樣做使得的開發(fā)軟件工具能自動在外部信號端口附加緩沖器(Buffer),目的是可獲的穩(wěn)定的輸出信號。

Port名<=signal名;

例signal_out<=int_sig;

設(shè)計書寫VHDL文可使用的運算符有如表所示4種,即邏輯運算符、關(guān)系運算符、算術(shù)運算符和連接子。請注意它們的使用特點和限制。第6章VHDL程序設(shè)計

分類

記號

運算內(nèi)容

備注邏輯運算符not否定std_logic_vector型時每位單獨運算and邏輯積or邏積和nand邏輯積的否定nor邏輯和的否定xor排它邏輯和關(guān)系運算符=等于std_logic_vector型時位列進行比較/=不等于>大于<小于>=大于等于<=小于等于算術(shù)運算符+加不使用/,mod(剩余)注意乘算術(shù)運算-減*乘連接子&連接std_logic_vector型時使用表運算符集合第6章VHDL程序設(shè)計1.算術(shù)運算符在std_logic和std_logic_vector使用時由于沒有定義標準,所以算術(shù)運算符不能使用。在此種類型下如要使用算術(shù)運算符,需要追加軟件運算庫如下

useIEEE.std_logic_unsigned.all;在追加了以上庫(Library)后,矢量(Vector)變量和Scalar(通常的數(shù)值)都能進行各種運算。2.乘、除運算實際設(shè)計中由于均為邏輯電路,在用除和Mod(剩余)算術(shù)運算時分母均是2冪,所以除實際上是位移(BitShift)動作。于是通常不使用除算術(shù)運算符。還有請注意在使用*(乘運算),在位較長時單純的計算會產(chǎn)生很長的邏輯,這在實際實裝時會出現(xiàn)困難,所以在特殊情況外也不使用。6.2.5矢量型(Vector)在使用std_logic_vectorLibrary時,由于是多位幅被稱為矢量型。在下例中通過(ndowntom)來指定位幅。例A,B:instd_logic_vector(7downto0);(定義8位幅外部數(shù)據(jù)總線A和B)signalDA,DB:std_logic_vector(15downto0);(定義16位幅的內(nèi)部數(shù)據(jù)DA和DB)

在實際運算中由于會對每位進行運算,所以在對不同位幅的數(shù)據(jù)運算實行時會產(chǎn)生錯誤(Error)。但是可以有以下指定位幅運算。例如上例中進行加法運算時只使用長位幅數(shù)據(jù)的一部分與短數(shù)據(jù)匹配也可進行運算。如下例所示:第6章VHDL程序設(shè)計

例B<=DB(7downto0)+A

另外也可使用連接算符增加位符使短位符數(shù)據(jù)匹配長位幅數(shù)據(jù),這樣處理后也可進行運算。例上例中A和DB的加算中,由于A的位幅不足,可用定數(shù)的8位幅與A相連接。如下示:例DA<=DB+("00000000"&A)

也可從數(shù)據(jù)中取出特定的位進行處理。比如從DB數(shù)據(jù)中取之最上位,把該位信號作為外部信號FULL取出。命令如下:例FULL<=DA(15)進程(Process)

在VHDL語言的基本描述語句中,進程語句是設(shè)計人員使用最為頻繁的語句之一。進程的內(nèi)部語句是順序描述語句,而進程語句本身是一種并行描述語句,在VHDL程序描述中如前所述有同時處理和順序處理。經(jīng)常在設(shè)計復(fù)雜邏輯電路時會使用順序處理。把順序處理的處理結(jié)果作為同時處理時經(jīng)常會使用進程(Process)。進程就作為一個集合體被看作同時處理式。第6章VHDL程序設(shè)計CASE除上所述IF條件分支文以外還有另一種CASE條件分支文。使用CASE條件分支文可實現(xiàn)多方向的條件分岐。其基本記述格式如下所示CASE記述

case<式>iswhen值=>順序處理文;when值:值:值=>順序處理文;when值to值=>順序處理文;―――――――――――whenothers=>式;endcase;如上case所示,雖然全部條件式被同時執(zhí)行,但同一個值不能多處使用。下面介紹具體IF和CASE的使用例如下。例5:3/8輸出解碼器(Demultiplexer如74LS138等)第6章VHDL程序設(shè)計

TTTTTTVTIIIIIICIEEEybaEEECE--------------------------------/6543214443424140\TIE|739|TIETIE|838|TIETIE|937|TIEGND|1036|TIETIE|11XC9536-5-PC4435|TIETIE|1234|TIETIE|1333|TIETIE|1432|VCCTDI|1531|GNDTMS|1630|TDOTCK|1729|TIE\1819202122232425262728/--------------------------------TTTVTGTTTTTIIICINIIIIIEEECEDEEEEE

圖6.4XC9536引腳配置

圖6.5內(nèi)部邏輯圖

第6章VHDL程序設(shè)計020begin021IN_DATA<=C&B&A;--Bindingvector022process(IN_DATA,G1,G2A,G2B)begin023if(G1='1'andG2A='0'andG2B='0')then--Judgementofgatecondition024caseIN_DATAis--Judgementofinputdata025when"000"=>Y<="11111110";026when"001"=>Y<="11111101";027when"010"=>Y<="11111011";028when"011"=>Y<="11110111";029when"100"=>Y<="11101111";030when"101"=>Y<="11011111";031when"110"=>Y<="10111111";032when"111"=>Y<="01111111";033whenothers=>Y<="XXXXXXXX";--Illegalcondition034endcase;035else036Y<="11111111";--GateOFFcondition037endif;038endprocess;039endSAMPLE;第6章VHDL程序設(shè)計例5完成了3位二進制位輸入到8輸出的解碼器設(shè)計,其功能如74LS138的集成芯片。上例僅是一個簡單練習(xí),實際使用時74LS138的使用較經(jīng)濟。圖為引腳配置圖,圖為內(nèi)部邏輯圖,下面對上述VHDL程序作些具體說明如下。行內(nèi)容006輸出使用標準邏輯8配置矢量形式(vector)。

本設(shè)計使用下降(Downto)順序排列(7->6->5->4->3->2->1->0)。

也可使用上升順序(0->1->2->3->4->5->6->7),即能使用to形式。

定義使用那種順序后,在整個設(shè)計中,需要時刻意識到這一點不要出錯。015把輸出Y配置給不同的芯片引腳Pin。019為進行內(nèi)部邏輯判定而定義的內(nèi)部信號。

使用矢量Downto配置定義法。021內(nèi)部定義的信號與輸入接續(xù)。因輸入為1Bit,使用&來把C,B和A它們結(jié)合起來。022Process文中的輸入信號指定,IN_DATA數(shù)據(jù)3Bits和GATE輸入(G1,G2A,G2B)。023如果GATE條件全1時,進入023行命令以下的邏輯處理。024-034根據(jù)IN_DATA的條件形成輸出(Y)狀態(tài)邏輯。035如GATE有一個為0時的處理。036輸出(Y)全設(shè)置為1的邏輯第6章VHDL程序設(shè)計6.2.7同步電路設(shè)計

在實際CPLD使用中,基本上采用同步邏輯電路設(shè)計。為避免邏輯電路動作的不協(xié)調(diào),同步電路即是與時鐘(Clock)同步動作以形成穩(wěn)定的邏輯電路。根據(jù)此點,在使用VHDL記述時比須要有意識地注意進行同步電路設(shè)計。具體在設(shè)計中首先在過程記述內(nèi)需記述時鐘上升沿或下降沿動作記述。它的記述格式如下。同步電路設(shè)計--SycronousCircuitprocess(clk)beginif(clk′eventandclk=′1′)then----順序處理文的記述

--endif;endprocess;

用例6來具體說明同步電路的設(shè)計。例6是4位二進制計數(shù)器的VHDL設(shè)計記述,它采用CLK時鐘上升沿觸發(fā)同步動作。此中復(fù)位(RESET)信號為非同步強制復(fù)位信號,使輸出為全0000。這樣做雖能使RESET信號也與CLK時鐘同步,但在無CLK時鐘信號時需要用RESET信號復(fù)位時采用非同步方式更好。在對計數(shù)器記述時需使用算術(shù)運算符所以在最初追加有運算Library。由于計數(shù)器的輸出需要通過CPLD端口輸出,在最后有內(nèi)部輸出COUNT_IN記述由COUNT<=COUNT_IN來輸出。另外在外部輸出端口還插入有緩沖器電路。第6章VHDL程序設(shè)計例6:4位二進制計數(shù)器libraryieeeuseieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycounterisport(CLK,RESET:instd_logic;COUNT:outstd_logic_vector(3downto0));endentity;architectureRTLofcounterissignalCOUNT_IN:std_logic_vector(3downto0);beginprocess(CLK,RESET)beginif(RESET=′1′)thenCOUNT_IN<="0000";elsif(CLK′eventandCLK=′1′)thenCOUNT_IN<=COUNT_IN+′1′;endifendprocessCOUNT<=COUNT_IN;endRTL;第6章VHDL程序設(shè)計例7是移位寄存器的設(shè)計,它的設(shè)計方法請見如下VHDL記述,該設(shè)計為16位的內(nèi)部移位寄存器,對外不輸出任何信號。移位寄存器的VHDL記述中,Clock時鐘sclk的上升沿時16位寄存器的低15位均前移一位。最低位是0或1由外部輸入數(shù)據(jù)決定。為完成移位寄存器的設(shè)計,VHDL記述中采用了矢量Slice記述和位的連接子記述。另外,復(fù)位信號為1時對移位寄存器的全16位清0。例7:16位內(nèi)部移位寄存器VHDL記述例

entityshftregisport(sdata:instd_logic;sclk:instd_logic;reset:instd_logic);endentity;architectureRTLofshftregissignalsn:std_logic_vector(15downto0)begin--shiftregisterprocess(sclk,reset)beginif(reset=′1′)thensn<="00000";elsif(sclk′eventandsclk=′1′)thensn<=sn(14downto0)&sdata;endif;endprocess;endRTL;第6章VHDL程序設(shè)計6.2.8Component記述

如經(jīng)常使用的C++,F(xiàn)ortran等程序設(shè)計時常用子程序來設(shè)計多處需要完成的相同的功能。在VHDL記述中同樣可使用如子程序的部分,對此可獨立設(shè)計記述。與很多設(shè)計語言一樣,這樣設(shè)計同樣可以節(jié)省設(shè)計時間,閱讀容易,且可靠性好。在結(jié)構(gòu)體的層次化設(shè)計中,采用結(jié)構(gòu)記述方式就是通過條用庫中的元件或者已設(shè)計好的模塊來完成設(shè)計實體功能的記述。在機構(gòu)體中,功能記述像網(wǎng)表一樣來標識元件(或者模塊)和元件(或者模塊)之間的互連。當設(shè)計人員引用庫中不存在的元件時,必須首先進行元件的創(chuàng)建,其次將其放在工作庫中,接下來便可以通過條用工作庫來引用元件。在VHDL語言中,引用元件或者模塊的說明采用Component語句,它的作用就是在結(jié)構(gòu)體的說明部分說明引用的元件或者模塊。

Component記述接構(gòu)也稱構(gòu)造化記述,下面介紹其定義和記述規(guī)定等。這里需要注意的是,如果所調(diào)用的模塊在元件庫中不存在,設(shè)計人員必須首先進行元件的創(chuàng)建,然后將其放入工作庫中,最后通過工作庫來引進該元件。第6章VHDL程序設(shè)計定義為使用Component記述,首先需要對定義Component。在前介紹architecture定義時,雖說明了需僅定義信號名,在需使用Component時還需追加定義Component。Component的構(gòu)造如實體的構(gòu)造相同如下。Component記述構(gòu)造

component<component名>port(<信號名>{,<信號名>}:<方向><型>;<信號名>{,<信號名>}:<方向><型>;――――――――――――――<信號名>{,<信號名>}:<方向><型>);endcomponent;在此如做以上追加定義后,在后續(xù)的VHDL程序記述中中即可用如ConponentInstance的形式使用。第6章VHDL程序設(shè)計ComponentInstance記述實際使用時用以下的記述文Label名:Component名portmap(信號名,…);在此Label名是使用Component時附加名,在結(jié)構(gòu)體定義中必須唯一。在portmap中定義的信號名及順序均應(yīng)與Component記述中定義的信號和順序要相對應(yīng)。也就是在相同的Component中可輸入完全不同的輸入輸出信號就會產(chǎn)生完全不同的設(shè)計,其電路結(jié)構(gòu)都可不一樣。對Component的使用法如下例所示。在下例中,half_adder為定義的Component名,使用該Component設(shè)計生成full_adder電路。記述中,U0和U1為兩處使用該Component的Label名。half_adder的處理文由別的VHDL記述文件構(gòu)成。Component例

libraryIEEEuseIEEE.STD_LOGIC_1164.ALL;entityfulladderisport(A:instd_logic;B:instd_logic;CRY:instd_logic;S:outstd_logic;CO:outstd_logic;endfulladder;

第6章VHDL程序設(shè)計architectureRTLoffulladderiscomponenthalf_adderport(A,B:instd_logic;S,CO:outstd_logic);endcomponent;signalCO0,S0,CO1:instd_logic;beginU0:half_adderportmap(A,B,S0,CO0);U1:half_adderportmap(S0,CRY,S,CO1);CO<=CO0orCO1;endRTL6.2.9數(shù)據(jù)的類型及類型變換1.數(shù)據(jù)的種類在VHDL記述中,信號定義(signal)、變量定義(variable)、常數(shù)定義(constance)時均需要指定數(shù)據(jù)類型。在使用時如采用不同的數(shù)據(jù)類型代入時會產(chǎn)生Errors。VHDL使用中有固定的標準數(shù)據(jù)類型,也有可以由設(shè)計者自己定義制作的數(shù)據(jù)類型。為使用方便,VHDL也提供數(shù)據(jù)類型變換用的函數(shù)。第6章VHDL程序設(shè)計2.VHDL標準數(shù)據(jù)類型在表中列有VHDL可使用的標準數(shù)據(jù)類型。表6.2標準數(shù)據(jù)類型表數(shù)據(jù)類型具體內(nèi)容說明

Integer

整數(shù)32位長,可表示范圍

-2147483647~2147483646

Real

浮動小數(shù)點

Bit

邏輯數(shù)字

0

1Bit_Vector

Bit矢量

"010010"

"01011010"

Boolean

邏輯

真True

假False

Character

ASCII碼

Time

時間等物理量類型

fs、ps、ns、us、ms、sec、min、hrSeveritylevel

文字Message類型

NOTE、WARNING、ERROR、FAILURE

Natural、Positive

Integer的子類型

0=<NATURAL、0<POSITIVE

String

文字列第6章VHDL程序設(shè)計3.設(shè)計者自定義數(shù)據(jù)類型VHDL允許設(shè)計者自定義需要使用的數(shù)據(jù)類型。使用時通常需用type,subtype等定義。下面逐一介紹它們的使用。1)型定義type使用type文來完成新的型定義。它的記述有以下幾種。<列舉type>type數(shù)據(jù)型名is(要素,要素,…)

例一星期為單位的型定義WEEKtypeWEEKis(SUN,MON,TUE,WED,THU,F(xiàn)RI,SAT)例std_logic的定義該std_logic的定義是最常用的型。關(guān)于它的IEEE的Package中就有如下型的定義typestd_logicis(′U′,′X′,′0′,′1′,′Z′,′W′,′L′,′H′,′-′);<Integer類型時>用Integer類型range對值的范圍進行指定。如不指定,就自動使用32位長,使的作成的邏輯電路規(guī)模龐大。type數(shù)據(jù)型名isintegerrangeitoj;

例BCD型digit定義typedigitisintegerrange0to9;第6章VHDL程序設(shè)計3)配列型配列是新的型定義的一種。它可把同樣型的數(shù)據(jù)歸納在一起定義作為一種新的型。它的記述格式如下:type數(shù)據(jù)型名isarray范圍of原型名;在上記述格式中,范圍指定項有多種型可使用。如不指定型就自動作為integer指定。例typeWORDisarray(1to8)ofstd_logic;typeWORD2isarray(integer1to8)ofstd_logic;

例std_logic_vector的型定義。該定義在IEEE的std_logic_1164中有以下記述定義

typestd_logic_vectorisarray(Naturalrange<>)ofstd_logic;<多次元配列>――對多個范圍進行組合來指定,它就變成了多次元配列。例2次元配列例

typememarrayisarray(0to5,7downto0)ofstd_logic;第6章VHDL程序設(shè)計

例使用上記所用型的ROM作成

constantROMDATA:memarray:=((′0′,′0′,′0′,′0′,′0′,′0′,′0′,′0′),(′0′,′1′,′1′,′1′,′0′,′0′,′0′,′1′),(′0′,′0′,′0′,′0′,′0′,′1′,′0′,′1′),(′1′,′1′,′0′,′0′,′0′,′1′,′1′,′0′),(′1′,′1′,′1′,′1′,′1′,′1′,′1′,′1′),

<配列的多重定義>

在型定義時,由于原型的配列就形成新的配列。此新的配列就稱為配列的多重定義。如下例所示,在std_logic_vector的型中對WAVE型進行了定義。對WAVE的元型又定義了新的配列ROM。例中采用了該新ROM型來定義了定數(shù)Sine,然后它的初值用:=以后定義。形成了6位長,64個并列的配列。該配列6位的分解能力指定了正弦的1周期的數(shù)據(jù)量。

第6章VHDL程序設(shè)計

例多重定義例Sin正弦4.型變換嚴格來講,VHDL記述要求使用的型一致。不同型的變量運算,代入均被視為非法。所以在代入、運算時對不同的型變量需采用型變換。在VHDL中規(guī)范了型的變換文法及型變換函數(shù)供設(shè)計人員使用。具體使用的型變換函數(shù)如表所示。第6章VHDL程序設(shè)計表6.3型變換函數(shù)第6章VHDL程序設(shè)計6.3設(shè)計開發(fā)手段和開發(fā)流程

基于VHDL的CPLD應(yīng)用開發(fā)是目前廣泛采用的硬件開發(fā)手段,它采用軟件的方法來記述電子系統(tǒng)的邏輯功能、電路結(jié)構(gòu)和連接關(guān)系。VHDL作為電子設(shè)計主流硬件的記述語言,具有很強的電路記述能力,能從多個層次對數(shù)字系統(tǒng)進行建模和記述,從而大大簡化了硬件設(shè)計任務(wù),提高了設(shè)計效率和可靠性。VHDL支持各種模式的設(shè)計方法,這樣設(shè)計者可以專心致志于其功能的實現(xiàn),而不需要對不影響功能的與工藝有關(guān)的因素花費過多的時間和精力。傳統(tǒng)的電子設(shè)計技術(shù)通常是自下而上的設(shè)計方法,即首先確定系統(tǒng)的最底層的電路模塊或元件的結(jié)構(gòu)和功能,然后根據(jù)主系統(tǒng)的功能要求,將其組合成更大的功能模塊,使它們的結(jié)構(gòu)和功能滿足高層次系統(tǒng)的要求。依此流程,逐步向上遞推,直到完成整個目標系統(tǒng)的設(shè)計。由于設(shè)計只能采用系統(tǒng)仿真儀、邏輯分析儀和示波儀進行仿真和調(diào)試。因此,只有在系統(tǒng)設(shè)計完成以后才能進行仿真和調(diào)試。系統(tǒng)存在的問題只有在設(shè)計后期才能發(fā)現(xiàn)。一旦考慮不周,往往需要全部重新設(shè)計,使設(shè)計周期大大增加。第6章VHDL程序設(shè)計

對于專用電路的設(shè)計,則是根據(jù)系統(tǒng)的功能要求,首先從繪制硅片版圖開始,逐級向上完成版圖級、門級、RTL級、行為級、功能級,直至系統(tǒng)級的設(shè)計。在這個過程中,任何一級發(fā)生問題,通常都不得不返工重來。在硬件電路設(shè)計應(yīng)用中,自頂向下的設(shè)計方法就是在整個設(shè)計流程中各設(shè)計環(huán)節(jié)逐步求精的過程。一個項目的設(shè)計過程包括從自然語言說明到VHDL的系統(tǒng)行為記述、系統(tǒng)的分解、RTL模型的建立、門級模型產(chǎn)生,到最終的可以物理布線實現(xiàn)的底層電路,就是從高抽象級別到低抽象級別的整個設(shè)計周期。后端設(shè)計還必須包括涉及硬件的物理結(jié)構(gòu)實現(xiàn)方法和測試(仍然利用計算機完成)。應(yīng)用VHDL進行自頂向下的設(shè)計,就是使用VHDL模型在所有綜合級別上對硬件設(shè)計進行說明、建模和仿真測試。主系統(tǒng)及子系統(tǒng)最初的功能要求在VHDL里體現(xiàn)為可以被VHDL仿真程序驗證的可執(zhí)行程序。由于綜合工具可以將高級別的模型轉(zhuǎn)化為門級模型,所以整個設(shè)計過程基本是由計算機自動完成的。人為介入的方式主要是根據(jù)仿真的結(jié)果和優(yōu)化的指標來控制邏輯綜合的方式和指向。因此,在設(shè)計周期中,要根據(jù)仿真的結(jié)果進行優(yōu)化和升級,以及對模型及時的修改,以改進系統(tǒng)或子系統(tǒng)的功能,更正設(shè)計錯誤,提高目標系統(tǒng)的工作速度,減小面積耗用,降低功耗和成本等?;蛘邌⒂眯录夹g(shù)器件或新的IP核。在這些過程中,由于設(shè)計的下一步是基于當前的設(shè)計,即使發(fā)現(xiàn)問題或作新的修改而需從頭開始設(shè)計,也不妨礙整體的設(shè)計效率。在CPLD設(shè)計應(yīng)用中,采用自上而下的設(shè)計方法,即從系統(tǒng)總體出發(fā),自上而下地逐步將設(shè)計內(nèi)容細化,最后完成系統(tǒng)設(shè)計。第6章VHDL程序設(shè)計

根據(jù)系統(tǒng)對硬件的要求,詳細編制技術(shù)規(guī)格書,并根據(jù)技術(shù)規(guī)格書,對系統(tǒng)的功能進行細化,合理地劃分功能模塊,并畫出系統(tǒng)的功能框圖。它包括如下設(shè)計階段。

1.提出設(shè)計說明書,即用自然語言表達系統(tǒng)項目的功能特點和技術(shù)參數(shù)等。

2.建立VHDL行為模型,這一步是將設(shè)計說明書轉(zhuǎn)化為VHDL行為模型。在這一項目的表達中,可以使用滿足IEEE標準的VHDL的所有語句而不必考慮可綜合性。這一建模行為的目標是通過VHDL仿真器對整個系統(tǒng)進行系統(tǒng)行為仿真和性能評估。

3.VHDL行為仿真。這一階段可以利用VHDL仿真器(如ModelSim)對頂層系統(tǒng)的行為模型進行仿真測試,檢查模擬結(jié)果,繼而進行修改和完善。這一過程與最終實現(xiàn)的硬件沒有任何關(guān)系,也不考慮硬件實現(xiàn)中的技術(shù)細節(jié),測試結(jié)果主要是對系統(tǒng)純功能行為的考察,其中許多VHDL的語句表達主要為了方便了解系統(tǒng)在各種條件下的功能特性,而不可能用真實的硬件來實現(xiàn)。

4.VHDL-RTL級建模。如上所述,VHDL只有部分語句集合可用于硬件功能行為的建模,因此在這一階段,必須將VHDL的行為模型表達為VHDL行為代碼(或稱VHDL-RTL級模型)。

5.前端功能仿真。在這一階段對VHDL-RTL級模型進行仿真,稱為功能仿真。盡管VHDL-RTL級模型是可綜合的,但對它的功能仿真仍然與硬件無關(guān),仿真結(jié)果表達的是可綜合模型的邏輯功能。

6.邏輯綜合。使用邏輯綜合工具將VHDL行為級記述轉(zhuǎn)化為結(jié)構(gòu)化的門級電路。在ASIC設(shè)計中,門級電路可以由ASIC庫中的基本單元組成。第6章VHDL程序設(shè)計7.測試向量生成。這一階段主要是針對ASIC設(shè)計的。FPGA設(shè)計的時序測試文件主要產(chǎn)生于適配器。對ASIC的測試向量文件是綜合器結(jié)合含有版圖硬件特性的工藝庫后產(chǎn)生的,用于對ASIC的功能測試。

8.功能仿真。利用獲得的測試向量對ASIC的設(shè)計系統(tǒng)和子系統(tǒng)的功能進行仿真。

9.結(jié)構(gòu)綜合。主要將綜合產(chǎn)生的表達邏輯連接關(guān)系的網(wǎng)表文件,結(jié)合具體的目標硬件環(huán)境進行標準單元調(diào)用、布局、布線和滿足約束條件的結(jié)構(gòu)優(yōu)化配置,即結(jié)構(gòu)綜合。

10.門級時序仿真。在這一級中將使用門級仿真器或仍然使用VHDL仿真器(因為結(jié)構(gòu)綜合后能同步生成VHDL格式的時序仿真文件)進行門級時序仿真,在計算機上了解更接近硬件目標器件工作的功能時序。對于ASIC設(shè)計,被稱為布局后仿真。在這一步,將帶有從布局布線得到的精確時序信息映射到門級電路重新進行仿真,以檢查電路時序,并對電路功能進行最后檢查。這些仿真的成功完成稱為ASICsignoff。接下去的工作就可以將設(shè)計提供給硅鑄造生產(chǎn)工序了。

11.硬件測試。這是對最后完成的硬件系統(tǒng)(如ASIC或FPGA)進行檢查和測試。與其他的硬件記述語言相比,VHDL具有較強的行為仿真級與綜合級的建模功能,VHDL能遠離具體硬件,基于行為記述方式的硬件記述語言恰好滿足典型的自頂向下設(shè)計方法,解決現(xiàn)代電子設(shè)計應(yīng)用中出現(xiàn)的各類問題。第6章VHDL程序設(shè)計

作為一個基于PIC的應(yīng)用系統(tǒng),外圍電路采用CPLD實現(xiàn),就必然涉及對CPLD的設(shè)計方法、CPLD內(nèi)部存儲器的編程問題及CPLD的開發(fā)工具等。這其中一個合理的CPLD的開發(fā)順序猶為重要。由于從最初的系統(tǒng)PIC,CPLD的功能分擔(dān)考慮到最終對CPLD編程寫入均可在CPLD的綜合開發(fā)軟件環(huán)境中實現(xiàn),這個CPLD綜合開發(fā)環(huán)境,(有MAXPlusII、WebPACK3.1WP1.X版)。根據(jù)軟件環(huán)境,對于CPLD的開發(fā),總結(jié)了以下如圖6.6所示開發(fā)順序,這里以供參考。

圖6.6CPLD開發(fā)順序流圖第6章VHDL程序設(shè)計6.4開發(fā)工具(WebPack)的使用法

本節(jié)中從簡單的模塊實例出發(fā)介紹Xilinx公司的CPLD開發(fā)環(huán)境(XilinxProjectNavigator)的使用。其開發(fā)環(huán)境功能很多,且新版本的開發(fā)軟件也在不斷出現(xiàn),但基本使用是相同的。在此僅介紹它的最基本的功能使用。使用開發(fā)環(huán)境軟件

ApplicationVersion:build+D–20+06.4.1XilinxProjectNavigate啟動首先使用啟動開發(fā)SoftwareXilinxProjectNavigate,后進入以下Windows窗口,如圖所示。在該窗口中有多個小窗口,如SoursesinProject(表示Device芯片名,Sourse模式名等),ProcessesforCurrentSourse(各種功能選擇窗口),右側(cè)的HDLEditorworkspacewindow(表示Sourse碼窗口)及最下面的Transcriptwindow(處理過程Log窗口)。這里以10輸入與邏輯電路設(shè)計為例講解軟件工具的使用。其設(shè)計的邏輯電路外部圖如圖所示。第6章VHDL程序設(shè)計圖6.710輸入與邏輯電路

圖6.8XilinxProjectNavigate啟動界面

第6章VHDL程序設(shè)計5.6.2目標項目(Projector)的生成

如開發(fā)綜合環(huán)境MPLABIDE一樣,設(shè)計開發(fā)項目由Projector來綜合管理各種設(shè)計作業(yè)。在此基礎(chǔ)上即可在設(shè)計CPLD的設(shè)計開發(fā)的各環(huán)節(jié)。

1.項目子目錄生成在進行設(shè)計開發(fā)前事先生成存放文件的子目錄。這樣以后使用會更加方便。子目錄名生成如C:/MP_XLINX/Project/Test/test/,在其中存放相關(guān)文件,具體如圖所示。圖6.9Project子目錄生成第6章VHDL程序設(shè)計1.項目生成方法可使用下方法生成新的Project。首先打開File后選NewProject后,會彈出Project文件File生成窗口如下。在此窗口中,有Projectname和Project存放子目錄場所選擇,使用Device芯片及使用語言選項等設(shè)置。在完成相應(yīng)設(shè)置后,在ProjectNavigator主菜單窗口中的SourseinProject小窗口中表示如下。

圖6.10項目生成

第6章VHDL程序設(shè)計2.項目標題的登錄在主菜單窗口如圖中選擇Sourse到Properties或在上窗口的Untitled處用鼠標雙激后彈出以下登錄窗口。在上登錄窗口中設(shè)定title為test后,在主菜單窗口中的SourseProject小窗口中Untitled變?yōu)閠est。窗口顯示如下圖。

圖6.11項目標題的登錄

圖6.12ProjectTitle設(shè)置完成后的窗口

第6章VHDL程序設(shè)計6.4.3源文件的生成在主菜單中選Sourse到New選擇或菜單中第二行第5個Mark用鼠標雙激后彈出Sourse類型設(shè)置窗口如圖所示。在此表示的窗口中請選擇VHDLModule。如使用其它種開發(fā)語言時請選擇相應(yīng)語言。在輸入完文件名后,確認存儲Location后請選Next選項。圖6.13 源文件生成界面第6章VHDL程序設(shè)計

在上設(shè)置窗口中完成選Next選項后,彈出以下DefineVHDLSourse設(shè)置窗口如圖所示。

圖6.14VHDL源程序定義窗口

第6章VHDL程序設(shè)計

在以上設(shè)置窗口中的EntityName和ArchitectureName中輸入相應(yīng)名。此時就能指定各Port端口。在的例中將在VHDL記述文中指定Port端口。所以在此設(shè)置窗口中不設(shè)定后選Next選項。選后彈出以下窗口,在此窗口中顯有的各種設(shè)置。請確認好自己的設(shè)置無誤后請選擇Finish后退出。此時在ProjectNavigator的主菜單窗口中的右小窗口HDLEditorworkspacewindow中出現(xiàn)可書寫的Sourse碼輸入窗口。另外可在主菜單中View菜單中設(shè)置對各小窗口的顯示狀態(tài)進行表示或非表示控制。圖6.15源文件信息窗口

圖6.16主菜單窗口

第6章VHDL程序設(shè)計

在以上主菜單窗口圖中的各項目小窗口大小均可按需要設(shè)置。如果需要擴大Soursecode窗口可選擇View項的ProjectWorkspace點激后擴大。也可點激主菜單窗口的第二行第12個標志(mark)來實現(xiàn)。如想把SourseCode窗口擴大到占滿全屏?xí)r可點激該小窗口的右上角的最大最小設(shè)置Mark來實現(xiàn)。在想恢復(fù)元窗口格式時可使用主菜單中Window選項菜單。Casecade選項可使各小窗口重疊表示。

圖6.17程序工作窗口

第6章VHDL程序設(shè)計TileHorizontally選項可示各小功能窗口上下并列表示。TileVertically選項可使各功能小窗左右并列表示。圖為設(shè)置完成后的程序工作窗口。關(guān)于以上源代碼(Soursecode)窗口中的VHDL記述內(nèi)容的具體說明如下:

第6章VHDL程序設(shè)計

因為本示例是要設(shè)計10輸入的AND邏輯電路。作為設(shè)計VHDL記述實體和結(jié)構(gòu)體的記述請見下VHDL記述中深色記述部分。libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_STD_LOGIC_UNSIGNED.ALL;entitytestisport(

a,b,c,d,e,f,g,h,i,j:instd_logic;y:outstd_logic);endtest;architecturebehavioraloftestisbegin

y<=aandbandcanddandeandfandgandhandiandj;endbehavioral;程序記述的檢查在開發(fā)軟件中還有對源代碼(SourseCode)中VHDL記述檢查功能。它能自動完成對書寫的VHDL文的文法錯誤等進行檢查。在需要開啟該功能時,在ProcessforCurrentSourse窗口中請選擇Synthesize下的CheckSyntax選項用鼠標雙激后即開始對書式進行檢查。如檢查無誤,在CheckSyntax處出現(xiàn)綠色的Check標志。同時在下部狀態(tài)表示窗口中表示有Done:completedsuccessfully。詳細如圖所示。第6章VHDL程序設(shè)計

圖6.18記述的檢查界面

第6章VHDL程序設(shè)計

在未保存文件時如實施書式檢查也會彈出文件保存設(shè)置窗口如圖。在點激Ok后即可保存源代碼窗口中設(shè)計的VHDL程序記述。如在以上書式Check中發(fā)現(xiàn)書式錯誤,在ProcessforCurrentSourse窗口,如圖所示中的CheckSyntax有紅色X標志。同時在下部的狀態(tài)窗口中最下部有Done:failedwithexitcode:0001表示。錯誤例如下:

圖6.19程序記述的界面保存窗口

溫馨提示

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

評論

0/150

提交評論