VHDLのstd_logicマスター:状態、解決関数、波形分析
VHDLにおいて、std_logic型は物理ワイヤ上の単一ビットを表現する基盤です。以前のチュートリアルで使用したプレーンなinteger型とは異なり、std_logicは現実のデジタル信号振る舞いをより正確にモデル化する豊富な値セットを提供します。
デジタルピンは通常ロジックハイ('1')またはロジックロー('0')を持ちますが、物理信号はハイインピーダンス、弱、未定義状態も取り得ます。std_logic型はこれらすべての可能性を網羅し、VHDL設計で最も頻繁に使用される型です。
この記事はBasic VHDL Tutorialsシリーズの一部です。
std_logicシグナルが取り得る全値のリスト:
| '1' | Logic 1 |
| '0' | Logic 0 |
| 'Z' | High impedance |
| 'W' | Weak signal; indeterminate 0 or 1 |
| 'L' | Weak 0 (pulldown) |
| 'H' | Weak 1 (pullup) |
| '-' | Don't care |
| 'U' | Uninitialized |
| 'X' | Unknown (multiple drivers) |
ほとんどのチュートリアルでは主要値'1'と'0'、時おり'U'と'X'(設計エラーのハイライト用)に焦点を当てます。残りの状態はI2Cなどのプロトコルモデリングやトライステートバス作成に有用な高度機能です。
複数プロセスが同一std_logic信号を駆動する場合、言語は解決関数を用いて結果値を決定します。このメカニズムはシミュレーションでのコンパイル時・実行時エラーを防ぎ、以下の解決テーブルで定義されます。
| U | X | 0 | 1 | Z | W | L | H | - | |
|---|---|---|---|---|---|---|---|---|---|
| U | X | X | 1 | 1 | 1 | 1 | 1 | X | 1 |
| U | X | 0 | X | 0 | 0 | 0 | 0 | X | 0 |
| U | U | U | U | U | U | U | U | U | U |
| U | X | X | X | X | X | X | X | X | X |
| U | X | 0 | 1 | Z | W | L | H | X | Z |
| U | X | 0 | 1 | W | W | W | W | X | W |
| U | X | 0 | 1 | L | W | L | W | X | L |
| U | X | 0 | 1 | H | W | W | H | X | H |
| U | X | X | X | X | X | X | X | X | - |
演習
このビデオチュートリアルでは、std_logicシグナルの宣言と波形シミュレーションでの可視化をデモします。
この演習で作成された最終VHDLコード:
library ieee;
use ieee.std_logic_1164.all;
entity T10_StdLogicTb is
end entity;
architecture sim of T10_StdLogicTb is
signal Signal1 : std_logic := '0';
signal Signal2 : std_logic;
signal Signal3 : std_logic;
begin
process is
begin
wait for 10 ns;
Signal1 <= not Signal1;
end process;
-- Driver A
process is
begin
Signal2 <= 'Z';
Signal3 <= '0';
wait;
end process;
-- Driver B
process(Signal1) is
begin
if Signal1 = '0' then
Signal2 <= 'Z';
Signal3 <= 'Z';
else
Signal2 <= '1';
Signal3 <= '1';
end if;
end process;
end architecture;
ModelSim波形ウィンドウ(run押下後、タイムラインにズームイン):

カーソルを繰り返し信号サイクルの別部分に置いた波形:

分析
この演習はVHDL解決関数の動作を示します。テキスト出力だけでなく波形を検査することで、複数ドライバがstd_logic信号上でどう相互作用するかをより明確に把握できます。
Signal1は単一プロセスでトグルされるため、'0'と'1'をクリーンに交互に取ります。Signal2とSignal3はDriver AとDriver Bの両方で駆動され、前述のテーブルに従って解決されます。
| Signal | Driver A | Driver B | Result |
|---|---|---|---|
| Signal2 | 'Z' | 'Z' | 'Z' |
| Signal2 | 'Z' | '1' | '1' |
| Signal3 | '0' | 'Z' | '0' |
| Signal3 | '0' | '1' | 'X' |

まとめ
std_logicは単一ビット信号で最も広く使用されるVHDL型。std_logicシグナルをデジタル値を運ぶ物理ワイヤと考える。- 複数プロセスが同一
std_logic信号を駆動すると、解決関数が最終値を決定。
次のチュートリアルへ »
VHDL
- 3DプリントワークフローのボトルネックTOP6と実証済み解決策
- よくある車の冷却システムトラブルと診断方法
- エンジンホイスト安全ガイド:職場でのベストプラクティス
- クレーン事故の主な原因と防止策
- IoTデータを解き放つ:ビジネス・ルール管理が企業価値を推進
- 合金A286の主要産業用途:高強度と耐食性
- VHDLで保護型とアクセスポインタを用いた動的リンクリスト実装
- プロセス内プロシージャでVHDLステートマシンをクリーンに設計
- VHDLにおける不純関数の活用:FSMの可読性と保守性向上
- VHDL関数マスター:効率的な設計のための実践ガイド
- VHDLプロシージャ活用:再利用可能なコードで設計をシンプルに