TEL:086-227-0113
info@gopher-tec.jp
TOP page 製品情報 FPGAサンプルコードリポジトリ I2C Software Reset Decoder
I2C Software Reset Decoder

I2C スレーブのサンプルコードで、I2C General Call アドレスへのライトを検知してソフトウェアリセット
をデコード出力します。

General CallアドレスはI2C規格で定義された特殊アドレスです。I2Cマスターから、1stバイトとして
General Callアドレス00hをライトし、続いて2ndバイトとして06hをライトすると、それに対応した
I2Cスレーブはソフトウェアリセットとして解釈します。

General Callアドレスを用いたソフトウェアリセットは規格上オプション扱いで、全てのI2Cスレーブ
が対応しているとは限りません。I2Cにはハードウェア上のリセット信号が定義されていないため、
できればこのソフトウェアリセットを有効活用したいところですが、オプションに対応していないデバイス
をリセットすることはできません。そのようなデバイスに対しては、別のデバイスでデコードした
ソフトウェアリセットを使用し、リセットあるいは一時的かつ局所的なパワーオフ状態を作っリセットを
伝える方法があります。本サンプルコードはその際のソフトウェアリセット出力生成機能を提供します。

I2Cバススピードは、100kHz以下のスタンダードモードと400kHz以下のファストモードに対応
しています。ソフトウェアリセット生成以外の機能は含んでいないため、内部レジスタ等が必要な場合は、
そのコードと足し合わせてご使用下さい。

なお本コードでは、I2Cバスラインの負荷が大きく、信号の立ち上がり時間がデバイスの許容範囲を超えて
大きいこと(I2C規格上、立ち上がり時間はスタンダードモードで1usまで、ファストモードで300nsまで
許されており、条件によってはFPGA/CPLDに直結できないケースが多々あります)を想定し、I2Cの
SDA、SCLを外部のシュミットインバータで受け、その出力をFPGA/CPLDに接続する前提としています。
もし負荷が小さく、特にケアが必要ない場合には、I2Cバスと直結しつつ、コード中のSDA・SCLの
インバート部分を単なるバッファ回路へ変更してご使用下さい。

Name I/O  Description 
RESET in 非同期リセット入力です。パワーオン時、またはシステムリセット時にアサートして下さい。
CLK33M
in クロック入力です。本モジュールはこの信号の立ち上がりエッジで動作します。
33MHzを想定していますが、25~40MHzの範囲であれば特に問題はありません。
SDA_O out I2CのデータラインSDAへの出力です。I2Cの当該ラインへ直結して下さい。
SDA_IL in I2CのデータラインSDAの入力で、外部シュミットインバータで受けた信号を想定しています。
接続方法については機能概要欄の後半を参照下さい。
SCL_IL in I2CのクロックラインSCLの入力で、外部シュミットインバータで受けた信号を想定しています。
接続方法については機能概要欄の後半を参照下さい。
SRESET out ソフトウェアリセット出力です。
I2Cの当該アクセスを検出すると、32768クロック分SRESETがHiとなります。
SRESETアサート期間中に再度当該アクセスを検出すると、そこからさらに32768クロック分
SRESETがHiとなります(延長されます)。
※特に注記のない限り、信号は全て正論理です。
本ソースコードはVerilogを用意しています。
詳細は下記の資料ダウンロードをクリックください。

I2C Software Reset Decoder
資料ダウンロード