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階層の構造を持つパルス生成回路として表現できます。
コードをそのまま図にするのではなく、機能単位で抽象化することが重要です。

コメント