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

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

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

設計のポイント

verilog記述のポイント:トライステートはトップレベルのみで使用する

設計内容分類FPGA

実現したい仕様・課題

双方向バスやハイインピーダンス制御を、FPGA内部のモジュール間接続にも使おうとすると、現在のFPGAには内部トライステートバッファが存在しないため、合成ツールがマルチプレクサへ変換するか、エラー・警告となり、意図しない回路や検証困難な構造を生みます。トライステートを正しい場所でだけ使いたいというのが課題です。

設計のポイント

トライステート(z値の割り当て)は、FPGAの物理I/Oピンに対応するトップレベルのポートに限定して使用します。現在のFPGAデバイスでは、トライステートバッファはI/Oブロックにのみ存在し、内部配線には存在しません。内部モジュール間の「双方向接続」や「バス共有」をz値で記述しても、実際のハードウェアには対応物がなく、ツールによる自動変換に依存した不透明な回路になるか、合成エラーとなります。内部でデータの流れを切り替えたい場合は、マルチプレクサによる明示的な選択回路として設計します。複数のデータ源から1つの信号へまとめる構造は、セレクト信号付きのマルチプレクサで記述すれば、論理が明確でシミュレーションも容易です。外部の双方向バス(メモリバス、I2C等)を扱う際は、トップレベルでinout宣言し、内部へは入力信号・出力信号・出力イネーブルの3本に分離して引き込みます。この構造により、内部ロジックはすべて通常の単方向信号として設計・検証でき、トライステート制御の正しさはトップレベルの1か所に集約して確認できます。

【コード例】
// トップレベル:ここでのみ z を使用
module top(inout [7:0] bus, …);
wire [7:0] bus_out; wire bus_oe;
wire [7:0] bus_in = bus; // 入力方向
assign bus = bus_oe ? bus_out : 8’bz; // 出力方向
// 内部モジュールへは bus_in / bus_out / bus_oe を接続
endmodule
// 内部のデータ選択はマルチプレクサで
assign data = sel ? src_a : src_b;

verilog記述のポイント:トライステートはトップレベルのみで使用する | 組み込み機器・ハードウェア設計製作.com

補足情報

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

FPGA設計のポイント

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

設計のポイント 一覧

FPGA設計のポイント

お問い合わせ

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

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