組み込み機器・ハードウェアの設計開発から装置製作まで社内一貫対応!

組み込み機器・ハードウェア設計製作.com
組み込み機器・ハードウェア設計製作.com

produced by株式会社アイディアイ

設計のポイント

verilog記述のポイント:シフトレジスタの記述

設計内容分類FPGA

実現したい仕様・課題

シリアルデータの取り込み・送出、信号の遅延調整、パイプラインの遅延合わせなど、データを1クロックずつずらして保持する処理は多くの設計で必要になります。段数の変更に強く、意図どおりの回路になるシフトレジスタの書き方を確立したいというのが課題です。

設計のポイント

シフトレジスタは、クロック同期のalways内でノンブロッキング代入(<=)を用いて記述します。ノンブロッキング代入はブロック内の右辺を先に評価してから一斉に更新するため、q[3] <= q[2]; q[2] <= q[1]; … のように記述順に関係なく正しくシフト動作となります(ブロッキング代入で書くと全段が同じ値になる誤りが生じます)。簡潔な書き方として、連接演算子を使った q <= {q[N-2:0], din}; の形式があり、段数の変更にも強くなります。シリアル-パラレル変換(SIPO)では入力ビットを順次シフトインして規定ビット数で並列取り出し、パラレル-シリアル変換(PISO)ではロード信号で並列値をセットして順次シフトアウトします。深い遅延(多段のディレイライン)が必要な場合、FPGAのLUTをシフトレジスタとして使う専用機能(SRL)に推論されるよう、リセットを持たない単純なシフト記述にしておくと、フリップフロップ消費を大幅に節約できます。逆に各段の値を個別参照する場合はレジスタ実装になるため、用途に応じて記述を選択します。

【コード例】
// 8段シフトレジスタ(シリアル入力)
reg [7:0] q;
always @(posedge clk)
q <= {q[6:0], din}; // 連接で1bitずつシフトイン

// パラレルロード付き(PISO)
always @(posedge clk)
if (load) q <= pdata;
else q <= {q[6:0], 1’b0}; // MSBから送出: dout = q[7]

verilog記述のポイント:シフトレジスタの記述 | 組み込み機器・ハードウェア設計製作.com

補足情報

当事例のような、FPGA設計に関するポイントをまとめた冊子の無料DLが可能です。
是非以下よりご確認ください。

FPGA設計のポイント

>>ダウンロードはこちら!

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

組み込み機器・ハードウェア 設計製作.comを運営する株式会社アイディアイは、組み込み機器・ハードウェアの設計開発代行サービスを提供しています。
試験装置や制御機器、組み込みボードなど、設計・開発委託先をお探しの皆様、お気軽に当社に御相談ください。

技術資料のダウンロードはこちらから 技術資料ダウンロ―ド メールフォームでのお問い合わせはこちらから ご相談お問合せ