版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第6章存儲器和可編程邏輯器件數字邏輯器件分類:1)標準產品:包括門、觸發(fā)器、計數器、譯碼器、數據選擇器等等中小規(guī)模數字電路。標準產品的特點是:批量大,成本低,價格便宜,速度快。是數字系統(tǒng)傳統(tǒng)設計中使用的主要邏輯器件。缺點是:器件密度低,所構成的數字系統(tǒng)規(guī)模大,印刷線路板走線復雜,焊點多,使電路的可靠性差,功耗大。2)由軟件配置的大規(guī)模集成電路:如微處理機、單片微型計算機等。這類電路的特點:器件密度高,邏輯功能可由軟件配置,用它所構成的數字系統(tǒng)硬件規(guī)模小,系統(tǒng)靈活性高。缺點:工作速度不夠高,另外,這類芯片一般要用多片標準集成電路構成外圍電路才能工作。3)專用集成電路(ASIC)ApplicationSpecificIntegratedCircuitASIC是為滿足一種或幾種特定功能而設計制造的集成電路芯片,密度高,ASIC芯片能取代由若干個中小規(guī)模電路組成的電路板,甚至一個完整的數字系統(tǒng)ASIC分類:ASIC屬用戶定制電路。(CustomDesignIC).包括全定制和半定制兩種。全定制(FullcustomdesignIC):半導體生產廠家根據用戶的特定要求專門設計并制造。特點:生產周期長,費用高,風險大。在大批量定型產品中使用。半定制(Semi-customdesignIC):半導體生產廠家設計并制造出的標準的半成品芯片。半定制電路分類:㈠門陣列(GateArray)
在硅片上預先做好大量相同的基本單元電路,并把它整齊地排成陣列,這種半成品芯片稱為母片。母片可由廠家大批量生產。
當用戶需制作滿足特定要求的ASIC芯片時,可根據設計要求選擇母片,由用戶或廠家設計出連線版圖,再由器件生產廠家經過金屬連線等簡單工藝,制成成品電路。缺點:用戶主動性差,使用不方便。特點:周期較短,成本較低,風險小。㈡可編程邏輯器件(PLD)(ProgrammableLogicDevice)芯片上的電路和金屬引線由半導體廠家做好,其邏輯功能由用戶開發(fā)實現。特點:集成度高,速度快,靈活性好,可重復編程。電路設計方便,風險低。1.PLD器件的連接表示方法固定連接可編程連接不連接2.門電路表示法1AA1AAAA反向緩沖器ABC&FABC&F與門ABC≥1FABC≥1F或門3.陣列圖1A1B1C&&&&D=BCE=AABBCC=0F=AABBCC=0G=16.1存儲器存儲器是一種通用大規(guī)模集成電路,用來存放程序和數據.存儲器分類: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)存儲器的容量定義為:字數×位數(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之間的關系填入真值表得:
地址數據A1A0F0F1F2F300010001100100110110010
F0=A1A0F1=A1A0+
A1A0F2=A1A0+A1A0F3=A1A0ROM實際是一種組合電路結構。④陣列圖與陣列:表示譯碼器?;蜿嚵校罕硎敬鎯﹃嚵小4鎯θ萘繛椋?/p>
4×4
地址數據A1A0F0F1F2F300010001100100110110010
1A11A0&&&&≥1≥1≥1≥1F0F1F2F3m0m1m2m32.可編程只讀存儲器用戶可根據需要自行進行編程的存儲器.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結反向擊穿產生雪崩現象,使FAMOS導通.位線為低電位.如用紫外線或者X射線照射FAMOS管,可使柵極放電,FAMOS恢復到截止狀態(tài).一個EPROM芯片:Intel2716VCCVPPOECEGND1121324CE是片使能端;OE是數據輸出使能端;VPP是編程寫入電源輸入端。容量:2K×8位受光窗口工作方式讀出未選中待機編程禁止編程校驗讀出CEOEVPP數據線D7~D0的狀態(tài)00+5V讀出的數據×1+5V高阻1×+5V高阻1+25V寫入的數據01+25V高阻00+25V讀出校驗數據2716工作方式3)E2PROM(電可擦可編程只讀存儲器)特點:①編程和擦除均由電完成;②既可整片擦除,也可使某些存儲單元單獨擦除;③重復編程次數大大高于EPROM.3.PROM的應用1)實現組合邏輯函數用PROM實現組合邏輯函數,實際上是利用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實現邏輯函數:1A&&&&≥1≥1≥1F1F2F31B1C&&&&m0m1m2m3m4m5m6m72)存放數據表和函數表:例如三角函數、對數、乘法等表格。3)存放調試好的程序。*2)、3)是PROM的主要用途。6.1.2隨機存取存儲器(RAM)RAM可以隨時從任一指定地址讀出數據,也可以隨時把數據寫入任何指定的存儲單元.RAM在計算機中主要用來存放程序及程序執(zhí)行過程中產生的中間數據、運算結果等.RAM按工藝分類:1)雙極型;2)場效應管型。場效應管型分為:1)靜態(tài);2)動態(tài)。1.RAM的結構......A0A1An-1地址譯碼器存儲矩陣
W0W1W2n-1字線地址線讀寫/控制電路讀寫/控制(R/W)片選(CS)數據輸入/輸出
(I/O)ENEN11I/ODR/W當片選信號CS無效時,I/O對外呈高阻;當片選信號CS有效時,由R/W信號決定讀或寫,根據地址信號,通過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)存儲單元為例)位線數據線
(D)字選線TCSCD輸出電容寫信息:字選線為1,T導通,數據D經T送入CS.讀信息:字選線為1,T導通,CS上的數據經T送入位線的等效電容CD.特點:1)當不讀信息時,電荷在電容CS上的保存時間約為數毫秒到數百毫秒;
2)當讀出信息時,由于要對CD充電,使
CS上的電荷減少。為破壞性讀出。
3)通常在CS上呈現的代表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基本結構框圖
互補輸入項與項或項反饋項
根據與、或陣列的可編程性,PLD分為三種基本結構。1)與陣列固定,或陣列可編程型結構PROM屬于這種結構。2)與、或陣列均可編程型結構PLA(ProgrammableLogicArray)屬于這種結構。特點:與陣列規(guī)模大,速度較低。特點:速度快,設計邏輯函數可采用最簡結構,芯片內部資源利用率高。但編程難度大,缺乏質高價廉的開發(fā)工具。3)或陣列固定,與陣列可編程型結構PAL(ProgrammableArrayLogic)屬于這種結構。該結構稱為PAL結構。特點:速度快,費用低,易于編程。當前許多PLD器件都采用這種結構。6.2.1可編程陣列邏輯(PAL)PAL的基本結構111&&&&≥1≥1A0A1A2F1F0實際產品中,構成輸出的乘積項可達8個.1.PLA的輸出結構PAL的與陣列結構類同.但輸出結構有多種:1)組合輸出型(這種結構適用于實現組合邏輯電路)①專用輸出結構O&≥11輸入項I……共有三種形式:高輸出有效;低輸出有效;互補輸出.本例為低輸出有效②可編程I/O結構I/O&≥11輸入項I……EN112)寄存器輸出型寄存器輸出型結構,內含觸發(fā)器,適應于實現時序邏輯電路.①寄存器輸出結構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實現2×2乘法器(輸入A1A0和B1B0分別為兩位二進制數,輸出為結果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以實現F1為例3)PAL器件的性能特點㈠邏輯功能由用戶定義,用可編程方法代替常規(guī)設計方法;㈡編程容易,開發(fā)簡單,簡化了系統(tǒng)設計和布線過程;㈢器件密度大,可代替多片中小規(guī)模標準數字集成電路,比用常規(guī)器件節(jié)省空間;㈣器件傳輸延遲小,工作頻率高,有利于提高系統(tǒng)的工作速度;㈤具有可編程的三態(tài)輸出,管腳配置靈活,輸入輸出管腳數量可變;㈥具有加密功能,有利于系統(tǒng)保密;㈦采用多種工藝制造,可滿足不同系統(tǒng)不同場合的各種需要。6.2.2通用陣列邏輯(GAL)GAL器件繼承了PAL、PROM等器件的優(yōu)點,克服了原有PAL器件的不足,是現代數字系統(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)乘積項數據選擇器三態(tài)數據選擇器輸出數據選擇器反饋數據選擇器AC0、AC1(n)及XOR(n)均為GAL器件片內控制字中的結構控制位。結構控制字共有82位,不同的控制內容,可使OLMC被配置成不同的功能組態(tài)。控制字的內容是在編程時由編程器根據用戶定義的管腳及實現的函數自動寫入的。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)
聲明在設計或實體中將用到的常量,數據類型,元件及子程序等實體(Entities)
聲明到其它實體及其它設計的接口,即定義本設計的輸入/輸出端口.結構體(Architectures)
定義實體的實現.即電路的具體描述.例:一個具有異步清零、進位輸入/輸出的四位二進制加法計數器的VHDL代碼。二進制計數器nresetciclkco3210qcntlibraryieee; --庫,程序包調用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>;以上述的四位計數器為例,則該計數器的實體部分如下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),它與模塊的輸入/輸出或器件的引腳相關聯。上述實體對應的原理圖符號如下:nresetciclkcoqcnt[3..0]cntm16
每個端口必須定義:信號名: 端口信號名在實體中必須是唯一的。信號名應是合法的標識符。
屬性:它包括(MODE):決定信號的流向類型(TYPE):端口所采用的數據類型●IN
信號進入實體但并不輸出;●OUT
信號離開實體但并不輸入;并且不會在內部反饋使用;●INOUT
信號是雙向的(既可以進入實體,也可以離開實體);●BUFFER
信號輸出到實體外部,但同時也在實體內部反饋。
BUFFER(緩沖)是INOUT(雙向)的子集,但不是由外部驅動端口模式(MODE)有以下幾種類型:端口模式可用下圖說明:(黑框代表一個設計或模塊)INOUTBUFFERINPUT●integer
可用作循環(huán)的指針或常數,通常不用于 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)定義端口的數據類型,包括以下幾種:
結構體(Architecture)
所有能被仿真的實體都有一個結構體描述,結構體描述實體的行為功能。即設計的功能。一個實體可以有多個結構體,一種結構體可能為行為描述,而另一種結構體可能為設計的結構描述或數據通道的描述。結構體是VHDL設計中最主要的部分,它一般有一些子部分構成,如下圖所示:結構體(Architecture)
聲明區(qū)(Declarations)信號聲明:聲明用于該結構體的類型,常數,元 件,子程序。并發(fā)語句信號賦值計算結果,并賦值給信號過程調用調用一個預先定義好的算法元件例化調用另一個實體所描述的電路。即元件調用過程定義一個新算法實現電路功能。在過程中賦值順序語句。語句按放置的順序執(zhí)行。結構體的一般格式如下:Architecture<architecture_name結構體名>of<entity_name>is
--結構體聲明區(qū)域--聲明結構體所用的內部信號及數據類型--如果使用元件例化,則在此聲明所用的元件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;上述四位計數器的結構體如下:程序包(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
--如下是函數的子程序體
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)
庫是專門存放預先編譯好的程序包的地方,這樣它們就可以在其它設計中被調用。例如在上述計數器設計中開始部分有:LIBRARYieee; USE
ieee.std_logic_1164.ALL;USE
ieee.std_logic_unsigned.ALL;ieee
是ieee標準庫的標志名,兩個USE語句使得以下設計可使用程序包std_logic_1164、std_logic_unsigned中預定義的全部內容。
以下是IEEE兩個標準庫“std”與“ieee”中所包含的程序包的簡單解釋:庫名程序包名包中預定義內容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 邏輯非·連接運算符& 連接,將兩個對象或矢量連接成 維數更大的矢量數據對象
在邏輯綜合中,VHDL語言常用的數據對象為信號、常量、變量?!ば盘枺⊿ignal)
用于聲明內部信號,而非外部信號(外部信號對應為in,out,inout,buffer),其在元件之間起互聯作用,可以賦值給外部信號。信號也可在狀態(tài)機中表示狀態(tài)變量。信號賦值符號為“<=”?!ぷ兞俊こA?/p>
常量在設計描述中保持某一規(guī)定類型的特定值不變。如利用它可設計不同模值的計數器,模值存于常量中,不同的設計,改變模值僅需改變此常量值。常量在定義時賦初值,賦值符號為“:=”。
變量只在給定的進程中用于聲明局部值或用于子程序中。賦值符號為“:=”。下例為一位DCB碼加法計數器的例子.Entitybcdadderis
Port(op1,op2:inintegerrange0to16;result:outintegerrange0to31);Enddcdadder;Architecturebehaviorofbcdadderis
constantadjustnum:integer:=6--定義一常量:整數型,值為6
signalbinadd:integer
range0to18;--定義一個信號,以保存兩數二進制相加的和.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í)行的,即與它們出現的先后次序無關。如when..else語句順序語句總是處于進程的內部,并且從仿真的角度來看是順序執(zhí)行的。如if-then-else語句下面先看一下進程:1.進程Process
進程用于描述順序事件并且包含在結構中,一個結構體可以包含多個進程語句。以下為進程語句的構成:進程(Process)
聲明區(qū)(Declarations)內部變量聲明:聲明用于該進程的類型,常數,元件,子程序順序語句信號賦值(<=)過程調用null語句(空語句,值保持不變)wait語句(等待時鐘信號)case語句loop語句(循環(huán))if語句變量賦值(:=)next語句(跳過剩余循環(huán))exit語句(退出循環(huán))以下為進程語句的語法描述:
endprocess<optional_label>;--進程結束<optional_label>:process<sensitivitylist敏感信號表>--此處聲明局部變量,數據類型及其他局部聲明
(用于進程中)begin --進程開始--進程中為順序語句,如:--signalandvariableassignments信號與變量的賦值--ifandcasestatements--if-then-else語句case-when語句--whileandforloops--functionandprocedurecalls函數,過程調用如上述計數器為例: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—語句)●例化語句一、布爾方程
四選一的數據選擇器的庫聲明、程序包聲明及實體定義如下:libraryieee;useieee.std_logic_1164.all;entitymux4isport (s :instd_logic_vector(1downto0); a0,a1,a2,a3 :instd_logic; y :outstd_logic);endmux4;以布爾方程實現的結構體如下: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實現的結構體architecturearchmuxofmux4is
begin
withsselect y<=a0when“00”, a1when“01”, a2when“10”, a3whenothers;endarchmux;采用WHEN-ELSE實現的結構體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模塊的說明,使之可在其它模塊中使用,元件聲明可放在程序包中,也可以在某個設計的結構體中聲明。元件例化指元件的調用。元件聲明語法:Component<元件實體名>
port<元件端口信息,同該元件實現時
的實體的port部分>;Endcomponent;--元件例化:<例化名>:<實體名,即元件名>portmap(<端口列表>)例如:在一cntvh10設計中調用一個模為10的計數器
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;所實現的電路為:ciconresetqcnt[3..0]clkcntm10ciRdclkcoadr[3..0]decodeout[6..0]qoutdecode47順序相同順序不同為增加元件例化的靈活性,可定義參數化元件。下面定義一個位數可調的計數器。Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;Entitycntnbitsis
generic(cntwidth:integer:=4);--定義了一個可調參數,初始值為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);定義了一個整數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(<實際參數,如確定的總線寬度等>)portmap(<端口列表>)例如,例化為10位計數器:U1:cntnbitsgenericmap(10)portmap(ci,Rd,clk,qa);--元件例化在上述的可變位數計數器中,定義了一個常數“allis1”用于產生進位輸出信號時的判斷。它的值為各位都為‘1’。此外,用了(other=>‘1’)賦值。(other=>‘1’)表示一個集合,集合中各元素用‘,’隔開。表示各元素都為‘1’。other必須出現在集合的最后。例:signal:sa:std_logic_vector(7downto0);sa<=(‘1’,‘0’,other=>‘1’)其結果是給信號sa賦值“10111111”。0
配置(configuration)
一個實體可用多個結構體描述,在具體綜合時選擇哪一個結構體來綜合,則由配置來確定。即配置語句來安裝連接具體設計(元件)到一個實體—結構體對。配置被看作是設計的零清單,它描述對每個實體用哪一種行為,它非常象一個描述設計每部分用哪一種零件的清單。配置語句舉例:--這是一個兩位相等比較器的例子,它用四種不同描述來實現,既有四個結構體。ENTITYequ2IS
PORT(a,b :IN std_logic_vector(1downto0); equ :OUTstd_logic);ENDequ2;--結構體一:用元件例化來實現,即網表形式: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;--結構體二:用布爾方程來實現:ARCHITECTUREequationofequ2ISBEGIN equ<=(a(0)XORb(0)NORa(1)XORb(1));END equation;--結構體三:用行為描述來實現,采用并行語句: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;--結構體四:用行為描述來實現,采用順序語句:
上述實例中,實體equ擁有四個結構體:netlist、qeuation、con_behave、seq_behave,若用其例化一個相等比較器aequb,那么實體究竟對應于哪個結構體呢?配置語句很靈活地解決了這個問題:如選用結構體netlist,則用CONFIGURATIONaequbOFequ2IS
FORnetlist
ENDFOR;ENDCONFIGURATION;CONFIGURATIONaequbOFequ2IS
FORcon_behave
ENDFOR;ENDCONFIGURATION;如選用結構體con_behave,則用以上四種結構體代表了三種描述方法:Behavioral(行為描述)反映一個設計的功能或算法,一般使用進程process,用順序語句表達。Dataflow(數據流描述)反映一個設計中數據從輸入到輸出的流向,使用并發(fā)語句描述。Structure(結構描述)它最反映一個設計硬件方面特征,表達了內部元件間連接關系。使用元件例化來描述。1
子程序子程序由函數(FUNCTION)和過程(PROCEDURE)組成。函數只能用以計算數值,而不能用以改變與函數形參相關的對象的值。函數的參量只能是方式為IN的信號與常量,而過程的參量可以為IN,OUT,INOUT方式。過程能返回多個變量,函數只能由一個返回值。過程和函數常見于面向邏輯綜合的設計中,主要進行高層次的數值運算或類型轉換、運算符重載,也可用來元件例化。語法如下:函數:FUNCTION<function_name>(parametertypes) RETURN<TYPES>IS
BEGIN <代碼區(qū)>
END<function_name>;過程:PROCEDURE<procedure_name實體名> (<portlistfortheprocedure,列出過程的輸入/輸出信號端 口>)IS
BEGIN <代碼區(qū)>
END<procedure_name>;函數舉例:此函數返回兩數中的較小數FUNCTIONMin(x,y:INTEGER)RETURN INTEGERISBEGIN
IFx<yTHEN
RETURNx;
ELSE
RETURNy;
ENDIF;ENDMin;過程舉例:此過程將向量轉換成整數類型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表示限定型數組中元素的個數。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,因此表示下降沿。
此外,還可利用預定義好的兩個函數來表示時鐘的邊沿。rising_edge(clk) 表示時鐘的上升沿falling_edge(clk) 表示時鐘的下降沿●范圍類屬性’range
屬性,其生成一個限制性數據對象的范圍例如:signaldata_bus:std_logic_vector(15downto0);data_bus’range=15downto0;3
VHDL的模板
下面以VHDL的兩個模板回顧一下VHDL的結構,一個是基本結構,一個是詳細結構。其中藍色字為關鍵字,<>中內容為對用戶不同設計所需填寫的內容。--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ū)域--聲明結構體所用的內部信號及數據類型--如果
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 描寫秋景的初一作文600字5篇
- 初中物理教學心得體會
- 大學畢業(yè)求職信合集五篇
- 對創(chuàng)業(yè)的認識和理解范文五篇
- 七年級下冊歷史知識要點歸納總結
- 光電技術轉讓協議書(2篇)
- 租賃經營合同范本
- 旅游汽車租賃合同樣書
- 2025電腦購銷合同合同范本
- 2025煤炭買賣合同
- 在建工程重大安全隱患局部停工整改令(格式)
- 《落花生》-完整版課件
- 2021年貴安新區(qū)產業(yè)發(fā)展控股集團有限公司招聘筆試試題及答案解析
- 安全文化培訓 (注冊安工再培訓)課件
- 色粉-MSDS物質安全技術資料
- 骨科學研究生復試真題匯總版
- 石油化工鋼結構工程施工及驗收規(guī)范
- 遼海版六年級音樂上冊第8單元《3. 演唱 姐妹們上場院》教學設計
- 形勢任務教育宣講材料第一講——講上情
- 物業(yè)安全員考核實施細則
- 中國地質大學(武漢)教育發(fā)展基金會籌備成立情況報告
評論
0/150
提交評論