SystemVerilogのブロック図の書き方|100Hzパルス回路を例に階層構造を理解する

工学

SystemVerilogのソースコードからブロック図(構成図)を描く方法は、階層構造と信号の流れを正しく理解することが重要です。本記事では、100Hzパルス発生回路のコードを例に、どのようにブロック図へ落とし込むかを解説します。

ブロック図とは何か

ブロック図とは、回路を機能単位の「箱(ブロック)」として表し、それらの接続関係を示した図です。

SystemVerilogでは、module単位がそのままブロックとして扱われます。

そのため「どのmoduleがどのmoduleを呼んでいるか」を整理することが基本になります。

今回の回路の全体構造(トップモジュール)

最上位モジュールは shell.sv です。

この中で pulse_100Hz がインスタンス化され、さらに内部で counterN_n が呼ばれています。

つまり階層構造は「shell → pulse_100Hz → counterN_n → register_r_en_n」という流れになります。

各モジュールの役割とブロック化

shellは入出力を接続するトップレベルの箱です。

pulse_100Hzは100Hzパルス生成のロジック本体であり、カウンタの値を見て出力を制御します。

counterN_nはカウントアップ回路、register_r_en_nはその値を保持するレジスタとして機能します。

信号の流れをブロック図にする方法

CLOCK_50とSW9はshellに入力され、そのままpulse_100Hzへ渡されます。

pulse_100Hz内部でcount信号がcounterN_nから生成され、pulse信号が最終出力GPIO_1_D1になります。

またcounterN_nはregister_r_en_nを内部に持ち、clockとresetでカウント値qを更新します。

100Hzパルス生成の動作イメージ

counterN_nは最大値499,999までカウントし、一定周期の基準クロック分周を行います。

そのカウント値が150,000未満の間だけpulseが1になるため、Ton=0.3Tのデューティ比が実現されます。

これをブロック図では「比較回路+カウンタ+レジスタ」として表現します。

ブロック図作成のポイント

重要なのは「module=ブロック」として捉え、階層ごとに整理することです。

さらに信号の方向(入力→処理→出力)を矢印で明確にします。

複雑なコードでも、階層を分解すれば単純な構造に落とし込めます。

まとめ

SystemVerilogのブロック図は、モジュール階層と信号の流れを整理することで作成できます。

今回の例では、shellを起点に3階層の構造を持つパルス生成回路として表現できます。

コードをそのまま図にするのではなく、機能単位で抽象化することが重要です。

コメント

タイトルとURLをコピーしました