信号種別には,``bus'' か ``register'' を指定することができます.このキー
ワードを記述することにより,その信号の値を決定する出力ドライバを切断す
ることができます.なお,``register'' ではドライバの出力が切断したとき
切断まえの値をキープします.一方``bus''ではキープしません.
信号宣言(signal)
signal 信号名 {, 信号名} : データタイプ 信号種別 { := 初期値 } ;
回路の配線イメージに相当します.architecture, package, entity 内で宣言
でき,その内部でグローバルです.信号代入文 `< =' で代入します.代入され
た値は同時処理を行うために直ちに代入されません.代入の評価と実際の代入
は別々に行われます.
宣言例
signal TMP1 : std_logic := '0';
signal TMP2 : std_logic_vector( 7 downto 0 ) := "00000000";
signal TMP3 : std_logic_vector( 0 to 7 );
signal TMP4 : std_logic bus;
変数宣言(variable)
variable 変数名 {, 変数名} : データタイプ { := 初期値 } ;
回路の配線等に直接関るものではなく,ハードウェアの動作を高いレベルでモ
デル化するような場合に使用します.変数は process, function, procedure
内で宣言でき,その内部でしか参照できないローカルなものです.変数代入文
`:=' で代入します.代入された値は直ちに変数へ代入され次の行では変更後
の値を使用できます.
宣言例
variable TMP1 : std_logic := '0';
variable TMP2 : std_logic_vector( 7 downto 0 ) := "00000000";
variable TMP3 : std_logic_vector( 0 to 7 );
定数宣言(constant)
constant 定数名 : データタイプ { := 初期値 } ;
architecture, package, entity, process, function, procedure 内で宣言で
きるグローバルな定数です.値は宣言時に一度しか定義できません.
宣言例
constant ZERO : std_logic := '0';
constant ZERO8 : std_logic_vector( 7 downto 0 ) := "00000000";
信号代入文と変数代入文の違い
例(1) 例(2) process(A, B, C, D) process(A, B, C) begin variable D : std_logic_vector( 3 downto 0 ); D < = A; begin X < = B + D; D := A; D < = C; X < = B + D; Y < = B + D; D := C; end process; Y < = B + D; end process; 結果 結果 X < = B + C; X < = B + A; Y < = B + C; Y < = B + C;出典:長谷川裕恭:VHDLによるハードウェア設計入門,CQ出版社,1995.