南理工-電子技術第6章講稿_第1頁
南理工-電子技術第6章講稿_第2頁
南理工-電子技術第6章講稿_第3頁
南理工-電子技術第6章講稿_第4頁
南理工-電子技術第6章講稿_第5頁
已閱讀5頁,還剩136頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章存儲器和可編程邏輯器件數(shù)字邏輯器件分類:1)標準產(chǎn)品:包括門、觸發(fā)器、計數(shù)器、譯碼器、數(shù)據(jù)選擇器等等中小規(guī)模數(shù)字電路。標準產(chǎn)品的特點是:批量大,成本低,價格便宜,速度快。是數(shù)字系統(tǒng)傳統(tǒng)設計中使用的主要邏輯器件。缺點是:器件密度低,所構成的數(shù)字系統(tǒng)規(guī)模大,印刷線路板走線復雜,焊點多,使電路的可靠性差,功耗大。2)由軟件配置的大規(guī)模集成電路:如微處理機、單片微型計算機等。這類電路的特點:器件密度高,邏輯功能可由軟件配置,用它所構成的數(shù)字系統(tǒng)硬件規(guī)模小,系統(tǒng)靈活性高。缺點:工作速度不夠高,另外,這類芯片一般要用多片標準集成電路構成外圍電路才能工作。3)專用集成電路(ASIC)ApplicationSpecificIntegratedCircuitASIC是為滿足一種或幾種特定功能而設計制造的集成電路芯片,密度高,ASIC芯片能取代由若干個中小規(guī)模電路組成的電路板,甚至一個完整的數(shù)字系統(tǒng)ASIC分類:ASIC屬用戶定制電路。(CustomDesignIC).包括全定制和半定制兩種。全定制(FullcustomdesignIC):半導體生產(chǎn)廠家根據(jù)用戶的特定要求專門設計并制造。特點:生產(chǎn)周期長,費用高,風險大。在大批量定型產(chǎn)品中使用。半定制(Semi-customdesignIC):半導體生產(chǎn)廠家設計并制造出的標準的半成品芯片。半定制電路分類:㈠門陣列(GateArray)

在硅片上預先做好大量相同的基本單元電路,并把它整齊地排成陣列,這種半成品芯片稱為母片。母片可由廠家大批量生產(chǎn)。

當用戶需制作滿足特定要求的ASIC芯片時,可根據(jù)設計要求選擇母片,由用戶或廠家設計出連線版圖,再由器件生產(chǎn)廠家經(jīng)過金屬連線等簡單工藝,制成成品電路。缺點:用戶主動性差,使用不方便。特點:周期較短,成本較低,風險小。㈡可編程邏輯器件(PLD)(ProgrammableLogicDevice)芯片上的電路和金屬引線由半導體廠家做好,其邏輯功能由用戶開發(fā)實現(xiàn)。特點:集成度高,速度快,靈活性好,可重復編程。電路設計方便,風險低。1.PLD器件的連接表示方法固定連接可編程連接不連接2.門電路表示法1AA1AAAA反向緩沖器ABC&FABC&F與門ABC≥1FABC≥1F或門3.陣列圖1A1B1C&&&&D=BCE=AABBCC=0F=AABBCC=0G=16.1存儲器存儲器是一種通用大規(guī)模集成電路,用來存放程序和數(shù)據(jù).存儲器分類:1)只讀存儲器(ROM)2)隨機存取存儲器(RAM)6.1.1ROM(Read-OnlyMemory)ROM存放固定信息,只能讀出信息,不能寫入信息.當電源切斷時,信息依然保留.1.ROM的結構......A0A1An-1地址譯碼器存儲陣列

2n×mW0W1W2n-1F0F1Fm-1字線位線地址線地址譯碼器為二進制譯碼器,即全譯碼結構.(地址線為n根,譯碼器輸出為2n根字線,說明存儲陣列中有2n個存儲單元)2)存儲陣列輸出有m根位線,說明每個存儲單元有m位,即一個字有m位二進制信息組成.每一位稱為一個基本存儲單元.3)存儲器的容量定義為:字數(shù)×位數(shù)(2n×m).一個二極管ROM的例子A1A0F0F1F2F300010001100100110110010

1A11A0&&&&W0W1W2W3F0F1F2F3位線字線①W0~W3為地址譯碼器的輸出Wi=mi

(mi為地址碼組成的最小項)②當A1A0=00時,W0=1,F0F1F2F3=0100(一個字);當A1A0=01時,W1=1,F0F1F2F3=1001(一個字);當A1A0=10時,W2=1,F0F1F2F3=0110(一個字);當A1A0=11時,W3=1,F0F1F2F3=0010(一個字)。③將地址輸入和Fi之間的關系填入真值表得:

地址數(shù)據(jù)A1A0F0F1F2F300010001100100110110010

F0=A1A0F1=A1A0+

A1A0F2=A1A0+A1A0F3=A1A0ROM實際是一種組合電路結構。④陣列圖與陣列:表示譯碼器。或陣列:表示存儲陣列。存儲容量為:

4×4

地址數(shù)據(jù)A1A0F0F1F2F300010001100100110110010

1A11A0&&&&≥1≥1≥1≥1F0F1F2F3m0m1m2m32.可編程只讀存儲器用戶可根據(jù)需要自行進行編程的存儲器.1)PROM(ProgrammableRead-OnlyMemory)PROM為能進行一次編程的ROM,PROM的結構和ROM基本相同,只是在每個存儲管上加一根易熔的金屬絲接到相應的位線.位線字線當在該位上需要存0時,通過編程,燒斷熔絲;當需存1時,保留熔絲.編程為一次性的,燒斷的熔絲不能再接上.2)EPROM(ErasableProgrammableRead-OnlyMemory)EPROM為可擦除、可重新編程的只讀存儲器.擦除用專用的紫外線燈照射芯片上的受光窗口.EPROM器件的基本存儲單元采用浮柵雪崩注入MOS管(簡稱FAMOS管)電路.FAMOSVDDDS字線位線原始狀態(tài)的浮柵不帶電荷,FAMOS管不導通,位線上為高電平.當FAMOS管的源極S與襯底接地電位,漏極接高電位(較大)時,漏極的PN結反向擊穿產(chǎn)生雪崩現(xiàn)象,使FAMOS導通.位線為低電位.如用紫外線或者X射線照射FAMOS管,可使柵極放電,FAMOS恢復到截止狀態(tài).一個EPROM芯片:Intel2716VCCVPPOECEGND1121324CE是片使能端;OE是數(shù)據(jù)輸出使能端;VPP是編程寫入電源輸入端。容量:2K×8位受光窗口工作方式讀出未選中待機編程禁止編程校驗讀出CEOEVPP數(shù)據(jù)線D7~D0的狀態(tài)00+5V讀出的數(shù)據(jù)×1+5V高阻1×+5V高阻1+25V寫入的數(shù)據(jù)01+25V高阻00+25V讀出校驗數(shù)據(jù)2716工作方式3)E2PROM(電可擦可編程只讀存儲器)特點:①編程和擦除均由電完成;②既可整片擦除,也可使某些存儲單元單獨擦除;③重復編程次數(shù)大大高于EPROM.3.PROM的應用1)實現(xiàn)組合邏輯函數(shù)用PROM實現(xiàn)組合邏輯函數(shù),實際上是利用PROM中的最小項,通過或陣列編程,達到設計目的.F1(A,B,C)=Σm(1,5,6,7)F2(A,B,C)=Σm(0,1,3,6,7)F3(A,B,C)=Σm(3,4,5,6,7)例:用PROM實現(xiàn)邏輯函數(shù):1A&&&&≥1≥1≥1F1F2F31B1C&&&&m0m1m2m3m4m5m6m72)存放數(shù)據(jù)表和函數(shù)表:例如三角函數(shù)、對數(shù)、乘法等表格。3)存放調(diào)試好的程序。*2)、3)是PROM的主要用途。6.1.2隨機存取存儲器(RAM)RAM可以隨時從任一指定地址讀出數(shù)據(jù),也可以隨時把數(shù)據(jù)寫入任何指定的存儲單元.RAM在計算機中主要用來存放程序及程序執(zhí)行過程中產(chǎn)生的中間數(shù)據(jù)、運算結果等.RAM按工藝分類:1)雙極型;2)場效應管型。場效應管型分為:1)靜態(tài);2)動態(tài)。1.RAM的結構......A0A1An-1地址譯碼器存儲矩陣

W0W1W2n-1字線地址線讀寫/控制電路讀寫/控制(R/W)片選(CS)數(shù)據(jù)輸入/輸出

(I/O)ENEN11I/ODR/W當片選信號CS無效時,I/O對外呈高阻;當片選信號CS有效時,由R/W信號決定讀或寫,根據(jù)地址信號,通過I/O輸出或輸入.(I/O為雙向三態(tài)結構)2.RAM的存儲單元靜態(tài)RAM的基本存儲單元

(以六管NMOS靜態(tài)存儲單元為例)XiYjI/OI/OVCCQQT6T4T3T1T2T5T7T8位線Bj位線Bj存儲單元11I/OI/OQQ2)動態(tài)RAM的基本存儲電路動態(tài)RAM的基本存儲電路由動態(tài)MOS基本存儲單元組成。動態(tài)MOS基本存儲單元通常利用MOS管柵極電容或其它寄生電容的電荷存儲效應來存儲信息。電路結構(以單管動態(tài)存儲單元為例)位線數(shù)據(jù)線

(D)字選線TCSCD輸出電容寫信息:字選線為1,T導通,數(shù)據(jù)D經(jīng)T送入CS.讀信息:字選線為1,T導通,CS上的數(shù)據(jù)經(jīng)T送入位線的等效電容CD.特點:1)當不讀信息時,電荷在電容CS上的保存時間約為數(shù)毫秒到數(shù)百毫秒;

2)當讀出信息時,由于要對CD充電,使

CS上的電荷減少。為破壞性讀出。

3)通常在CS上呈現(xiàn)的代表1和0信號的電平值相差不大,故信號較弱。結論:1)需加刷新電路;2)輸出端需加高鑒別能力的輸出放大器。3)容量較大的RAM集成電路一般采用單管電路。4)容量較小的RAM集成電路一般采用三管或四管電路。多管電路結構復雜,但外圍電路簡單。3)RAM容量的擴展VCCA8R/WCSGND191018Intel2114A9A7A5A4A6A0A1A3A2I/O1I/O2I/O3I/O4①位擴展I/O1I/O2I/O3I/O4A9A0A1…CSR/WI/O1I/O2I/O3I/O4A9A0A1…CSR/W…A0A1A9R/WCSI/O1I/O2I/O3I/O4I/O4I/O5I/O6I/O7將2114擴展為1K×8位的RAM②字擴展I/O1I/O2I/O3I/O4A9A0A1…CSR/WI/O1I/O2I/O3I/O4A9A0A1…CSR/W…A0A1A9R/WI/O1I/O2I/O3I/O411-2譯碼器A10將2114擴展為2K×4位的RAM6.2可編程邏輯器件(PLD)PLD是ASIC的一個重要分支。PLD包括PLA、PAL、GAL和EPLD、FPGA等。PLD具有集成度高,速度快,保密性好,可重復編程等特點。輸入輸出輸入電路與陣列或陣列輸出電路PLD基本結構框圖

互補輸入項與項或項反饋項

根據(jù)與、或陣列的可編程性,PLD分為三種基本結構。1)與陣列固定,或陣列可編程型結構PROM屬于這種結構。2)與、或陣列均可編程型結構PLA(ProgrammableLogicArray)屬于這種結構。特點:與陣列規(guī)模大,速度較低。特點:速度快,設計邏輯函數(shù)可采用最簡結構,芯片內(nèi)部資源利用率高。但編程難度大,缺乏質高價廉的開發(fā)工具。3)或陣列固定,與陣列可編程型結構PAL(ProgrammableArrayLogic)屬于這種結構。該結構稱為PAL結構。特點:速度快,費用低,易于編程。當前許多PLD器件都采用這種結構。6.2.1可編程陣列邏輯(PAL)PAL的基本結構111&&&&≥1≥1A0A1A2F1F0實際產(chǎn)品中,構成輸出的乘積項可達8個.1.PLA的輸出結構PAL的與陣列結構類同.但輸出結構有多種:1)組合輸出型(這種結構適用于實現(xiàn)組合邏輯電路)①專用輸出結構O&≥11輸入項I……共有三種形式:高輸出有效;低輸出有效;互補輸出.本例為低輸出有效②可編程I/O結構I/O&≥11輸入項I……EN112)寄存器輸出型寄存器輸出型結構,內(nèi)含觸發(fā)器,適應于實現(xiàn)時序邏輯電路.①寄存器輸出結構Q&≥11輸入項I……EN111DCLOCKEN②帶異或門的寄存器輸出結構Q&≥11輸入項I……EN11≥11D=1CLOCKEN&③算術運算反饋結構A≥11輸入項B……EN111D=1CLOCKEN&≥1&≥1≥1≥1≥1AAA+BA+BA+BA+B輸出≥1EN111DCLKEN&≥1EN111D&111IN1IN8OUT1OUT8………PAL16R8063031PAL的結構代碼組合型寄存器型類型代碼HLPCXPSRXRPRSV含義高有效輸出低有效輸出可編程輸出極性互補輸出異或門、可編程輸出極性積項共享寄存器型輸出帶異或門寄存器型輸出帶可編程極性寄存器型帶積項共享寄存器型通用型實例PAL10H8PAL10L8PAL16P8PAL16C1AmPAL22XP10PAL20S10PAL16R8PAL16X4PAL16RP8PAL20RS10AmPAL22V10用PAL實現(xiàn)2×2乘法器(輸入A1A0和B1B0分別為兩位二進制數(shù),輸出為結果F3F2F1F0的反碼。邏輯方程為:F3=A1+A0+B1+B0F2=A1+B1+A0B0F2=A0+B0F1=A1A0+B1B0+A1B1+A0B0+A1A0B1B0設計采用PAL16L82)PAL應用舉例≥1EN111&1A1F1PAL16L800311A01B11B0F1=A1A0+B1B0+A1B1

+A0B0+A1A0B1B0以實現(xiàn)F1為例3)PAL器件的性能特點㈠邏輯功能由用戶定義,用可編程方法代替常規(guī)設計方法;㈡編程容易,開發(fā)簡單,簡化了系統(tǒng)設計和布線過程;㈢器件密度大,可代替多片中小規(guī)模標準數(shù)字集成電路,比用常規(guī)器件節(jié)省空間;㈣器件傳輸延遲小,工作頻率高,有利于提高系統(tǒng)的工作速度;㈤具有可編程的三態(tài)輸出,管腳配置靈活,輸入輸出管腳數(shù)量可變;㈥具有加密功能,有利于系統(tǒng)保密;㈦采用多種工藝制造,可滿足不同系統(tǒng)不同場合的各種需要。6.2.2通用陣列邏輯(GAL)GAL器件繼承了PAL、PROM等器件的優(yōu)點,克服了原有PAL器件的不足,是現(xiàn)代數(shù)字系統(tǒng)設計的理想器件.1.GAL基本結構GAL基本結構和PAL大致類似,只是在輸出結構上作了重要改進.OLMCEN1111&1&1112919………GAL16V8063031OLMCEN112OE(12)(19)11OLMC結構10S≥1=1PTMUX&≥13210S1S1XOR(n)AC0AC1(n)3210S1S0VccTSMUXFMUX10SOMUX1ENAC0AC1(n)C11D來自與門陣列來自鄰級輸出

(m)QCKOECKOE1反饋I/O(n)乘積項數(shù)據(jù)選擇器三態(tài)數(shù)據(jù)選擇器輸出數(shù)據(jù)選擇器反饋數(shù)據(jù)選擇器AC0、AC1(n)及XOR(n)均為GAL器件片內(nèi)控制字中的結構控制位。結構控制字共有82位,不同的控制內(nèi)容,可使OLMC被配置成不同的功能組態(tài)??刂谱值膬?nèi)容是在編程時由編程器根據(jù)用戶定義的管腳及實現(xiàn)的函數(shù)自動寫入的。2.GAL的主要特點⑴通用性強⑵100%可編程’⑶速度高,功率低⑷100%可測試6.2.3PLD的開發(fā)過程1)邏輯設計2)器件選擇3)編制JEDEC文件4)編程5)測試6)加密6.3VHDL語言6.3.1VHDL基本結構與語法

VHDL:VHSICHardwareDescriptionLanguageVHSIC:VeryHighSpeedIntegratedCircuitVHDL由美國國防部制定,以作為各合同商之間提交復雜設計文檔的一種標準方案。1987年被采納為IEEE1076標準1993年被采納為IEEE1164標準VHDL在語法和風格上類似與高級編程語言,如C語言。但包含有許多硬件特有的結構。VHDL廣泛用于:電路的文檔記錄設計描述的邏輯綜合電路仿真VHDL的組成一個VHDL設計由若干個VHDL文件構成,每個文件主要包含三個部分的一個或全部:1.程序包(Package)2.實體(Entity)3.結構體(Architecture)一個完整的VHDL設計必須包含一個實體和一個與之對應的結構體,也可以對應多個結構體.程序包、實體和結構體作用示意圖VHDL設計VHDL文件程序包(Package)

聲明在設計或實體中將用到的常量,數(shù)據(jù)類型,元件及子程序等實體(Entities)

聲明到其它實體及其它設計的接口,即定義本設計的輸入/輸出端口.結構體(Architectures)

定義實體的實現(xiàn).即電路的具體描述.例:一個具有異步清零、進位輸入/輸出的四位二進制加法計數(shù)器的VHDL代碼。二進制計數(shù)器nresetciclkco3210qcntlibraryieee; --庫,程序包調(diào)用use

ieee.std_logic_1164.all;use

ieee.std_logic_unsigned.all;ENTITYcntm16

IS --實體

PORT (ci

:INstd_logic;

nreset

:INstd_logic;

clk

:INstd_logic;

co :outstd_logic;

qcnt:bufferstd_logic_vector(3downto0) --此處無‘;’號

);ENDcntm16;ARCHITECTURE

behave

OF

cntm16

IS

--結構體BEGINco<=‘1’

when(qcnt=‘1111’

and

ci=‘1’)else‘0’;PROCESS(clk,nreset) --進程(敏感表)

BEGIN IF(nreset=‘0’)

THEN qcnt<=‘0000’; ELSIF

(clk’EVENT

ANDclk=‘1’)

THEN if(ci=‘1’)

then qcnt<=qcnt+1; endif; ENDIF; --endif_reset ENDPROCESS;ENDbehave;實體(Entity)實體的格式如下:

entity<entity_name實體名>is

port <portlistforyourdesign,列出設計的輸入/輸出信號端口>

end<entity_name>;以上述的四位計數(shù)器為例,則該計數(shù)器的實體部分如下ENTITY

cntm16

IS

--實體

PORT (ci

:INstd_logic;

nreset

:INstd_logic;

clk

:INstd_logic;

co:outstd_logic;

qcnt:bufferstd_logic_vector(3downto0) --此處無‘;’號

);ENDcntm16;信號名端口類型端口模式由此看出,實體(ENTITY)類似于原理圖中的符號(Symbol),它并不描述模塊的具體功能。實體的通信點是端口(PORT),它與模塊的輸入/輸出或器件的引腳相關聯(lián)。上述實體對應的原理圖符號如下:nresetciclkcoqcnt[3..0]cntm16

每個端口必須定義:信號名: 端口信號名在實體中必須是唯一的。信號名應是合法的標識符。

屬性:它包括(MODE):決定信號的流向類型(TYPE):端口所采用的數(shù)據(jù)類型●IN

信號進入實體但并不輸出;●OUT

信號離開實體但并不輸入;并且不會在內(nèi)部反饋使用;●INOUT

信號是雙向的(既可以進入實體,也可以離開實體);●BUFFER

信號輸出到實體外部,但同時也在實體內(nèi)部反饋。

BUFFER(緩沖)是INOUT(雙向)的子集,但不是由外部驅動端口模式(MODE)有以下幾種類型:端口模式可用下圖說明:(黑框代表一個設計或模塊)INOUTBUFFERINPUT●integer

可用作循環(huán)的指針或常數(shù),通常不用于 I/O信號; 例如:

SIGNALcount:integerrangeoto255 count<=count+1●bit

可取值‘0’或‘1’●std_logic

工業(yè)標準的邏輯類型,取值‘0’,‘1’,‘X’

和‘Z’--由IEEEstd1164標準定義●std_logic_vector

std_logic的組合,工業(yè)標準的邏輯類型端口類型(TYPE)定義端口的數(shù)據(jù)類型,包括以下幾種:

結構體(Architecture)

所有能被仿真的實體都有一個結構體描述,結構體描述實體的行為功能。即設計的功能。一個實體可以有多個結構體,一種結構體可能為行為描述,而另一種結構體可能為設計的結構描述或數(shù)據(jù)通道的描述。結構體是VHDL設計中最主要的部分,它一般有一些子部分構成,如下圖所示:結構體(Architecture)

聲明區(qū)(Declarations)信號聲明:聲明用于該結構體的類型,常數(shù),元 件,子程序。并發(fā)語句信號賦值計算結果,并賦值給信號過程調(diào)用調(diào)用一個預先定義好的算法元件例化調(diào)用另一個實體所描述的電路。即元件調(diào)用過程定義一個新算法實現(xiàn)電路功能。在過程中賦值順序語句。語句按放置的順序執(zhí)行。結構體的一般格式如下:Architecture<architecture_name結構體名>of<entity_name>is

--結構體聲明區(qū)域--聲明結構體所用的內(nèi)部信號及數(shù)據(jù)類型--如果使用元件例化,則在此聲明所用的元件begin–以下開始結構體,用于描述設計的功能--concurrentsignalassignments并行語句信號賦值--processes進程(順序語句描述設計)ponentinstantiations元件例化end<architecture_name>;

ARCHITECTURE

behave

OF

cntm16

ISBEGINco<=‘1’

when(qcnt=‘1111’

and

ci=‘1’)else‘0’;--并行賦值語句PROCESS(clk,nreset) --進程(敏感表)

BEGIN IF(nreset=‘0’)

THEN --順序語句

qcnt<=‘0000’; ELSIF

(clk’EVENT

ANDclk=‘1’)

THEN if(ci=‘1’)

then qcnt<=qcnt+1; endif; ENDIF; --endif_reset ENDPROCESS;ENDbehave;上述四位計數(shù)器的結構體如下:程序包(Package)與USE語句下面是一個程序包的例子:--包頭說明PACKAGELogicISTYPEThree_level_logicIS(‘0’,‘L’,‘Z’);

CONSTANTUnknown_Value:Three_level_logic:=‘0’;

FUNCTIONInvert(input:Three_level_logic) RETURNThree_level_logic;ENDLogic;

--包體說明PACKAGE

BODYLogicIS

--如下是函數(shù)的子程序體

FUNCTIONInvert(input:Three_level_logic) RETURNThree_level_logic;BEGIN

CASEinputIS

WHEN‘0’=>RETURN‘1’;

WHEN‘1’=>RETURN‘0’;

WHEN‘Z’=>RETURN‘Z’;

ENDCASE;ENDInvert;ENDLogic;庫(Library)

庫是專門存放預先編譯好的程序包的地方,這樣它們就可以在其它設計中被調(diào)用。例如在上述計數(shù)器設計中開始部分有:LIBRARYieee; USE

ieee.std_logic_1164.ALL;USE

ieee.std_logic_unsigned.ALL;ieee

是ieee標準庫的標志名,兩個USE語句使得以下設計可使用程序包std_logic_1164、std_logic_unsigned中預定義的全部內(nèi)容。

以下是IEEE兩個標準庫“std”與“ieee”中所包含的程序包的簡單解釋:庫名程序包名包中預定義內(nèi)容stdstandardVHDL類型,如bit,bit_vectorieeestd_logic1164定義std_logic,std_logic_vector等ieeenumeric_std定義了一組基于std_logic_1164中定義的類型的算術運算符,如“+”,“-”,SHL,SHR等ieeestd_logic_arith定義有符號與無符號類型,及基于這些類型上的算術運算。ieeestd_logic_signed定義了基于std_logic與std_logic_vector類型上的有符號的算術運算ieeestd_logic_unsigned定義了基于std_logic與std_logic_vector類型上的無符號的算術運算VHDL運算符·算術運算符(Arithmeticoperators)+ 加- 減* 乘/ 除** 乘方mod 求模rem 求余abs 求絕對值·關系運算符= 等于/= 不等于< 小于<= 小于或等于> 大于>= 大于或等于注:其中‘<=’操作符也用于表示信號的賦值操作邏輯運算符and 邏輯與or 邏輯或nand 與非nor 或非xor 異或xnor 同或not 邏輯非·連接運算符& 連接,將兩個對象或矢量連接成 維數(shù)更大的矢量數(shù)據(jù)對象

在邏輯綜合中,VHDL語言常用的數(shù)據(jù)對象為信號、常量、變量。·信號(Signal)

用于聲明內(nèi)部信號,而非外部信號(外部信號對應為in,out,inout,buffer),其在元件之間起互聯(lián)作用,可以賦值給外部信號。信號也可在狀態(tài)機中表示狀態(tài)變量。信號賦值符號為“<=”。·變量·常量

常量在設計描述中保持某一規(guī)定類型的特定值不變。如利用它可設計不同模值的計數(shù)器,模值存于常量中,不同的設計,改變模值僅需改變此常量值。常量在定義時賦初值,賦值符號為“:=”。

變量只在給定的進程中用于聲明局部值或用于子程序中。賦值符號為“:=”。下例為一位DCB碼加法計數(shù)器的例子.Entitybcdadderis

Port(op1,op2:inintegerrange0to16;result:outintegerrange0to31);Enddcdadder;Architecturebehaviorofbcdadderis

constantadjustnum:integer:=6--定義一常量:整數(shù)型,值為6

signalbinadd:integer

range0to18;--定義一個信號,以保存兩數(shù)二進制相加的和.Begin

binadd<=op1+op2;--信號賦值

process(binadd)

variabletmp:integer:=0;

--定義一個變量,并賦初值為0

begin

ifbinadd>9thentmp:=adjustnum;--變量賦值,立即起作用

elsetnmp:=0;

end

if;result<=binadd+tmp;

end

process;Endbehavior;

VHDL常用語句·VHDL常用語句分并行(Concurrent)語句和順序(Sequential)語句:并行語句(Concurrent):順序語句(Sequential):并行語句總是處于進程(PROCESS)的外部。所有并行語句都是并行執(zhí)行的,即與它們出現(xiàn)的先后次序無關。如when..else語句順序語句總是處于進程的內(nèi)部,并且從仿真的角度來看是順序執(zhí)行的。如if-then-else語句下面先看一下進程:1.進程Process

進程用于描述順序事件并且包含在結構中,一個結構體可以包含多個進程語句。以下為進程語句的構成:進程(Process)

聲明區(qū)(Declarations)內(nèi)部變量聲明:聲明用于該進程的類型,常數(shù),元件,子程序順序語句信號賦值(<=)過程調(diào)用null語句(空語句,值保持不變)wait語句(等待時鐘信號)case語句loop語句(循環(huán))if語句變量賦值(:=)next語句(跳過剩余循環(huán))exit語句(退出循環(huán))以下為進程語句的語法描述:

endprocess<optional_label>;--進程結束<optional_label>:process<sensitivitylist敏感信號表>--此處聲明局部變量,數(shù)據(jù)類型及其他局部聲明

(用于進程中)begin --進程開始--進程中為順序語句,如:--signalandvariableassignments信號與變量的賦值--ifandcasestatements--if-then-else語句case-when語句--whileandforloops--functionandprocedurecalls函數(shù),過程調(diào)用如上述計數(shù)器為例:PROCESS(clk,nreset) BEGIN --順序語句異步清零

IF(nreset=‘0’)

THEN qcnt<=‘0000’; ELSIF

(clk’EVENT

ANDclk=‘1’)

THEN if(ci=‘1’)

then qcnt<=qcnt+1; endif;--endif_resetENDIF;

ENDPROCESS;2.并行(Concurrent)語句和順序(Sequential)語句□并行(Concurrent)語句

并行語句之間值的更新是同時進行的,與語句所在的順序無關。并行語句包括:●布爾方程●條件賦值(如when—else—語句)●例化語句一、布爾方程

四選一的數(shù)據(jù)選擇器的庫聲明、程序包聲明及實體定義如下:libraryieee;useieee.std_logic_1164.all;entitymux4isport (s :instd_logic_vector(1downto0); a0,a1,a2,a3 :instd_logic; y :outstd_logic);endmux4;以布爾方程實現(xiàn)的結構體如下:architecturearchmuxofmux4is

beginy<=((((a0andnot(s(0)))or(a1ands(0))))and not(s(1)))or(((a2andnots(0)))or(a3and s(0)))ands(1));endarchmux;y=a0s1s0+a1s1s0+a2s1s0+a3s1s0=(a0s0+a1s0)s1+(a2s0+a3s0)s1

二、條件賦值采用WITH-SELECT-WHEN實現(xiàn)的結構體architecturearchmuxofmux4is

begin

withsselect y<=a0when“00”, a1when“01”, a2when“10”, a3whenothers;endarchmux;采用WHEN-ELSE實現(xiàn)的結構體architecturearchmuxofmux4is

begin y<=a0whens=“00”else a1whens=“01”else a2whens=“10”else a3;endarchmux;□順序(Sequential)語句.IF-THEN-ELSE

最常用的順序語句是IF-THEN-ELSE語句和CASE-WHEN語句architecturearchmuxofmux4is

beginprocess(s,a0,a1,a2,a3)begin

if s=“00” then y<=a0; elseif s=“01” then y<=a1; elseif s=“10” then y<=a2; else y<=a3;

endif;

endprocess;endarchmux;.CASE-WHENarchitecturearchmuxofmux4is

beginprocess(s,a0,a1,a2,a3)begin

casesis

when“00”=>y<=a0;

when“01”=>y<=a1;

when“10”=>y<=a2;

whenothers=>y<=a3;

endcase;

endif;

endprocess;endarchmux;元件及元件例化元件聲明是對VHDL模塊的說明,使之可在其它模塊中使用,元件聲明可放在程序包中,也可以在某個設計的結構體中聲明。元件例化指元件的調(diào)用。元件聲明語法:Component<元件實體名>

port<元件端口信息,同該元件實現(xiàn)時

的實體的port部分>;Endcomponent;--元件例化:<例化名>:<實體名,即元件名>portmap(<端口列表>)例如:在一cntvh10設計中調(diào)用一個模為10的計數(shù)器

cntm10和一個七段譯碼器decode47。LibraryIEEE;UseIEEE.std_logic_1164.all;Entity

cntvh10

IS--cntvh10為所要設計的電路名.

port(Rd,ci,clk:instd_logic;co:outstd_logic;qout:outstd_logic_vector(6downto0))

end

cntvh10;ciconresetqcnt[3..0]clkcntm10ciRdclkcoadr[3..0]decodeout[6..0]qoutdecode47cntvh10ciRdclkcoqoutcntvh由cntm10和decode47組成.ARCHITECTURE

archOFcntvh10

IS--元件聲明

Componentdecode47isport

(adr:instd_logic_vector(3downto0);

decodeout:outstd_logic_vector(6downto0));EndComponent;Componentcntm10is

port

(ci,nreset,clk:instd_logic;co:outstd_logic;

qcnt:bufferstd_logic_vector(3downto0));

endcomponent;Signalqa:std_logic_vector(3downto0);--作為中間量BEGINu1:cntm10portmap(ci,Rd,clk,co,qa);u2:decode47portmap(decodeout=>qout,adr=>qa);End

arch;所實現(xiàn)的電路為:ciconresetqcnt[3..0]clkcntm10ciRdclkcoadr[3..0]decodeout[6..0]qoutdecode47順序相同順序不同為增加元件例化的靈活性,可定義參數(shù)化元件。下面定義一個位數(shù)可調(diào)的計數(shù)器。Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Entitycntnbitsis

generic(cntwidth:integer:=4);--定義了一個可調(diào)參數(shù),初始值為4

port(ci,nreset,clk:instd_logic;co:outstd_logic;qcnt:bufferstd_logic_vector(cntwidth-1downto0));Endcntnbits;ArchitecturebehaveofcntnbitsisConstantallis1:std_logic_vector(cntwidth-1downto0):=(others=>‘1’);Beginco<=‘1’when(qcnt=allis1andci=‘1’)else‘0’;

process(clk,nreset)

begin

if(nreset=‘0’)thenqcnt<=(other=>’0’);

elsif(clk’eventandclk=‘1’)then

if(ci=‘1’)thenqcnt<=qcnt+1;

endif;

endif;

endprocess;endbehave;generic(cntwidth:integer:=4);定義了一個整數(shù)cntwidth,賦初值為4,需改變長度僅需改變初值。元件聲明為:Componentcntnbitsisgeneric(cntwidth:integer:=4);port(ci,nreset,clk:instd_logic;co:outstd_logic;qcnt:bufferstd_logic_vector(cntwidth-1downto0));Endcomponent;;Constantallis1:std_logic_vector(cntwidth-1downto0):=(others=>‘1’);表示定義一個常量allis1,用于進位判斷,(others=>‘1’)例化格式為:<例化名>:<實體名,即元件名>genericmap(<實際參數(shù),如確定的總線寬度等>)portmap(<端口列表>)例如,例化為10位計數(shù)器:U1:cntnbitsgenericmap(10)portmap(ci,Rd,clk,qa);--元件例化在上述的可變位數(shù)計數(shù)器中,定義了一個常數(shù)“allis1”用于產(chǎn)生進位輸出信號時的判斷。它的值為各位都為‘1’。此外,用了(other=>‘1’)賦值。(other=>‘1’)表示一個集合,集合中各元素用‘,’隔開。表示各元素都為‘1’。other必須出現(xiàn)在集合的最后。例:signal:sa:std_logic_vector(7downto0);sa<=(‘1’,‘0’,other=>‘1’)其結果是給信號sa賦值“10111111”。0

配置(configuration)

一個實體可用多個結構體描述,在具體綜合時選擇哪一個結構體來綜合,則由配置來確定。即配置語句來安裝連接具體設計(元件)到一個實體—結構體對。配置被看作是設計的零清單,它描述對每個實體用哪一種行為,它非常象一個描述設計每部分用哪一種零件的清單。配置語句舉例:--這是一個兩位相等比較器的例子,它用四種不同描述來實現(xiàn),既有四個結構體。ENTITYequ2IS

PORT(a,b :IN std_logic_vector(1downto0); equ :OUTstd_logic);ENDequ2;--結構體一:用元件例化來實現(xiàn),即網(wǎng)表形式:ARCHITECTURE

netlistOFequ2IS COMPONENTnor2 PORT(a,b :IN std_logic; C :OUT std_logic); ENDCOMPONENT; COMPONENTxor2 PORT(a,b :IN std_logic; C :OUT std_logic); ENDCOMPONENT; signalx : std_logic_vector(1downto0);BEGIN U1:xor2 PORTMAP(a(0),b(0),x(0)); U2:xor2 PORTMAP(a(1),b(1),x(1)); U3:nor2 PORTMAP(x(0),x(1),equ);END netlist;--結構體二:用布爾方程來實現(xiàn):ARCHITECTUREequationofequ2ISBEGIN equ<=(a(0)XORb(0)NORa(1)XORb(1));END equation;--結構體三:用行為描述來實現(xiàn),采用并行語句:ARCHITECTUREcon_behaveofequ2ISBEGIN equ<=‘1’whena=belse‘0’;END con_behave;ARCHITECTUREseq_behave

ofequ2ISBEGIN process(a,b) begin ifa=b then equ<=‘1’; elseequ<=‘0’; endif; endprocess;END seq_behave;--結構體四:用行為描述來實現(xiàn),采用順序語句:

上述實例中,實體equ擁有四個結構體:netlist、qeuation、con_behave、seq_behave,若用其例化一個相等比較器aequb,那么實體究竟對應于哪個結構體呢?配置語句很靈活地解決了這個問題:如選用結構體netlist,則用CONFIGURATIONaequbOFequ2IS

FORnetlist

ENDFOR;ENDCONFIGURATION;CONFIGURATIONaequbOFequ2IS

FORcon_behave

ENDFOR;ENDCONFIGURATION;如選用結構體con_behave,則用以上四種結構體代表了三種描述方法:Behavioral(行為描述)反映一個設計的功能或算法,一般使用進程process,用順序語句表達。Dataflow(數(shù)據(jù)流描述)反映一個設計中數(shù)據(jù)從輸入到輸出的流向,使用并發(fā)語句描述。Structure(結構描述)它最反映一個設計硬件方面特征,表達了內(nèi)部元件間連接關系。使用元件例化來描述。1

子程序子程序由函數(shù)(FUNCTION)和過程(PROCEDURE)組成。函數(shù)只能用以計算數(shù)值,而不能用以改變與函數(shù)形參相關的對象的值。函數(shù)的參量只能是方式為IN的信號與常量,而過程的參量可以為IN,OUT,INOUT方式。過程能返回多個變量,函數(shù)只能由一個返回值。過程和函數(shù)常見于面向邏輯綜合的設計中,主要進行高層次的數(shù)值運算或類型轉換、運算符重載,也可用來元件例化。語法如下:函數(shù):FUNCTION<function_name>(parametertypes) RETURN<TYPES>IS

BEGIN <代碼區(qū)>

END<function_name>;過程:PROCEDURE<procedure_name實體名> (<portlistfortheprocedure,列出過程的輸入/輸出信號端 口>)IS

BEGIN <代碼區(qū)>

END<procedure_name>;函數(shù)舉例:此函數(shù)返回兩數(shù)中的較小數(shù)FUNCTIONMin(x,y:INTEGER)RETURN INTEGERISBEGIN

IFx<yTHEN

RETURNx;

ELSE

RETURNy;

ENDIF;ENDMin;過程舉例:此過程將向量轉換成整數(shù)類型USEieee.std_logic_1164.ALLPROCEDUREvector_to_int (z :INstd_logic_vector; x-flag :OUTBOOLEAN; q :INOUTINTEGER)IS BEGIN q:=0; x-flag:=false; FORIINz’RANGELOOP

q:=q*2; IFz(i)/=‘0’THEN

q:=q+1; ELSIFz(i)=‘0’THEN

x-flag:=TURE; ENDIF; ENDLOOP;ENDvector_to_int;2

其他:屬性、時鐘的表示

屬性指的是關于實體、結構體、類型、信號的一些特征。比較有用的屬性有:值類屬性、信號類屬性、范圍類屬性。●值類屬性

值類屬性分為’left,’right,’low,’high,’length。其中用符號“’”隔開對象名及其屬性。

left表示類型最左邊的值;right表示類型最右邊的值;low表示類型中最小的值;high表示類型中最大的值;length表示限定型數(shù)組中元素的個數(shù)。sdown :instd_logic_vector(8downto0);sup :instd_logic_vector(0to8);例:則這兩個信號的各屬性值如下:sdown’left=8;sdown’right=0;sdown’low=0;sdown’high=8;sdown’length=9;sup’left=0;sup’right=8;sup’low=0;sup’high=8;sup’length=9;●信號類屬性僅介紹一個對綜合及模擬都很有用的信號類屬性:’event’event的值為布爾型,如果剛好有事件發(fā)生在該屬性所附著的信號上(即信號有變化),則其取值為Ture,否則為False。用它可決定時鐘邊沿是否有效。例:時鐘邊沿表示若有如下定義:signal

clk:instd_logic;clk=‘1’andclk’event和clk’eventandclk=‘1’表示時鐘的上升沿。即時鐘變化了,且其值為1,因此表示上升沿。則:clk=‘0’andclk’event和clk’eventandclk=‘0’表示時鐘的下降沿。即時鐘變化了,且其值為1,因此表示下降沿。

此外,還可利用預定義好的兩個函數(shù)來表示時鐘的邊沿。rising_edge(clk) 表示時鐘的上升沿falling_edge(clk) 表示時鐘的下降沿●范圍類屬性’range

屬性,其生成一個限制性數(shù)據(jù)對象的范圍例如:signaldata_bus:std_logic_vector(15downto0);data_bus’range=15downto0;3

VHDL的模板

下面以VHDL的兩個模板回顧一下VHDL的結構,一個是基本結構,一個是詳細結構。其中藍色字為關鍵字,<>中內(nèi)容為對用戶不同設計所需填寫的內(nèi)容。--VHDLModelTemplate(Overview)library<library_name>;

use<library_name>.<package_name>.all;entity<entity_name實體名>is <portlistforyourdesign,列出設計的輸入/輸 出信號端口>end<entity_name>;architecture<architecture_name結構體名>of <entity_name>is--結構體聲明區(qū)域--聲明結構體所用的內(nèi)部信號及數(shù)據(jù)類型--如果

溫馨提示

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

評論

0/150

提交評論