VHDLにおけるシグナルと変数の主な違いは、シグナルは過去の値の履歴を持つオブジェクトであるのに対し、変数は現在の単一の値を持つオブジェクトであることです。
VHDLは、High-Level Description Languageの略で、一般的なHDLです。
一般にデジタル回路は、真と偽という2つの離散的なレベルで動作する。
ここで、HDLはこれらの演算を行うのに役立つ。
さらに、これらの言語は制御構造、式、ステートメントなどのプログラミング構造を持っています。
また、VHDLのベースとなる言語として、AdaやPascalがあります。
VHDLにおける信号とは?
シグナルは、システム仕様の同時実行ステートメント間の通信チャネルを示すワイヤに相当します。
また、シグナルは並行処理や複数の駆動源を持つバスなど、ハードウェア固有の機能をモデル化するのに役立ちます。
さらに、すべてのシグナルは値の履歴を持つ。
また、現在の値と保護された将来の値を持つ複数のドライバを持つことが可能である。
さらに、信号の属性は、信号へのアクセスに役立つ。
プログラマは、宣言部でシグナルを宣言することができる。
したがって、パッケージで宣言された信号は、そのパッケージを使用するすべての設計エンティティに表示されます。
さらに、一部のシグナルはアーキテクチャ内部でしか見ることができません。
したがって、ブロック内で宣言された信号は、その特定のブロックにのみ適用されます。
さらに、あるシグナルがサブプログラム内にある場合、それらのシグナルはそのサブプログラム内のみで見ることができます。
以下は、シグナル宣言のあるコードの一部です。
ライブラリ IEEE;
IEEE.Std_Logic_1164.allを使用する。
エンティティDataTransmは
port (Data: Std_Logic_Vector(15 downto 0));
end entity DataTransm;
DataTransmのアーキテクチャExDeclは以下の通り。
また、シグナル宣言は単一または複数の識別子で構成される。
そして、各シグナル名は識別子であり、個々のシグナルを生成する。
また、サブタイプ指示子があってもよい。
さらに、その宣言において、初期値を割り当てることが可能である。
VHDLにおける変数とは?
変数とは、その変数が定義されているプロセスやサブプログラムにローカルな情報を格納するオブジェクトです。
これらの値はシミュレーション中に変数代入文によって変更することができます。
さらに、変数宣言には単一または複数の識別子、サブタイプ表示、オプションでグローバルに静的な式を含めることができます。
例えば、以下のような変数宣言があるコードです。
type Mem は、Std_Logic の配列(自然数<>, 自然数<>)です。
variable Delay1, Delay2: 時間。
変数RAM1: Mem (0〜1023, 0〜8)。
変数のデフォルト値は、プロセスで宣言された変数を初期化するために使用されます。
初期値として、明示的または暗黙的に与えることができます。
サブプログラムが呼び出されるたびに、変数はサブプログラムの中で宣言される。
しかし、変数の範囲は、定義されたプロセスまたはサブプログラムにのみ限定されます。
とはいえ、共有変数を持つプロセスが複数ある場合には、この点が変わってきます。
しかし、このような状況は予測できない結果をもたらす可能性があるため、避けることが重要です。
VHDLにおける信号と変数の違い
定義
信号とは、ハードウェアシステムを記述する主要なオブジェクトであり、「電線」に相当する。
一方、変数は、定義されたプロセスやサブプログラム(手続きや関数)に局所的に存在する情報を格納するオブジェクトです。
基本情報
このように、VHDLにおけるシグナルと変数の主な違いは、シグナルは過去の値の履歴を持つオブジェクトであるのに対し、変数は現在の単一の値を持つオブジェクトであることです。
構文
variable variable_name : type; and variable variable_name : type := initial_value; は、VHDLにおけるシグナルの構文です。
一方、signal signal_name: type; AND signal signal_name: type: = initial_value; は、VHDLにおける変数の構文です。
これもVHDLにおけるシグナルと変数の違いです。
結論
結論として、電子技術者やプログラマはデジタルシステムを設計するためにVHDLを使用します。
VHDLプログラミングでは信号と変数という2つのオブジェクトがあります。
しかし、VHDLにおけるシグナルと変数の主な違いは、シグナルは過去の値の履歴を持つオブジェクトであるのに対し、変数は現在の単一の値を持つオブジェクトであることです。