采用VHDL進(jìn)行高層次設(shè)計(jì)PPT學(xué)習(xí)教案_第1頁
采用VHDL進(jìn)行高層次設(shè)計(jì)PPT學(xué)習(xí)教案_第2頁
采用VHDL進(jìn)行高層次設(shè)計(jì)PPT學(xué)習(xí)教案_第3頁
采用VHDL進(jìn)行高層次設(shè)計(jì)PPT學(xué)習(xí)教案_第4頁
采用VHDL進(jìn)行高層次設(shè)計(jì)PPT學(xué)習(xí)教案_第5頁
已閱讀5頁,還剩356頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、采用VHDL進(jìn)行高層次設(shè)計(jì)ASIC技術(shù)的發(fā)展 由于所設(shè)計(jì)的系統(tǒng)的規(guī)模已從幾十幾百門增加到幾萬幾十萬門,使得從前電子工程師所熟悉的畫電路圖、真值表和卡諾圖的設(shè)計(jì)方法已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足數(shù)字系統(tǒng)的復(fù)雜性要求第1頁/共361頁ASIC技術(shù)的發(fā)展 高層次設(shè)計(jì)方法HLD(High Level Design)是從八十年代末以來,最新專用集成電路設(shè)計(jì)的、最先進(jìn)的設(shè)計(jì)方法,它為用戶設(shè)計(jì)更大規(guī)模、更高水平、性能優(yōu)良的數(shù)字系統(tǒng)提供了可靠的保證第2頁/共361頁HLD符合目前對(duì)電路的兩個(gè)要求 Time to Market:對(duì)于通信領(lǐng)域來說,快速推出市場(chǎng)需要的系統(tǒng)具有非常重要的價(jià)值,HLD使得快速設(shè)計(jì)較大的芯片成為可能。

2、 SOC:目前對(duì)數(shù)子系統(tǒng)的需求是規(guī)模越來越大,HLD非集成電路專業(yè)背景的通信廠商設(shè)計(jì)大規(guī)模芯片提供了可能第3頁/共361頁設(shè)計(jì)技術(shù)的發(fā)展使得HLD成為可能 1,000,000 High Level Design gates 1990s Synthesis 100,000 gates Gate Level Design 1980s Place & Route1,000 gates Layout Design 1970s第4頁/共361頁設(shè)計(jì)技術(shù)的發(fā)展使得HLD成為可能 采用最原始的版圖設(shè)計(jì)只需要相應(yīng)的圖形編輯工具 采用電路圖設(shè)計(jì)就需要相應(yīng)的布局布線工具 采用HDL語言設(shè)計(jì)電路就需要相應(yīng)的綜合工具

3、支持 結(jié)論:正是綜合技術(shù)的提出使得HLD成為可能第5頁/共361頁電路設(shè)計(jì)方法 由底向上的設(shè)計(jì)(Bottom-up):從結(jié)構(gòu)層開始,采用結(jié)構(gòu)化單元和由少數(shù)行為級(jí)模塊構(gòu)成的層次式模型,逐級(jí)向上搭建出符合要求的系統(tǒng)。 自頂而下的設(shè)計(jì)(Top-Down):先對(duì)所要設(shè)計(jì)的系統(tǒng)進(jìn)行功能描述,然后逐步分塊細(xì)化,直至結(jié)構(gòu)化最底層的具體實(shí)現(xiàn)第6頁/共361頁Top- -Down的優(yōu)越性 提高設(shè)計(jì)生產(chǎn)的效率:自頂向下的設(shè)計(jì)方法允許設(shè)計(jì)者從一個(gè)高抽象層次上對(duì)系統(tǒng)的功能進(jìn)行定制,而不需要考慮門級(jí)的具體實(shí)現(xiàn)方法,這充分體現(xiàn)了工藝無關(guān)性的基本設(shè)計(jì)思想。設(shè)計(jì)者只需要寫出設(shè)計(jì)中所需部件的硬件描述語言代碼或者是其它類型的模型

4、,設(shè)計(jì)工具就會(huì)根據(jù)編寫的高層描述生成門級(jí)的實(shí)現(xiàn),這就大大減少了設(shè)計(jì)者以往必須花費(fèi)在設(shè)計(jì)細(xì)節(jié)上的時(shí)間第7頁/共361頁Top- -Down的優(yōu)越性 增加了設(shè)計(jì)的重用性:在大多數(shù)的自頂向下設(shè)計(jì)過程中,對(duì)設(shè)計(jì)的描述都保持在一個(gè)通用的工藝水平上,它不是為某一廠家的工藝庫而特意定制的,也就是說,設(shè)計(jì)是與工藝無關(guān)的,所以在實(shí)現(xiàn)設(shè)計(jì)時(shí)不必使用某一特定廠家的工藝,這樣就極大的提高了設(shè)計(jì)的可重用性,如果需要改變?cè)O(shè)計(jì)所使用的工藝,只需要將設(shè)計(jì)在相應(yīng)的工藝庫上映設(shè)即可。第8頁/共361頁Top- -Down的優(yōu)越性 錯(cuò)誤的早期發(fā)覺:可以帶來好處 1、減少產(chǎn)品開發(fā)周期 2、降低開發(fā)成本 3、增加設(shè)計(jì)一次成功通過的可能

5、性第9頁/共361頁電路設(shè)計(jì)應(yīng)該采用的方法 強(qiáng)調(diào)進(jìn)行系統(tǒng)開發(fā)的方式:首先進(jìn)行系統(tǒng)分析,給出Specification,劃分模塊,明確模塊接口,確定模塊內(nèi)部功能,此時(shí)應(yīng)該編寫詳細(xì)的設(shè)計(jì)說明文檔,之后才是編程,調(diào)試。 目前國內(nèi)很難達(dá)到這個(gè)層次,但一般較大的設(shè)計(jì)都是多個(gè)設(shè)計(jì)者完成,因此模塊劃分和確定接口信號(hào)是非常重要的,可以極大的減少設(shè)計(jì)的調(diào)試時(shí)間。模塊盡量以寄存器為邊界,這樣對(duì)于聯(lián)調(diào)和最后的系統(tǒng)集成非常方便。 建立合理的設(shè)計(jì)習(xí)慣對(duì)于今后的工作的效率會(huì)有巨大幫助第10頁/共361頁設(shè)計(jì)技術(shù)的發(fā)展 CAD:Schematics EDA:HDL VHDL和Verilog是影響最廣的兩種HDL。 VHDL

6、相對(duì)于Veirlog而言,它在語法上更嚴(yán)謹(jǐn)一些,雖然這樣也使它失去了一些靈活性和多樣性,但從文檔紀(jì)錄、綜合以及器件和系統(tǒng)級(jí)的仿真上講VHDL是一種更好的選擇。第11頁/共361頁VHDL語言 在1981年,美國國防部提出了一種新的硬件描述語言,稱之為VHSIC Hardware Description Language,也就是我們現(xiàn)在所說的VHDL,它是美國國防部委托IBM和Texas Instruments聯(lián)合開發(fā)的。 1986年,VHDL被建議作為IEEE標(biāo)準(zhǔn),經(jīng)過了多次更改后,直到1987年12月,它才被接納為IEEE1076標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)經(jīng)過不斷完善和更新,目前的標(biāo)準(zhǔn)為IEEE1164,

7、它已被絕大多數(shù)IC生產(chǎn)廠家和EDA工具供應(yīng)商所接受。當(dāng)前幾乎所有的EDA軟件,象Synopsys、Mentor Graphics、InovaEDA、Cadence等,均支持該標(biāo)準(zhǔn)。第12頁/共361頁VHDL語言的特點(diǎn) VHDL是工業(yè)標(biāo)準(zhǔn)的文本格式語言 VHDL能同時(shí)支持仿真和綜合 VHDL是一種并發(fā)執(zhí)行的語言 VHDL支持結(jié)構(gòu)化設(shè)計(jì)和TOP-DOWN設(shè)計(jì)方法 VHDL的描述與工藝無關(guān) 支持多風(fēng)格的描述方法第13頁/共361頁數(shù)字系統(tǒng)描述的Gajski圖第14頁/共361頁VHDL描述數(shù)字電路的層次 采用VHDL語言描述電路時(shí),我們將電路的描述分為行為(Behavioral)和寄存器傳輸級(jí)(R

8、egister Transfer Level)和門級(jí)描述(Gate Level)三個(gè)層次。這樣的劃分是根據(jù)寄存器和組合邏輯的確定性而言的 行為級(jí):寄存器和組合邏輯都不明確 RTL級(jí):寄存器明確,組合邏輯不明確。 門級(jí):寄存器和組合邏輯都明確第15頁/共361頁三種描述層次的比較 在目前的實(shí)際設(shè)計(jì)工作中,行為描述和門級(jí)描述都很少用到。門級(jí)描述投入大量精力描述電路的具體細(xì)節(jié),無法體現(xiàn)出高層描述的優(yōu)點(diǎn)。行為描述的抽象層次太高,綜合工具無法很好的理解設(shè)計(jì)者的意圖,綜合出的電路距離設(shè)計(jì)者的實(shí)際要求有很大差距,并且目前主流的綜合工具都不具有這種功能,目前有一些推出的行為綜合器如Synopsys的Behav

9、ioral Complier,但用戶的反映都不是很良好第16頁/共361頁使用VHDL描述組合邏輯的方法 在使用VHDL描述組合邏輯電路時(shí),根據(jù)描述風(fēng)格的不同,我們將它分為行為級(jí)描述、結(jié)構(gòu)流(Data Flow)描述和結(jié)構(gòu)級(jí)(Structural Level)描述。這里的行為級(jí)(Behavioral Level)描述和前面的行為描述(Behavioral)從概念上是有區(qū)別的,或者說是行為描述具體在組合邏輯中的定義。行為級(jí)描述是指一個(gè)組合邏輯的功能已經(jīng)明確,但它的具體實(shí)現(xiàn)結(jié)構(gòu)沒有確定,但限定使用組合邏輯實(shí)現(xiàn)。第17頁/共361頁高層次設(shè)計(jì)流程第18頁/共361頁一、系統(tǒng)功能分析 進(jìn)行系統(tǒng)功能分析

10、的目的是在進(jìn)行系統(tǒng)設(shè)計(jì)之前明確系統(tǒng)的需求,也就是確定系統(tǒng)所要完成的功能、系統(tǒng)的輸入輸出、以及這些輸入輸出之間的關(guān)系等,并且要確定系統(tǒng)的時(shí)序要求。 系統(tǒng)功能分析的另外一個(gè)目的,就是系統(tǒng)的模塊劃分。在系統(tǒng)分析時(shí),應(yīng)根據(jù)功能的耦合程度,將系統(tǒng)劃分為不同的功能模塊,每一個(gè)功能都映射到一個(gè)模塊,同時(shí)還需要確定模塊之間的相互關(guān)系,這是模塊化設(shè)計(jì)的基本要求。第19頁/共361頁二、體系結(jié)構(gòu)設(shè)計(jì) 體系結(jié)構(gòu)設(shè)計(jì)又是整個(gè)系統(tǒng)設(shè)計(jì)階段最重要的工作,它的首要任務(wù)就是數(shù)據(jù)通路和控制通路的設(shè)計(jì)。在數(shù)字系統(tǒng)的設(shè)計(jì)中,系統(tǒng)的控制是建立在數(shù)據(jù)通路的基礎(chǔ)之上的,不同的數(shù)據(jù)通路對(duì)應(yīng)了不同的控制通路。數(shù)據(jù)通路的設(shè)計(jì)包括被處理數(shù)據(jù)的類

11、型分析、處理單元的劃分、以及處理單元之間的關(guān)聯(lián)程度等??刂仆肥菙?shù)據(jù)通路上數(shù)據(jù)傳輸?shù)目刂茊卧糜趨f(xié)調(diào)數(shù)據(jù)處理單元之間的關(guān)系,控制通路的設(shè)計(jì)主要包括數(shù)據(jù)的調(diào)度、數(shù)據(jù)的處理算法和正確的時(shí)序安排等。 數(shù)據(jù)通路和控制通路的設(shè)計(jì)并不是截然分開的,有時(shí)在確定好數(shù)據(jù)通路后,由于時(shí)序或數(shù)據(jù)的調(diào)度等問題,而不得不重新修改數(shù)據(jù)通路。所以數(shù)據(jù)通路與控制通路的設(shè)計(jì)往往要經(jīng)過許多次反復(fù)才能達(dá)到最優(yōu)的效果第20頁/共361頁三、系統(tǒng)描述 謂系統(tǒng)描述也就是使用VHDL語言對(duì)系統(tǒng)進(jìn)行編碼。在進(jìn)行大型軟件的開發(fā)時(shí),編碼相對(duì)于前面所進(jìn)行的系統(tǒng)劃分工作相比就顯得不是那么重要,但在使用硬件描述語言進(jìn)行數(shù)字電路描述時(shí),情況則完全不同

12、,因?yàn)檎Z言的描述直接決定著電路的性能,不好的編碼將無法反映所確定的體系結(jié)構(gòu),可能導(dǎo)致前面所做的工作完全浪第21頁/共361頁四、系統(tǒng)功能仿真 系統(tǒng)的功能仿真(Functional Simulation)是用來驗(yàn)證設(shè)計(jì)者所編寫的VHDL代碼是否完成了預(yù)定的功能。幾乎所有的高層設(shè)計(jì)軟件都支持語言級(jí)的系統(tǒng)仿真,這樣在系統(tǒng)綜合前就可以通過系統(tǒng)功能仿真來驗(yàn)證所設(shè)計(jì)系統(tǒng)的功能正確與否。 在語言級(jí)系統(tǒng)仿真時(shí),要求設(shè)計(jì)者使用VHDL語言所提供的豐富的仿真語句來編寫系統(tǒng)的測(cè)試基準(zhǔn)程序(Testbench)。測(cè)試基準(zhǔn)程序在高層次設(shè)計(jì)中占有非常重要的地位,不僅在系統(tǒng)功能仿真時(shí)被用來作為功能驗(yàn)證的基準(zhǔn),而且在門級(jí)仿真

13、與后時(shí)序仿真都要以此為基準(zhǔn)。第22頁/共361頁綜合優(yōu)化階段 綜合器對(duì)系統(tǒng)的綜合優(yōu)化主要分為兩步:第一步是將硬件描述語言翻譯成門電路,第二步是對(duì)產(chǎn)生的電路進(jìn)行優(yōu)化。主要工作是在第二步進(jìn)行的,判斷一個(gè)綜合器性能的標(biāo)準(zhǔn)也是基于這一方面的。 系統(tǒng)優(yōu)化的目的就是花費(fèi)最小的硬件資源滿足最大的 時(shí) 序 要 求 , 所 以 系 統(tǒng) 優(yōu) 化 就 是 在 系 統(tǒng) 的 速 度(Speed)和面積(Area)之間找到一個(gè)最佳方案(Trade-off)。系統(tǒng)優(yōu)化的關(guān)鍵在于系統(tǒng)約束條件(Constraints)的設(shè)定,施加到系統(tǒng)的約束條件將使綜合器對(duì)系統(tǒng)的優(yōu)化按照設(shè)計(jì)者所期望的目標(biāo)進(jìn)行。第23頁/共361頁系統(tǒng)實(shí)現(xiàn) 如

14、果系統(tǒng)綜合優(yōu)化的結(jié)果滿足設(shè)計(jì)者的要求,就可以進(jìn)行系統(tǒng)實(shí)現(xiàn)的工作。在一般的ASIC設(shè)計(jì)中,設(shè)計(jì)者應(yīng)該將綜合后電路的網(wǎng)表(Netlist)文件和設(shè)計(jì)的時(shí)序要求,交給IC生產(chǎn)廠家進(jìn)行下一步的工作。這是國內(nèi)一般的做法,專業(yè)的微電子公司將會(huì)參與更多的后面的layout的工作。第24頁/共361頁設(shè)計(jì)風(fēng)格描述 設(shè)計(jì)描述的風(fēng)格直接控制著EDA工具綜合的結(jié)果。描述同一功能的兩段RTL描述能產(chǎn)生出時(shí)序和面積上完全不同的電路,好的描述方式就是易于被綜合器識(shí)別并可以被綜合出設(shè)計(jì)者期望的電路,電路的質(zhì)量取決于工程師使用的描述風(fēng)格和綜合工具的能力。我將會(huì)在外面介紹。第25頁/共361頁我個(gè)人對(duì)高層次設(shè)計(jì)方法的理解 硬件

15、描述語言-schematic(netlist)-版圖 綜合工具 布局布線工具 高級(jí)語言-匯編語言-機(jī)器語言 高 級(jí) 語 言 編 譯 器 機(jī) 器 語 言 編 譯 器(assembler) 目前國內(nèi)還有很多人不認(rèn)同采用HDL的高層次設(shè)計(jì)方法,其實(shí)就是不能理解綜合工具的作用,但映射到不認(rèn)同C編譯器或BASIC編譯器的作用確是荒謬的。 我認(rèn)為高層次設(shè)計(jì)方法實(shí)際就是犧牲描述精確度來換取描述效率,在某些具體應(yīng)用中是不適用的,比如最先進(jìn)的處理器研 究 。 但 對(duì) 于 通 常 應(yīng) 用 背 景 的 數(shù) 字 系 統(tǒng) 來 說 T i m e t o Market是非常重要的,高層次設(shè)計(jì)方法可以極大的提高設(shè)計(jì)的效率。

16、 隨著綜合工具性能的不斷提高,高層設(shè)計(jì)方法的應(yīng)用范圍會(huì)越來越廣。第26頁/共361頁VHDL語言基礎(chǔ)第27頁/共361頁設(shè)計(jì)實(shí)體和結(jié)構(gòu)體的概念 VHDL把一個(gè)電路模塊看作一個(gè)單元,對(duì)任何一個(gè)單元的描述包括接口描述和內(nèi)部特性描述兩個(gè)部分。接口描述稱為設(shè)計(jì)實(shí)體(entity),它提供該單元的公共信息,如名稱、端口等;內(nèi)部特性描述稱為結(jié)構(gòu)體(architecture),它定義單元的內(nèi)部操作特性。 一個(gè)結(jié)構(gòu)體可以對(duì)應(yīng)多個(gè)實(shí)體,結(jié)構(gòu)體和實(shí)體的綁定關(guān)系稱為配置(configuration)。 一個(gè)電路單元只能有一個(gè)entity,下面是一個(gè)最簡(jiǎn)單的例子,描述的電路是一個(gè)半加器第28頁/共361頁一個(gè)半加器的

17、VHDL描述 entity halfadder is port (a, b: in bit; sum, carry: out bit);end halfadder;architecture behavior of halfadder is beginprocess(a, b) beginif (a=1 and b=1) then carry=1;else carry=0;end if; if (a /= b) then sum=1; else sum=0; end if;end process;end behavior;第29頁/共361頁Entity的描述entity 實(shí)體名 is 類屬參數(shù)

18、說明 端口說明end 實(shí)體名;entity mux isgeneric ( m : time := 1ns);port (d0, d1, sel : in bit;q: out bit);end mux;第30頁/共361頁端口的方向 in(輸入)、out(輸出,結(jié)構(gòu)體內(nèi)部不能再使用)、inout(輸入輸出雙向)、buffer(輸出,結(jié)構(gòu)體內(nèi)可再使用) 不提倡使用buffer型,可以在內(nèi)部在起一個(gè)名字)第31頁/共361頁結(jié)構(gòu)體的框架architecture 結(jié)構(gòu)體名 of 實(shí)體名 is定義語句begin 并行處理語句end 結(jié)構(gòu)體名; 定義語句位于architecture和begin之間,用

19、于對(duì)結(jié)構(gòu)體內(nèi)部所使用的信號(hào)、常數(shù)、數(shù)據(jù)類型、函數(shù)等進(jìn)行定義。信號(hào)定義和端口說明一樣,應(yīng)有信號(hào)名和數(shù)據(jù)類型,因它是內(nèi)部使用,不需要有方向的說明。 并行處理語句處于語句begin和end之間,具體描述了結(jié)構(gòu)體的行為及其連接關(guān)系。在結(jié)構(gòu)體中的語句都是可以并行執(zhí)行的,語句的執(zhí)行順序不以書寫的語句順序?yàn)閳?zhí)行順序。第32頁/共361頁Entity和architecture 總結(jié) 一個(gè)單元只有一個(gè)設(shè)計(jì)實(shí)體,而結(jié)構(gòu)體的個(gè)數(shù)可以不限。也就是說,一個(gè)設(shè)計(jì)實(shí)體可以對(duì)應(yīng)于多個(gè)結(jié)構(gòu)體。這種方式的意義在于:每個(gè)結(jié)構(gòu)體代表該電路的某一方面的特性(如行為特性、結(jié)構(gòu)特性等),而且,即使是同一特性的描述,也可以有不同的抽象層次。

20、第33頁/共361頁在一個(gè)單元中引用另外一個(gè)單元architecture structure of fulladder issignal ts: bit;signal tc1, tc2: bit;component halfadderport (a, b: in bit; sum, carry: out bit);end component; beginU0: halfadder port map (a, b, ts, tc1);U1: halfadder port map (ts, cin, sum, tc2)end structure;第34頁/共361頁設(shè)計(jì)庫 庫(library)是經(jīng)過

21、編譯后的數(shù)據(jù)的集合,它存放程序包定義、設(shè)計(jì)實(shí)體定義、結(jié)構(gòu)體定義和配置定義。 在VHDL中,庫的說明總是放在設(shè)計(jì)單元的最前面,如: library IEEE; use IEEE.std_logic_1164.all; 這樣,在設(shè)計(jì)單元內(nèi)就可以使用庫中的數(shù)據(jù)。 在VHDL中,可以存在多個(gè)不同的庫,但是庫與庫之間是獨(dú)立的,不能互相嵌套。當(dāng)前在VHDL中存在的庫大致包括:標(biāo)準(zhǔn)庫、工藝庫、用戶自定義的庫和WORK庫。其中, WORK庫是現(xiàn)行工作庫,設(shè)計(jì)者描述的VHDL不需要任何說明,都可以存放在WORK庫中 ,而且對(duì)WORK庫的使用不需要任何說明。第35頁/共361頁常用的數(shù)據(jù)類型 在設(shè)計(jì)可綜合電路是常

22、用的類型 整形(一般只在作下標(biāo)時(shí)用,內(nèi)部) std_logic,std_logic_vector(9值邏輯),端口都用這兩種類型 類型之間的轉(zhuǎn)化 首先說明IEEE.std_logic_unsigned庫 conv_integer(),conv_std_logic_vector(integer,n)第36頁/共361頁Std_logic和std_logic_vector Std_logic信號(hào)用單引號(hào),比如a=1; std_logic_vector用雙引號(hào),比如a=“111”; 對(duì)于所有bit都相同的std_logic_vector,可以使用1)來賦值 使用&可以將位數(shù)較短的std_logic_

23、vector型組合為數(shù)位較長的std_logic_vector型第37頁/共361頁九值邏輯 1-force 1 0-force 0 X-Force Unknown Z-High Impedance U-Uninitialized W-Weak unknown H-Weak 1 L-Weak 0 - dont care在可綜合電路中設(shè)計(jì)中需要的:1,0,Z,X,-Z用來描述三態(tài)X用來賦不可能出現(xiàn)的缺省值-用來賦無關(guān)值,利于優(yōu)化U在仿真中會(huì)遇到,沒有初始化,在功能仿真中按照else來計(jì)算,在后仿真中則會(huì)傳遞,導(dǎo)致錯(cuò)誤第38頁/共361頁常用的運(yùn)算符 邏輯運(yùn)算符 not、and、or、nand、n

24、or、xor 算術(shù)運(yùn)算符 +和-,其它運(yùn)算符,/,*,mod對(duì)于一般的可綜合電路來講,都不使用,因?yàn)樗鼈兊乃惴ǘ急容^復(fù)雜,綜合器綜合的效果不好,需要是用戶自己設(shè)計(jì)算法,比如采用booth算法實(shí)現(xiàn)乘法 連接運(yùn)算符&,比較常用 關(guān)系運(yùn)算符=、/=、=都非常常用 賦值運(yùn)算符=,:=第39頁/共361頁邏輯運(yùn)算 And or nand xor nor not 操作數(shù)必須類型和長度都相同 注意使用括號(hào) c=a and b and c c=(a and b) and c -?一樣不一定一樣第40頁/共361頁關(guān)系運(yùn)算符 ,= 只要是同一類型,長度不同可以比較在synopsys中是可以的,比如“11111”

25、“1100” 這是因?yàn)槎x了IEEE.std_logic_unsigned庫第41頁/共361頁Std_logic_unsigned庫function =(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;function (L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;function (L: STD_LOGIC_VECTOR; R: INTEG

26、ER) return BOOLEAN;function (L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;function =(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: ST

27、D_LOGIC_VECTOR) return BOOLEAN;function =(L: STD_LOGIC_VECTOR; R: INTEGER) return BOOLEAN;function =(L: INTEGER; R: STD_LOGIC_VECTOR) return BOOLEAN;第42頁/共361頁加法運(yùn)算 最常見的加一計(jì)數(shù)器可以寫成: A=A+1這是因?yàn)樵趗nsigned 中定義了function +(L: STD_LOGIC_VECTOR; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function +(L: STD_LO

28、GIC_VECTOR; R: INTEGER) return STD_LOGIC_VECTOR; function +(L: INTEGER; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR; function +(L: STD_LOGIC_VECTOR; R: STD_LOGIC) return STD_LOGIC_VECTOR; function +(L: STD_LOGIC; R: STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;第43頁/共361頁引用庫文件 這個(gè)預(yù)先定義的包文件std_logic_unsig

29、ned.vhd被已經(jīng)被預(yù)先編譯的IEEE庫中,因此設(shè)計(jì)者在使用上面的操作時(shí),需要使用IEEE.std_logic_unsigned.all;否則編譯時(shí)就會(huì)出錯(cuò). 用戶可以自己包文件,編譯到指定庫中,并在源文件中引用這個(gè)包文件: use my_library.my_package.all第44頁/共361頁進(jìn)程process 一個(gè)進(jìn)程就相當(dāng)于一個(gè)并行的語句,它的內(nèi)部時(shí)串行的進(jìn)程名:process (進(jìn)程敏感信號(hào)列表)begin順序描述語句;end process process語句從process開始,到end process結(jié)束,進(jìn)程名可以省略。第45頁/共361頁P(yáng)rocess的例子mux2

30、: process(a, b, s)beginif (s=0) then f=a;else f=b;end if;end process; 進(jìn)程的所有輸入信號(hào)應(yīng)該放在敏感表內(nèi),否則會(huì)造成前后仿真不符第46頁/共361頁信號(hào)和變量 信號(hào)在電路模塊之間傳遞信息,signal用在模塊內(nèi)部,具體表現(xiàn)在變量在entity的端口和architecture內(nèi)說明,variable在process內(nèi)部說明,無法傳遞到process外面 賦給變量的值則立即成為當(dāng)前值,而賦給信號(hào)的值必須在進(jìn)程結(jié)束后才能成為當(dāng)前值。第47頁/共361頁順序語句 Wait if ; case loop 對(duì)于一般的可綜合電路描述,這四

31、種順序語句已經(jīng)足夠了第48頁/共361頁Wait 語句 Wait until clkevent and clk=1 then 用來描述寄存器 在testbench中描述延遲時(shí)可以使用wait for xxx ns; 敏感表相當(dāng)于一個(gè)wait on語句第49頁/共361頁進(jìn)程的啟動(dòng) process(a, b, s)beginif (s=0) then f=a;else f=b;end if;-wait on a,b,s進(jìn)程在這個(gè)地方掛起end process;第50頁/共361頁IF語句 IF condition1 THEN sequence_of_statements1ELSIF condit

32、ion2 THEN sequence_of_statements2 ELSE sequence_of_statements3 END IF; 其中括號(hào)內(nèi)為可選部分,它表示當(dāng)條件1成立時(shí),執(zhí)行順序語句序列1;當(dāng)條件2成立時(shí),執(zhí)行順序語句序列2;否則執(zhí)行順序語句序列3。ELSEIF付句可以重復(fù),但ELSE付句只能有一條。第51頁/共361頁IF語句 注意如果if引導(dǎo)event代表時(shí)鐘,此時(shí)不能有else復(fù)句 用戶組合邏輯的if,如果沒有else付句,一定要在IF語句前面有缺省賦值,否則會(huì)造成不需要的latch第52頁/共361頁IF語句 IF語句對(duì)應(yīng)的電路就是多選電路,比如 if select=1

33、 then output=a; else output sequence_of_statements1; WHEN choices2= sequence_of_statements1; END CASE 其中條件有如下四種表達(dá)方法: WHEN 值 = WHEN 值值值 = WHEN 值 TO 值 = WHEN others = 選擇項(xiàng)必須覆蓋表達(dá)式所有選項(xiàng),不足時(shí)其它選項(xiàng)包括在others項(xiàng)中。第54頁/共361頁Case語句 Case語句對(duì)應(yīng)的是無優(yōu)先級(jí)的多選 如果在case中給多個(gè)信號(hào)賦值一定要在前面有缺省賦值. 大家看下面的程序有什么問題?第55頁/共361頁Case語句Process(

34、decoder_in)beginCASE decoder_in IS W H E N “ 0 0 0 ” = decoder_out decoder_out decoder_out decoder_out decoder_out decoder_out decoder_out decoder_out decoder_outX);第56頁/共361頁Loop語句FOR identifier IN discrete_range LOOP sequence_of_statemetns END LOOP ; LOOP語句適用于描述有重復(fù)操作,或模塊需要很強(qiáng)的迭代能力時(shí)使用。如下電路完成對(duì)輸入的8位向量

35、的翻轉(zhuǎn),即信號(hào)的高位與低位對(duì)調(diào): FOR i IN 0 TO 7 LOOP output_vector(i)=input_vector(7-i); END LOOP;第57頁/共361頁loop語句 上述程序中i為循環(huán)變量,在VHDL中不允許任何對(duì)循環(huán)變量的賦值,也就是說不允許在任何函數(shù)返回值中存在循環(huán)變量,或在任何過程的輸出與雙向參量中存在循環(huán)變量。并且循環(huán)變量不用顯式說明,它的作用域僅存在于循環(huán)語句內(nèi)部,因此不允許在循環(huán)語句內(nèi)部存在于循環(huán)變量同名的變量或信號(hào)第58頁/共361頁進(jìn)制 B(binary) O(octal) X(Hexadecimal) 通常情況下我們都用二進(jìn)制 對(duì)于位寬為4n

36、的用16進(jìn)制極為方便,在VHDL的語言規(guī)定中,可以使用=X”0F”賦值,但synopsys到9910才支持,如果工具不支持只能使用2進(jìn)制.第59頁/共361頁理解并行的概念 在architecture中的語句都是并行的,它們的執(zhí)行順序和位置無關(guān),一個(gè)process相當(dāng)于一個(gè)并行語句. 比如在architecture 中存在: D=A+E; A=B+C; 將產(chǎn)生兩個(gè)加法器,第二個(gè)輸出作為第一個(gè)的一個(gè)輸入在仿真時(shí),當(dāng)B或C變化時(shí),激活語句2,當(dāng)A或E變化時(shí),激活語句2. 本質(zhì):在現(xiàn)實(shí)電路中,各個(gè)部件是并行工作的,一個(gè)部件的輸入變化,才會(huì)引起這個(gè)部件的輸出變換.第60頁/共361頁避免組合環(huán) 在一般

37、情況下不要使用組合環(huán),尤其是不要用行為級(jí)描述組合環(huán),如果需要使用電路圖形式,并在設(shè)計(jì)中不要優(yōu)化這個(gè)模塊第61頁/共361頁練習(xí) 寫一個(gè)帶有異步復(fù)位同步置數(shù)的增量計(jì)數(shù)器Clk 時(shí)鐘load 同步置數(shù)信號(hào)rst 異步清零data 置入數(shù)據(jù)count 計(jì)數(shù)器輸出第62頁/共361頁lIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY counter IS PORT (clk :IN std_logic; load :IN std_logic; rst :IN std_logic; data :I

38、N std_logic_vector(7 downto 0); count :OUT std_logic_vector(7 downto 0);END counter;ARCHITECTURE arc_counter OF counter IS SIGNAL cnt :std_logic_vector(7 downto 0); BEGIN PROCESS(clk,rst) BEGIN IF rst =1 THEN cnt0); ELSIF clkevent AND clk=1 THEN IF load=1 THEN cnt=data; ELSE cnt=cnt-1; END IF; END I

39、F; END PROCESS; count=cnt;END arc_counter;第63頁/共361頁敏感表Process(a,b) begin s=a; t=b; v=s or t; end processProcess(a,b,s,t) begin s=a; t=b; v=s or t; end process仿真和綜合的區(qū)別?結(jié)論:出現(xiàn)在賦值號(hào)左邊的都應(yīng)該寫在敏感表中第64頁/共361頁LatchProcess(x,z) begin if x=1 then y=z; end if;end process;X=0時(shí)需要保存原值,導(dǎo)致產(chǎn)生一個(gè)latch第65頁/共361頁使用VHDL描述基

40、本電路第66頁/共361頁原因 采用HDL語言進(jìn)行數(shù)字電路設(shè)計(jì)的流程中最重要的環(huán)節(jié)就是將語言描述轉(zhuǎn)化為電路,將你的設(shè)計(jì)付諸實(shí)現(xiàn),因此你必須知道所描述的語言對(duì)應(yīng)的電路,只有這樣綜合工具才會(huì)輸出一個(gè)可預(yù)知的、準(zhǔn)確的、高質(zhì)量的結(jié)果,滿足設(shè)計(jì)者對(duì)電路功能、時(shí)序和面積上的要求。數(shù)字電路都是由一些基本單元連接而成的,只有能準(zhǔn)確的描述這些常見電路才有可能使用這些模塊構(gòu)建更復(fù)雜的數(shù)字電路,因此熟悉數(shù)字電路中一些常見電路的描述是進(jìn)行大規(guī)模系統(tǒng)設(shè)計(jì)的基礎(chǔ)第67頁/共361頁RTL電路模型第68頁/共361頁結(jié)論 對(duì)于RTL電路的描述主要就是針對(duì)時(shí)序部件和組合邏輯的描述,如果設(shè)計(jì)者在使用VHDL語言進(jìn)行描述時(shí),能遵

41、照組合邏輯和時(shí)序電路描述的規(guī)范,那么就可以使綜合工具明確設(shè)計(jì)者的意圖,綜合出設(shè)計(jì)者期望的電路。第69頁/共361頁數(shù)字系統(tǒng)的結(jié)構(gòu) 除了調(diào)用的一些宏單元模塊時(shí)序電路、組合邏輯以及總線和存儲(chǔ)單元,這四種基本單元就可以構(gòu)成各種各樣的數(shù)字電路。 我個(gè)人的理解,不知道對(duì)不對(duì)?第70頁/共361頁時(shí)序部件 時(shí)序邏輯電路在任一時(shí)刻的輸出信號(hào)不但與當(dāng)時(shí)的輸入信號(hào)有關(guān),而且還依賴于電路原來的狀態(tài),因此這類電路必須具有記錄過去狀態(tài)的能力。時(shí)序邏輯電路中最基本的記憶部件就是就是觸發(fā)器(flip-flop)和鎖存器(latch),它們都是一位的存儲(chǔ)單元,多位存儲(chǔ)單元就可以構(gòu)成寄存器(Register)第71頁/共36

42、1頁LATCH 鎖存器是電平觸發(fā)的,鎖存器的值在時(shí)鐘的一個(gè)邏輯狀態(tài)可以更改,在另一個(gè)邏輯狀態(tài)被保存下來,因此在使能階段輸入端的一個(gè)毛刺也會(huì)導(dǎo)致電路的誤操作,無法阻止毛刺的傳播,容易產(chǎn)生較多的競(jìng)爭(zhēng)冒險(xiǎn)現(xiàn)象。從數(shù)字電路教材中,我們可以知道鎖存器的優(yōu)點(diǎn)是面積小、功耗低、速度較快,因此在許多全定制和半定制ASIC設(shè)計(jì)中會(huì)使用鎖存器單元,但在使用FPGA或CPLD實(shí)現(xiàn)電路時(shí),應(yīng)該避免使用鎖存器。第72頁/共361頁寄存器的描述 PROCESS BEGIN WAIT UNTIL (edge) END PROCESS; 或 PROCESS(sensitivity list) BEGIN IF (edge)

43、END IF; END PROCESS;第73頁/共361頁時(shí)鐘沿描述使用WAIT語句時(shí),進(jìn)程不需要敏感表,WAIT UNTIL語句就相當(dāng)于敏感表的功能。在使用IF語句時(shí)應(yīng)該將時(shí)鐘信號(hào)放入敏感表中。對(duì)于時(shí)鐘的跳變有兩種描述方法,event屬性或函數(shù)調(diào)用。如下所示: clkevent AND clk=1 -上跳沿的event屬性描述 clkevent AND clk=0 -下跳沿的event屬性描述 rising_edge(clk) -上跳沿的函數(shù)調(diào)用 falling_edge(clk) -下跳沿的函數(shù)調(diào)用在電路設(shè)計(jì)中,應(yīng)使用event屬性來描述時(shí)鐘跳變,因?yàn)橐恍¬HDL的綜合工具并不支持函數(shù)調(diào)

44、用,并且函數(shù)只檢測(cè)0到1和1到0的跳變,無法檢測(cè)出X到1或0到X,這對(duì)于使用的九值邏輯是不適合的。第74頁/共361頁時(shí)鐘沿描述時(shí)鐘沿在作為IF或ELSIF語句的條件時(shí),只可以單獨(dú)使用,不能和其他條件共存,如下面的語句就是錯(cuò)誤的: IF (edge AND rst=1) THEN同時(shí)當(dāng)某一IF語句或ELSIF語句后有時(shí)鐘沿做條件時(shí),就不可以在有ELSE付句,如下面的語句描述也是錯(cuò)誤的: IF rst=1 THEN Sequential_statement ELSIF (edge) THEN Sequential_statement ELSE Sequential_statement END I

45、F;第75頁/共361頁異步復(fù)位和同步復(fù)位 記憶部件在電路加電后其狀態(tài)是不確定的,它的初值應(yīng)由復(fù)位信號(hào)來設(shè)置,根據(jù)設(shè)置的時(shí)機(jī)不同,可分為同步置位和異步置位。所謂同步置位是指置位信號(hào)只有在給定的時(shí)鐘沿下才可以完成工作;而異步復(fù)位是指復(fù)位信號(hào)一旦生效存儲(chǔ)部件就會(huì)被置位。其原理如下圖所示第76頁/共361頁Asyn reset 和syn reset第77頁/共361頁異步復(fù)位的VHDL描述PROCESS(sensitivity list) BEGIN IF (reset) THEN ELSIF (set)THEN ELSIF (edge) THEN END IF; END PROCESS;此時(shí)的敏感

46、表只需要異步負(fù)位信號(hào)和時(shí)鐘信號(hào)即可,IF語句相對(duì)于WAIT語句更靈活一些第78頁/共361頁強(qiáng)調(diào)在FPGA設(shè)計(jì)中盡量不要使用latch第79頁/共361頁觸發(fā)器描述LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff IS PORT ( data :IN std_logic; clk :IN std_logic; q :OUT std_logic); END dff; ARCHITECTURE dff OF dff IS BEGIN PROCESS BEGIN WAIT UNTIL clkevent AND clk=1; q=data; E

47、ND PROCESS; END dff;第80頁/共361頁電路圖第81頁/共361頁帶異步復(fù)位上沿的D觸發(fā)器LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff_asyn_reset IS PORT ( data :IN std_logic; clk :IN std_logic; reset :IN std_logic; q :OUT std_logic); END dff_asyn_reset; ARCHITECTURE dff_asyn_reset OF dff_asyn_reset IS BEGIN PROCESS(clk,rese

48、t) BEGIN IF reset = 0THEN q=0; ELSIF clkevent AND clk =1 THEN q=data; END IF; END PROCESS; END dff_asyn_reset;第82頁/共361頁電路圖第83頁/共361頁帶異步置位復(fù)位的上跳沿D觸發(fā)器LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff_asyn IS PORT ( data :IN std_logic; clk :IN std_logic; preset :IN std_logic; reset :IN std_logic; q

49、 :OUT std_logic); END dff_asyn_preset; ARCHITECTURE dff_asyn OF dff_asyn IS BEGIN PROCESS(clk,preset,reset) BEGIN IF preset = 0THEN q=1; ELSIF reset = 0THEN q=0; ELSIF clkevent AND clk =1 THEN q=data; END IF; END PROCESS; END dff_asyn;第84頁/共361頁電路圖第85頁/共361頁帶異步復(fù)位和輸入使能的上跳沿D觸發(fā)器LIBRARY IEEE;USE IEEE.ST

50、D_LOGIC_1164.ALL; ENTITY dff_ck_en IS PORT ( data :IN std_logic; clk :IN std_logic; reset :IN std_logic; en :IN std_logic; q :OUT std_logic); END dff_ck_en; ARCHITECTURE dff_ck_en OF dff_ck_en IS BEGIN PROCESS(clk,reset) BEGIN IF reset=0 THEN q=0; ELSIF clkevent AND clk=1 THEN IF en=1THEN q=data; EN

51、D IF; END IF; END PROCESS; END dff_ck_en;第86頁/共361頁電路圖第87頁/共361頁計(jì)數(shù)器 計(jì)數(shù)器是數(shù)字系統(tǒng)中使用最多的時(shí)序電路。它不僅能用于對(duì)時(shí)鐘脈沖計(jì)數(shù),還可用于定時(shí)、分頻、產(chǎn)生節(jié)拍脈沖以及進(jìn)行數(shù)字運(yùn)算等。稍微復(fù)雜的數(shù)字系統(tǒng),幾乎都包含計(jì)數(shù)器。按計(jì)數(shù)器中觸發(fā)器翻轉(zhuǎn)的次序,可以把計(jì)數(shù)器分為同步式和異步式兩種。在同步計(jì)數(shù)器中,當(dāng)時(shí)鐘脈沖輸入時(shí)觸發(fā)器的翻轉(zhuǎn)是同時(shí)的,而在異步計(jì)數(shù)器中,觸發(fā)器則不是同時(shí)翻轉(zhuǎn)的 一般的設(shè)計(jì)中都使用同步計(jì)數(shù)器第88頁/共361頁帶異步清零和計(jì)數(shù)使能的8位同步計(jì)數(shù)器LIBRARY IEEE; USE IEEE.STD_LOGIC

52、_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY counter8 IS PORT (clk :IN std_logic; en :IN std_logic; rst :IN std_logic; count :OUT std_logic_vector(7 downto 0); END counter8; ARCHITECTURE counter8 OF counter8 IS SIGNAL cnt :std_logic_vector(7 downto 0); BEGIN PROCESS(clk,en,cnt,rst) BEGIN IF rs

53、t =0THEN cnt0); ELSIF clkevent AND clk=1 THEN IF en=1 THEN cnt=cnt+1; END IF; END IF; END PROCESS; count=cnt; END counter8;第89頁/共361頁RTL視圖第90頁/共361頁建議 大家在初期的練習(xí)中,對(duì)于簡(jiǎn)單電路可以使用synplify綜合后觀察它的RTL視圖,比較自己對(duì)模塊的基本理解,可以提高對(duì)vhdl描述和綜合的認(rèn)識(shí)。第91頁/共361頁移位操作LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_U

54、NSIGNED.ALL; ENTITY shift IS PORT(clk :IN std_logic; rst :IN std_logic; data : IN std_logic; Q : OUT std_logic_vector(7 downto 0); END shift; ARCHITECTURE shift OF shift IS SIGNAL Q_temp:std_logic_vector(7 downto 0); BEGIN PROCESS(rst,clk) BEGIN IF rst=1 THEN Q_temp0); ELSIF clkevent AND clk=1 THEN

55、Q_temp=Q_temp(6 downto 0)&data; END IF; END PROCESS; Q=Q_temp; END shift; 第92頁/共361頁電路圖第93頁/共361頁練習(xí) 描述一個(gè)串并轉(zhuǎn)換電路,并行輸出位8位,搜索到同步字AA后開始發(fā)送一個(gè)同步標(biāo)記,以后每組一個(gè)字,發(fā)一次.第94頁/共361頁結(jié)果Process(Q_temp,data) variable compare_AA:std_logic_vector(7 downto 0) begin compare_AA:=Q_temp(6 downto 0)&data; IF compare_AA=“10101010”

56、 then same_with_AA=1; else same_with_AA=0; end if;end process;process(rst,clk) begin if rst=1 then word_counter_enable=0; elsif clkevent and clk=1 then if same_with_AA=1 then word_counter_enable=1; end if; end if;end process;第95頁/共361頁結(jié)果Process(rst,clk) begin if rst=1 then word_counter=“000”; elsif

57、clkevent and clk=1 then if word_counter_enable=1 then word_counter= word_counter+1; end if; end if;end process;process(word_coutner) begin if word_counter=“001” then word_syn=1; else word_syn=0; end if;end process;第96頁/共361頁組合電路的描述 在RTL電路模型中,處于各個(gè)寄存器之間的部分都是組合邏輯電路,相對(duì)于寄存器的描述,組合邏輯的描述相對(duì)模糊,設(shè)計(jì)者只能大約的估計(jì)出組合部分

58、的面積和時(shí)延,而組合邏輯在很大程度上決定著電路的面積和速度,因此對(duì)于組合電路的準(zhǔn)確描述就顯得十分重要。只有了解基本組合單元的特點(diǎn),才能使由VHDL語言描述產(chǎn)生的電路符合設(shè)計(jì)者時(shí)序和面積上的要求。 組合邏輯的特點(diǎn)是在任何時(shí)刻電路的輸出僅僅取決于該時(shí)刻的輸入信號(hào),而與這一時(shí)刻輸入信號(hào)作用前電路原來的狀態(tài)沒有任何關(guān)系。在電路結(jié)構(gòu)上基本是由邏輯門組成,只有從輸入到輸出的通路,沒有從輸出反饋到輸入的回路。 雖然邏輯電路由于具體問題的不同而千差萬別,但其中也有若干種電路在各類數(shù)字系統(tǒng)中大量的出現(xiàn),并且其它許多電路都是在它們的基礎(chǔ)上變化得到的,下面就介紹如何用VHDL語言來描述這些基本電路。第97頁/共36

59、1頁多選電路 ENTITY pri_mux IS PORT ( input_a :IN std_logic; input_b :IN std_logic; input_c :IN std_logic; input_d :IN std_logic; select_a :IN std_logic; select_b :IN std_logic; select_c :IN std_logic; pout :OUT std_logic); END pri_mux; ARCHITECTURE pri_mux OF pri_mux IS BEGIN PROCESS(input_a,input_b,inpu

60、t_c,input_d,select_a,select_b,select_c) BEGIN IF select_a=1 THEN pout= input_a; ELSIF select_b=1 THEN pout= input_b; ELSIF select_c=1 THEN pout= input_c; ELSE pout pout pout pout pout pout=input_d;第100頁/共361頁電路圖第101頁/共361頁無優(yōu)先級(jí)的譯碼器ENTITY decoder ISPORT ( Ain : IN std_logic_vector(2 downto 0); en : IN

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論