mcpField
V
verilog-basics-for-lowlevel

verilog-basics-for-lowlevel

github.com/mohitmishra786開発269274 回インストール18 週間前に更新
リポジトリ

verilog-basics-for-lowlevel について

Verilog/SystemVerilog の RTL を読む必要があるファームウェア・カーネルエンジニア向けの学習スキルです。クロック、リセット、バスの挙動からドライバーの問題を理解することに重点を置き、HDL 設計講座の代替ではありません。

主な機能

  1. 01モジュールと順序回路の理解
  2. 02リセットとクロックドメイン問題の把握
  3. 03APB、AHB、AXI インターフェースの読解
  4. 04RTL とドライバー挙動の関連付け

活用シーン

  1. 01RTL によるレジスター動作の確認
  2. 02クロックドメイン交差の不具合調査
  3. 03DMA/AXI 取引とドライバー順序の追跡

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/mohitmishra786/low-level-dev-skills --skill verilog-basics-for-lowlevel

インストール後、Claude Code で/verilog-basics-for-lowlevelを入力して読み込まれたか確認します。

詳細

低レベルエンジニア向け Verilog の基礎

目的

ファームウェアおよびカーネルエンジニアが RTL を読み解くために必要な Verilog/SystemVerilog の基礎知識を身につけます。対象は、モジュール、クロックとリセット、組み合わせ論理と順序論理、バスインターフェイス、そしてハードウェアの動作がドライバーのバグの原因を説明する仕組みです。HDL 設計コースの代わりになるものではありません。

使用する場面

  • リファレンスマニュアルが不明瞭な場合 — RTL でレジスターの動作を確認できます
  • CDC(クロックドメインクロッシング)のバグを理解する場合
  • DMA/AXI トランザクションとドライバーの順序を関連づける場合
  • ハードウェアチームと SoC ブロック図を確認する場合

ワークフロー

1. モジュールの構造
module uart_tx (
    input  wire       clk,
    input  wire       rst_n,   /* active-low async reset */
    input  wire       start,
    input  wire [7:0] data,
    output reg        busy
);
    /* sequential logic */
    always @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            busy <= 1'b0;
        else if (start)
            busy <= 1'b1;
        /* ... */
    end
endmodule

wire = 組み合わせ/ネットワーク信号、always ブロック内の reg = フリップフロップ。ただし、組み合わせ論理の always @(*) は除きます。

2. 合成可能なサブセット(ファームウェア担当者に必要なもの)
構文意味
posedge clkレジスター更新
assign x = a & b組み合わせ論理
always @(*) 内の case / ifマルチプレクサー論理
パラメーター #(.WIDTH(32))幅を設定可能

合成可能な RTL では #delay を避けてください。シミュレーション専用です。

3. リセットの設計指針
  • 非同期アサート、同期デアサートが一般的です(rst_sync_n)
  • ファームウェアはリセット後のセットアップ時間が経過するまで待つ必要があります。RM のリセットに関する章を参照してください
  • リセットドメインが複数ある場合、周辺機器に明示的なソフトリセットビットが必要になることがあります
4. バスプロトコル(SoC 図の読み方)
バス典型的な用途
APB低速な周辺機器、シンプルなレジスターインターフェイス
AHBより高スループットなオンチップ通信
AXIDMA、最新の SoC — バースト、チャネル

Linux の regmap MMIO は、RTL のアドレスマップにおける APB/AXI スレーブのデコードに対応します。

5. クロックドメイン

clk_a → clk_b をまたぐ信号には、シンクロナイザー(2 個以上の FF)が必要です。メタスタビリティは断続的なファームウェアのバグを引き起こします。ソフトウェアだけでは解決できません。

6. シミュレーションとシリコンの違い
# Typical open-source sim (conceptual)
iverilog -o sim.vvp design.v tb.v
vvp sim.vvp

QEMU/周辺機器のモデルは RTL のエッジケースと一致しない場合があります。

7. エージェントの使用方法
/verilog-basics-for-lowlevel Explain this APB register block and when STATUS bit updates relative to WRITE

よくある問題

症状原因修正方法
ビットが一度だけ切り替わるRTL のパルスドライバーでラッチをポーリングする/読み取り時にクリアする
ランダムなデータ破損CDCハードウェアにシンクロナイザーを実装する。遅延を追加する回避策は使わない
古いデータが読み取られるバスブリッジのバッファーRM の順序規則/バリアに従う
IRQ が解除されないRTL のレベルとパルスの違いハンドラーの ACK シーケンスを一致させる
Verilog と VHDLSoC の資料が混在しているインターフェイス信号の表に注目する

関連スキル

  • skills/baremetal/mmio-and-bit-manipulation — C からのレジスターアクセス
  • skills/baremetal/peripherals-from-datasheet — RM と RTL の対応
  • skills/baremetal/datasheet-and-refmanual-reading — ドキュメントの読み方
  • skills/kernel-dev/device-tree — Linux でのハードウェア統合
  • skills/qemu/protocol-analysis — バスタイミングの検証

コメント