第8章 VHDL設計深入_第1頁
第8章 VHDL設計深入_第2頁
第8章 VHDL設計深入_第3頁
第8章 VHDL設計深入_第4頁
第8章 VHDL設計深入_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第8章VHDL設計深入

VHDL設計深入盡管前面我們對VHDL所涉及的語法做了比較詳細的說明及示例詮釋,但依然存在有待深入探討的問題,及系統(tǒng)性歸納闡述的必要,以便我們更好的掌握VHDL數字系統(tǒng)設計技術。28.1數據對象

8.1.1常數

常數的定義和設置主要是為了使程序更容易閱讀和修改。常數定義語句:示例:常數定義范圍:實體、結構體、程序包、塊、進程和子程序38.1數據對象

8.1.1常數

特點:1.全局性

在程序中,常量是一個不變的值,一旦做了數據類型和賦值定義后,在程序中就不能再改變,因而具有全局性意義。2.可視性

即常數的使用范圍取決于它被定義的位置。

程序包實體結構體屬于此結構體的任意單元與進程48.1數據對象

8.1.2變量

變量的賦值是一種理想化的數據傳輸,是立即發(fā)生的,不存在任何延時行為。其主要作用是在進程中作為臨時的數據存儲單元。變量定義語句及示例:變量賦值語句及示例:變量定義范圍(局部量):進程、子程序5初始值非必須8.1數據對象

8.1.3信號

信號定義語句:信號賦值語句:信號的定義和使用范圍:信號是描述硬件系統(tǒng)的基本數據對象。作為一種數值的容器,不但可以容納當前值,也可以保持歷史值。實體、結構體、程序包。在進程和子進程的順序語句中不允許定義信號,但可使用,即賦值;進程中只能將信號列入敏感表,而對變量不敏感。process(clk,en)68.1數據對象

8.1.3信號

信號的賦值可以出現(xiàn)在一個進程中,也可以直接出現(xiàn)在結構體的并行語句結構中,但兩者的賦值含義是不一樣的:1.前者(進程)屬于順序信號賦值,這時的信號賦值操作要視進程是否已被啟動,并且允許對同一目標信號進行多次賦值;2.后者(結構體)屬于并行信號賦值,其賦值操作是各自獨立并行地發(fā)生的,且不允許對同一目標信號進行無條件的多次賦值。示例:7√但,不同進程中不允許對對同一信號賦值。8.1數據對象

8.1.3信號

after語句描述賦值延遲的賦值語句還可構建在不同時間序列中對同一信號進行賦值的語句表述。信號賦值語句:示例:

after

xns語句也僅對VHDL仿真有效,無法綜合出任何對應的硬件電路。8初始值8.1數據對象

8.1.4進程中的信號賦值與變量賦值

準確理解和把握一個進程中的信號和變量賦值行為的特點以及它們功能上的異同點,對利用VHDL進行正確的電路設計十分重要。98.1數據對象

8.1.4進程中的信號賦值與變量賦值

信號與變量適用范圍示例:兩者綜合的結果相同:變量的定義與賦值只能在進程內信號的定義不能在進程內但賦值可內可外108.1數據對象

8.1.4進程中的信號賦值與變量賦值

信號與變量行為特性示例:?Why?118.1數據對象

8.1.4進程中的信號賦值與變量賦值

進程中的賦值行為應該注意以下三點:

1.信號的賦值需要有一個δ延時

。2.一個進程中的所有賦值語句,包括信號賦值和變量,都必須在一個δ延時內完成(變量在δ延時前即已完成賦值),即一個進程的運行時間固定為一個δ延時。在進程中的順序賦值是以并行的方式“同時”完成的,執(zhí)行賦值操作和完成賦值是兩個不同的概念。3.當在進程中存在同一信號有多個賦值源(即對同一信號發(fā)生多次賦值)時,實際完成賦值的信號是最接近endprocess語句的信號。128.1數據對象

8.1.4進程中的信號賦值與變量賦值

執(zhí)行賦值與完成賦值示例:

e1在5ns+δ被執(zhí)行賦值,在5ns+

2δ完成賦值(即更新)c1的執(zhí)行賦值與完成賦值時間都是5ns+δ。δ138.1數據對象

8.1.4進程中的信號賦值與變量賦值

信號與變量的差別示例:4選1多路選擇器的錯誤描述:此三行并行執(zhí)行根據進程中信號的賦值規(guī)則,只有第三行中的muxval得到更新,但由于muxval<=0并未完成賦值,故紅框內的muxval始終是個未知數,這就導致了仿真時序的不正確。錯誤的仿真結果:148.1數據對象

8.1.4進程中的信號賦值與變量賦值

信號與變量的差別示例:4選1多路選擇器的正確描述:正確的仿真結果:i0i2i1i3158.2含高阻輸出的電路設計8.2.1三態(tài)門設計(知識回顧)

概述:三態(tài)指其輸出既可以是一般二值邏輯電路的正常的高電平(邏輯1)或低電平(邏輯0),又可以保持特有的高阻抗狀態(tài)(Z)。處于高阻抗狀態(tài)時,輸出電阻很大,相當于開路,沒有任何邏輯控制功能。高阻態(tài)的意義在于實際電路中不可能斷開電路。

三態(tài)電路的輸出邏輯狀態(tài)的控制,是通過一個輸入引腳實現(xiàn)的。舉例:內存里面的一個存儲單元,讀寫控制線處于低電位時,存儲單元被打開,可以向里面寫入;當處于高電位時,可以讀出。但是不讀不寫,就要用高電阻態(tài),此時的節(jié)點處于懸空(不被拉到VDD或者GND)的狀態(tài),沒有電路驅動他。應用:如果你的設備端口要掛在一個總線上,必須通過三態(tài)緩沖器。因為在一個總線上同時只能有一個端口作輸出,這時其他端口必須在高阻態(tài),同時可以輸入這個輸出端口的數據。

168.2含高阻輸出的電路設計8.2.1三態(tài)門設計

實例:8位三態(tài)控制門電路:必須大寫:IEEE庫中對數據類型std_logic的預定義已經將高阻態(tài)確定為大寫’Z’。178.2含高阻輸出的電路設計8.2.2雙向端口的設計方法

用Inout端口模式設計雙向端口也必須考慮三態(tài)的使用,因為雙向端口的設計與三態(tài)端口的設計十分相似,都必須考慮端口的三態(tài)控制。

由于雙向端口在完成輸入功能時,必須使原來呈輸出模式的端口呈高阻態(tài),否則,待輸入的的外部數據勢必會與端口處原有電平發(fā)生“線與”,導致無法將外部數據正確地讀入。188.2含高阻輸出的電路設計8.2.2雙向端口的設計方法

雙向端口的錯誤描述:錯誤的仿真結果:不完整:沒有體現(xiàn)q的輸出功能。導致:1.q的仿真符號僅為輸出符號2.鎖存器的產生198.2含高阻輸出的電路設計8.2.2雙向端口的設計方法

雙向端口的正確描述:前者體現(xiàn)q的輸出功能;后者體現(xiàn)q的輸入功能。產生正確的仿真結果:1.q為輸入輸出符號2.消除了鎖存器208.2含高阻輸出的電路設計8.2.3三態(tài)總線電路設計

三態(tài)總線設計示例:8位4通道的三態(tài)總線驅動器錯誤描述:四個順序完成的IF語句,為什么會綜合出錯誤的結果呢?這是因為在進程中,順序等價的語句,包括賦值語句和if語句等,當它們列于同一進程敏感表中的信號同時變化時,只可能對進程結束前的那一條賦值語句進行賦值操作,而忽略其上的所有等價語句。產生錯誤的仿真結果:除input0外,其余三個8位輸入端都懸空,沒能用上。218.2含高阻輸出的電路設計8.2.3三態(tài)總線電路設計

三態(tài)總線設計示例:8位4通道的三態(tài)總線驅動器正確描述:四個并列的when-else并行語句綜合出正確的電路結構:這是因為在結構體中,每一條并行語句都等同于一個獨立運行的進程,它們的地位是平等的,它們獨立且不沖突第監(jiān)視各并行語句中作為敏感信號的輸入值ctl。即當ctl變化時,四條when-else語句始終有一條語句被執(zhí)行。產生正確的RTL電路(見設計文件)及仿真結果:228.3順序語句歸納

8.3.1進程語句格式

一個結構體中,允許放置任意多個進程語句結構,而每一進程的內部都是由一系列順序語句構成的。VHDL中的順序僅是程序上的,并不意味著綜合后的硬件邏輯行為也具有順序性。1.一個結構體中可以含有多個Process結構;2.每一個Process結構對于其敏感信號參數表中定義的任一敏感參量的變化,可在任

何時刻被激活或稱為啟動;3.所有被激活的進程都是并行運行的;4.必須以endprocess結束進程,[is][進程標號]…可缺省。238.3順序語句歸納

8.3.2進程結構組成

1.進程說明部分:

主要定義一些除信號和共享變量外的局部變量,如數據類型、常數、變量、屬性、子程序等。

2.順序描述部分:

信號賦值語句、變量賦值語句、進程啟動語句(敏感信號參數表或wait語句)、子程序調用語句、順序描述語句(if、case、loop等)、進程跳出語句(next、exit等)。

3.多數VHDL綜合器要求敏感信號表必須列出本進程中所有輸入信號名。

248.3順序語句歸納

8.3.3進程要點

Process為一無限循環(huán)語句

進程只有兩種狀態(tài):執(zhí)行和等待。

2.進程中的順序語句具有明顯的順序和并行雙重性

在同一process中,10條語句和1000條語句的執(zhí)行時間是一樣的。這和軟件語言是有本質區(qū)別的。3.信號可以是多個進程間的通信線

結構體中多個進程之所以能并行同步運行,一個很重要原因是進程之間的通信是通過具有全局特性的信號來實現(xiàn)的。4.一個進程中只允許描述對應于一個時鐘信號的同步時序邏輯

時序電路必須由進程中的順序語句描述,而此順序語句必須由不完全條件語句構成。盡管在同一個進程中可順序放置多個條件語句(如if語句),但是推薦只放置一個含有時鐘邊沿檢測語句的條件語句。258.4并行賦值語句討論并行語句并不等同于總是并行且同時被執(zhí)行。例如進程,除非幾個進程都是擁有完全相同的敏感信號,否則不可能出現(xiàn)完全并行運行的情況。這兩個語句雖然屬于并行語句,但絕大多數情況下并不可能同時執(zhí)行,除非a、b、c嚴格同時發(fā)生變化。并行賦值語句也包含了類似進程的順序語句特性:

假設在某一穩(wěn)態(tài)條件下s0=0,s1=0;a、b、c、d均為0,此時x=0?,F(xiàn)在假設a發(fā)生了一個事件,變?yōu)?,這時上面select賦值語句并不會被執(zhí)行,因為此句并不對a敏感。這時只會執(zhí)行紅框內語句,因為只有其對a敏感,這時x將從原來的0變?yōu)?268.5IF語句概述

IF語句是VHDL設計中最重要和最常用的順序條件語句,可分為以下四類:1.非完整條件語句多用來產生時序電路2.完整條件語句多用來產生組合電路3.嵌套式條件語句組合、時序電路均可產生4.多分支條件語句組合、時序電路均可產生具有向上邏輯相與的功能?278.5IF語句概述

實例:利用多分支向上邏輯相與的功能實現(xiàn)8-3線優(yōu)先編碼器。288.6仿真延時8.6.1固有延時(信號的持續(xù)時間)8.6.2傳輸延時(并不考慮信號持續(xù)的時間,它僅表示信號傳輸推遲或延遲了一個時間段。)8.6.3仿真理解:綜合器不支持延時語句,干脆給并行語句和順序語句一個

的統(tǒng)一延時解決客觀存在的問題。延時是VHDL仿真需要的重要特性,為設計而建立的精確的延時模型,可以使用VHDL仿真器得到接近實際的精確結果。VHDL中有兩類延時模型能用于行為仿真建模:固有延時和傳輸延時298.7VHDL的描述風格

VHDL的模塊結構具有描述整個設計實體的邏輯功能,對于所希望的電路功能行為,可以在模塊中用不同的語句類型和描述方

溫馨提示

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

最新文檔

評論

0/150

提交評論