Main Content

オーディオ コーデック チップを構成するための I2C コントローラー IP の IP コア生成

この例では、オーディオ コーデック チップを構成するために Stateflow® ブロックを使用してモデル化された I2C Master Controller を使用して I2C コントローラーをモデル化する方法を示します。

この例では次を行います。

  1. Simulink® で Stateflow® ブロックを使用して I2C Master Controller をモデル化します。

  2. オーディオ コーデック チップを構成するために I2C Master Controller ブロックを使用して I2C コントローラーをモデル化します。

  3. BlackBox サブシステムおよび双方向端子機能を使用して、I2C IP コアでトライステート ロジックを処理します。

  4. IP コアの生成ワークフローを使用して、I2C コントローラー用の IP コアを生成します。

1. I2C プロトコルの概要

I2C バス (IC 間バスとも呼ばれる) は、シリアル データ (SDA) とシリアル クロック (SCL) のラインで構成された、マルチマスター、マルチスレーブのシンプルな双方向 2 線バスです。このバスに接続された各デバイスは、一意の 7 ビットまたは 10 ビットのアドレスによってソフトウェアでアドレス指定可能であり、シンプルなマスター/スレーブ関係を維持します。標準モードでは最大 100 kbit/s、ファースト モードでは最大 400 kbit/s、ハイスピード モードでは最大 3.4 Mbit/s の速度で、8 ビットの有向の双方向シリアル データ転送を行うことができます。I2C バスには、マスター ノードとスレーブ ノードの 2 つのノードがあります。マスター ノードはクロックを生成し、スレーブとの通信を開始します。マスターによってアドレス指定されるスレーブ ノードはクロックを受け取り、ACK 時にマスターに応答します。マスター送信、マスター受信、スレーブ送信、およびスレーブ受信という 4 つの動作モードがあります。マスターは、スタート ビット、7 ビットまたは 10 ビットのスレーブのアドレス、および読み取り (1) ビットまたは書き込み (0) ビットを順に送信して、通信を開始します。そのアドレスに対応しているスレーブが存在する場合、そのスレーブが ACK ビットで応答します。マスターは、読み取りビットまたは書き込みビットに基づいて、送信モードまたは受信モードで通信を続行します。同様に、スレーブは、マスターからの読み取り命令または書き込み命令に基づいて動作を続行します。下図では、I2C プロトコルのタイミング図を示します。

2.Stateflow ブロックを使用した Simulink での一般化 I2C Master Controller のモデル化

設計内に複数の周辺装置を構成するのは、面倒で手間がかかる作業になることがあります。代わりに、オーディオ コーデック チップの構成に直接使用できる汎用 I2C Master Controller を作成します。次の図では、Simulink で Stateflow ブロックを使用して実装した一般化 I2C Master Controller のアーキテクチャを示します。

上図は、I2C Master Controller ブロックを示しています。周辺装置を構成するには、I2C Master Controller ブロックにデバイス固有の構成を提供する必要があります。I2C Master Controller を使用してオーディオ コーデック チップを構成するブロック線図は以下のようになります。

下のモデルでは、Stateflow ブロックを使用して Simulink でモデル化された I2C Master Controller を示します。

modelname = 'hdlcoder_I2C_master_controller';
open_system(modelname);
open_system('hdlcoder_I2C_master_controller/I2C_MasterController');

現在、I2C Master Controller では I2C の書き込みのみがサポートされており、I2C の読み戻しはサポートされていません。I2C Master Controller は、I2C Master Controller チャートとトライステート バッファー ブラックボックスという 2 つの部分で構成されています。I2C Master Controller チャートはトライステート バッファー ブラックボックスを介して、シリアル データ SDA とシリアル クロック SCL をスレーブ デバイスに提供します。トライステート バッファー ブラックボックスは手書きの VHDL コードを使用します。これは SDA 端子の双方向機能で使用されます。Simulink では双方向端子のモデル化がサポートされていないため、トライステート バッファー ブラックボックスがモデルに追加されます。

ブラックボックスを作成するには、以下の手順を使用します。

1. ブラックボックスの作成のためにインポートする HDL ソース コードの入出力端子を含むサブシステムを作成します。I2C トライステート バッファー ブラックボックスを以下に示します。

2.サブシステムをブラック ボックス インターフェイスとして指定するには、サブシステムを右クリックし、[HDL コード]、[HDL ブロック プロパティ] を選択して、次の図に示すように [Architecture] を [BlackBox] に設定します。

3.I2C Master Controller のデータ端子 [I2C_SDA] は双方向です。端子を双方向として設定するには、[I2C_SDA] 端子を右クリックし、[HDL ブロック プロパティ] をクリックして、以下に示すように [BidirectionalPort] を [on] に設定します。

4.シミュレーション時には、BlackBox サブシステム内の実際の内容がシミュレーションに使用されます。

コード生成時には、HDL Coder は BlackBox サブシステムでコードを生成しません。代わりに、コード ジェネレーターが手書きの HDL コードを IP コアに統合します。入力にデバイス固有の構成チャートを追加することで、I2C Master Controller ブロックへの入力を提供できます。このチャートには、スレーブ デバイス用に構成する必要があるレジスタに関する詳細が含まれます。デバイス構成の詳細については、I2C Master Controller を使用した ZedBoard、Zybo ボード、および Arrow SoC Development Kit のオーディオ コーデックの構成に関するセクションで説明しています。

2.1 I2C Master Controller ブロックの I/O に関する説明

次の図では、I2C Master Controller ブロックの入出力端子に関する詳細を示します。

2.2 I2C Master Controller Stateflow チャートの説明

I2C Master Controller チャートは、すべてのステートで必要なクロック (SCL) が生成され、データがシリアル データ (SDA) 端子を介して I2C プロトコルに従って提供されるように作成されています。次のステートは、クロックおよびスタート ビットの生成を示しています。

次のステートを使用してスレーブ デバイスの 7 ビットのアドレスを送信します。

関数 "bitget" を使用してビットを SDA 端子に逐次的に送信します。これにより、ユーザーは引数リストに記述した整数の指定位置にあるビット値を取得できます。ステート間の遷移は、遷移条件に指定された実行順序によって決まります。上図で示されているように、[cmd_slave_addr_p] ステートから [cmd_slave_addr_n] ステートへの遷移は、遷移条件 (bit_cnt > 0) に基づいて行われます。bit_cnt の値は、遷移条件が満たされるまでデクリメントされ続けます。bit_cnt の値は '7' に初期化され、その値は '1' になるまでデクリメントされます。これにより、SDA 端子でスレーブ デバイスの 7 ビットのアドレスを送信します。HDL コード生成では、サポートされているデータ型を使用する必要があります。cmd_slave_addr_n ステートで使用されている型変換演算子である、ステートで示されているコロン (:) 演算子 (scl(:)= 0) は、'double' 型の値を 'logical' 型に変換します (示されているステートでは、SCL は logical データ型です)。次に示すステートを使用してレジスタ アドレスをスレーブ デバイスに送信します。

次に示すステートを使用してレジスタ データをスレーブ デバイスに送信します。

次のステートは、ストップ ビットの生成を示しています。

3.I2C Master Controller ライブラリ ブロックを使用した ZedBoard でのオーディオ コーデック ADAU1761 の構成

このセクションでは、以下を行う方法を示します。

  1. Simulink で Stateflow ブロックを使用してオーディオ コーデック ADAU1761 デバイス構成チャートをモデル化する。

  2. I2C Master Controller ライブラリ ブロックを使用してオーディオ コーデック ADAU1761 を構成する。

  3. 作成したモデルのシミュレーションを実行する。

前述のように、ZedBoard でオーディオ コーデック ADAU1761 を構成するには、ADAU1761 用のデバイス構成チャートを作成する必要があります。このチャートは、前に作成した I2C Master Controller ライブラリ ブロックに接続する必要があります。

メモ: ご使用の独自のデバイス用にデバイス構成チャートを作成する必要があります。この例では、I2C Master Controller ライブラリ ブロックを使用してオーディオ コーデック デバイスを構成する方法を示します。ADAU1761 用に使用するデバイス構成チャートはこのデバイスに固有であり、他のデバイスの構成には使用できません。

ADAU1761 用に作成された構成モデルを以下に示します。

modelname = 'hdlcoder_I2C_adau1761';
open_system(modelname);

3.1 オーディオ コーデック ADAU1761 の構成モデルのシミュレート

オーディオ コーデック チップ ADAU1761 では、20 個のレジスタを構成する必要があります。そのうち、I2C Master Controller によってバースト モードおよびバイト モードで書き込む必要があるのはわずかです。最初のレジスタはバイト モードで書き込まれ、2 番目のレジスタは長さ 6 バイトのバースト モードで書き込まれます。残りの 18 個のレジスタはバイト モードで書き込まれます。

オーディオ コーデック ADAU1761 の構成用のシミュレーション波形を以下に示します。

I2C Master Controller とオーディオ コーデック チップ ADAU1761 間のバイト モードの転送を次の図に示します。

次のシミュレーションでは、スタート ビット、スレーブ デバイスの 7 ビットのアドレス (0x3B)、書き込み (0) ビット、16 ビットのレジスタ アドレス (0x4000)、8 ビットのレジスタ データ (0x0E) の順次送信、およびスレーブ デバイスからの ACK が示されています。

3.2 IP コアの生成ワークフロー

オーディオ コーデック ADAU1761 構成の HDL IP コアを生成するには、下記の手順に従います。

1. MATLAB コマンド ウィンドウで次のコマンドを使用して Xilinx Vivado 合成ツール パスを設定します。コマンドを実行する際には、ご使用の独自の Vivado インストール パスを使用してください。

hdlsetuptoolpath('ToolName', 'Xilinx Vivado', 'ToolPath', 'C:\Xilinx\Vivado\2017.4\bin\vivado.bat');

2.ADAU1761 構成モデルで I2C_IP サブシステムを選択し、右クリックして HDL ワークフロー アドバイザーを開きます。タスク 1.1 で、[ターゲット ワークフロー] として [IP コアの生成]、[ターゲット プラットフォーム] として [Generic Xilinx Platform]、[合成ツール] として [Xilinx Vivado] を選択します。また、下図に示されているように、ファミリ、デバイス、パッケージ、および速度も選択します。

3.タスク 1.2 で、すべての端子に対して [ターゲット プラットフォーム インターフェイス] を [外部端子] に設定します。

4.タスク 3.2 で、[追加ソース ファイル] にトライステート バッファー VHDL ファイルを追加します。次に、[RTL コードと IP コアの生成] を右クリックし、[選択したタスクまで実行] をクリックします。

ADAU1761 の構成用の I2C IP コアが生成されます。下図に、IP コアの生成レポートを示します。

生成された IP コアは、ユーザー リファレンス設計で使用できます。リファレンス設計の作成については、Zynq ボードのオーディオ システム用のリファレンス設計のオーサリングを参照してください。

4.I2C Master Controller ライブラリ ブロックを使用した Zybo ボードでのオーディオ コーデック SSM2603 の構成

このセクションでは、以下を行う方法を示します。

  1. Simulink で Stateflow ブロックを使用してオーディオ コーデック SSM2603 デバイス構成チャートをモデル化する。

  2. I2C Master Controller ライブラリ ブロックを使用してオーディオ コーデック SSM2603 を構成する。

  3. 作成したモデルのシミュレーションを実行する。

Zybo ボードでオーディオ コーデック SSM2603 を構成するには、SSM2603 用のデバイス構成チャートを作成する必要があります。このチャートは、前に作成した I2C Master Controller ライブラリ ブロックに接続する必要があります。

メモ: SSM2603 用に使用するデバイス構成チャートはこのデバイスに固有であり、他のデバイスの構成には使用できません。

SSM2603 用に作成された構成モデルを以下に示します。

modelname = 'hdlcoder_I2C_ssm2603';
open_system(modelname);

4.1 オーディオ コーデック SSM2603 の構成モデルのシミュレート

オーディオ コーデック チップ SSM2603 では、11 個のレジスタを構成する必要があります。すべてバイト モードで書き込まれます。

オーディオ コーデック SSM2603 の構成用のシミュレーション波形を以下に示します。

次のシミュレーションでは、スタート ビット、スレーブ デバイスの 7 ビットのアドレス (0x1A)、書き込み (0) ビット、8 ビットのレジスタ アドレス (0x0C)、8 ビットのレジスタ データ (0x10) の順次送信、およびスレーブ デバイスからの ACK が示されています。

4.2 IP コアの生成ワークフロー

SSM2603 構成モデル用の IP コアの生成手順は、上記のセクション 3.2 の「IP コアの生成ワークフロー」で説明した手順と同じです。生成された IP コアは、ユーザー リファレンス設計で使用できます。リファレンス設計の作成については、ZYBO ボードのオーディオ システム用のリファレンス設計のオーサリングを参照してください。

5 I2C Master Controller ライブラリ ブロックを使用した Arrow SoC Development Kit でのオーディオ コーデック SSM2603 の構成

このセクションでは、以下を行う方法を示します。

  1. Simulink で Stateflow ブロックを使用してオーディオ コーデック SSM2603 デバイス構成チャートをモデル化する。

  2. I2C Master Controller ライブラリ ブロックを使用してオーディオ コーデック SSM2603 を構成する。

  3. 作成したモデルのシミュレーションを実行する。

Arrow SoC Development Kit でオーディオ コーデック SSM2603 を構成するには、SSM2603 用のデバイス構成チャートを作成する必要があります。このチャートは、前に作成した I2C Master Controller ライブラリ ブロックに接続する必要があります。

メモ: SSM2603 用に使用するデバイス構成チャートはこのデバイスに固有であり、他のデバイスの構成には使用できません。

Arrow SoC Development Kit 上の SSM2603 用の構成モデルは、Zybo ボード上の SSM2603 用の構成モデルと同じです。SSM2603 構成モデルについては、この資料のセクション 4 を参照してください。

5.1 オーディオ コーデック SSM2603 の構成モデルのシミュレート

Arrow SoC Development Kit 上のオーディオ コーデック チップ SSM2603 の構成は、Zybo ボード上のオーディオ コーデック チップ SSM2603 の構成と同じです。シミュレーションについては、この資料のセクション 4.1 を参照してください。

5.2 IP コアの生成ワークフロー

オーディオ コーデック SSM2603 構成の HDL IP コアを生成するには、下記の手順に従います。

1. MATLAB コマンド ウィンドウで次のコマンドを使用して Intel Quartus ツール パスを設定します。コマンドを実行する際には、ご使用の独自の Quartus インストール パスを使用してください。

hdlsetuptoolpath('ToolName', 'Altera Quartus II', 'ToolPath', 'C:\intelFPGA\18.1\quartus\bin64\quartus.exe');

2.SSM2603 構成モデルで I2C_SSM2603 サブシステムを選択し、右クリックして HDL ワークフロー アドバイザーを開きます。タスク 1.1 で、[ターゲット ワークフロー] として [IP Core Generation]、[ターゲット プラットフォーム] として [Generic Altera Platform]、[合成ツール] として [Altera Quartus II] を選択します。また、下図に示されているように、ファミリ、デバイス、パッケージ、および速度も選択します。

3.タスク 1.2 で、すべての端子に対して [ターゲット プラットフォーム インターフェイス] を [外部端子] に設定します。

4.タスク 3.2 で、[追加ソース ファイル] にトライステート バッファー Verilog ファイルを追加します。次に、[RTL コードと IP コアの生成] を右クリックし、[選択したタスクまで実行] をクリックします。

SSM2603 の構成用の I2C IP コアが生成されます。下図に、IP コアの生成レポートを示します。

生成された IP コアは、ユーザー リファレンス設計で使用できます。リファレンス設計の作成については、Intel ボードのオーディオ システム用のリファレンス設計のオーサリングを参照してください。