集成電路IC數(shù)字設(shè)計(jì)入門經(jīng)典教材1-5_第1頁
集成電路IC數(shù)字設(shè)計(jì)入門經(jīng)典教材1-5_第2頁
集成電路IC數(shù)字設(shè)計(jì)入門經(jīng)典教材1-5_第3頁
集成電路IC數(shù)字設(shè)計(jì)入門經(jīng)典教材1-5_第4頁
集成電路IC數(shù)字設(shè)計(jì)入門經(jīng)典教材1-5_第5頁
已閱讀5頁,還剩84頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

集成電路IC數(shù)字設(shè)計(jì)入門經(jīng)典教材1-5第一頁,共89頁。課程內(nèi)容(一)介紹VerilogHDL,內(nèi)容包括:Verilog應(yīng)用Verilog語言的構(gòu)成元素結(jié)構(gòu)級描述及仿真行為級描述及仿真延時(shí)的特點(diǎn)及說明介紹Verilogtestbench激勵(lì)和控制和描述結(jié)果的產(chǎn)生及驗(yàn)證任務(wù)task及函數(shù)function用戶定義的基本單元(primitive)可綜合的Verilog描述風(fēng)格第二頁,共89頁。課程內(nèi)容(二)介紹CadenceVerilog仿真器,內(nèi)容包括:設(shè)計(jì)的編譯及仿真源庫(sourcelibraries)的使用用Verilog-XL命令行界面進(jìn)行調(diào)試用NCVerilogTcl界面進(jìn)行調(diào)試圖形用戶界面(GUI)調(diào)試延時(shí)的計(jì)算及反標(biāo)注(annotation)性能仿真描述如何使用NCVerilog仿真器進(jìn)行編譯及仿真如何將設(shè)計(jì)環(huán)境傳送給NCVerilog周期(cycle)仿真第三頁,共89頁。課程內(nèi)容(三)邏輯綜合的介紹簡介設(shè)計(jì)對象靜態(tài)時(shí)序分析(STA)designanalyzer環(huán)境可綜合的HDL編碼風(fēng)格可綜合的VerilogHDLVerilogHDL中的一些竅門Designware庫綜合劃分

實(shí)驗(yàn)(1)第四頁,共89頁。課程內(nèi)容(四)設(shè)計(jì)約束(Constraint)設(shè)置設(shè)計(jì)環(huán)境設(shè)置設(shè)計(jì)約束

設(shè)計(jì)優(yōu)化設(shè)計(jì)編譯FSM的優(yōu)化

產(chǎn)生并分析報(bào)告

實(shí)驗(yàn)(2)第五頁,共89頁。課程內(nèi)容(五)自動(dòng)布局布線工具(SiliconEnsemble)簡介第六頁,共89頁。課程安排共54學(xué)時(shí)(18)講課,27學(xué)時(shí)Verilog(5)Synthesis(3)Place&Route(1)實(shí)驗(yàn),24學(xué)時(shí)Verilog(5)Synthesis(2)Place&Route(1)考試,3學(xué)時(shí)第七頁,共89頁。參考書目CadenceVerilogLanguageandSimulationVerilog-XLSimulationwithSynthesisEnvisiaAmbitSynthesis《硬件描述語言Verilog》清華大學(xué)出版社,Thomas&Moorby,劉明業(yè)等譯,2001.8第八頁,共89頁。第二章Verilog應(yīng)用學(xué)習(xí)內(nèi)容使用HDL設(shè)計(jì)的先進(jìn)性Verilog的主要用途Verilog的歷史如何從抽象級(levelsofabstraction)理解電路設(shè)計(jì)Verilog描述第九頁,共89頁。術(shù)語定義(termsanddefinitions)硬件描述語言HDL:描述電路硬件及時(shí)序的一種編程語言仿真器:讀入HDL并進(jìn)行解釋及執(zhí)行的一種軟件抽象級:描述風(fēng)格的詳細(xì)程度,如行為級和門級ASIC:專用集成電路(ApplicationSpecificIntegratedCircuit)ASICVender:芯片制造商,開發(fā)并提供單元庫自下而上的設(shè)計(jì)流程:一種先構(gòu)建底層單元,然后由底層單元構(gòu)造更大的系統(tǒng)的設(shè)計(jì)方法。自頂向下的設(shè)計(jì)流程:一種設(shè)計(jì)方法,先用高抽象級構(gòu)造系統(tǒng),然后再設(shè)計(jì)下層單元RTL級:寄存器傳輸級(RegisterTransferLevel),用于設(shè)計(jì)的可綜合的一種抽象級Tcl:ToolcommandLanguage,向交互程序輸入命令的描述語言第十頁,共89頁。什么是硬件描述語言HDL具有特殊結(jié)構(gòu)能夠?qū)τ布壿嬰娐返墓δ苓M(jìn)行描述的一種高級編程語言這種特殊結(jié)構(gòu)能夠:描述電路的連接描述電路的功能在不同抽象級上描述電路描述電路的時(shí)序表達(dá)具有并行性HDL主要有兩種:Verilog和VHDLVerilog起源于C語言,因此非常類似于C語言,容易掌握VHDL起源于ADA語言,格式嚴(yán)謹(jǐn),不易學(xué)習(xí)。VHDL出現(xiàn)較晚,但標(biāo)準(zhǔn)化早。IEEE1706-1985標(biāo)準(zhǔn)。第十一頁,共89頁。為什么使用HDL使用HDL描述設(shè)計(jì)具有下列優(yōu)點(diǎn):設(shè)計(jì)在高層次進(jìn)行,與具體實(shí)現(xiàn)無關(guān)設(shè)計(jì)開發(fā)更加容易早在設(shè)計(jì)期間就能發(fā)現(xiàn)問題能夠自動(dòng)的將高級描述映射到具體工藝實(shí)現(xiàn)在具體實(shí)現(xiàn)時(shí)才做出某些決定HDL具有更大的靈活性可重用可以選擇工具及生產(chǎn)廠HDL能夠利用先進(jìn)的軟件更快的輸入易于管理第十二頁,共89頁。Verilog的歷史VerilogHDL是在1983年由GDA(GateWayDesignAutomation)公司的PhilMoorby所創(chuàng)。PhiMoorby后來成為Verilog-XL的主要設(shè)計(jì)者和Cadence公司的第一個(gè)合伙人。在1984~1985年間,Moorby設(shè)計(jì)出了第一個(gè)Verilog-XL的仿真器。1986年,Moorby提出了用于快速門級仿真的XL算法。1990年,Cadence公司收購了GDA公司1991年,Cadence公司公開發(fā)表Verilog語言,成立了OVI(OpenVerilogInternational)組織來負(fù)責(zé)VerilogHDL語言的發(fā)展。1995年制定了VerilogHDL的IEEE標(biāo)準(zhǔn),即IEEE1364。第十三頁,共89頁。Verilog的用途Verilog的主要應(yīng)用包括:ASIC和FPGA工程師編寫可綜合的RTL代碼高抽象級系統(tǒng)仿真進(jìn)行系統(tǒng)結(jié)構(gòu)開發(fā)測試工程師用于編寫各種層次的測試程序用于ASIC和FPGA單元或更高層次的模塊的模型開發(fā)第十四頁,共89頁。抽象級(LevelsofAbstraction)Verilog既是一種行為描述的語言也是一種結(jié)構(gòu)描述語言。Verilog模型可以是實(shí)際電路的不同級別的抽象。這些抽象的級別包括:系統(tǒng)說明-設(shè)計(jì)文檔/算法描述RTL/功能級-Verilog門級/結(jié)構(gòu)級-Verilog版圖/物理級-幾何圖形行為綜合綜合前仿真邏輯綜合綜合后仿真版圖第十五頁,共89頁。抽象級(LevelsofAbstraction)在抽象級上需要進(jìn)行折衷系統(tǒng)說明-設(shè)計(jì)文檔/算術(shù)描述RTL/功能級-Verilog門級/結(jié)構(gòu)級-Verilog版圖/物理級-幾何圖形詳細(xì)程度低高輸入/仿真速度高低第十六頁,共89頁。抽象級(LevelsofAbstraction)Verilog可以在三種抽象級上進(jìn)行描述行為級用功能塊之間的數(shù)據(jù)流對系統(tǒng)進(jìn)行描述在需要時(shí)在函數(shù)塊之間進(jìn)行調(diào)度賦值。RTL級/功能級用功能塊內(nèi)部或功能塊之間的數(shù)據(jù)流和控制信號描述系統(tǒng)基于一個(gè)已定義的時(shí)鐘的周期來定義系統(tǒng)模型結(jié)構(gòu)級/門級用基本單元(primitive)或低層元件(component)的連接來描述系統(tǒng)以得到更高的精確性,特別是時(shí)序方面。在綜合時(shí)用特定工藝和低層元件將RTL描述映射到門級網(wǎng)表第十七頁,共89頁。抽象級(LevelsofAbstraction)設(shè)計(jì)工程師在不同的設(shè)計(jì)階段采用不同的抽象級首先在行為級描述各功能塊,以降低描述難度,提高仿真速度。在綜合前將各功能模塊進(jìn)行RTL級描述。用于綜合的庫中的大多數(shù)單元采用結(jié)構(gòu)級描述。在本教程中的結(jié)構(gòu)級描述部分將對結(jié)構(gòu)級(門級)描述進(jìn)行更詳細(xì)的說明。Verilog還有一定的晶體管級描述能力及算法級描述能力第十八頁,共89頁。行為級和RTL級MUX的行為可以描述為:只要信號a或b或sel發(fā)生變化,如果sel為0則選擇a輸出;否則選擇b輸出。modulemuxtwo(out,a,b,sel);inputa,b,sel;outputout;regout;always@(seloraorb)if(!sel)out=a;elseout=b;endmodule這個(gè)行為級RTL描述不處理X和Z狀態(tài)輸入,并且沒有延時(shí)。在行為級模型中,邏輯功能描述采用高級語言結(jié)構(gòu),如@,while,wait,if,case。Testbench(testfixture)通常采用行為級描述。所有行為級結(jié)構(gòu)在testbench描述中都可以采用。RTL模型中數(shù)據(jù)流都是基于時(shí)鐘的。任何時(shí)鐘元件在時(shí)鐘沿處的行為都要精確描述。RTL級描述是行為級Verilog的子集。第十九頁,共89頁。結(jié)構(gòu)級描述結(jié)構(gòu)級Verilog適合開發(fā)小規(guī)模元件,如ASIC和FPGA的單元Verilog內(nèi)部帶有描述基本邏輯功能的基本單元(primitive),如and門。用戶可以定義自己的基本單元UDP(UserDefinedPrivitives)綜合產(chǎn)生的結(jié)果網(wǎng)表通常是結(jié)構(gòu)級的。用戶可以用結(jié)構(gòu)級描述粘接(glue)邏輯。下面是MUX的結(jié)構(gòu)級描述,采用Verilog基本單元(門)描述。描述中含有傳輸延時(shí)。moduletwomux(out,a,b,sl);inputa,b,sl;outputout;notu1(nsl,sl);and#1u2(sela,a,nsl);and#1u3(selb,b,sl);or#2u4(out,sela,selb);endmodule綜合不支持!第二十頁,共89頁。僅需一種語言Verilog的一個(gè)主要特點(diǎn)是可應(yīng)用于各種抽象級。建模時(shí)可采用門級和RTL級混合描述,在開發(fā)testfixture時(shí)可以采用行為級描述。第二十一頁,共89頁。復(fù)習(xí)什么是Verilog?Verilog是公開的嗎?設(shè)計(jì)時(shí)什么時(shí)候采用VerilogRTL級描述?Verilog適合做什么樣的設(shè)計(jì)?解答:Verilog是用于硬件描述的具有時(shí)間概念的并行編程語言Verilog是一種公開語言,由OVI負(fù)責(zé)組織,有IEEE1394標(biāo)準(zhǔn)RTL描述用于綜合,或用于必須精確到每個(gè)時(shí)鐘周期的模型的建模。Verilog適用于各種抽象級模型的開發(fā)及驗(yàn)證第二十二頁,共89頁。第三章Cadence仿真器學(xué)習(xí)內(nèi)容邏輯仿真算法如何啟動(dòng)Verilog-XL和NCVerilog仿真器如何顯示波形第二十三頁,共89頁。仿真算法主要有三種仿真算法基于時(shí)間的(SPICE仿真器)基于事件的(Verilog-XL和NCVerilog仿真器)基于周期的(cycle)第二十四頁,共89頁。仿真算法基于時(shí)間的算法用于處理連續(xù)的時(shí)間及變量在每一個(gè)時(shí)間點(diǎn)對所有電路元件進(jìn)行計(jì)算效率低。在一個(gè)時(shí)間點(diǎn)只有約2~10%的電路活動(dòng)基于事件的算法處理離散的時(shí)間、狀態(tài)和變量只有電路狀態(tài)發(fā)生變化時(shí)才進(jìn)行處理,只模擬那些可能引起電路狀態(tài)改變的元件。仿真器響應(yīng)輸入引腳上的事件,并將值在電路中向前傳播。是應(yīng)用最為廣泛的仿真算法效率高?!癳valuatewhennecessary”基于周期的仿真以時(shí)鐘周期為處理單位(與時(shí)間無關(guān))只在時(shí)鐘邊沿進(jìn)行計(jì)算,不管時(shí)鐘周期內(nèi)的時(shí)序使用兩值邏輯(1,0)只關(guān)心電路功能而不關(guān)心時(shí)序,對于大型設(shè)計(jì),效率高僅適用于同步電路。第二十五頁,共89頁?;谑录抡娴臅r(shí)輪(timewheel)仿真器在編譯數(shù)據(jù)結(jié)構(gòu)時(shí)建立一個(gè)事件隊(duì)列。只有當(dāng)前時(shí)間片中所有事件都處理完成后,時(shí)間才能向前。仿真從時(shí)間0開始,而且時(shí)輪只能向前推進(jìn)。只有時(shí)間0的事件處理完后才能進(jìn)入下一時(shí)片。在同一個(gè)時(shí)間片內(nèi)發(fā)生的事件在硬件上是并行的理論上時(shí)間片可以無限。但實(shí)際上受硬件及軟件的限制。一個(gè)時(shí)間片的事件可引起新的事件,在當(dāng)前時(shí)片或以后時(shí)間片timeslice第二十六頁,共89頁。CadenceVerilog仿真器Verilog-XL和NCVerilog仿真器都是基于事件算法的仿真器。仿真器讀入VerilogHDL描述并進(jìn)行仿真以反映實(shí)際硬件的行為。Verilog-XL和NCVerilog仿真器遵循IEEE1364Verilog規(guī)范制定的基于事件的調(diào)度語義仿真器可用于確定想法的可行性用不同的方法解決設(shè)計(jì)問題功能驗(yàn)證確定設(shè)計(jì)錯(cuò)誤第二十七頁,共89頁。仿真過程Verilog仿真分下列步驟:編譯讀入設(shè)計(jì)描述,處理編譯指導(dǎo)(compilerdirective),建立一個(gè)數(shù)據(jù)結(jié)構(gòu)定義設(shè)計(jì)的層次結(jié)構(gòu)這一步有時(shí)分為兩步:compilation,elaboration初始化參數(shù)初始化;沒有驅(qū)動(dòng)的Net缺省值為Z;其它節(jié)點(diǎn)初始值為X。這些值延著設(shè)計(jì)層次傳播。仿真剛開始時(shí)間為0時(shí),仿真器將initial和always中的語句執(zhí)行一次,遇到有時(shí)序控制時(shí)停止。這些賦值可產(chǎn)生在時(shí)間0或其后時(shí)間的事件。隨著時(shí)間推進(jìn),被調(diào)度事件的執(zhí)行引起更多的調(diào)度事件,直至仿真結(jié)束。第二十八頁,共89頁。Versus交互式編譯仿真器Verilog-XL是一個(gè)交互式仿真器,過程如下:讀入Verilog描述,進(jìn)行語義語法檢查,處理編譯指導(dǎo)(compilerdirective)在內(nèi)存中將設(shè)計(jì)編譯為中間格式,將所有模塊和實(shí)例組裝成層次結(jié)構(gòu)(設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu))。源代碼中的每個(gè)元件都被重新表示并能在產(chǎn)生的數(shù)據(jù)結(jié)構(gòu)找到。決定仿真的時(shí)間精度,在內(nèi)存中構(gòu)造一個(gè)事件隊(duì)列的時(shí)間數(shù)據(jù)結(jié)構(gòu)(時(shí)輪)。讀入、調(diào)度并根據(jù)事件執(zhí)行每一個(gè)語句Verilog-XL采用多種加速算法提高各種抽象級的仿真速度。每次重新啟動(dòng)Verilog-XL,將重復(fù)上述步驟。當(dāng)進(jìn)入交互模式時(shí),可以輸入VerilogHDL語句并加到設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu)中。第二十九頁,共89頁。Versus交互式編譯仿真Verilog-XL仿真器是與VerilogHDL同時(shí)開發(fā)的,因此它成為VerilogHDL仿真器的事實(shí)上的標(biāo)準(zhǔn)。Verilog-XL采用了多種加速算法,對每種抽象級描述都能很好的仿真。這些加速算法包括Turbo算法,XL算法及Switch-XL算法。在后面的教程中將對這些算法進(jìn)行更為詳盡的介紹。第三十頁,共89頁。NCVerilog-全編譯仿真NCVerilog是全編譯仿真器,它直接將Verilog代碼編譯為機(jī)器碼執(zhí)行。其過程為:ncvlog編譯Verilog源文件,按照編譯指導(dǎo)(compiledirective)檢查語義及語法,產(chǎn)生中間數(shù)據(jù)。ncelab按照設(shè)計(jì)指示構(gòu)造設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu),產(chǎn)生可執(zhí)行代碼。除非對優(yōu)化進(jìn)行限制,否則源代碼中的元件(element)可能被優(yōu)化丟失。產(chǎn)生中間數(shù)據(jù)。ncsim啟動(dòng)仿真核。核調(diào)入設(shè)計(jì)的數(shù)據(jù)結(jié)構(gòu),構(gòu)造事件序列(時(shí)輪),調(diào)度并執(zhí)行事件的機(jī)器碼。有些事件可能消失(從不執(zhí)行)除非限制優(yōu)化過程。編譯后的所有代碼的執(zhí)行使用同一個(gè)核。當(dāng)重新啟動(dòng)仿真時(shí),要對修改過的模塊重新編譯。省略這個(gè)手工過程的方法是直接對設(shè)計(jì)進(jìn)行仿真,這將自動(dòng)地對修改過的模塊進(jìn)行重新編譯。當(dāng)采用交互模式時(shí),可以使用Tcl命令和針對NCVerilog的Tcl擴(kuò)展命令。第三十一頁,共89頁。NCVerilog全編譯仿真NCVerilog是最近才開發(fā)的,但其對描述的仿真與Verilog-XL完全相同NCVerilog仿真器用同一個(gè)核(kernel)對所有抽象級進(jìn)行混合仿真,也就是說用戶可以采用各種不同抽象級混合設(shè)計(jì)。但在門級仿真的效率差一些。NCVerilog仿真器對源代碼采用增量編譯方式,減少了編譯時(shí)間。在交互模式下,可以使用Tcl命令及其針對NCVerilog的擴(kuò)展命令來修改設(shè)計(jì)和控制仿真。這將在后面進(jìn)行詳細(xì)描述。第三十二頁,共89頁。對Verilog語言的支持Verilog-XL和NCVerilog計(jì)劃支持Verilog語言全集。用戶可依據(jù)下列標(biāo)準(zhǔn)進(jìn)行設(shè)計(jì):IEEE1364-1995Verilog語言參考手冊O(shè)VI2.0Verilog語言參考手冊,但不支持:Attributes:Verilog描述中對象的屬性。函數(shù)中output或inout變元(argument):OVI2.0允許函數(shù)中output和inout變元值能夠返回。第三十三頁,共89頁。啟動(dòng)Verilog-XL在命令窗口啟動(dòng)Verilog-XL:

verilog[verilog-xl_options]design_files沒有option啟動(dòng)的例子

verilogmux.vtest.v使用–c選項(xiàng)只對設(shè)計(jì)進(jìn)行語法和連接檢查verilog–cmux.vtest.v使用-f選項(xiàng)指定一個(gè)包含命令行參數(shù)的文件verilog–frun.frun.f文件的內(nèi)容Verilog-XL將所有終端輸出保存到名為verilog.log的文件mux.vtest.v-c第三十四頁,共89頁。啟動(dòng)NCVerilog雖然NCVerilog仿真過程包括三個(gè)分立的步驟(ncvlog,ncelab,ncsim),但仿真時(shí)不需要三個(gè)命令,可以用帶有命令行參數(shù)的ncverilog命令啟動(dòng)NCVerilog:

ncverilog[ncverilog_options]verilog-xl_argumentsExamples:ncverilogmux.vtest.vncverilog–cmux.vtest.vncverilog–frun.frun.f文件的內(nèi)容NCVerilog將所有終端輸出保存到名為ncverilog.log的文件mux.vtest.v-c第三十五頁,共89頁。NCVerilog有什么不同?除+gui、-q和-s這些只影響運(yùn)行時(shí)間的參數(shù)外,其它任何命令行參數(shù)的改變將使設(shè)計(jì)重新編譯、elaborate及仿真。如果更新了源文件及仿真時(shí)用到的SDF文件,則與它們相關(guān)的文件將重新編譯,設(shè)計(jì)也將重新elaborate和仿真。NCVerilog為編譯的元件及其它文件建立一個(gè)庫結(jié)構(gòu)。增量編譯依賴于源文件、SDF文件和命令行參數(shù)。ncverilog還有其它一些命令行參數(shù),如在調(diào)試時(shí)有完全的讀、寫及連接操作,用+access+argumentncverilog–frun.f+access+RWC要得到源文件行操作能力,用+linedebugncverilog-frun.f+linedebug強(qiáng)制重編譯所有設(shè)計(jì)單元,使用+noupdate第三十六頁,共89頁。NCVerilog有什么不同?使用+access選項(xiàng)可以設(shè)置對所有對象的缺省操作。對象的缺省設(shè)置是無操作。用+access+<args>打開操作,+access-<args>關(guān)掉操作。args可以是R、W、C的任何組合。使用+linedebug可以打開R、W、C,同時(shí)可對源文件行進(jìn)行操作,如在行上設(shè)置一斷點(diǎn)。使用+noupdate強(qiáng)制重編譯整個(gè)設(shè)計(jì)。缺省時(shí)只重新編譯修改過的文件。只有當(dāng)庫可能被破壞時(shí)才這樣做。+gui選項(xiàng)啟動(dòng)圖形界面;-q選項(xiàng)抑制標(biāo)識信息;-s選項(xiàng)使仿真器在時(shí)間0時(shí)停止,進(jìn)入交互模式。第三十七頁,共89頁。波形顯示工具—SignalScan>signalscan&或signalscan數(shù)據(jù)庫文件名&

第三十八頁,共89頁。波形顯示工具—SignalScanTitleBar:顯示這是SignalScan窗口并以數(shù)字編號。若啟動(dòng)幾個(gè)SignalScan窗口它們將順序編號。MenuBar:通過菜單可以執(zhí)行所有基本命令。ToolBar中的按鈕有:copy,cut,paste,undo,delete,zoom,createmarker,expandbuses,launchtheDesignBrower等等。用戶可以自定義。在命令行輸入signalscan啟動(dòng)。SignalScan窗口包括:注:必須用DesignBrower在波形窗口中添加信號。GroupsPane列出用戶建立的波形組WaveformsRegion顯示加入信號的波形NamesPane在波形的左邊顯示信號名。這些信號名可以拖拽,在pane中雙擊右鍵可以移動(dòng)插入的markerTime-DisplayRegion顯示兩個(gè)指針的時(shí)間值及其時(shí)間差第三十九頁,共89頁。SHM:波形數(shù)據(jù)庫波形顯示工具從數(shù)據(jù)庫,如SHM數(shù)據(jù)庫中讀取數(shù)據(jù)。使用下面的系統(tǒng)任務(wù)可以對SHM數(shù)據(jù)庫進(jìn)行操作:例子:initialbegin$shm_open(“l(fā)ab.shm”);$shm_probe();end第四十頁,共89頁。SHM:波形數(shù)據(jù)庫仿真歷史管理器(SimulationHistoryManager,SHM)數(shù)據(jù)庫記錄用戶的設(shè)計(jì)在仿真時(shí)數(shù)據(jù)信號的變化。只記錄用戶要觀察(probe)的信號。

用戶可以用$shm_系統(tǒng)任務(wù)打開一個(gè)SHM數(shù)據(jù)庫,設(shè)置信號探針并將結(jié)果保存到數(shù)據(jù)庫中。這些系統(tǒng)任務(wù)的功能除$shm_probe外都非常直觀。對$shm_probe將在下面詳細(xì)討論。用戶必須在仿真前(時(shí)間0前)設(shè)置探針信號才能看到信號在仿真過程中全部變化。第四十一頁,共89頁。用$shm_probe設(shè)置信號探針在$shm_probe中使用scope/node對作為參數(shù)。參數(shù)可以使用缺省值或兩個(gè)參數(shù)都設(shè)置。例如:$shm_probe();觀測當(dāng)前范圍(scope)所有端口

$shm_probe(“A”);觀測當(dāng)前范圍所有節(jié)點(diǎn)$shm_probe(alu,adder);觀測實(shí)例alu和adder的所有端口$shm_probe(“S”,top.alu,“AC”);觀測:(1):當(dāng)前范圍及其以下所有端口,除庫單元(2):top.alu模塊及其以下所有節(jié)點(diǎn),包括庫單元第四十二頁,共89頁。用$shm_probe設(shè)置信號探針$shm_probe的語法:$shm_probe(scope0,node0,scope1,node1,...);每個(gè)node都是基于前面scope的說明(層次化的)scope參數(shù)缺省值為當(dāng)前范圍(scope)。node參數(shù)缺省值為指定范圍的所有輸入、輸出及輸入輸出。第四十三頁,共89頁。相關(guān)工具AffirmaNCVHDL仿真器EnvisiaAmbit綜合工具Verilog-XL故障仿真器,用于評價(jià)用戶測試向量的有效性SignalScan-TX圖形界面調(diào)試工具包Affirmaequivalencechecker完成門級設(shè)計(jì)之間或門級與RTL級之間的靜態(tài)功能驗(yàn)證Affirmamodelchecker形式驗(yàn)證工具,將Verilog或VHDL描述與設(shè)計(jì)說明進(jìn)行驗(yàn)證Affirmamodelpackager,用戶的Verilog,VHDL或C語言可執(zhí)行模型分發(fā)時(shí)進(jìn)行編譯及分發(fā)許可證AffirmaAdvancedAnalysisEnvironmentincludesCoverScan,acodeprofiler,andHAL,alintchecker與CadenceVerilog仿真器相關(guān)的工具有:第四十四頁,共89頁??偨Y(jié)邏輯仿真運(yùn)行Verilog-XL和NCVerilog仿真器探測及顯示波形本章學(xué)習(xí)內(nèi)容第四十五頁,共89頁。復(fù)習(xí)基于事件的仿真器是如何做到并行的?時(shí)間t的事件能否調(diào)度同一時(shí)間t的事件?NCVerilog仿真器不支持IEEE1364VerilogLRM的什么元件?通過調(diào)度在一個(gè)給定的時(shí)間片內(nèi)發(fā)生的所有事件來得到并行性。實(shí)際上仿真器串行處理給定時(shí)間片內(nèi)的事件,但理論上它們都是在同一時(shí)間片內(nèi)發(fā)生的。任何時(shí)間片的事件能夠調(diào)度在同一時(shí)間片或其以后產(chǎn)生的事件。NCVerilog希望支持IEEE1364LRM規(guī)范全集。目前主要還不支持實(shí)例陣列(arrayofinstances)。請參見產(chǎn)品發(fā)布手冊。第四十六頁,共89頁。第四章設(shè)計(jì)舉例進(jìn)一步學(xué)習(xí)Verilog的結(jié)構(gòu)描述和行為描述Verilog混合(抽象)級仿真學(xué)習(xí)目標(biāo):第四十七頁,共89頁。語言的主要特點(diǎn)module(模塊)module能夠表示:物理塊,如IC或ASIC單元邏輯塊,如一個(gè)CPU設(shè)計(jì)的ALU部分整個(gè)系統(tǒng)每一個(gè)模塊的描述從關(guān)鍵詞module開始,有一個(gè)名稱(如SN74LS74,DFF,ALU等等),由關(guān)鍵詞endmodule結(jié)束。module是層次化設(shè)計(jì)的基本構(gòu)件邏輯描述放在module內(nèi)部第四十八頁,共89頁。語言的主要特點(diǎn)—模塊端口(moduleports)端口在模塊名字后的括號中列出端口可以說明為input,output及inout端口等價(jià)于硬件的引腳(pin)注意模塊的名稱DFF,端口列表及說明模塊通過端口與外部通信第四十九頁,共89頁。語言的主要特點(diǎn)模塊實(shí)例化(moduleinstances)moduleDFF(d,clk,clr,q,qb);....endmodulemoduleREG4(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第五十頁,共89頁。語言的主要特點(diǎn)可以將模塊的實(shí)例通過端口連接起來構(gòu)成一個(gè)大的系統(tǒng)或元件。在上面的例子中,REG4有模塊DFF的四個(gè)實(shí)例。注意,每個(gè)實(shí)例都有自己的名字(d0,d1,d2,d3)。實(shí)例名是每個(gè)對象唯一的標(biāo)記,通過這個(gè)標(biāo)記可以查看每個(gè)實(shí)例的內(nèi)部。實(shí)例中端口的次序與模塊定義的次序相同。模塊實(shí)例化與調(diào)用程序不同。每個(gè)實(shí)例都是模塊的一個(gè)完全的拷貝,相互獨(dú)立、并行。模塊實(shí)例化(moduleinstances)第五十一頁,共89頁。一個(gè)完整的簡單例子testfixture被測試器件DUT是一個(gè)二選一多路器。測試裝置(testfixture)提供測試激勵(lì)及驗(yàn)證機(jī)制。Testfixture使用行為級描述,DUT采用門級描述。下面將給出Testfixture的描述、DUT的描述及如何進(jìn)行混合仿真。第五十二頁,共89頁。DUT被測器件(deviceundertest)moduleMUX2_1(out,a,b,sel);//Portdeclarationsoutputout;inputa,b,sel;wireout,a,b,sel;wiresel_,a1,b1;//Thenetlistnot(sel_,sel);and(a1,a,sel_);and(b1,b,sel);or(out,a1,b1);endmodule注釋行已定義的Verilog基本單元的實(shí)例a,b,sel是輸入端口,out是輸出端口。所有信號通過這些端口從模塊輸入/輸出。另一個(gè)模塊可以通過模塊名及端口說明使用多路器。實(shí)例化多路器時(shí)不需要知道其實(shí)現(xiàn)細(xì)節(jié)。這正是自上而下設(shè)計(jì)方法的一個(gè)重要特點(diǎn)。模塊的實(shí)現(xiàn)可以是行為級也可以是門級,但并不影響高層次模塊對它的使用。多路器由關(guān)鍵詞module和endmodule開始及結(jié)束。第五十三頁,共89頁。TestFixturetemplatemoduletestfixture;//Datatypedeclaration//Instantiatemodules//Applystimulus//Displayresultsendmodule為什么沒有端口?由于testfixture是最頂層模塊,不會(huì)被其它模塊實(shí)例化。因此不需要有端口。第五十四頁,共89頁。TestFixture—如何說明實(shí)例moduletestfixture;//Datatypedeclaration//InstantiatemodulesMUX2_1mux(out,a,b,sel);//Applystimulus//Displayresultsendmodule多路器實(shí)例化語句MUX的實(shí)例化語句包括:模塊名字:與引用模塊相同實(shí)例名字:任意,但要符合標(biāo)記命名規(guī)則端口列表:與引用模塊的次序相同第五十五頁,共89頁。TestFixture—過程(proceduralblock)所有過程在時(shí)間0執(zhí)行一次過程之間是并行執(zhí)行的

過程語句有兩種:initial:只執(zhí)行一次always:循環(huán)執(zhí)行第五十六頁,共89頁。TestFixture—過程(proceduralblock)通常采用過程語句進(jìn)行行為級描述。testfixture的激勵(lì)信號在一個(gè)過程語句中描述。過程語句的活動(dòng)與執(zhí)行是有差別的所有過程在時(shí)間0處于活動(dòng)狀態(tài),并根據(jù)用戶定義的條件等待執(zhí)行;所有過程并行執(zhí)行,以描述硬件內(nèi)在的并行性;第五十七頁,共89頁。Testfixture激勵(lì)描述moduletestfixture;//Datatypedeclarationrega,b,sel;wireout;//MUXinstanceMUX2_1mux(out,a,b,sel);//Applystimulusinitialbegina=0;b=1;sel=0;#5b=0;#5b=1;sel=1;#5a=1;#5$finish;end//DisplayresultsendmoduleTimeValues absel0 01050001001115111例子中,a,b,sel說明為reg類數(shù)據(jù)。reg類數(shù)據(jù)是寄存器類數(shù)據(jù)信號,在重新賦值前一直保持當(dāng)前數(shù)據(jù)。#5用于指示等待5個(gè)時(shí)間單位。$finish是結(jié)束仿真的系統(tǒng)任務(wù)。第五十八頁,共89頁。TestFixture響應(yīng)產(chǎn)生$time系統(tǒng)函數(shù),給出當(dāng)前仿真時(shí)間$monitor系統(tǒng)任務(wù),若參數(shù)列表中的參數(shù)值發(fā)生變化,則在時(shí)間單位末顯示參數(shù)值。

$monitor([“format_specifiers”,]<arguments>);例如:$monitor($time,o,in1,in2);$monitor($time,,out,,a,,b,,sel);$monitor($time,“%b%h%d%o”,sig1,sig2,sig3,sig4);Verilog提供了一些系統(tǒng)任務(wù)和系統(tǒng)函數(shù),包括:注意不能有空格第五十九頁,共89頁。TestFixture響應(yīng)產(chǎn)生$time是一個(gè)系統(tǒng)函數(shù),返回當(dāng)前返回仿真時(shí)間。時(shí)間用64位整數(shù)表示。$monitor在時(shí)間單位末,若參數(shù)列表中的參數(shù)值發(fā)生變化則顯示所列參數(shù)的值。由$time引起的變化不會(huì)顯示。$monitor系統(tǒng)任務(wù)支持不同的數(shù)基。缺省數(shù)基是十進(jìn)制。支持的數(shù)基還有二進(jìn)制、八進(jìn)制、十進(jìn)制。第六十頁,共89頁。完整的TestFixturemoduletestfixture;//Datatypedeclarationrega,b,sel;wireout;//MUXinstanceMUX2_1mux(out,a,b,sel);//Applystimulusinitialbegina=0;b=1;sel=0;#5b=0;#5b=1;sel=1;#5a=1;#5$finish;end//Displayresultsinitial$monitor($time,,"out=%ba=%bb=%bsel=%b",out,a,b,sel);endmodule0out=0a=0b=1sel=05out=0a=0b=0sel=010out=1a=0b=1sel=115out=1a=1b=1sel=1結(jié)果輸出第六十一頁,共89頁。時(shí)間單位末的概念`timescale1ns/1ns

moduletestfixture;//Datatypedeclarationrega,b,sel;wireout;//MUXinstanceMUX2_1mux(out,a,b,sel);//Applystimulusinitialbegina=0;b=1;sel=0;

#5.7b=0;#5b=1;sel=1;#5a=1;#5$finish;end//Displayresultsinitial$monitor($time,,"out=%ba=%bb=%bsel=%b",out,a,b,sel);endmodule0out=0a=0b=1sel=06out=0a=0b=0sel=011out=1a=0b=1sel=116out=1a=1b=1sel=1結(jié)果輸出第六十二頁,共89頁。VCD數(shù)據(jù)庫Verilog提供一系列系統(tǒng)任務(wù)用于記錄信號值變化保存到標(biāo)準(zhǔn)的VCD(ValueChangeDump)格式數(shù)據(jù)庫中。大多數(shù)波形顯示工具支持VCD格式。第六十三頁,共89頁。VCD數(shù)據(jù)庫用戶可以用$dump*系統(tǒng)任務(wù)打開一個(gè)數(shù)據(jù)庫,保存信號并控制信號的保存。除$dumpvars外,其它任務(wù)的作用都比較直觀。$dumpvars將在后面詳細(xì)描述。必須首先使用$dumpfile系統(tǒng)任務(wù),并且在一次仿真中只能打開一個(gè)VCD數(shù)據(jù)庫。在仿真前(時(shí)間0前)必須先指定要觀測的波形,這樣才能看到信號完整的變化過程。仿真時(shí)定期的將數(shù)據(jù)保存到磁盤是一個(gè)好的習(xí)慣,萬一系統(tǒng)出現(xiàn)問題數(shù)據(jù)也不會(huì)全部丟失。VCD數(shù)據(jù)庫不記錄仿真結(jié)束時(shí)的數(shù)據(jù)。因此如果希望看到最后一次數(shù)據(jù)變化后的波形,必須在結(jié)束仿真前使用$dumpall。VCD數(shù)據(jù)庫是仿真過程中數(shù)據(jù)信號變化的記錄。它只記錄用戶指定的信號。第六十四頁,共89頁。$dumpvars$dumpvars[(<levels>,<scope>*)];scope可以是層次中的信號,實(shí)例或模塊。仿真時(shí)所有信號必須在同一時(shí)間下使用$dumpvars。就是說可以使用多條$dumpvars語句,但必須從同一時(shí)間開始。如:

initialbegin$dumpfile(“verilog.dump”);$dumpvars(0,testfixture.a);#1$dumpvars(0,testfixture.b);end$dumpvars語法:此語句將引起一個(gè)警告信息并被忽略第六十五頁,共89頁。$dumpvars$dumpvars;//Dump所有層次的信號$dumpvars(1,top);//Dumptop模塊中的所有信號$dumpvars(2,top.u1);//Dump實(shí)例top.u1及其下一層的信號$dumpvars(0,top.u2,top.u1.u13.q);//Dumptop.u2及其以下所有信號,以及信號top.u1.u13.q。$dumpvars(3,top.u2,top.u1);//Dumptop.u1和top.u2及其下兩層中的所有信號。用下面的代碼可以代替前面testfixture的$monitor命令:initialbegin$dumpfile(“verilog.dump”);$dumpvars(0,testfixture);end要給$dumpvars提供層次(levels)及范圍(scope)參數(shù),例如第六十六頁,共89頁。復(fù)習(xí)Verilog的基本構(gòu)建模塊是什么?是如何構(gòu)成一個(gè)系統(tǒng)的?module怎樣與其它模塊通信?仿真時(shí)兩個(gè)性質(zhì)不同的模塊是什么?在testfixture中兩類不同的過程語句是什么?它們有什么不同?用什么方法能以文本格式顯示仿真結(jié)果?module是基本構(gòu)建單元。在module中實(shí)例化另一個(gè)module可以構(gòu)成一個(gè)復(fù)雜的層次化系統(tǒng)。module之間通過端口的連接進(jìn)行互相通信兩個(gè)模塊是設(shè)計(jì)模塊和激勵(lì)模塊。設(shè)計(jì)模塊又稱為DUT,激勵(lì)模塊又稱為testbench或testfixture。測試模塊用于設(shè)計(jì)模塊驗(yàn)證在testbench中用到的兩類過程語句是initial和always。其不同處是initial只執(zhí)行一次,而always循環(huán)執(zhí)行。$monitor語句以文本格式顯示仿真結(jié)果第六十七頁,共89頁。第五章Verilog的詞匯約定(Lexicalconvention)理解Verilog中使用的詞匯約定認(rèn)識語言專用標(biāo)記(tokens)學(xué)習(xí)timescale學(xué)習(xí)內(nèi)容:第六十八頁,共89頁。術(shù)語及定義空白符:空格、tabs及換行Identifier:標(biāo)志符,Verilog中對象(如模塊或端口)的名字Lexical:語言中的字或詞匯,或與其相關(guān)。由其文法(grammar)或語法(syntax)區(qū)分。LSB:最低有效位(Leasesignificantbit)MSB:最高有效位(Mostsignificantbit)第六十九頁,共89頁??瞻追妥⑨宮oduleMUX2_1(out,a,b,sel);//Portdeclarationsoutputout;inputsel,//controlinputb,/*datainputs*/a;/*Thenetlistlogicselectsinput”a”whensel=0anditselects”b”whensel=1.*/not(sel_,sel);and(a1,a,sel_),(b1,b,sel);//Whatdoesthislinedo?or(out,a1,b1);endmodule格式自由使用空白符提高可讀性及代碼組織。Verilog忽略空白符除非用于分開其它的語言標(biāo)記。多行注釋,在/**/內(nèi)單行注釋到行末結(jié)束第七十頁,共89頁。整數(shù)常量和實(shí)數(shù)常量整數(shù)的大小可以定義也可以不定義。整數(shù)表示為:

<size>’<base><value>

其中size:大小,由十進(jìn)制數(shù)表示的位數(shù)(bit)表示。缺省為32位base:數(shù)基,可為2(b)、8(o)、10(d)、16(h)進(jìn)制。缺省為10進(jìn)制value:是所選數(shù)基內(nèi)任意有效數(shù)字,包括X、Z。實(shí)數(shù)常量可以用十進(jìn)制或科學(xué)表示法表示。Verilog中,常量(literals)可是整數(shù)也可以是實(shí)數(shù)第七十一頁,共89頁。整數(shù)常量和實(shí)數(shù)常量整數(shù)的大小可以定義也可以不定義。整數(shù)表示為:數(shù)字中(_)忽略,便于查看沒有定義大小(size)整數(shù)缺省為32位缺省數(shù)基為十進(jìn)制數(shù)基(base)和數(shù)字(16進(jìn)制)中的字母無大小寫之分當(dāng)數(shù)值value大于指定的大小時(shí),截去高位。如2’b1101表示的是2’b01實(shí)數(shù)常量實(shí)數(shù)可用科學(xué)表示法或十進(jìn)制表示科學(xué)表示法表示方式:<尾數(shù)><e或E><指數(shù)>,表示:尾數(shù)×10指數(shù)第七十二頁,共89頁。字符串(string)字符串要在一行中用雙引號括起來,也就是不能跨行。字符串中可以使用一些C語言轉(zhuǎn)義(escape)符,如\t\n可以使用一些C語言格式符(如%b)在仿真時(shí)產(chǎn)生格式化輸出:”Thisisanormalstring””Thisstringhasa\ttabandendswithanewline\n””Thisstringformatsavalue:val=%b”Verilog中,字符串大多用于顯示信息的命令中。Verilog沒有字符串?dāng)?shù)據(jù)類型第七十三頁,共89頁。字符串(string)轉(zhuǎn)義符及格式符將在驗(yàn)證支持部分討論

格式符轉(zhuǎn)義符格式符%0d表示沒有前導(dǎo)0的十進(jìn)制數(shù)第七十四頁,共89頁。標(biāo)識符(identifiers)標(biāo)識符是用戶在描述時(shí)給Verilog對象起的名字標(biāo)識符必須以字母(a-z,A-Z)或(_)開頭,后面可以是字母、數(shù)字、($)或(_)。最長可以是1023個(gè)字符標(biāo)識符區(qū)分大小寫,sel和SEL是不同的標(biāo)識符模塊、端口和實(shí)例的名字都是標(biāo)識符 moduleMUX2_1(out,a,b,sel); outputout; inputa,b,sel; notnot1(sel_,sel); andand1(a1,a,sel_); andand2(b1,b,sel); oror1(out,a1,b1); endmoduleVerilog標(biāo)識符第七十五頁,共89頁。標(biāo)識符(identifiers)有效標(biāo)識符舉例:

shift_reg_a busa_index _bus3無效標(biāo)識符舉例: 34net//開頭不是字母或“_” a*b_net//包含了非字母或數(shù)字,“$”“_” n@238//包含了非字母或數(shù)字,“$”“_”Verilog區(qū)分大小寫,所有Verilog關(guān)鍵詞使用小寫字母。第七十六頁,共89頁。轉(zhuǎn)義標(biāo)識符(Escapedidentifiers)可以包含任何可打印字符反斜杠及空白符不是標(biāo)識符的一部分 module\2:1MUX(out,a,b,sel); outputout; inputa,b,sel; notnot1(\~sel,sel); andand1(a1,a,\~sel); andand2(b1,b,sel); oror1(out,a1,b1); endmodule使用轉(zhuǎn)義符可能會(huì)產(chǎn)生一些問題,并且不是所有工具都支持。有時(shí)用轉(zhuǎn)義符完成一些轉(zhuǎn)換,如產(chǎn)生邏輯圖的Verilog網(wǎng)表。綜合工具輸出綜合網(wǎng)表時(shí)也使用轉(zhuǎn)義符。不建議使用轉(zhuǎn)義符。轉(zhuǎn)義標(biāo)識符由反斜杠“\”開始,空白符結(jié)束EscapedIdentifiers第七十七頁,共89頁。轉(zhuǎn)義標(biāo)識符(Escapedidentifiers)轉(zhuǎn)義標(biāo)識符允許用戶在標(biāo)識符中使用非法字符。如:\~#@sel\busa+index\{A,B}top.\31//在層次化名字中轉(zhuǎn)義符轉(zhuǎn)義標(biāo)識符必須以空格結(jié)束第七十八頁,共89頁。語言專用標(biāo)記(tokens)系統(tǒng)任務(wù)及函數(shù)

$<identifier>$符號指示這是系統(tǒng)任務(wù)和函數(shù)系統(tǒng)函數(shù)有很多,如:返回當(dāng)前仿真時(shí)間$time顯示/監(jiān)視信號值($display,$monitor)停止仿真$stop結(jié)束仿真$finish$monitor($time,“a=%b,b=%h”,a,b);當(dāng)信號a或b的值發(fā)生變化時(shí),系統(tǒng)任務(wù)$monitor顯示當(dāng)前仿真時(shí)間,信號a值(二進(jìn)制格式),信號b值(16進(jìn)制格式)。第七十九頁,共89頁。語言專用標(biāo)記(tokens)延時(shí)說明“#”用于說明過程(procedural)語句和門的實(shí)例的延時(shí),但不能用于模塊的實(shí)例化。 moduleMUX2_1(out,a,b,sel); outputout; inputa,b,sel; not#1not1(sel_,sel); and#2and1(a1,a,sel_); and#2and2(b1,b,sel); or#1or1(out,a1,b1); endmodule門延時(shí)有很多類名字:門延時(shí)(gatedelay),傳輸延時(shí)(propagationdelay),固有延時(shí)(intrinsicdelay),對象內(nèi)在延時(shí)(intra-objectdelay)第八十頁,共89頁。編譯指導(dǎo)(CompilerDirectives)(

`)符號說明一個(gè)編譯指導(dǎo)這些編譯指導(dǎo)使仿真編譯器進(jìn)行一些特殊的操作編譯指導(dǎo)一直保持有效直到被覆蓋或解除`resetall復(fù)位所有的編譯指導(dǎo)為缺省值,應(yīng)該在其它編譯指導(dǎo)之前使用第八十一頁,共89頁。文本替換(substitution)-`define編譯指導(dǎo)`define提供了一種簡單的文本替換的功能

`define<macro_name><macro_text>在編譯時(shí)<macro_text>替換<macro_name>??商岣呙枋龅目勺x性。`definenot_delay#1`defineand_delay#2`defineor_delay#1moduleMUX2_1(out,a,b,sel);outputout;inputa,b,sel; not`not_delaynot1(sel_,sel); and`and_delayand1(a1,a,sel_); and`and_delayand2(b1,b,sel); or`or_delayor1(out,a1,b1);endmodule定義not_delay使用not_dela

溫馨提示

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

最新文檔

評論

0/150

提交評論