VHDL並行文マスター:実践ガイド
VHDLにおける並行文(concurrent statement)とは、processブロックの外部、アーキテクチャ内に直接配置される信号代入のことです。並行代入または並行プロセスとも呼ばれます。
並行文を書くと、右辺に現れるすべての信号に自動的に敏感なプロセスを効果的に作成します。つまり、並行代入は完全な感度リストを持つプロセスのシンタックスシュガーです。
この短縮形は、単一の信号を駆動するシンプルな組み合わせロジックを実装する際に特に便利です。感度リスト付きの完全なprocess構造を書く代わりに、アーキテクチャ本体で直接ターゲット信号に代入できます。
このチュートリアルはBasic VHDL Tutorialsシリーズの一部です。
正しく使用すれば、コードの意図はクリスタルクリアに保たれます。駆動したいビットごとにプロセスでコードを乱雑にする必要はありません。
演習
このビデオで並行文の作成方法を学習します:
このチュートリアルで作成した最終コード:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity T13_ConcurrentProcsTb is
end entity;
architecture sim of T13_ConcurrentProcsTb is
signal Uns : unsigned(5 downto 0) := (others => '0');
signal Mul1 : unsigned(7 downto 0);
signal Mul2 : unsigned(7 downto 0);
signal Mul3 : unsigned(7 downto 0);
begin
process is
begin
Uns <= Uns + 1;
wait for 10 ns;
end process;
-- Unsを4倍するプロセス(明示的wait on)
process is
begin
Mul1 <= Uns & "00";
wait on Uns;
end process;
-- 感度リストを用いた同等プロセス
process(Uns) is
begin
Mul2 <= Uns & "00";
end process;
-- 並行文による同等記述
Mul3 <= Uns & "00";
end architecture;
ModelSim波形ウィンドウ(run押下後、タイムラインにズームイン):
波形からMul1、Mul2、Mul3が全く同じ振る舞いをすることがわかります。これにより、並行文と2つのプロセスが完全に等価であることが確認されます。
並行文はプロセスと同様に動作します:代入の右辺<=に現れるすべての信号が暗黙的に感度リストに追加されます。結果として、左辺の信号は評価対象シグナルのいずれかが変化するたびに更新されます。
この例ではUns信号を左ビットシフトで4倍しました。すべての信号がunsigned型なので、コンパイラは数値として扱います。二進数の右側に2ビットのゼロを追加することは、4倍することと等価です。
まとめ
- 並行文はアーキテクチャに直接配置される信号代入。
- 右辺のすべての信号が感度リストにあるプロセスと機能的に同一。
次のチュートリアルへ »
VHDL
- VHDLプロシージャ例:std_logic_vectorのインクリメント
- VHDLで文字列リストを作成する: ベスト・プラクティスと実装例
- Tcl駆動テストベンチでVHDLコード・ロック・モジュールを検証する
- VHDLテストベンチ・シミュレーションを優雅に終了させる方法
- VHDLでPWMコントローラを実装: 設計、シミュレーション、FPGAデモ
- ブロックRAMにおける堅牢なVHDLリングバッファFIFOの設計
- VHDLで自己検証テストベンチを構築する実践ガイド
- VHDLで保護型とアクセスポインタを用いた動的リンクリスト実装
- プロセス内プロシージャでVHDLステートマシンをクリーンに設計
- VHDLにおける不純関数の活用:FSMの可読性と保守性向上
- VHDL関数マスター:効率的な設計のための実践ガイド