電子設計自動化eda第一章vhdl基本結(jié)構(gòu)_第1頁
電子設計自動化eda第一章vhdl基本結(jié)構(gòu)_第2頁
電子設計自動化eda第一章vhdl基本結(jié)構(gòu)_第3頁
電子設計自動化eda第一章vhdl基本結(jié)構(gòu)_第4頁
電子設計自動化eda第一章vhdl基本結(jié)構(gòu)_第5頁
已閱讀5頁,還剩93頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1.1實體1.2結(jié)構(gòu)體1.3塊、子程序和進程1.4庫和程序包1.5配置第一章VHDL根本結(jié)構(gòu)總目錄章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)

一個完整的VHDL程序或設計實體,要求能為VHDL綜合器所支持,并能作為一個獨立的設計單元,即元件的形式而存在的VHDL程序。

實體和結(jié)構(gòu)體是必需的——可構(gòu)成最簡單VHDL程序。通常VHDL程序包含五個局部:〔1〕實體〔ENTITY〕〔2〕結(jié)構(gòu)體〔ARCHITECTURE〕〔3〕包集合〔PACKAGE〕〔4〕庫〔LIBRARY〕〔5〕配置〔CONFIGURATION〕章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄實體是VHDL語言設計的根本單元。1.1實體

實體說明是對設計實體與外部電路的接口描述,它規(guī)定了設計單元的輸入輸出接口信號或引腳,是設計實體對外的一個通信界面。

結(jié)構(gòu)體用于描述此設計實體的邏輯結(jié)構(gòu)和邏輯功能。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄【例1】ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINy<=aWHENs='0'ELSEb;ENDARCHITECTUREone;實體說明結(jié)構(gòu)體1.1設計實體圖1-1mux21a實體圖1-2mux21a結(jié)構(gòu)體設計實體總由實體說明和結(jié)構(gòu)體兩局部構(gòu)成2選1多路選擇器的VHDL描述實體語句結(jié)構(gòu)如下:例:ENTITYor2ISPORT〔a,b:INSTD_LOGIC;C:OUTSTD_LOGIC);ENDENTITYor2;ENTITY實體名IS[GENERIC〔類屬表〕;][PORT〔端口表〕;]ENDENTITY實體名;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄在層次化系統(tǒng)中,實體說明是整個模塊或整個系統(tǒng)的輸入輸出〔I/O〕接口在器件級設計中實體說明是芯片的輸入輸出〔I/O〕章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄類屬參量〔GENERIC〕

類屬參量是實體說明組織中的可選項,放在端口說明之前,其一般格式為:GENERIC[CONSTANT]名字表:[IN]子類型標識[:=靜態(tài)表達式],…]

類屬參量〔GENERIC〕類屬參量是實體說明組織中的可選項,放在端口說明之前,其一般格式為:GENERIC[CONSTANT]名字表:[IN]子類型標識[:=靜態(tài)表達式],…]

類屬參量用來規(guī)定端口的大小、實體中子元件數(shù)目及實體的定時特性等。它和常數(shù)不同,常數(shù)只能從設計實體的內(nèi)部得到賦值且不能改變;而類屬參量的值可由設計實體的外部提供。

章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄這里類屬參量中參數(shù)trise為上升沿寬度,tfall為下降沿寬度,用于仿真模塊的設計;定義地址總線的寬度為Addrwidth位,類屬值Addrwidth的改變將使結(jié)構(gòu)體中所有相關的總線定義同時改變,由此使整個設計實體的硬件結(jié)構(gòu)發(fā)生變化。例:GENERIC〔trise,tfall:TIME:=1ns;Addrwidth:INTEGER:=16);PORT(a0,a1:INSTD_LOGIC;Add_bus:OUTSTD_LOGIC_VECTOR(addrwidth-1DOWNTO0);章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄端口說明〔PORT〕端口是對根本設計單元與外部接口的描述。其功能相當電路圖符號的外部引腳。端口可以被賦值,也可以當做邏輯變量用在邏輯表達式中。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄

其中端口名是設計者為實體的每一個對外通道所取的名字,通常為英文字母加數(shù)字,名字的定義有一定的慣例,如clk表示時鐘,D開頭的端口名表示數(shù)據(jù),A開頭的端口名表示地址。端口模式是指這些通道上的數(shù)據(jù)流動的方式,如輸入或輸出等。端口模式有以下幾種類型:1.輸入〔IN〕允許信號進入實體,主要用于時鐘輸入、控制輸入〔如load、reset、enable、clk〕和單向的數(shù)據(jù)輸入〔如地址數(shù)據(jù)信號address〕等。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄2.輸出〔OUT〕輸出模式只允許信號離開實體,常用于計數(shù)輸出、單向數(shù)據(jù)輸出、被設計實體產(chǎn)生的控制其他實體的信號等。注意:輸出模式不能用于被設計實體的內(nèi)部反響,因為輸出端口在實體內(nèi)不能看做是可讀的。3.雙向模式〔INOUT〕雙向模式允許信號雙向傳輸〔既可以進入實體,也可以離開實體〕,雙向模式端口允許引入內(nèi)部反響。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄4.緩沖〔BUFFER〕緩沖模式允許信號輸出到實體外部,但同時也可以在實體內(nèi)部引用該端口的信號。緩沖端口既能用于輸出也能用于反響。緩沖模式用于在實體內(nèi)部建立一個可讀的輸出端口,例如計數(shù)器輸出、計數(shù)器的現(xiàn)態(tài)用來決定計數(shù)器的次態(tài)。端口模式可用以下圖說明,圖中方框代表一個設計實體或模塊。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄在VHDL設計中,通常將輸入信號端口指定為輸入模式,輸出信號端口指定為輸出模式,而雙向數(shù)據(jù)通信信號,如計算機PCI總線的地址/數(shù)據(jù)復用總線,DMA控制器數(shù)據(jù)總線等純雙向的信號采用雙向端口模式。從端口的名稱、模式就能一目了然地指導信號的用途、性質(zhì)、來源和去向。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄結(jié)構(gòu)體是對實體功能的具體描述,因此它一定要跟在實體的后面。行為描述〔根本設計單元的數(shù)學模型描述〕、存放器傳輸描述〔數(shù)據(jù)流描述〕和結(jié)構(gòu)描述〔邏輯元件連接描述〕1.2結(jié)構(gòu)體

結(jié)構(gòu)體也叫構(gòu)造體,結(jié)構(gòu)體描述了根本設計單元〔實體〕的結(jié)構(gòu)、行為、元件及內(nèi)部連接關系,也就是說它定義了設計實體的功能,規(guī)定了設計實體的數(shù)據(jù)流程,制定了實體內(nèi)部元件的連接關系。結(jié)構(gòu)體對其根本設計單元的輸入和輸出關系可用以下三種方式進行描述,即:章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄圖VHDL程序設計根本結(jié)構(gòu)圖結(jié)構(gòu)體構(gòu)造圖結(jié)構(gòu)體一般由兩大局部組成:ARCHITECTURE結(jié)構(gòu)體名OF實體名IS[定義語句]BEGIN[功能描述語句]END結(jié)構(gòu)體名;〔1〕對數(shù)據(jù)類型、常數(shù)、信號、子程序和元件等因素進行說明的局部;〔2〕描述實體的邏輯行為、以各種不同的描述風格表達的功能描述語句,包括各種順序語句和并行語句。結(jié)構(gòu)體的語句格式為:章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄1.2.1結(jié)構(gòu)體名

結(jié)構(gòu)體名由設計者自行定義,OF后面的實體名指明了該結(jié)構(gòu)體所對應的是哪個實體。有些設計實體有多個結(jié)構(gòu)體,這些結(jié)構(gòu)體的結(jié)構(gòu)體名不可相同,通常用dataflow〔數(shù)據(jù)流〕、behavior〔行為〕、structural〔結(jié)構(gòu)〕命名。這3個名稱表達了3種不同結(jié)構(gòu)體的描述方式,使得閱讀VHDL語言程序時,能直接了解設計者采用的描述方式。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄結(jié)構(gòu)體信號定義語句必須放在關鍵詞ARCHITECTURE和BEGIN之間,用于對結(jié)構(gòu)體內(nèi)部將要使用的信號、常數(shù)、數(shù)據(jù)類型、元件、函數(shù)和過程加以說明。結(jié)構(gòu)體中的信號定義和端口說明一樣,應有信號名稱和數(shù)據(jù)類型定義。因為它是內(nèi)部連接用的信號,因此不需要方向說明。

1.2.2結(jié)構(gòu)體信號定義語句

需要注意的是:實體說明中定義的信號是外部信號,而結(jié)構(gòu)體定義的信號為該結(jié)構(gòu)體的內(nèi)部信號,它只能用于這個結(jié)構(gòu)體中。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄ARCHITECTURErtlOFmujISSIGNALs1:BITSIGNALs2,s3:STD_LOGIC_VECTOR(0TO3);

BEGIN

┇ENDrtl;

例:結(jié)構(gòu)體的信號定義實例。結(jié)構(gòu)體名實體名結(jié)構(gòu)體信號定義語句功能描述語句章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄1.2.3結(jié)構(gòu)體功能描述語句

結(jié)構(gòu)體功能描述語句位于BEGIN和END之間,具體地描述了構(gòu)造體的行為及其連接關系。結(jié)構(gòu)體的功能描述語句可以含有5種不同類型的并行語句,如下圖。每一語句結(jié)構(gòu)內(nèi)部可以使用并行語句,也可以是順序語句。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄結(jié)構(gòu)體構(gòu)造圖:

結(jié)構(gòu)體〔ARCHITECTURE)說明語句功能描述語句塊語句〔BLOCK)進程語句(PROCESS)信號賦值語句子程序調(diào)用語句元件例化語句由一系列并行語句構(gòu)成的組合體,它的功能是將結(jié)構(gòu)體中的并行語句組成一個或多個子模塊定義順序語句模塊,用以將從外部獲得的信號值或內(nèi)部運算數(shù)據(jù)向其他的信號進行賦值將設計實體內(nèi)的處理結(jié)果向定義的信號或界面端口進行賦值可以調(diào)用進程或參數(shù),并將獲得的結(jié)果賦值于信號對其他的設計實體做元件調(diào)用說明,并將此元件的端口與其他元件、信號或高層實體的界面端口進行連接章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)〔Flash演示〕總目錄ENTTITYmux2ISPORT〔d0,d1:INBIT;sel:INBIT;s:OUTBIT〕;ENDmux2;ARCHITECTUREdataflowOFmux2ISSIGNALsig:BIT;BEGINSig<=(d0ANDsel)OR(NOTselANDd1);S<=sig;ENDdataflow;例:2選1數(shù)據(jù)選擇器信號定義語句〔內(nèi)部信號,無方向〕功能描述語句章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄塊語句〔BLOCK〕在較大規(guī)模的電子系統(tǒng)設計中,傳統(tǒng)的硬件電路設計通常包括一張系統(tǒng)總電路原理圖和假設干張子原理圖。在VHDL程序設計中,結(jié)構(gòu)體是由多個BLOCK塊構(gòu)成的,如果將結(jié)構(gòu)體比做總電路原理圖,那么,每個BLOCK塊那么相當于一張子原理圖。1.3塊、子程序和進程

章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄BLOCK塊語句的結(jié)構(gòu):

塊標號:BLOCK接口說明類屬說明BEGIN并行塊語句ENDBLOCK〔塊標號〕;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄例:B1:BLOCKSIGNALs1:BIT;BEGINs1<=aANDb;B2:BLOCKSIGNALs2:BIT;BEGINs2<=cANDd;B3:BLOCKBEGINZ<=s2;ENDBLOCKB3;

ENDBLOCKB2;y<=s1;ENDBLOCKB1;

章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄PROCESS結(jié)構(gòu)是最能表達VHDL語言特色的語句。與BLOCK語句一樣,利用PROCESS語句結(jié)構(gòu)可以描述一個功能獨立的電路。與BLOCK語句不同之處是,在系統(tǒng)仿真時,PROCESS結(jié)構(gòu)中的語句是按順序逐條向下執(zhí)行的,而不像BLOCK語句那樣并發(fā)執(zhí)行。一個結(jié)構(gòu)體中可以有多個并行運行的進程結(jié)構(gòu),每一個進程內(nèi)部是由一系列順序語句來構(gòu)成的。1.3.2進程〔PROCESS〕章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄PROCESS語句的結(jié)構(gòu):注意:〔1〕在多個進程的結(jié)構(gòu)體描述中,進程標號是區(qū)分各個進程的標志。但是進程標號并不是必需的?!?〕單進程以PROCESS開始,以ENDPROCESS結(jié)束。[進程標號]PROCESS[〔敏感信號表〕][IS][進程說明語句]BEGIN順序描述語句ENDPROCESS[進程標號];章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYnor2_v2ISPORT(a,b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDnor2_v2;ARCHITECTUREbehaveOFnor2_v2ISBEGINPROCESS(a,b)VARIABLEcomb:STD_LOGIC_VECTOR(1DOWNTO0);例:兩輸入或非門y<=NOT〔aORb〕;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄BEGINcomb:=a&b;CASEcombISWHEN"00"=>y<='1';WHEN"01"=>y<='0';WHEN"10"=>y<='0';WHEN"11"=>y<='0';WHENOTHERS=>y<='X';ENDCASE;ENDPROCESS;ENDbehave;

‘X’:不定章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄D觸發(fā)器的VHDL描述D觸發(fā)器【例】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF1ISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDDFF1;ARCHITECTUREbhvOFDFF1ISSIGNALQ1:STD_LOGIC;--類似于在芯片內(nèi)部定義一個數(shù)據(jù)的暫存節(jié)點BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ1<=D;ENDIF;Q<=Q1;--將內(nèi)部的暫存數(shù)據(jù)向端口輸出ENDPROCESS;ENDbhv;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄VHDL描述的語言現(xiàn)象說明1.標準邏輯位數(shù)據(jù)類型STD_LOGICBIT數(shù)據(jù)類型定義:

TYPEBITIS('0','1');STD_LOGIC數(shù)據(jù)類型定義:TYPESTD_LOGICIS('U','X','0','1','Z','W','L','H','-');STD_LOGIC所定義的9種數(shù)據(jù)的含義是:‘U’表示未初始化的;‘X’表示強未知的;‘0’表示強邏輯0;‘1’表示強邏輯1;‘Z’表示高阻態(tài);‘W’表示弱未知的;‘L’表示弱邏輯0;‘H’表示弱邏輯1;‘-’表示忽略。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄VHDL描述的語言現(xiàn)象說明2.設計庫和標準程序包3.SIGNAL信號定義和數(shù)據(jù)對象【例】ARCHITECTUREbhvOFDFF1IS

SIGNALQ1:STD_LOGIC;

BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ1<=D;ENDIF;Q<=Q1;ENDPROCESS;

ENDbhv;使用庫和程序包的一般定義表式是:

LIBRARY<設計庫名>;USE<設計庫名>.<程序包名>.ALL;三種類型數(shù)據(jù)對象:信號signal變量variable常數(shù)constant章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄VHDL描述的語言現(xiàn)象說明4.上升沿檢測表達式關鍵詞EVENT是信號屬性,VHDL通過以下表式來測定某信號的跳變邊沿:信號名'EVENTAND(信號名='1')AND(信號名'LAST_VALUE='0')信號名=‘1’AND信號名’LAST_VALUE=’0’rising_edge(信號名)--信號的數(shù)據(jù)類型必須是STD_LOGIC信號名’EVENT--如CLK’EVENTwaituntil信號名='1’;--利用wait語句章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄實現(xiàn)時序電路的VHDL不同表達方式【例】...PROCESS(CLK)BEGINIFCLK'EVENTAND(CLK='1')AND(CLK'LAST_VALUE='0')THENQ<=D;--確保CLK的變化是一次上升沿的跳變ENDIF;ENDPROCESS;【例】...PROCESS(CLK)BEGINIFCLK=‘1’ANDCLK’LAST_VALUE=‘0’--同上例THENQ<=D;ENDIF;ENDPROCESS;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄實現(xiàn)時序電路的VHDL不同表達方式【例】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDENTITYDFF3;ARCHITECTUREbhvOFDFF3ISSIGNALQ1:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFrising_edge(CLK)--CLK的數(shù)據(jù)類型必須是STD_LOGICTHENQ1<=D;ENDIF;Q<=Q1;ENDPROCESS;ENDARCHITECTUREbhv;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄

在VHDL中,數(shù)據(jù)對象(DataObjects)類似于一種容器,它接受不同數(shù)據(jù)類型的賦值。數(shù)據(jù)對象有三種,即常量(CONSTANT)、變量(VARIABLE)和信號(SIGNAL)。前兩種可以從傳統(tǒng)的計算機高級語言中找到對應的數(shù)據(jù)類型,其語言行為與高級語言中的變量和常量十分相似。但信號是具有更多的硬件特征的特殊數(shù)據(jù)對象,是VHDL中最有特色的語言要素之一。VHDL數(shù)據(jù)對象〔DataObjects〕章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄1.常量(CONSTANT)常量的定義和設置主要是為了使設計實體中的常數(shù)更容易閱讀和修改。例如,將位矢的寬度定義為一個常量,只要修改這個常量就能很容易地改變寬度,從而改變硬件結(jié)構(gòu)。在程序中,常量是一個恒定不變的值,一旦作了數(shù)據(jù)類型的賦值定義后,在程序中不能再改變,因而具有全局意義。常量的定義形式如下:CONSTANT常量名:數(shù)據(jù)類型﹕=表達式;例如:CONSTANTFBUS﹕BIT_VECTOR﹕=“01011〞;CONSTANTVCC﹕REAL﹕=5.0;CONSTANTDELY﹕TIME﹕=25ns;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄

VHDL要求所定義的常量數(shù)據(jù)類型必須與表達式的數(shù)據(jù)類型一致。常量的數(shù)據(jù)類型可以是標量類型或復合類型,但不能是文件類型(File)或存取類型(Access)。常量定義語句所允許的設計單元有實體、結(jié)構(gòu)體、程序包、塊、進程和子程序。在程序包中定義的常量可以暫不設具體數(shù)值,它可以在程序包體中設定。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄常量的可視性,即常量的使用范圍取決于它被定義的位置。在程序包中定義的常量具有最大全局化特征,可以用在調(diào)用此程序包的所有設計實體中;定義在設計實體中的常量,其有效范圍為這個實體定義的所有的結(jié)構(gòu)體;定義在設計實體的某一結(jié)構(gòu)體中的常量,那么只能用于此結(jié)構(gòu)體;定義在結(jié)構(gòu)體的某一單元的常量,如一個進程中,那么這個常量只能用在這一進程中。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄VHDL數(shù)據(jù)對象〔DataObjects〕常量〔Constant〕固定值,不能在程序中被改變增強程序的可讀性,便于修改程序可在Package、Entity、Architecture、Process、Function、Procedure中進行定義,其有效范圍也相應限定書寫格式:Constant常量名[,常量名…]:數(shù)據(jù)類型[:=表達式];例:Constantdata_bus_width:integer:=8;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄2.變量(VARIABLE)在VHDL語法規(guī)那么中,變量是一個局部量,只能在進程和子程序中使用。變量不能將信息帶出對它作出定義的當前設計單元。變量的賦值是一種理想化的數(shù)據(jù)傳輸,是立即發(fā)生,不存在任何延時的行為。VHDL語言規(guī)那么不支持變量附加延時語句。變量常用在實現(xiàn)某種算法的賦值語句中。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄定義變量的語法格式如下:VARIABLE變量名:數(shù)據(jù)類型:=初始值;例如:VARIABLEA:INTEGER;--定義A為整數(shù)型變量VARIABLEB,C:INTEGER:=2;--定義B和C為整型變量,初始值為2章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄

變量作為局部量,其適用范圍僅限于定義了變量的進程或子程序中。仿真過程中惟一的例外是共享變量。變量的值將隨變量賦值語句的運算而改變。變量定義語句中的初始值可以是一個與變量具有相同數(shù)據(jù)類型的常數(shù)值,也可以是一個全局靜態(tài)表達式,這個表達式的數(shù)據(jù)類型必須與所賦值變量一致。此初始值不是必需的,綜合過程中綜合器將略去所有的初始值。變量數(shù)值的改變是通過變量賦值來實現(xiàn)的,其賦值語句的語法格式如下:目標變量名:=表達式;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄VHDL數(shù)據(jù)對象〔DataObjects〕變量〔Variable〕臨時數(shù)據(jù),沒有物理意義只能在Process、Function、Procedure中定義,并只在其內(nèi)部有效,要使其全局有效,先轉(zhuǎn)換為Signal。用:=進行賦值用:=進行初始化variableresult:std_logic:=‘0’;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄3.信號(SIGNAL)信號是描述硬件系統(tǒng)的根本數(shù)據(jù)對象,它類似于連接線。信號可以作為設計實體中并行語句模塊間的信息交流通道。在VHDL中,信號及其相關的信號賦值語句、決斷函數(shù)、延時語句等很好地描述了硬件系統(tǒng)的許多根本特征。如硬件系統(tǒng)運行的并行性;信號傳輸過程中的慣性延時特性;多驅(qū)動源的總線行為等。信號作為一種數(shù)值容器,不但可以容納當前值,也可以保持歷史值。這一屬性與觸發(fā)器的記憶功能有很好的對應關系。信號的定義格式如下:SIGNAL信號名:數(shù)據(jù)類型﹕=初始值;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄信號初始值的設置不是必需的,而且初始值僅在VHDL的行為仿真中有效。與變量相比,信號的硬件特征更為明顯,它具有全局性特性。例如,在程序包中定義的信號,對于所有調(diào)用此程序包的設計實體都是可見的;在實體中定義的信號,在其對應的結(jié)構(gòu)體中都是可見的。事實上,除了沒有方向說明以外,信號與實體的端口(PORT)概念是一致的。相對于端口來說,其區(qū)別只是輸出端口不能讀入數(shù)據(jù),輸入端口不能被賦值。信號可以看成是實體內(nèi)部的端口。反之,實體的端口只是一種隱形的信號,端口的定義實際上是作了隱式的信號定義,并附加了數(shù)據(jù)流動的方向。信號本身的定義是一種顯式的定義,因此,在實體中定義的端口,在其結(jié)構(gòu)體中都可以看成一個信號,并加以使用而不必另作定義。以下是信號的定義例如:章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄SIGNALS1:STD_LOGIG﹕=0;--定義了一個標準位的單值信號S1,初始值為低電平SIGNALS2,S3:BIT; --定義了兩個位BIT的信號S2和S3SIGNALS4:STD_LOGIC_VECTOR(15DOWNTO0); --定義了一個標準位矢的位矢量--(數(shù)組、總線)信號,共有16個信號元素以下例如定義的信號數(shù)據(jù)類型是設計者自行定義的,這是VHDL所允許的:TYPEFOURIS(‘X’,‘0’,‘I’,‘Z’);SIGNALS1﹕FOUR;SIGNALS2﹕FOUR﹕=‘X’;SIGNALS3﹕FOUR﹕=‘L’;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄

其中,信號S1的初始值取為默認值,VHDL規(guī)定初始值取值以取LEFT'MOST項(即數(shù)組中的最左項)為默認值。在此例中是‘X’(任意狀態(tài))。信號的使用和定義范圍是實體、結(jié)構(gòu)體和程序包。在進程和子程序中不允許定義信號。信號可以有多個驅(qū)動源,或者說賦值信號源,但必須將此信號的數(shù)據(jù)類型定義為決斷性數(shù)據(jù)類型。在進程中,只能將信號列入敏感表,而不能將變量列入敏感表。可見進程只對信號敏感,而對變量不敏感。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄VHDL數(shù)據(jù)對象〔DataObjects〕信號〔Signals〕代表連線,Port也是一種信號沒有方向性,可給它賦值,也可當作輸入在Package、Entity、Architecture中定義設定的初始值在綜合時沒有用,只是在仿真時在開始設定一個起始值。用<=進行賦值用:=進行初始化signalcount:bit_vector(3downto0):=“0011〞;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄4.三者的使用比較(1)從硬件電路系統(tǒng)來看,常量相當于電路中的恒定電平,如GND或VCC接口,而變量和信號那么相當于組合電路系統(tǒng)中門與門間的連接及其連線上的信號值。(2)從行為仿真和VHDL語句功能上看,二者的區(qū)別主要表現(xiàn)在接受和保持信號的方式、信息保持與傳遞的區(qū)域大小上。例如信號可以設置延時量,而變量那么不能;變量只能作為局部的信息載體,而信號那么可作為模塊間的信息載體。變量的設置有時只是一種過渡,最后的信息傳輸和界面間的通信都靠信號來完成。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄(3)從綜合后所對應的硬件電路結(jié)構(gòu)來看,信號一般將對應更多的硬件結(jié)構(gòu),但在許多情況下,信號和變量并沒有什么區(qū)別。例如在滿足一定條件的進程中,綜合后它們都能引入存放器。這時它們都具有能夠接受賦值這一重要的共性,而VHDL綜合器并不理會它們在接受賦值時存在的延時特性。(4)雖然VHDL仿真器允許變量和信號設置初始值,但在實際應用中,VHDL綜合器并不會把這些信息綜合進去。這是因為實際的FPGA/CPLD芯片在上電后,并不能確保其初始狀態(tài)的取向。因此,對于時序仿真來說,設置的初始值在綜合時是沒有實際意義的。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄信號與變量的區(qū)別architecturertlofstartissignalcount:integerrange0to7;beginprocess(clk,count)beginif(clk'eventandclk='1')thencount<=count+1;if(count=0)thencarryout<='1';elsecarryout<='0';endif;endif;endprocess;endrtl;architecturertlofstartisbeginprocess(clk)variablecount:integerrange0to7;beginif(clk'eventandclk='1')thencount:=count+1;if(count=0)thencarryout<='1';elsecarryout<='0';endif;endif;endprocess;endrtl;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄信號與變量的區(qū)別architectureaofstartissignaltmp:std_logic;beginprocess(a_bus)begintmp<='1';foriin3downto0loop

tmp<=a_bus(i)andtmp;endloop;carryout<=tmp;endprocess;enda;architectureaofstartisbeginprocess(a_bus)variabletmp:std_logic;begintmp:='1';foriin3downto0loop

tmp:=a_bus(i)andtmp;endloop;carryout<=tmp;endprocess;enda;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄子程序被調(diào)用時,首先要初始化,執(zhí)行處理功能后,將處理結(jié)果傳遞給主程序。子程序內(nèi)部的值不能保持,子程序返回后才能被再次調(diào)用并初始化。子程序〔SUBPROGRAM〕VHDL程序與其他軟件語言程序中應用子程序的目的是相似的,即能夠更有效地完成重復性的工作。子程序模塊是利用順序語句定義和完成算法的,但子程序不能像進程那樣可以從本結(jié)構(gòu)體的其他塊或進程結(jié)構(gòu)中讀取信號值或向信號賦值,只能通過子程序調(diào)用與子程序的界面端口進行通信。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄子程序有兩種類型:1.過程〔PROCEDURE〕過程〔PROCEDURE〕和函數(shù)〔FUNCTION〕過程語句的書寫格式為:PROCEDURE過程名〔參數(shù)表〕IS[說明局部]BEGIN過程語句局部ENDPROCEDURE過程名;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄2、過程設計實例Procedureexample(signald:instd_logic;signalclk:instd_logic;signalreset:instd_logic;signalq,qb:outstd_logic)isBeginif(reset=‘0’)thenq<=‘0’;qb<=‘1’;elsif(clk’eventandclk=‘1’)thenq<=d;qb<=notd;endif;Endexample;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄2.函數(shù)函數(shù)的語言書寫格式為:

FUNCTION函數(shù)名〔參數(shù)表〕RETURN數(shù)據(jù)類型IS[說明局部];BEGIN順序語句;RETURN[返回變量名];ENDRETURN函數(shù)名;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄例:用VHDL構(gòu)造的選擇最大值的函數(shù)程序。

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;PACKAGEbpacISFUNCTIONmax(a:STD_LOGIC_VECTOR;b:STD_LOGIC_VECTOR)RETURNSTD_LOGIC_VECTOR;ENDbpac;PACKAGEBODYbpacISFUNCTIONmax(a:STD_LOGIC_VECTOR;b:STD_LOGIC_VECTOR)章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄RETURNSTD_LOGIC_VECTORISVARIABLEtmp:STD_LOGIC_VECTOR(a’RANGE);BEGINIF(a>b)THENtmp:=a;ELSEtmp:=b;ENDIF;RETURNtmp;END;ENDbpac;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄

VHDL語言在進行任何操作的過程中,對數(shù)據(jù)的類型都有嚴格的要求,但是,對名稱的要求并不嚴格,同一名稱可以定義成使用不同類型數(shù)據(jù)參數(shù)的子程序或類型。這樣就可以對VHDL的子程序進行重載。子程序的重載

所謂重載就是允許設計人員編寫更加可讀的VHDL源代碼,在多個子程序或類型有同一名稱時,該名稱被重載。這樣在應用到具體設計中時,VHDL編譯器就將會選擇相適應的一個目標。重載可以使設計人員防止為了重復操作而書寫多個不同名字的子程序,使VHDL源代碼易于維護,易于使用。

子程序重載就是允許設計人員編寫相同名字的兩個或兩個以上的子程序,并且允許這些子程序的參數(shù)使用不同的數(shù)據(jù)類型。

子程序重載分為函數(shù)的重載和過程的重載。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄過程的重載

子程序重載的過程重載類似于函數(shù)的重載。在調(diào)用過程中使用哪一個子程序由以下條件決定的:

1、子程序調(diào)用過程中的參數(shù)的數(shù)目;2、子程序調(diào)用過程中參數(shù)的數(shù)據(jù)類型;3、子程序調(diào)用過程中使用的帶名字的參數(shù)關聯(lián)時參數(shù)的名字;4、子程序為函數(shù)時返回值的類型。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄函數(shù)的重載

設計人員在定義函數(shù)時,可以使用相同的函數(shù)名定義多個函數(shù),但是在調(diào)用時具體使用哪一個函數(shù)是由以下條件決定的:

1、子程序調(diào)用函數(shù)時參數(shù)的數(shù)目;2、子程序調(diào)用函數(shù)時參數(shù)的數(shù)據(jù)類型;3、子程序調(diào)用函數(shù)時使用的帶名字的參數(shù)關聯(lián)時參數(shù)的名字;4、子程序調(diào)用函數(shù)時返回值的類型。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄庫和程序包用來描述和保存元件、類型說明函數(shù)、子程序等,以便在其它設計中可以隨時引用這些信息,提高設計效率。1.4.1庫〔LIBRARY〕庫語句的格式為:

LIBRARY庫名;

庫是經(jīng)編譯后的數(shù)據(jù)的集合,它存放包集合定義、實體定義、結(jié)構(gòu)定義和配置定義。1.4庫和程序包

章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄USE語句指明庫中的程序包。一旦說明了庫和程序包,整個設計實體都可以進入訪問或調(diào)用,但其作用范圍僅限于所說明的設計實體。USE語句的使用將使所說明的程序包對本設計實體局部或全部開放。USE語句有以下兩種常用的格式:第一種語句格式的作用是向本設計實體開放指定庫中的特定程序包內(nèi)的所選定的工程。第二種語句格式的作用是向本設計實體開放指定庫中的特定程序包內(nèi)的所有內(nèi)容?!?〕USE庫名.程序包名.工程名;〔2〕USE庫名.程序包名.ALL;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄例如:

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_1164.STD_ULOGIC;

STD_ULOGIC:可枚舉數(shù)據(jù)類型此例中,第一個USE語句說明翻開IEEE庫中的STD_LOGIC_1164程序包,并使程序包中的所有公共資源對本語句后面的VHDL設計實體程序全部開放,關鍵詞ALL代表程序包中的所有資源。第二個USE語句開放了程序包STD_LOGIC_1164中的STD_ULOGIC數(shù)據(jù)類型。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄

注意:庫說明語句的作用范圍從一個實體說明開始到它所屬的結(jié)構(gòu)體、配置為止,當一個源程序中出現(xiàn)兩個以上實體時,兩條作為使用庫的說明語句應在每個設計實體說明語句前重復書寫。例:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYandIS

┇ENDand;ARCHITECTUREdataflowOFandIS

┇ENDdataflow;庫使用說明章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄CONFIGURATIONc1OFandIS

┇ANDc1;LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;ENTITYorISCONFIGURATIONc2OFandIS

┇ANDc2;CONFIGURATION〔配置〕庫使用說明

章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄程序包也叫包集合,主要用來存放各個設計都能共享的數(shù)據(jù)類型、子程序說明、屬性說明和元件說明等局部。設計者使用時只要用USE子句進行說明即可。程序包的一般書寫格式如下:PACKAGE程序包名ISEND[PACKAGE]程序包名;——程序包首PACKAGEBODY程序包名IS

┇——程序包體END[PACKAGEBODY][程序包名];

程序包由兩局部組成:程序包首和程序包體。1.4.2程序包章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄例:;PACKAGEmathISTYPEtw16 ISARRAY〔0TO15〕OFT_WLOGIC;FUNCTIONadd〔a,b:INtw16〕RETURNtw16;FUNCTIONsub〔a,b:INtw16〕RETURNtw16;ENDmath;PACKAGEBODYmathISFUNCTIONvect_to_int〔s:tw16〕;RETURNINTEGERISVARIBLEresult:INTEGER:=0;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄BEGINFORiIN0TO7LOOPresult:=result*2;IFs(i)=’1’THENresult:=result+1ENDIF;ENDLOOP;RETURNresult;ENDvect_to_int;FUNCTIONint_to_tw16(s:INTEGER);RETURNtw16ISVARIBLEresult:tw16;VARIBLEdigit:INTEGER:=2**15;VARIBLElocal:INTEGER;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄BEGINlocal:=s;FORiIN15DOWNTO0LOOPIFlocal/digit>=1THENLocal:=local-digit;ELSEresult(i):=0;ENDIF;digit:=digit/2;ENDLOOP;RETURNresult;ENDint_to_tw16;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄FUNCTIONadd(a,b:INtw16);RETURNtw16ISVARIBLEresult:INTEGER;BEGINresult:=vect_to_int(a)+vect_to_int(b);RETURNint_to_tw16(result);ENDadd;FUNCTIONsub(a,b:INtw16);RETURNtw16ISVARIBLEresult:INTEGER;BEGINresult:=vect_to_int(a)+vect_to_int(b);RETURNint_to_tw16(result);ENDsub;ENDmath;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄此例的程序包是由程序包首和程序包體兩局部組成。(1)程序包首定義了數(shù)據(jù)類型和函數(shù)的調(diào)用說明(2)程序包體中才具體描述實現(xiàn)該函數(shù)功能的語句和數(shù)據(jù)的賦值。分開描述的好處是:當函數(shù)的功能需要做某些調(diào)整或數(shù)據(jù)賦值需要變化時,只要改變程序包體的相關語句就可以了,而無需改變程序包首的說明,這樣就使得需要重新編譯的單元數(shù)目盡可能的減少了。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄1.5配置

在用VHDL描述硬件電路時,常常采用結(jié)構(gòu)描述方式和混合描述方式。在這兩種描述方式中,常常需要將其他設計實體作為元件進行引用,這時就需要將不同元件通過配置安裝到不同的設計實體中。VHDL提供了配置語句用于描述各種設計實體和元件之間連接關系以及設計實體和結(jié)構(gòu)體之間的連接關系。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄例:與、或、與非、或非、異或,5個結(jié)構(gòu)體共用一個實體。默認配置語句的根本格式為:CONFIGURATION配置名OF實體名IS

FOR選配結(jié)構(gòu)體名ENDFOREND配置名;1.5.1默認配置章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄ARCHITECTUREor2_arcOFexample_vISBEGINy<=aORb;ENDor2_arc;ARCHITECTUREand2_arcOFexample_vISBEGINy<=aANDb;ENDand2_arc;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYexample_vISPORT(a:INSTD_LOGIC;b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDexample_v;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄ARCHITECTURExor2_arcOFexample_vISBEGINy<=aXORb;ENDxor2_arc;ARCHITECTUREnor2_arcOFexample_vISBEGINy<=NOT(aORb);ENDnor2_arc;ARCHITECTUREnand2_arcOFexample_vISBEGINy<=NOT(aANDb);ENDnand2_arc;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄CONFIGURATIONcfg3OFexample_vISFORnand2_arcENDFOR;ENDcfg3;CONFIGURATIONcfg2OFexample_vISFORor2_arcENDFOR;ENDcfg2;CONFIGURATIONcfg1OFexample_vISFORand2_arcENDFOR;ENDcfg1;cfg1將與邏輯結(jié)構(gòu)體配置給實體cfg2將或邏輯結(jié)構(gòu)體配置給實體cfg3將與非邏輯結(jié)構(gòu)體配置給實體章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄CONFIGURATIONcfg5OFexample_vISFORxor2_arcENDFOR;ENDcfg5;在上例〔example_v〕中,有5個不同的結(jié)構(gòu)體,分別用來完成二輸入的邏輯與、或、與非、或非和邏輯異或的運算操作。CONFIGURATIONcfg4OFexample_vISFORnor2_arcENDFOR;ENDcfg4;cfg4將與非邏輯結(jié)構(gòu)體配置給實體cfg5將異或邏輯結(jié)構(gòu)體配置給實體章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄在程序中使用了5個默認配置語句來指明設計實體example_v和哪個結(jié)構(gòu)體一起組成一個完整的設計,見程序過程中的標注。在進行模擬的時候,將根據(jù)所編譯的是上面的哪個配置來決定要進行模擬的結(jié)構(gòu)體,也就是說最后一個被編譯的結(jié)構(gòu)體〔異或邏輯〕將被模擬,以下圖就是異或邏輯的仿真波形。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄

異或門仿真波形章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄結(jié)構(gòu)體的配置主要是用來對結(jié)構(gòu)體中引用的元件進行配置。結(jié)構(gòu)體的配置的書寫格式:FOR<元件例化標號>:<元件名>USEENTITY<庫名>.<實體名(結(jié)構(gòu)體名)>;1.5.2結(jié)構(gòu)體的配置以1位全加器的構(gòu)成為例說明結(jié)構(gòu)體的配置的用法:將兩輸入與門、或門、異或門設置成通用例化元件由結(jié)構(gòu)體引用。章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYand2_vISPORT(a:INSTD_LOGIC;b:INSTD_LOGIC;y:OUTSTD_LOGIC);ENDand2_v;二輸入與門源代碼:ARCHITECTUREand2_arcOFand2_vISBEGINy<=aANDb;ENDand2_arc;CONFIGURATIONand2_cfgOFand2_vISFORand2_arcENDfor;ENDand2_cfg;章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄與門and2_v仿真波形章目錄第一節(jié)第二節(jié)第三節(jié)第四節(jié)第五節(jié)總目錄LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYor2_vISPORT(a:INSTD_LOGIC;b:INSTD_LOGIC;y:OUTSTD_

溫馨提示

  • 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

提交評論