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