EDA技術(shù)教程講義第五章VHD初步_第1頁
EDA技術(shù)教程講義第五章VHD初步_第2頁
EDA技術(shù)教程講義第五章VHD初步_第3頁
EDA技術(shù)教程講義第五章VHD初步_第4頁
EDA技術(shù)教程講義第五章VHD初步_第5頁
已閱讀5頁,還剩175頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

EDA技術(shù)教程講義第五章VHD初步

HDL文本輸入設(shè)計HDL:VHDLVerilogAble

VeryhighspeedintegratedHardwareDescriptionLanguage(VHDL)是IEEE、工業(yè)標(biāo)準(zhǔn)硬件描述語言用語言的方式而非圖形等方式描述硬件電路特別適合于設(shè)計的電路有:復(fù)雜組合邏輯電路,如:譯碼器、編碼器、加減法器、多路選擇器、地址譯碼器…...狀態(tài)機

VHDL的功能和標(biāo)準(zhǔn)

VHDL描述輸入端口輸出端口電路的行為和功能VHDL有兩個標(biāo)準(zhǔn):IEEEStd1076-1987(calledVHDL1987)IEEEStd1076-1993(calledVHDL1993)5.1VHDL程序的基本結(jié)構(gòu)一、VHDL設(shè)計實體的組成

庫和程序包(Library、package)--打開本設(shè)計使用的庫和程序包實體(Entity) --說明本設(shè)計實體的外部端口結(jié)構(gòu)體(Architecture) --描述本設(shè)計實體的內(nèi)部結(jié)構(gòu)和行為配置(Configuration) --指定實體希望配置的結(jié)構(gòu)體【例5-1.1】ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINy<=aWHENs='0'ELSEb;ENDARCHITECTUREone;實體結(jié)構(gòu)體5-1.1多路選擇器VHDL描述圖5-1mux21a實體圖5-2mux21a結(jié)構(gòu)體2選1多路選擇器的VHDL描述2選1多路選擇器的VHDL描述【例5-1.2】

ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISSIGNALd,e:BIT;BEGINd<=aAND(NOTS);e<=bANDs;y<=dORe;ENDARCHITECTUREone;【例5-1.3】...

ARCHITECTUREoneOFmux21aISBEGINy<=(aAND(NOTs))OR(bANDs);ENDARCHITECTUREone;圖5-3mux21a功能時序波形8

二、實體功能描述

實體的功能

對一個電路元件或電路系統(tǒng)的外部接口進行描述,實體反映了本電路與其他電路之間的連接關(guān)系,可以看成一個電路符號。1、實體的語句格式實體描述語句通常包括引導(dǎo)語句、結(jié)束語句、類屬表和端口表四部分,如表5.1.1所示。

表5.1.1實體描述語句的格式名稱內(nèi)容引導(dǎo)語句ENTITY實體名

IS類

表GENERIC(……);端

表PORT(……);結(jié)束語句END實體名;

是一種端口界面常數(shù),常以一種說明形式放在實體或結(jié)構(gòu)體的說明部分,類屬值可以由設(shè)計實體外部賦值,通過類屬參數(shù)的重新設(shè)定可以改變一個設(shè)計實體的內(nèi)部電路和規(guī)模。類屬參數(shù)以關(guān)鍵詞GENERIC引導(dǎo)的類屬表給出,表中提供時間參數(shù)或總線寬度等信息。類屬說明的書寫格式是:

GENERIC(常數(shù)名:數(shù)據(jù)類型:設(shè)定值

常數(shù)名:數(shù)據(jù)類型:設(shè)定值);[例5-2]ENTITYbodyISGENERIC(n:INTEGER);PORT(a:INSTD_LOGIC_VECTOR(n-1DOWNTO0);b:OUTSTD_LOGIC);ENDbody;

類屬參數(shù)端口模式

INOUTINOUTBUFFER

數(shù)據(jù)類型表5.1.3幾種基本的數(shù)據(jù)類型類型取值范圍特點位類型BIT0和1由IEEE中的標(biāo)準(zhǔn)程序包STANDARD定義,能表示二值邏輯信號位矢量BIT_VECTORBIT的數(shù)組由IEEE標(biāo)準(zhǔn)程序包STANDARD定義,能表示多位二值邏輯信號邏輯位STD_LOGIC具有9個不同狀態(tài);未初始化狀態(tài)記為'U',強未知值記為'X',強邏輯0記為'0',強邏輯1記為'1',高阻態(tài)'Z',弱不定值'W'弱邏輯0記為'L',弱邏輯1記為'H',不定狀態(tài)記為'-'由STD_LOGIC_1164程序包定義,能表示二值或9值邏輯,在數(shù)字電路中常出現(xiàn)的只有‘0’,‘1’,‘Z’和‘-’四種表5.1.3幾種基本的數(shù)據(jù)類型類型取值范圍特點邏輯位矢量STD_LOGIC_VECTOR是STD_LOGIC的數(shù)組由STD_LOGIC_1164程序包定義,能表示多位STD_LOGIC信號,如總線信號整數(shù)類型INTEGER正整數(shù),負整數(shù)和零,POSITIVE(正整數(shù))是其中的一個子集;NATURAL(自然數(shù))也是一個子集,含正整數(shù)和0整數(shù)的書寫不加引號,而位和邏輯位要加單引號。數(shù)組要加雙引號;整數(shù)的取值范圍是32位有符號數(shù),即±2147893647布爾類型BOOLEANFALSE和TRUE用于邏輯操作或條件判斷,在VHDL仿真器中FALSE和TRUE也用0和1表示,但不是數(shù)值

a:INBIT;b:OUTSTD_LOGIC_VECTOR(7DOWNTO0);SIGNALC:STD_LOGIC_VECTOR(1TO4);SIGNALd:BIT_VECTOR(3DOWNTO0);三、結(jié)構(gòu)體(ARCHITECTURE)說明1、結(jié)構(gòu)體的功能與格式結(jié)構(gòu)體承擔(dān)的具體任務(wù)是:定義結(jié)構(gòu)體中的各項內(nèi)部使用元素,如數(shù)據(jù)類型(TYPE)、常數(shù)(CONSTANT)、信號(SIGNAL)、元件(COMPONENT)、過程(POCEDURE)等;通過VHDL語句描述實體所要求的具體行為和邏輯功能;描述各元件之間的連接。結(jié)構(gòu)體的語句書寫格式如下:Architectrue結(jié)構(gòu)體名OF實體名IS定義語句; --并非一定有,視具體情況而定BEGIN功能描述語句;

END結(jié)構(gòu)體名;

描述方式定義特點行為描述表示輸入與輸出信號之間的轉(zhuǎn)換行為,不含電路結(jié)構(gòu)方面的信息,只強調(diào)電路的行為和功能?!ば袨槊枋鲋饕菍υO(shè)計對象進行數(shù)學(xué)建模,描述程序大量采用算術(shù)運算、關(guān)系運算、慣性延時、傳輸延時等語句·結(jié)構(gòu)體中的過程語句屬于典型的行為描述·VHDL語言具有較強的行為仿真和綜合能力,是EDA技術(shù)發(fā)展的基礎(chǔ)數(shù)據(jù)流描述以并行賦值語句為基礎(chǔ),當(dāng)語句中的任一輸入信號值發(fā)生變化時,激活賦值語句,使信息從所描述的結(jié)構(gòu)中“流出”。這種描述方式稱為數(shù)據(jù)流方式,又稱為寄存器轉(zhuǎn)換層次描述(RTL)·以規(guī)定設(shè)計中的各種寄存器形式為特征,并在各寄存器之間插入組合邏輯,能描述組合邏輯和時序邏輯·既可以用功能描述的RTL方式,也可用與硬件一一對應(yīng)的方式·基于并行賦值語句實現(xiàn)結(jié)構(gòu)描述調(diào)用低層設(shè)計模塊或門級電路,過端口連接實現(xiàn)設(shè)計要求。類似于實際的硬件電路連接·主要應(yīng)用VHDL中的例化語句和生成語句·完成各種簡單電路到復(fù)雜電路的演變2、結(jié)構(gòu)體的三種描述方式

[例5-3]用行為描述方式設(shè)計的全加器LIBRARYIEEE; --庫說明

USEIEEE.STD_LOGIC_1164.ALL; ENTITYonebitadderIS --實體說明PORT(x,y,cin:INBIT; --端口信號定義Sum,count:OUTBIT);ENDonebitadder;ARCHITECTUREbehaviorOFonebitadderIS --結(jié)構(gòu)說明BEGINPROCESS(x,y,cin)BEGINsum<=xXORyXORcin;count<=(xANDy)OR((xXORy)ANDcin);ENDPROCESS;ENDbehavior;[[例5-4]用RTL描述方式設(shè)計的2選1數(shù)據(jù)選擇器……ARCHITECTURErtlOFmux2ISBEGINy<=input(a)WHENsel='1'ELSEInput(b);ENDrtl[例5-5]用結(jié)構(gòu)描述方式設(shè)計的R-S觸發(fā)器ENTITYrsffISPORT(set,reset:INBIT)q,qbar:INOUTBIT);ENDrsff;ARCHITECTUREnetlistOFrsffISCOMPONENTnand2 --元件說明PORT(a,b:INBIT;c:OUTBIT);ENDCOMPONENF;BEGINU1:nand2PORTMAP(set,qbar,q);--用位置關(guān)聯(lián)實現(xiàn)元件端口名和系統(tǒng)端口的連接

U2:nand2PORTMAP(q,reset,qbar);ENDentlist;表5.1.5結(jié)構(gòu)體中的三種子結(jié)構(gòu)方式比較子結(jié)構(gòu)名稱語句格式特點塊語句結(jié)構(gòu)塊結(jié)構(gòu)名:BLOCK

端口說明

類屬說明

BEGIN

并行語句

ENDBLOCK塊結(jié)構(gòu)名;·將一個結(jié)構(gòu)體劃分為幾個模塊,恰當(dāng)?shù)姆謮K有利于程序的移植、排措、仿真及程序閱讀·每個塊的端口和類屬參數(shù)說明只對塊結(jié)構(gòu)內(nèi)部有效·塊結(jié)構(gòu)中的語句是并行的,與書寫順序無關(guān)進程語句結(jié)構(gòu)進程名:PROCESS(每感信號表)IS進程說明BEGIN順序描述語句ENDPROCESS進程名;·敏感信號表通常要求將進程中所有輸入信號都放在敏感信號表中·敏感信號中的某一個發(fā)生變化即啟動執(zhí)行一遍,然后進入等待狀態(tài),下一次敏感信號變化再次啟動·一個結(jié)構(gòu)中可包含多個進程,各進程之間是并行的,而各進程中的語句是順序語句;·進程說明部分說明進程所需的局部環(huán)境,進程名可要可不要。子程序語句結(jié)構(gòu)

分過程語句和函數(shù)語句PROCEDURE過程名(參數(shù)1;參數(shù)2;…)IS定義語句;--定義變量等BEGIN順序處理語句;--過程語句END過程名;FUNCTION函數(shù)名(參數(shù)1;參數(shù)2;……)RETURN數(shù)據(jù)類型IS定義語句;BEGIN順序處理語句;RETURN返回變量名;END函數(shù)名;·能被主程序反復(fù)調(diào)用并能將處理結(jié)果傳送到主程序的程序模塊,子程序分為過程語句(Procedure)和函數(shù)(Function)兩種·過程語句中的參數(shù)包括輸入和輸出信號。每次調(diào)用前,應(yīng)將初始值傳遞到輸入?yún)?shù)中,執(zhí)行結(jié)束后應(yīng)將輸出輸入?yún)?shù)傳送到調(diào)用者的信號或變量中·與進程語句相同的是,子程序模塊也是用順序語句完成定義和算法;但程序不能象進程那樣,從本結(jié)構(gòu)體的并行語句或進程語句中直接讀取信號值以及向信號賦值·子程序中的參數(shù)說明是局部的,只能用于子程序體內(nèi)[例5-6]使用塊語句結(jié)構(gòu)的程序?qū)嵗?位二進制計數(shù)器LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYcounter2ISPORT(clk:INSTD_LOGIC;q1,q2:OUTSTD-LOGIC);ENDcounter2;ARCHITECTUREarch_counter2OFcounter2ISSIGNALcount:STD_LOGIC_VECTOR(1DOWNTO0);BEGINCounter:BLOCK;BEGINProcess(clk)beginIF(clk'eventANDclk='1')THENIFcount='11'THENcount<="00";ELSEcount<=count+1;

ENDIF;ENDIF;q1<=count(1);

q0<=count(0);Endprocess;ENDBLOCKcounter;ENDarch_counter2;上例是一個2位二進制計數(shù)器的VHDL描述,結(jié)構(gòu)體部分使用了塊語句結(jié)構(gòu)。其中,用了兩個IF語句,即當(dāng)時鐘CLK的上升沿到來時,若2位計數(shù)器的輸出q1q0已計數(shù)到11時則將其置為0;否則,將計數(shù)器作加1運算并賦值給q1q0。塊語句只是表示程序的結(jié)構(gòu),并不執(zhí)行.為什么不直接對q1q0作計數(shù)操作而另設(shè)信號count,然后再將count轉(zhuǎn)移到q1q0中呢?

該程序ENTITY前面的3條程序說明什么呢?

AB01010101取整數(shù)數(shù)據(jù)類型,為什么?整數(shù)取值范圍端口信號模式取BUFFER,為什么?注意整數(shù)和位的不同表達方式![例5-7]用進程語句結(jié)構(gòu)的程序?qū)嵗?位二進制計數(shù)器[例5-8]“過程”語句的程序?qū)嵗?位二進制譯碼器PROCEDUREdecoder(code:INSTD_LOGIC_VECTOR(1TO0);decoder_out:OUTSTD_LOGIC_vecTOR(3DOWNTO0)ISVARIABLEdecod:OUTSTD_LOGIC_VECTOR(3DOWNTO0);BEGINCASEcodeISWHEN"00"=>decod<=B"0001";WHEN"01"=>decod<=B"0010";WHEN"10"=>decod<=B"0100";WHEN"11"=>decod<=B"1000";WHENOTHERS=>NULL;ENDCASE;decoder_out<=decod;ENDdecoder;表2位二進制譯碼器真值表codedecoder_out000001010010100100111000[例5-9]函數(shù)定義和調(diào)用舉例LIBRARYIEEE; USEIEEE.STD_LOGIC_1164.ALL; ENTITYfuncIS PORT(a:INSTD_LOGIC_VECTOR(0to2);m:OUTSTD_LOGIC_VECTOR(0to2));ENDENTITYfunc;ARCHITECTUREdemoOFfuncISFUNCTIONsam(x,y,z:STD_LOGIC)RETURNSTD_LOGICISBEGINRETURN(xANDy)ORz;Endsam;BEGINPROCESS(a)BEGINm(0)<=sam(a(0),a(1),a(2));m(1)<=sam(a(2),a(0),a(1));m(2)<=sam(a(1),a(2),a(0));ENDPROCESS;ENDARCHITECTUREdemo;5.1.2寄存器描述及其VHDL語言現(xiàn)象D觸發(fā)器的VHDL描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF1ISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF1ISSIGNALQ1:STD_LOGIC;--類似于在芯片內(nèi)部定義一個數(shù)據(jù)的暫存節(jié)點

BEGIN

D觸發(fā)器BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ1<=D;ENDIF;Q<=Q1;--將內(nèi)部的暫存數(shù)據(jù)向端口輸出

EndPROCESS;ENDbhv;比較用5種不同語句的D觸發(fā)器VHDL程序Entitytest1isport(clk,d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk)beginifclk='1'ANDclk’last_value='0'thenq1<=d;endif;q<=q1;endprocess;endtest1_body;LIBRARYIEEE;USEIEEE.std_logic_1164.all;Entitytest1isport(clk,d:inbit;q:outbit);endtest1;architecturebodyoftest1isbeginprocess(clk,d)beginifrising_edge(clk)thenq<=d;endif;endprocess;endtest1_body;TheyareallthesameDFFEntitytest1isport(clk:inbit;d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk)beginif(clk=‘1’)thenq1<=d;endif;q<=q1;endprocess;endbody;Entitytest1isport(clk:inbit;d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk,d)beginif(clk=‘0’)thenq1<=d;endif;q<=q1;endprocess;endbody;

5.1.3VHDL中的程序庫,包和配置一、VHDL庫庫---用來存放預(yù)先已設(shè)計好的程序包、數(shù)據(jù)集合體、元件的倉庫庫中存放的信息供用戶進行VHDL設(shè)計時調(diào)用,如果在完成一項VHDL設(shè)計需要用到庫中的某一個程序包時,在設(shè)計實體前使用USE語句打開這一程序包。而綜合過程中,綜合器檢測到VHDL源程序中的庫文件時則將源文件讀入.1、常用的庫資源一類是資源庫,庫中存放常規(guī)元件、標(biāo)準(zhǔn)模塊、預(yù)定義數(shù)據(jù)類型等,有些是被IEEE確定為標(biāo)準(zhǔn)的,如IEEE庫中的STD_LOGIC_1164程序包。一類是設(shè)計庫,例如存放用戶設(shè)計和定義的某些元件和程序包的Work庫。程序庫由若干程序包構(gòu)成,程序包又包含若干子程序,子程又涉及若干基本設(shè)計單元。VHDL設(shè)計中常用的有IEEE庫、STD庫、Work和ASIC庫表5.1.6VHDL中常用庫的特點庫的名稱包含的程序包特點IEEE庫

STD_LOGIC_1164·該程序包是IEEE標(biāo)準(zhǔn)的最常用的程序包。

STD_LOGIC_ARITH·該程包擴展了UNSIGNED、SIGNED、SMALL-INT三種數(shù)據(jù)類型,以及相關(guān)類型的算術(shù)運算符,比較操作函數(shù),還有數(shù)據(jù)類型轉(zhuǎn)換函數(shù)。STD_LOGIC_UNSIGNEDSTD_LOGIC_SIGNED

·此兩種程序包重載了用于INTEGER、STD_LOGIC和STD_LOGIC_VECTOR三種數(shù)據(jù)類型進行混合運算的運算符,還定義了STD_LOGIC_VECTOR類型到整數(shù)型的轉(zhuǎn)換函數(shù);·此兩程序包的區(qū)別是,前者定義的運算符不考慮符號而后者是有符號運算。STD庫

STANDARD(標(biāo)準(zhǔn)程序包)TEXTIO(文件輸入輸出程序包)

·符合VHDL語言標(biāo)準(zhǔn)的庫,定義了一些基本的數(shù)據(jù)類型、子類型和函數(shù),在VHDL環(huán)境中可隨時調(diào)用其中的內(nèi)容?!EXTIO程序包僅供仿真用,使用時需加USESTD_TEXTIO.ALL語句·在VHDL的編譯和綜合過程中,每項設(shè)計都會自動將STD庫包含進去。ASIC庫

面向ASIC碼的資源庫,由VHDL工具廠商提供,是一種面向門級仿真的邏輯門庫

·每個邏輯門對應(yīng)一個設(shè)計實體;·使用時有必要進行說明。WORK庫

用戶自編VHDL程序的工作庫·存放用戶設(shè)計和定義的設(shè)計單元和程序包;·使用時不必作說明

二、包集合

打包后的程序?qū)HDL設(shè)計中常用的一些諸如信號定義、常數(shù)定義、數(shù)據(jù)類型、元件、函數(shù)和過程定義等內(nèi)容集合在一起形成一個程序包,即所謂“打包”,供設(shè)計者在使用中調(diào)用

PACKAGE包集合名

IS說明語句;

說明語句

ENDBODY;

END包集合名;

包首包體PACKAGEBODY包集合名

IS

PACKAGEoneIS --程序包首,名字為

oneSUBTYPEsegmentsISBIT_VECTOR(0TO6); --包體開始定義子類型segmentsTYPEbcdISintegerRANGE0TO9; --定義數(shù)據(jù)bcd的范圍是0~9ENDone; --程序包結(jié)束USEWORK.one.ALL; --WORK庫默認是打開的,這里只指明所用的包ENTITYdecoderISPORT(input:inbcd;drive:outsegments);ENDdecoder;ARCHITECTUREsimpleOFdecoderIS[

例5-10]程序包定義和應(yīng)用舉例

BEGINWITHinputSELECT --用選擇信號賦值語句實現(xiàn)譯碼

drive<=B"1111110"WHEN0;B"0110000"WHEN1;B"1101101"WHEN2;B"1111001"WHEN3;B"0110011"WHEN4;B"1011011"WHEN5;

B"1011111"WHEN6;B"1110000"WHEN7;B"1111111"WHEN8;B"1111011"WHEN9;B"0000000"WHENOTHERS;ENDsimple;

三、配置(configuration)

兩種情況:一種是為一個具有兩個或兩個以上結(jié)構(gòu)體的設(shè)計實體指定一個結(jié)構(gòu)體。因為一個設(shè)計實體中,應(yīng)該是一個實體對應(yīng)一個結(jié)構(gòu)體,但有時為了比較各種算法編寫的不同結(jié)構(gòu)體的性能,在一個實體后面帶有幾個結(jié)構(gòu)體,這時可以用配置語句指定一個結(jié)構(gòu)體。另一種情況是為例化語句的各種元件實體配置結(jié)構(gòu)體,例如一個與非門的設(shè)計中,一個實體對應(yīng)著兩個以不同邏輯描述實現(xiàn)的結(jié)構(gòu)體,通過配置語句指定其中的一個作為仿真應(yīng)用的結(jié)構(gòu)體。

CONFIGURATION配置名OF實體名IS

配置說明

END配置名;

配置語句的格式是:

[例5-11]配置語句應(yīng)用舉例ENTITYnandISPORT(a:INSTD_LOGIC;b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDENTITYnand;ARCHITECTUREoneOFnandIS --one是實體nand的一個結(jié)構(gòu)體

BEGIN

ENDARCHITECTUREone;

ARCHITECTUREtwoOFnandIS__two是實體nand的另一個結(jié)構(gòu)體

BEGINc<='1'WHEN(a='0')AND(b='0')ELSE'1'WHEN(a='0')AND(b='1')ELSE'1'WHEN(a='1')AND(b='0')ELSE'0'WHEN(a='1')AND(b='1')ELSE'0';ENDARCHITECTUREtwo;CONFIGURATIONsecondOFnandIS --用配置語句指定two為nand實際結(jié)構(gòu)體FORtwoENDFOR;ENDsecond;

c<=NOT(aANDb);CONFIGURATIONfirstOFnandIS--用配置語句指定one為nand的實際結(jié)構(gòu)體

FORoneENDFOR;ENDfirst;5.2VHDL語言的基本要素

5.2.1VHDL的字符規(guī)則類型

書寫規(guī)則

示例

數(shù)字

·數(shù)字包括十進制整數(shù),實數(shù)和用數(shù)制基數(shù)表示的數(shù);·十進制整數(shù)直接書寫,整數(shù)后面的零寫成指數(shù)形式,數(shù)字之間可加間隔符以提高可讀性;

·實數(shù)也是十進制數(shù),但帶小數(shù)點;

0,8,18;123E2即12300;12_345_67即1234567;1.0,1.23,12_34.56_78即1234.5678;12.98E-2即0.1298;

·用數(shù)制基數(shù)表示的數(shù)由五部分組成,即用十進制數(shù)表示的數(shù)制基數(shù)、分隔符#、數(shù)、指數(shù)隔離符#、指數(shù)部分(是0則省略);

254表示成16進制數(shù)是16#FE#;表示成二進制數(shù)是2#111_1110#;表示成八進制數(shù)是8#376#;表示成十進制數(shù)是10#254#;

字符串

·字符是能用ASICII碼表示的數(shù)字、字母或符號,加單引號;

如'10','+','*','a','$'等;

·字符串是字符的一維數(shù)組,加雙引號。字符串分為數(shù)字字符串和文字字符串,數(shù)字字符串中要加表示計數(shù)體制的基數(shù),“B”為二進制,“O”為八進制、“X”為16進制;

如“ERROR”;B“1_11_001”是5位的二進制數(shù)組;X“ADE”是16進制數(shù)組,位長3位;O“567”是8進制數(shù)組,位長3位;標(biāo)識符·表示常數(shù)、變量、信號、端口、子程序或參數(shù)的名字,有效字符包括全部大小寫英文字母且不區(qū)分大小寫,數(shù)字0~9及單一下劃線,且下劃線只能放在字母或數(shù)字之間,使用標(biāo)識符還有下列規(guī)則:·應(yīng)以英文字母開關(guān);·允許包含圖形符號如回車符、換行符、空格符;·不能使用VHDL中的關(guān)鍵字;

·標(biāo)識符的下標(biāo)加括號表示;

State0;date_1;SIGNAL;b(3);5.2.2數(shù)據(jù)類型1、預(yù)定義數(shù)據(jù)類型

類型

整數(shù)類Integer·包括正整數(shù)、負整數(shù)和0,其中正整數(shù)(positive)和0又叫自然數(shù)(Natural);·能使用預(yù)定義的操作符,如“+”、“-”、“*”、“/”等進行算術(shù)運算,但不能用于邏輯運算;取值范圍是-(231-1)~+(231-1),并要求用Range子句規(guī)定限定范圍;

實數(shù)類Real

·包括整數(shù)、小數(shù)和0,取值范圍為-1.0E38~+1.0E38,VHDL的仿真器能支持實數(shù)類型,但綜合器不支持;

字符類character·用字母和符號表示的數(shù)據(jù)類型,書寫時加單引號,一般不分大小寫,但加引號后的大小寫有區(qū)別如'A'不同于'a';·將多個字符組合則為字符串,書寫時加雙引號,加引號后的大小寫有區(qū)別;布爾類Boolean·布爾類數(shù)據(jù)有False和Ture兩種狀態(tài),在VHDL綜合中則變?yōu)?和0;

·不屬于數(shù)值,不能用于運算,只能通過關(guān)系運算符獲得;

1、預(yù)定義數(shù)據(jù)類型位類型Bit·表示取值為1和0的數(shù)據(jù)對象,如變量、信號等

·位類型數(shù)據(jù)可參予邏輯運算;

位矢量Bit_Vector·位類型數(shù)據(jù)的一維數(shù)組,使用時應(yīng)注明位寬;如SIGNALa:BIT_VECTOR(7TO0);

時間類Time·表示時間的數(shù)據(jù)類型,常用于系統(tǒng)仿真;

·書寫格式中應(yīng)注明數(shù)值和單位,如15ms,書寫時數(shù)值與單位間空一格,小于秒的時間單位依次為毫秒(ms)、微秒(us)、納秒(ns)、皮秒(ps)、飛秒(fs)

邏輯位STD_LOGIC·位數(shù)據(jù)類型BIT的擴展,共定義了9種邏輯狀態(tài),編程時應(yīng)注意除0和1外的其他七種邏輯值對程序功能的影響。

·由IEEE標(biāo)準(zhǔn)的STD_LOGIC_1164程序包定義,應(yīng)用時必須用USE語句打開此程序包。

邏輯位矢量

·標(biāo)準(zhǔn)邏輯位矢量記為STD_LOGIC_VECTOR,是標(biāo)準(zhǔn)邏輯位的一維數(shù)組,使用時應(yīng)注意位寬。

2.自定義數(shù)據(jù)類型數(shù)據(jù)類型

定義格式

枚舉類型(Enumerated)·用文字、符號表示的一組實際的二進制數(shù),如定義數(shù)據(jù)名為ST的數(shù)據(jù)是ST0,ST1,ST2,ST3,其編碼默認為00,01,10,11。TYPE類型名

IS(元素…);例如TYPEstIS(st0,st1,st2,st3);整數(shù)與實數(shù)型(Integer、Real)·與普通代數(shù)的整數(shù)、實數(shù)相同,預(yù)定義程序包中也有這兩種類型,根據(jù)需要重新定義并限定其取值范圍,以便能被綜合器接受以提高PLD的利用率。TYPE類型名IS類型定義范圍;例如TYPEdigitISINTEGERRANGE0TO9;數(shù)組型(Array)·將相同數(shù)據(jù)類型的元素集合為一維數(shù)組或多維數(shù)組,但綜合器只支持一維數(shù)組。若定義語句的范圍一項缺省,則為整數(shù)類型。TYPE類型名ISARRY范圍OF原類型名;例如TYPEwordISARRY(1TO8)OFSTD_LOGIC;即word有8個元素分別為word(1)~word(8)2.自定義數(shù)據(jù)類型記錄型(Recode)·記錄型數(shù)據(jù)是一個數(shù)組,這個數(shù)組中的元素由不同的數(shù)據(jù)類型元素構(gòu)成。·記錄型數(shù)據(jù)用于總線,通訊協(xié)議等。TYPE類型名ISRECODE元素名:數(shù)據(jù)類型名…ENDRECODE;例如TYPEbankISRECODEaddr:STD_LOGIC_VECTOR(7DOWN0);ro:INTEGER;ENDRECODE;時間類型(Time)·表示時間的數(shù)據(jù)類型,定義語句中指明基本時間單位為“fs”,以及由“fs”向上的各單元之間的換算關(guān)系?!こ龝r間外,其他物理量如電壓電容、電阻等也可以根據(jù)定義時間的格式進行定義。TYPE數(shù)據(jù)類型IS范圍;

UNITS基本單位;

單位;

ENDUNITS;例如:

TYPEtimeISRANGE0TO10000;UNITSfs;ps=1000fs;ns=1000ps;us=1000ns;ENDUNITS;

5.2.3VHDL的數(shù)據(jù)對象VHDL的數(shù)據(jù)對象分為三類,常量(constant)、變量(variable)信號(signal)。總體來說,三者都用于傳遞數(shù)據(jù)或接受數(shù)據(jù)賦值,在最終實現(xiàn)的硬件電路中,信號和變量相當(dāng)于連線及連線上數(shù)據(jù)值;常量是一個固定不變的數(shù)據(jù)值,如VCC、GND等,常量只能取一個值,信號和變量卻可以取多個不同的值。

常量定義的一般表達格式是:CONSTANT常數(shù)名:數(shù)據(jù)類型:=表達式;例如CONSTANTdata:STD_LOGIC_VECTOR:="0110“上式的意思是data是常數(shù)0110,其數(shù)據(jù)類型為標(biāo)準(zhǔn)位矢量型。常量語句定義的適應(yīng)范圍有實體、結(jié)構(gòu)體、程序包、塊、進程和子程序。如果在一個設(shè)計實體中定義,則有效范圍是這個設(shè)計實體的結(jié)構(gòu)體,如果在設(shè)計實體的某一部分定義,則有效范圍只是所定義的這部分電路,例如一個進程語句中,則有效范圍只在這個進程中。在VHDL具體設(shè)計中,變量和信號有不同的特點、不同的賦值符號,適應(yīng)范圍也有著明顯的區(qū)別。表5.2.4對信號和變量進行了比較。數(shù)據(jù)對象DATAOBJECTS6.3.1常數(shù)(CONSTANT)6.3.2變量(VARIABLE)6.3.3信號(SIGNAL)1.常數(shù)(CONSTANT)2.變量(VARIABLE)3.信號(SIGNAL)常數(shù)定義的一般表述:CONSTANT常數(shù)名:數(shù)據(jù)類型:=表達式;定義變量的一般表述:VARIABLE變量名:數(shù)據(jù)類型:=初始值;

定義格式:SIGNAL信號名:數(shù)據(jù)類型<=初始值;表信號和變量賦值語句比較比較內(nèi)容

信號(signal)

變量(variable)

定義及賦值語句格式SIGNAL信號名:數(shù)據(jù)類型<=--賦值符例:SIGNALa,b,y:INTEGER;y<=a*b;VARIABLE變量名:數(shù)據(jù)類型:=--賦值符VARIABLEa,b:STD_LOGIC;a:=b;特點

·上式將數(shù)據(jù)a和b的乘積值傳遞給數(shù)據(jù)對象y,VHDL設(shè)計實體內(nèi)的數(shù)據(jù)傳遞和端口數(shù)據(jù)的讀寫均由賦值語句實現(xiàn);信號類似于連接線,實現(xiàn)各并行模塊間的信息交流?!ば盘柧哂腥痔卣?,若在某一設(shè)計實體中定義,則該設(shè)計實體的任何結(jié)構(gòu)體均能獲得該信號的賦值,若在某一結(jié)構(gòu)體中定義,賦值能在本結(jié)構(gòu)中的各模塊之間例如各進程之間傳遞信息?!ば盘栙x值具有延時性,即信號賦值不是立即發(fā)生,而是發(fā)生在一個進程的結(jié)束;·信號用作電路的數(shù)據(jù)連接通道,綜合后與硬件結(jié)構(gòu)對應(yīng)。信號和端口概念是一致的,但無方向說明?!ど鲜綄?shù)據(jù)b的值賦給變量對象a,變量主要用在進程中作臨時數(shù)據(jù)存儲單元?!ぷ兞烤哂芯植刻卣?,如果在某一進程或子程序中定義,則不能在此進程或子程序以外獲得此變量值。而且變量的定義僅限于進程或子程序中。·變量的賦值具有即時性,即賦值后立即產(chǎn)生?!ぷ兞吭诰C合后不對應(yīng)硬件結(jié)構(gòu),只作為臨時的、過渡的、局部的數(shù)據(jù)存儲單元。適應(yīng)范圍·實體、結(jié)構(gòu)體和程序包中均可定義·在進程或子程序中定義[例5-12]使用了變量賦值的VHDL實例

LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdff3ISPORT(CLK,d1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFdff3ISBEGINPROCESS(CLK)VARIABLE:STD_LOGIC;BEGINIFCLK'EVENTANDCLK='1'THEN:=d1;ENDIF;Q1<=;ENDPROCESS;Endbhv;

[例5-13]使用了信號賦值的VHDL實例LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdff3ISPORT(CLK,d1:INSTD_LOGIC;Q1:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFdff3ISSIGNAL:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THEN<=d1;ENDIF;Q1<=;ENDPROCESS;ENDbhv;

5.3VHDL的操作符

表5.3.1VHDL中使用的主要操作符優(yōu)先級順序

運算作符類型操作符

功能

操作數(shù)類型

高邏輯運算符AND邏輯與

BIT、BOOLEAN、STD_LOGICOR邏輯或BIT、BOOLEAN、STD_LOGICNAND邏輯與非BIT、BOOLEAN、STD_LOGICNOR邏輯或非BIT、BOOLEAN、STD_LOGICXOR邏輯異或BIT、BOOLEAN、STD_LOGICNOT*取反BIT、BOOLEAN、STD_LOGIC關(guān)系運算符

=等號

任何類型/=不等于任何類型<小于枚舉、整數(shù)型及對應(yīng)的一維數(shù)組>大于枚舉、整數(shù)型及對應(yīng)的一維數(shù)組<=小于等于枚舉、整數(shù)型及對應(yīng)的一維數(shù)組>=大于等于枚舉、整數(shù)型及對應(yīng)的一維數(shù)組算術(shù)運算符

+加枚舉、整數(shù)型及對應(yīng)的一維數(shù)組-減枚舉、整數(shù)型及對應(yīng)的一維數(shù)組&并置一維數(shù)組正、負運算符

+正整數(shù)-負整數(shù)算術(shù)運算符

*乘整數(shù)、實數(shù)

/除整數(shù)、實數(shù)

MOD求模整數(shù)REM取余整數(shù)**指數(shù)整數(shù)ABS取絕對值整數(shù)

5.3.1邏輯操作符(1)邏輯操作符所要求的數(shù)據(jù)類型是BIT、BOOLEAN、STD_LOGIC三種以及BIT和STD_LOGIC相應(yīng)的數(shù)組類型;對數(shù)組類型操作時除了操作符兩邊的數(shù)據(jù)類型相同外,還應(yīng)保證數(shù)位相等。(2)一個表達式中出現(xiàn)兩個以上的運算符號,應(yīng)使用括號對運算進行分組。如果一個等式中重復(fù)應(yīng)用了AND、OR、XOR三個算符中的一個則不要加括號。例如:y1ANDy2ANDy3;--AND是三種算符之一,不必加括號(aORb)ANDc;--不是一個運算符重復(fù)應(yīng)用,應(yīng)加括號

d<=aANDbORc; --用了兩種運符未加括號,錯誤(3)邏輯運算符除NOT外,其余操作符的優(yōu)先級是各類運算符中最低的,但NOT與**乘方)、ABS(取絕對值)一樣,同處于最高優(yōu)先級。

5.3.2算術(shù)運算符1、求和操作符——+(加)、-(減)、&(并置)2、求積運算——*(乘)、/(除)、MOD(取模)、REM(取余)

3、混合操作——**(乘方)、ABS(取絕對值)

4、符號操作——+(正)、-(負)

[例5-14]并置符應(yīng)用實例SIGNALf:STD_LOGIC_VECTOR(5DOWNTO0);SIGNALa,b:STD_LOGIC_VECTOR(2DOWNTO0);SIGNALc,d,e:STD_LOGIC;a<=c&d&e; --單個元素并置為長度3位的數(shù)組f<=a&b; --數(shù)組與數(shù)組并置成為長度6位的數(shù)組[例5-15]用加法運算實現(xiàn)位長4位的加法器LIBRARYIEEE;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYadder4BISPORT(cin:INSTD_LOGIC;a;b:INSTD_LOGIC_VECTOR(3DOWNTO0);s:OUTSTD_LOGIC_VECTOR(3DOWNTO0);cout:OUTSTD_LOGIC);ENDadder4B;ARCHITECTUREbehavOFadder4BISSIGNAL:sint:STD_LOGIC_VECTOR(4DOWNTO0);SIGNAL:aa,bb:STD_LOGIC_VECTOR(4DOWNTO0);BEGINaa<='0'&a;bb<='0'&b;--a、b4位數(shù)據(jù)變成aa、bb的5位數(shù)

sint<=aa+bb+cin;s<=sint(3NOWNTO0);cout<=sint(4);ENDbehav;

5.3.3關(guān)系運算符1.關(guān)系操作符的作用將同類型的數(shù)據(jù)作大小比較或作排序判斷,其結(jié)果以Boolean數(shù)據(jù)類型表示。應(yīng)用時,操作符兩邊的數(shù)類型應(yīng)相同,但位數(shù)可不同。2·等號和不等號的操作數(shù)可為任何數(shù)據(jù)類型,例如兩個數(shù)m1和m2的類型相同且數(shù)值大小一樣,則可判斷m1和m2相等的結(jié)果為Ture,而m1/=m2的結(jié)果為False。3·4種關(guān)系運算符<、<=、>、>=為排序符號,允許使用的操作數(shù)類型為整數(shù)或整數(shù)的一維數(shù)組。4·排序判斷是將操作數(shù)從左至右逐位比較后得出結(jié)論的,若兩操作數(shù)的位數(shù)不相等可能產(chǎn)生錯誤結(jié)論,如“101”和“1001”比較到左起第3位時會認為“101”>“1001”的錯誤結(jié)論,這時將操作數(shù)定義數(shù)據(jù)類型STD_LOGIC_ARITH中的為Unsigned則能得到正確結(jié)論。如:UNSIGNED'"1"<UNSIGNED'"011"的比較結(jié)果為TRUE。

5.4VHDL的基本語句解析

順序語句(sequentialstatements)特點--語句的執(zhí)行(指仿真)按書寫順序進行,應(yīng)用范圍只能是進程和子程序。并行語句(concurrentstatements)又稱并發(fā)語句并行語句--執(zhí)行是同步進行的,與語句書寫順序無關(guān)。并行語句執(zhí)行中,各語句之間的關(guān)系可能是相互獨立的,但也可能存在信息交流

5.4.1順序語句(sequentialstatements)1

賦值語句

2

條件語句(IF)3

條件語句(CASE)

5

循環(huán)控制語句(NEXT)

4

循環(huán)語句(LOOP)

6

循環(huán)控制語句(EXIT)7

等待語句(WAIT)

信號賦值語句變量賦值語句賦值目標(biāo)賦值符號賦值源·賦值語句的作用將一個數(shù)值或一個表達式的運算結(jié)果傳遞到某一數(shù)據(jù)對象,以實現(xiàn)設(shè)計實體內(nèi)部的數(shù)據(jù)傳送以及端口外部數(shù)據(jù)的讀寫。賦值語句包含賦值源、賦值目標(biāo)和賦值符三要素。要求賦值源和賦值目標(biāo)的數(shù)據(jù)類型必須相同?!じ鶕?jù)賦值對象的不同,賦值語句分為:信號賦值和變量賦值兩種,信號賦值---具有延時性、全局性,賦值符用(<=)表示。變量賦值---具有即時性、局部性,且定義只限于進程和子程序中,變量賦值符是(:=)一、賦值語句IF一種順序語句是應(yīng)用很廣的語句,屬于流程控制語句之一,除此之外,流程控制語句還有LOOP、NEXT、EXIT語句。IF條件語句,分為4種語句格式,見表。二、條件語句(IF)表5.4.1條件語句的功能和格式語句格式

功能及特點

IF條件

THEN(1)順序語句ENDIF;

IF語句是根據(jù)滿足條件的情況確定執(zhí)行哪些語句,而條件可以是一個或多個。格式(1)是一種不完全條件語句,滿足條件則執(zhí)行順序語句,否則跳過順序語句直至結(jié)束IF語句的執(zhí)行。

IF條件

THEN

順序語句(2)ELSE

順序語句ENDIF;

具有分支功能的IF語句,若條件成立執(zhí)第一順序語句,不成立執(zhí)行第二順序語句,總要執(zhí)行其中一條后才到結(jié)束。

IF條件1THEN

順序語句1ELSIF條件2THEN(3)順序語句2

…ELSE順序語句nENDIF;

具有多重判斷條件的IF語句,當(dāng)條件1成立時執(zhí)行順序語句1,只有當(dāng)前面的條件不成立時才判斷后面的條件以決定是否執(zhí)行下一個順序語句,依次進行,直至執(zhí)行最后一個順序語句IF條件1THENIF條件2THEN(4)…ENDIF;ENDIF;

多重嵌套的IF語句,能實現(xiàn)時序電路,組合電路和混合電路。這時只有多個條件同時滿足才能執(zhí)行其中的順序語句,而結(jié)束語句應(yīng)與條件語句對應(yīng)。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcoderISPORT(din:INSTD_LOGIC_VECTOR(9DOWNTO0);output:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDcoder;ARCHITECTUREbehavOFcoderISBEGINPROCESS(din)BEGINIF(din(9)='0')THENoutput<="1001";ELSIF(din(8)='0')THENoutput<="1000";ELSIF(din(7)='0')THENoutput<="0111";ELSIF(din(6)='0')THENoutput<="0110";ELSIF(din(5)='0')THENoutput<="0101";ELSIF(din(4)='0')THENoutput<="0100”;ELSIF(dif(3)=‘0’)THENutput<=“0011”;ELSIF(din(2)=‘0’)THENoutput<=“0010”;ELSIF(din(1)='0')THENoutput<="0001";ELSEoutput<="0000";[例5-16]一位BCD碼編碼器的VHDL描述

表5.4.2一位BCD碼編碼器真值表Din0din1din2din3din4din5din6din7din8din9Output3output2Output1Output0×××××××××0××××××××01×××××××011××××××0111×××××01111××××011111×××0111111××01111111×01111111101111111111001100001110110010101000011001000010000

ENDIF;ENDPROCESS;ENDbehav;作業(yè):試用if語句編寫一個具有優(yōu)先級的8—3線編碼器,實現(xiàn)74LS148的功能。

語句格式

語句特點

CASE條件表達式

ISWHEN條件選擇值=>順序語句;WHEN條件選擇值=>順序語句;……

ENDCASE;

其中,符號=>沒有實際操作意義,相當(dāng)于THEN

CASE語句是根據(jù)條件選擇值與條件表達式的值相同時,決定執(zhí)行的順序語句中的哪一項。條件表達式的值為整數(shù)或枚舉型的值以及相應(yīng)的數(shù)組形式?!ASE語句只能放在進程語句中應(yīng)用?!ASE語句中的條件語句無順序之分,是相互獨立的。·

CASE語句的每一條件選擇值不能超出條件表達式的范圍,每個選擇值只能出現(xiàn)一次,即不能有相同選擇值的條件語句?!と鬋ASE語句中的選擇值不能復(fù)蓋條件表達式的值,則用“OTHERS”作為最后一個條件取值?!癘THERS”的選擇值只能出現(xiàn)一次?!っ看螆?zhí)行中必須選中而且只能選中條件語句中的一條。

·CASE語句的執(zhí)行過程中,各條件句是獨立的,更接近于并行方式,不象IF語句那樣是將條件按順序逐項比較。綜合后的硬件電路比IF語句所耗的資源要多。

三、條件語句(CASE)表5.4.4Loop語句的特點和語句格式格式一:

標(biāo)號:FOR循環(huán)變量

IN循環(huán)次數(shù)范圍Loop

順序語句

ENDLoop標(biāo)號;格式二:

標(biāo)號:WHILE條件

LOOP

順序語句;

ENDLOOP標(biāo)號;·循環(huán)語句根據(jù)設(shè)定的循環(huán)變量或條件,多次循環(huán)執(zhí)行一組順序語句,語句中的循環(huán)變量屬于一個臨時變量,由Loop語句自動定義,不能與語句中的其他標(biāo)識符同名?!?/p>

循環(huán)次數(shù)從初值開始,每執(zhí)行一次則增加1,直至達到循環(huán)次數(shù)范圍指定的最大值?!ぱh(huán)語句有兩種格式,格式二是條件循環(huán)語句,條件成立則循環(huán)執(zhí)行順序語句,不成立則結(jié)束Loop語句。四、循環(huán)語句(LOOP)

循環(huán)語句的功能是:將其所包含的一組順序語句循環(huán)執(zhí)行,執(zhí)行次數(shù)由循環(huán)參數(shù)決定。[例5-18]用VHDL描述的8位奇偶校驗電路LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYp_checkISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);y:OUTSTD_LOGIC);ENDp_check;

ARCHITECTUREoptOFp_checkISSIGNALtmp:STD_LOGIC;BEGINPROCESS(a)Variabletemp:std_logic;BEGINtemp:='0';FORnIN0TO7LOOP --循環(huán)語句,循環(huán)變量為n,次數(shù)是0~7,此循環(huán)語句作為進程語句中的順序語句使用

溫馨提示

  • 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論