FPGA×HDL入門 基本は全レジスタ同期運転


クロック源は1つ 同一位相&同一周波数

Artix-7 FPGA入門 基本は全レジスタ同期運転

図1 レジスタの同期運転は,信頼性の高い回路を構築するための基本だ.同一クロック源を用い,レジスタの値を同期的に更新することを徹底することで,設計が簡単になりエラーの発生率も低下する.画像クリックで動画を見る.または記事を読む.[提供・著]森岡 澄夫
詳細[VOD/KIT]Xilinx製FPGAで始めるHDL回路設計入門

同期式回路設計の基礎

すべてのレジスタは同一クロックで動作し,値は同期的に切り替えることことで,ディジタル回路の挙動が予測可能になり,動作の信頼性が向上します.

以下のポイントを守る必要があります.

  1. 単一のクロック源を使用する
    レジスタ間でクロックの位相や周波数が異なる場合,意図しない動作やタイミング・エラーが発生する可能性があります
  2. レジスタをalways文で制御する

    次のように書くことで、すべてのレジスタを単一クロックで駆動し、同期式設計が可能です:

    reg [11:0] leddrv_reg;
    reg [31:0] led_timer_reg;
    
    always @(posedge clk) begin
        if (led_timer_reg >= 32'd10000 - 1'b1) begin
            case (leddrv_reg[11:8])
                4'b1110: leddrv_reg <= /* 新しい値 */;
            endcase
            led_timer_reg <= 32'd0;
        end else begin
            led_timer_reg <= led_timer_reg + 1'b1;
        end
    end
    

    上記コードでは、すべてのレジスタ値がクロックの立ち上がり(posedge)で一斉に更新されます。

同期式回路における注意点

同期式回路の設計では,以下の行為を避ける必要があります.

  1. クロックを止める
    レジスタの値を保持したい場合は,クロックを止めるのではなく,現在の値を再ロードする設計にします.以下は値を保持する設計例です.
    reg [7:0] reg_a;
    
    always @(posedge clk) begin
        reg_a <= reg_a; // 値を保持
    end
    
    
  2. 複数クロックを使用する
    各レジスタに異なるクロックを使用すると,同期の乱れや信号遅延が生じ,設計の予測性が失われます.

全レジスタ同期運転における「クロックの統一」の重要性

FPGAにおけるディジタル回路設計では,クロックの統一が極めて重要です.以下のような理由があります.

1.タイミング・エラーの防止

複数クロックを使用すると,レジスタ間のデータ遷移タイミングが崩れる可能性があります.例えば,異なる周波数や位相のクロックを用いた場合,特定のタイミングで信号が正しく伝達されず,設計が意図しない動作をする可能性があります.

2.設計の簡略化

単一クロック源を使用すると,設計時の考慮事項が減少し,シミュレーションやデバッグが容易になります.たとえば,次のレジスタ更新ルールを守ることで,設計の安定性を確保できます.

  1. $A$と$B$の2つのレジスタがあり,クロックごとにそれぞれ値が更新される場合
  2. $A$には毎クロック$1$を加算
  3. $B$には最新の$A$の値を加算

以下にクロックごとの$A$と$B$の変化を示します.すべての値はクロックごとに同期的に変化します.

クロック $A$ $B$
初期値 1 2
1クロック後 2 3
2クロック後 3 5
3クロック後 4 8
4クロック後 5 12
5クロック後 6 17

3.信号の再利用性

同期的な回路では,信号が次のクロックで確実に更新されるため,予測可能な動作が可能です.この特性を利用して,設計全体のモジュール化や再利用性を向上させることができます.

まとめ

FPGA設計におけるレジスタの同期運転は,信頼性の高い回路を構築するための基本です.同一クロック源を用い,レジスタの値を同期的に更新することを徹底しましょう.この原則を守ることで,設計が簡単になり,エラー発生率が低下します.〈著:ZEPマガジン〉

動画を見る,または記事を読む

〈著:ZEPマガジン〉

著者紹介

  • NTT,IBM,Sony,NECの各研究所において高性能回路IPやハイレベル・シンセシスの研究,およびプレイステーションなどの製品用SoC開発に従事した後,現職にて民間宇宙ロケットの飛行制御コンピュータの研究開発に従事.FPGAや高位合成を活用している

著書

  1. [VOD/KIT]一緒に動かそう!Lチカから始めるFPGA開発【基礎編&実践編】,ZEPエンジニアリング株式会社.
  2. [VOD/KIT]Xilinx製FPGAで始めるHDL回路設計入門,ZEPエンジニアリング株式会社.
  3. [VOD/KIT]一緒に動かそう!Lチカから始めるFPGA開発【基礎編】,ZEPエンジニアリング株式会社.
  4. [VOD/KIT]Zynqで初めてのFPGA×Linux I/O搭載カスタムSoC製作,ZEPエンジニアリング株式会社.
  5. [VOD/KIT]Tiny FPGA実習!高校生から始めるHDLプログラミング,ZEPエンジニアリング株式会社.
  6. [VOD/Pi KIT]カメラ×ラズパイで一緒に!初めての画像処理プログラミング,ZEPエンジニアリング株式会社.
  7. スパコンでも破れない!高セキュリティ・マイコン・プログラミング,ZEPエンジニアリング株式会社.
  8. [YouTube]宇宙軌道ロケット 成功の方程式
  9. [YouTube]宇宙ロケットの電子回路開発
  10. FPGA/Zynqで作るカスタム・コンピュータ・チップ,ZEPエンジニアリング株式会社.
  11. Lチカ入門!ソフトウェア屋のためのHDL事はじめ,ZEPエンジニアリング株式会社.
  12. USBカメラの動画キャプチャ&描画用 Pythonプログラム,ZEPエンジニアリング株式会社.
  13. ライブラリ完備!組立式ラズパイI/O増設ボード MCC DAQ HATSファミリ誕生,ZEPエンジニアリング株式会社.

参考文献

  1. [VOD/KIT] 実習キットで一緒に作る!オープンソースCPU RISC-V入門,ZEPエンジニアリング株式会社.
  2. [VOD/KIT]ARM Cortex-A9&FPGA内蔵SoC Zynqで初体験!オリジナル・プロセッサ開発入門,ZEPエンジニアリング株式会社.