- VLSI設計教程
- VLSI設計 - 首頁
- VLSI設計 - 數字系統
- VLSI設計 - FPGA技術
- VLSI設計 - MOS電晶體
- VLSI設計 - MOS反相器
- 組合MOS邏輯電路
- 時序MOS邏輯電路
- VHDL程式設計
- VHDL - 簡介
- VHDL - 組合電路
- VHDL - 時序電路
- Verilog
- Verilog - 簡介
- 行為建模與時序
- VLSI設計實用資源
- VLSI設計 - 快速指南
- VLSI設計 - 有用資源
- VLSI設計 - 討論
VLSI設計 - VHDL簡介
VHDL代表超高速積體電路硬體描述語言。它是一種程式語言,用於透過資料流、行為和結構建模風格來模擬數字系統。該語言於1981年首次為國防部(DoD)在VHSIC計劃下引入。
描述設計
在VHDL中,實體用於描述硬體模組。實體可以使用以下方式描述:
- 實體宣告
- 體系結構
- 配置
- 程式包宣告
- 程式包主體
讓我們看看這些是什麼?
實體宣告
它定義了硬體模組的名稱、輸入輸出訊號和模式。
語法 -
entity entity_name is Port declaration; end entity_name;
實體宣告應以“entity”開頭,以“end”結尾。方向將是輸入、輸出或雙向。
| 輸入 | 埠可以讀取 |
| 輸出 | 埠可以寫入 |
| 雙向 | 埠可以讀取和寫入 |
| 緩衝 | 埠可以讀取和寫入,它只能有一個源。 |
體系結構 -
體系結構可以使用結構化、資料流、行為或混合風格來描述。
語法 -
architecture architecture_name of entity_name architecture_declarative_part; begin Statements; end architecture_name;
在這裡,我們應該指定我們要為其編寫體系結構主體的實體名稱。體系結構語句應位於“begin”和“end”關鍵字之間。體系結構宣告部分可能包含變數、常量或元件宣告。
資料流建模
在這種建模風格中,資料透過實體的流動使用併發(並行)訊號來表示。VHDL中的併發語句是WHEN和GENERATE。
此外,僅使用運算子(AND、NOT、+、*、sll等)的賦值也可以用來構建程式碼。
最後,這種程式碼中還可以使用一種特殊型別的賦值,稱為BLOCK。
在併發程式碼中,可以使用以下內容 -
- 運算子
- WHEN語句(WHEN/ELSE或WITH/SELECT/WHEN);
- GENERATE語句;
- BLOCK語句
行為建模
在這種建模風格中,實體的行為作為一組語句按指定的順序依次執行。僅放置在PROCESS、FUNCTION或PROCEDURE內部的語句是順序的。
PROCESSES、FUNCTIONS和PROCEDURES是唯一按順序執行的程式碼部分。
但是,作為一個整體,這些塊中的任何一個仍然與放置在其外部的任何其他語句併發。
行為程式碼的一個重要方面是它不限於時序邏輯。事實上,有了它,我們可以構建時序電路以及組合電路。
行為語句是IF、WAIT、CASE和LOOP。變數也受到限制,它們應該僅用於順序程式碼中。變數永遠不能是全域性的,因此它的值不能直接傳遞出去。
結構建模
在這種建模中,實體被描述為一組互連的元件。元件例項化語句是併發語句。因此,這些語句的順序並不重要。結構化建模風格僅描述元件的互連(視為黑盒),而不暗示元件本身或它們共同表示的實體的任何行為。
在結構建模中,體系結構主體由兩部分組成 - 宣告部分(在關鍵字begin之前)和語句部分(在關鍵字begin之後)。
邏輯運算 - 與門
| X | Y | Z |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
VHDL Code: Library ieee; use ieee.std_logic_1164.all; entity and1 is port(x,y:in bit ; z:out bit); end and1; architecture virat of and1 is begin z<=x and y; end virat;
波形
邏輯運算 - 或門
| X | Y | Z |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
VHDL Code: Library ieee; use ieee.std_logic_1164.all; entity or1 is port(x,y:in bit ; z:out bit); end or1; architecture virat of or1 is begin z<=x or y; end virat;
波形
邏輯運算 - 非門
| X | Y |
|---|---|
| 0 | 1 |
| 1 | 0 |
VHDL Code: Library ieee; use ieee.std_logic_1164.all; entity not1 is port(x:in bit ; y:out bit); end not1; architecture virat of not1 is begin y<=not x; end virat;
波形
邏輯運算 - 與非門
| X | Y | z |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
VHDL Code: Library ieee; use ieee.std_logic_1164.all; entity nand1 is port(a,b:in bit ; c:out bit); end nand1; architecture virat of nand1 is begin c<=a nand b; end virat;
波形
邏輯運算 - 或非門
| X | Y | z |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 0 |
VHDL Code: Library ieee; use ieee.std_logic_1164.all; entity nor1 is port(a,b:in bit ; c:out bit); end nor1; architecture virat of nor1 is begin c<=a nor b; end virat;
波形
邏輯運算 - 異或門
| X | Y | Z |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
VHDL Code: Library ieee; use ieee.std_logic_1164.all; entity xor1 is port(a,b:in bit ; c:out bit); end xor1; architecture virat of xor1 is begin c<=a xor b; end virat;
波形
邏輯運算 - 同或門
| X | Y | Z |
|---|---|---|
| 0 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
VHDL Code: Library ieee; use ieee.std_logic_1164.all; entity xnor1 is port(a,b:in bit ; c:out bit); end xnor1; architecture virat of xnor1 is begin c<=not(a xor b); end virat;
波形