Vlsi-design-vhdl-introduction
VLSIデザイン-VHDLの概要
VHDLは、非常に高速な集積回路ハードウェア記述言語の略です。 これは、モデリングのデータフロー、動作スタイル、構造スタイルによってデジタルシステムをモデル化するために使用されるプログラミング言語です。 この言語は、1981年にVHSICプログラムの下で国防総省(DoD)のために初めて導入されました。
デザインの説明
VHDLでは、エンティティを使用してハードウェアモジュールを記述します。 エンティティは、次を使用して説明できます。
- エンティティ宣言
- 建築
- 設定
- パッケージ宣言
- パッケージ本体
これらは何ですか?
エンティティ宣言
ハードウェアモジュールの名前、入出力信号、およびモードを定義します。
構文-
entity entity_name is
Port declaration;
end entity_name;
エンティティ宣言は「entity」で始まり、「end」キーワードで終わる必要があります。 方向は、入力、出力、または入出力です。
In | Port can be read |
Out | Port can be written |
Inout | Port can be read and written |
Buffer | Port can be read and written, it can have only one source. |
アーキテクチャ-
アーキテクチャは、構造、データフロー、動作、または混合スタイルを使用して説明できます。
構文-
architecture architecture_name of entity_name
architecture_declarative_part;
begin
Statements;
end architecture_name;
ここでは、アーキテクチャ本体を記述しているエンティティ名を指定する必要があります。 アーキテクチャステートメントは、「begin」および「énd」キーワード内に含める必要があります。 アーキテクチャー宣言部には、変数、定数、またはコンポーネント宣言が含まれる場合があります。
データフローモデリング
このモデリングスタイルでは、エンティティを通るデータのフローは、同時(並列)信号を使用して表現されます。 VHDLの同時ステートメントは、WHENおよびGENERATEです。
それらに加えて、演算子(AND、NOT、+、*、sllなど)のみを使用した割り当てもコードの構築に使用できます。
最後に、BLOCKと呼ばれる特別な種類の割り当ても、この種のコードで使用できます。
並行コードでは、以下を使用できます-
- オペレータ
- WHENステートメント(WHEN/ELSEまたはWITH/SELECT/WHEN);
- GENERATEステートメント。
- BLOCKステートメント
行動モデリング
このモデリングスタイルでは、一連のステートメントとしてのエンティティの動作が、指定された順序で順番に実行されます。 PROCESS、FUNCTION、またはPROCEDURE内に配置されたステートメントのみが順次です。
PROCESSES、FUNCTIONS、およびPROCEDURESは、順次実行されるコードの唯一のセクションです。
ただし、全体として、これらのブロックはいずれも、外部に配置された他のステートメントと同時に存在します。
ビヘイビアコードの1つの重要な側面は、シーケンシャルロジックに限定されないことです。 実際、これを使用して、順序回路と組み合わせ回路を構築できます。
動作ステートメントは、IF、WAIT、CASE、およびLOOPです。 変数も制限されており、シーケンシャルコードでのみ使用されることになっています。 VARIABLEがグローバルになることはないため、その値を直接渡すことはできません。
構造モデリング
このモデリングでは、エンティティは相互接続されたコンポーネントのセットとして記述されます。 コンポーネントのインスタンス化ステートメントは、並行ステートメントです。 したがって、これらのステートメントの順序は重要ではありません。 モデリングの構造スタイルは、コンポーネントの相互接続(ブラックボックスとして表示)のみを記述し、コンポーネント自体またはそれらが集合的に表すエンティティの動作を意味しません。
構造モデリングでは、アーキテクチャ本体は2つの部分で構成されます-宣言部(キーワード開始前)とステートメント部(キーワード開始後)
論理演算– AND GATE
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;
波形
論理演算– ORゲート
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;
波形
論理演算-NOTゲート
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;
波形
論理演算– NANDゲート
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;
波形
論理演算– NORゲート
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;
波形
論理演算– XORゲート
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-NORゲート
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;