MachXO2 EFB(Embedded Function Block) 1
目次 1 このドキュメントの概要 3 2 EFB の構成 4 3 EFB とハードマクロの生成と注意事項 5 3.1 EFB Enables タブの設定... 5 3.2 I2C タブの設定... 6 3.3 SPI タブの設定... 7 3.4 Timer/Counter タブの設定... 9 4 Wishbone から I2C マクロへのアクセス 12 4.1 I2C マスターモード時の制御... 12 4.1.1 Write アクセス... 12 4.1.2 Read アクセス... 14 5 Wishbone から SPI マクロへのアクセス 16 5.1 SPI マスターモード時の制御... 16 5.1.1 Write アクセス... 16 5.1.2 Read アクセス... 19 6 EFB のシミュレーション 23 6.1 テストベンチ作成時の注意点... 23 6.2 I2C マクロの入出力信号... 24 6.3 WISHBONE バスへの入力データ... 25 7 改訂履歴 26 2
1 このドキュメントの概要このドキュメントでは MachXO2 に内蔵されている EFB(Embedded Function Block) の I2C SPI Timer/Counter 機能や使用方法について説明します 内蔵 Flash メモリへのアクセス方法については 別途リリースされているドキュメント (JUG10_001) をご覧ください 3
2 EFB の構成 EFB は MachXO2 ファミリのデバイスに内蔵されている固有の機能を持つ複数のブロックと それらおよびデバイスのファブリックを接続するバスから構成されるハードマクロです ( 図 2-1) 図 2-1 EFB のブロックダイアグラム 固有の機能ブロックとしては 以下のものが内蔵されています I2C インターフェイス 2 SPI インターフェイス 1 タイマーカウンター 1 ユーザー Flash メモリ 1 Configuration 回路 1 パワーセーブ回路 1 PLL デバイス依存 ( 2 or 1 or 0) これらのブロック間およびユーザーロジックは Wishbone バスを介して接続されています 4
3 EFB とハードマクロの生成と注意事項 EFB および各種ペリフェラルを使用する場合 それらの HDL ソースは IPexpress で生成します 3.1 EFB Enables タブの設定 EFB タブでは 使用するマクロの選択等を行います 使用するマクロの選択 EFB を使用する場合 まず IPexpress の [EFB Enables] タブで使用するハードマクロを選択します [EFB Enables] タブには 選択可能なハードマクロのリストが表示されていますので 使用するマクロにチェックを入れます チェックを入れると該当するハードマクロの設定タブがアクティブになりパラメータ設定が可能になります 図 3-1 ハードマクロ選択タブ クロック周波数の設定 EFB を使用する場合 必ず IPexpress の [EFB Enables] で [WISHBONE Clock Frequency] 欄に実際に使用するクロックの周波数を入力してください 各種ハードマクロは このクロックで動作します I2C や SPI マクロからの出力クロックはこれを分周したものが出力されます 分周比は この周波数設定を基準に行いますので 実際に使用するクロック周波数が違うと適当な出力クロックが得られません 注意してください 5
図 3-2 WISHBONE clock 周波数の設定 3.2 I2C タブの設定 I2C タブでは I2C マクロ 2 つ (Primary/Secondary) の設定が行えます 図 3-3 I2C マクロ設定タブ General Call Enable General Call( アドレス all 0 ) のアクセスに対するレスポンス可否の設定です チェックが入っている場合は General Call に対して ACK を返します 6
Wakeup Enable パワーダウン状態でアクセスがあった場合のレスポンス可否の設定です チェックが入っているとパワーダウン状態で該当アドレスへのアクセスがあった場合にパワーダウンから自動的に復帰します I2C Bus Performance I2C バスのスループット ( クロック周波数 ) を選択します この設定から内部のクロック分周比が決まるので 必ず適当な値を選択してください I2C Addressing I2C のアドレスモード (7bit or 10bit) を選択します Slave Address 当該デバイスの I2C slave アドレスを設定します 3.3 SPI タブの設定 図 3-4 SPI マクロの設定タブ SPI mode SPI マクロの動作モードを選択します Master Clock Rate Master モードでの動作時の出力クロック周波数を設定します モードとして [Slave & Master] を選択した場合に設定可能です Wishbone クロックを分周して生成するので Wishbone クロックを分周して生成できる周波数を入力してください 7
SPI Protocol Options SPI の各種オプションの初期値設定です Wishbone バスからのレジスタアクセスで設定を変更することもできます LSB First チェックが入っていると LSB から出力 / 入力します Inverted Clock チェックが入っていると クロック極性が反転します 内部のレジスタ CPOL の初期値設定です Phase Adjust チェックが入っているとデータ出力のクロック位相 ( エッジ ) が立上がり同期になります 図 3-5 Phase Adjust チェックなし 図 3-6 Phase Adjust チェックあり Interrupts バスの割り込みを有効にするフラグを選択します Master Chip select Master モードで動作させる際に出力する Chip select の数を選択します Misc Wake up Enable パワーダウン状態でアクセスがあった場合のレスポンス可否の設定です チェックが入っているとパワーダウン状態でアクセスがあった場合に パワーダウンから自動的に復帰します 8
3.4 Timer/Counter タブの設定 Timer/Counter タブでは マクロの動作モードやカウント値の初期値設定を行います これらの値は Wishbone バスから随時変更することも出来ます (EFB Enables タブで Timer/Counter の動作モードを [Dynamic ] に設定している場合 ) 図 3-7 Timer/Counter マクロの設定タブ Mode Selection [Timer/Counter Mode] 欄でマクロの動作モードを [Output Function] 欄で出力ポート [tc_oc] の振る舞いを選択します 各選択の概略は以下の様になります Timer/Counter Mode CTCM (Clear Timer on Compare Match) 内部カウンタはカウントアップしていき レジスタ [TCTOP] の値と一致すると 0 に戻ります 内部カウンタ値 TCTOP 0 Count up TCTOP 0 Count up tc_oc 図 3-8 TCTM の内部カウンタと tc_oc の振る舞い (Output Function = TOGGLE) [Output Function] で [TOGGLE] を選択すると [tc_oc] ポートからは [TCTOP] サイクル周期でトグルする波形が出力されます レジスタ [TCTOP] については こちらを参照ください 9
Fast PWM Mode 内部カウンタはカウントアップしていき レジスタ [TCTOP] の値と一致すると 0 に戻ります [Output Function] で [TOGGLE] を選択すると レジスタ [TCOCR] およびレジスタ [TCTOP] とカウント値が一致した場合に [tc_oc] がトグルします 内部カウンタ値 tc_oc TCTOP 0 Count up TCOCR Count up TCTOP 0 Count up 図 3-9 Fast PWM Mode の内部カウンタと tc_oc の振る舞い レジスタ [TCTOP] と [TCOCR] については こちらを参照ください Phase and Frequency Correct PWM mode 内部カウンタは 0 からカウントアップしていき レジスタ [TCTOP] の値と一致するとカウントダウンを始めます カウント値が 0 になると再びカウントアップを始めます [Output Function] で [TOGGLE] を選択すると レジスタ [TCOCR] とカウント値が一致した場合に [tc_oc] がトグルします 内部カウンタ値 TCTOP 0 Count up TCOCR Count up TCTOP Count down TCOCR Count down tc_oc 図 3-10 Phase and Frequency Correct PWM Mode の内部カウンタと tc_oc の振る舞い レジスタ [TCTOP] と [TCOCR] については こちらを参照ください Clock Selection 内部カウンタを動作させるクロックについての設定を行います Clock Edge Selection カウンタで使用するクロックのエッジを選択します [PCLOCK] : tc_clki の立ち上がりエッジ [NCLOCK] : tc_clki の立ち下がりエッジ Prescale Divider Value カウンタに入力する前のクロック分周比設定です Tc_clki を最大 1024 分周できます 図 3-11 カウンタと Prescale Divider 10
Counter Value 各カウンタモードで使用するレジスタ [TCTOP] と [TCOCR] の初期値を設定します Timer Counter Top レジスタ [TCTOP] の初期値設定です [TCOCR] を使用するモードでは [TCOCR] より大きな値を設定してください Output Compare Value レジスタ [TCOCR] の初期値設定です かならず [TCTOP] より小さな値を設定してください 11
4 Wishbone から I2C マクロへのアクセス 4.1 I2C マスターモード時の制御 4.1.1 Write アクセス XO2 の I2C マクロをマスタとして 接続されるスレーブデバイスに [N]byte のデータを Write するには 図 4-1 の手順に従って wishbone バスにアクセスします 1 図 4-1 Wishbone バスから IC2 マクロで [N]byte データの Write を行うためのフローの例 1 Timeout について一定時間 (I2C クロック 9 サイクル分 ) 経過しても ACK が検出さなければ 出力した slave アドレスに該当するデバイスがバス上に存在しないことを意味するのでアクセスを終了します 12
wb_clk_i wb_cyc_i wb_stb_i wb_we_i wb_adr_i[7:0] wb_dat_i wb_dat_o wb_ack_o 44 N/A 41 N/A 45 45 44 N/A 41 N/A 45 45 41 1 N/A 90 N/A 2 N/A 10 N/A 40 3 3 4 4 1 7bit アドレス + '0' 2 I2C から出力するデータ 3 RARX(wb_dat_o[5]) と TRRDY(wb_dat_o[2]) をチェック 4 TRRDY(wb_dat_o[2]) をチェック 必要な回数繰り返し 図 4-2 Wishbone バスから IC2 マクロで Write を行うためのレジスタアクセス例 13
4.1.2 Read アクセス XO2 の I2C マクロをマスタとして 接続されるスレーブデバイスから [N]byte のデータを Read するには 図 4-3 の手順に従って wishbone バスにアクセスします 1 図 4-3 Wishbone バスから IC2 マクロで [N]byte データの Read を行うためのフローの例 1Timeout について一定時間 (I2C クロック 9 サイクル分 ) 経過しても ACK が検出さなければ 出力した slave アドレスに該当するデバイスがバス上に存在しないことを意味するので そのままアクセスを終了 14
wb_clk_i wb_cyc_i wb_stb_i wb_we_i wb_adr_i[7:0] wb_dat_i wb_dat_o wb_ack_o 44 N/A 41 N/A 45 45 41 N/A 45 45 47 1 N/A 90 N/A 20 N/A 2 2 3 3 4 1 7bit アドレス + '0' 2 RARX(wb_dat_o[5]) と TRRDY(wb_dat_o[2]) をチェック 3 TRRDY(wb_dat_o[2]) をチェック 4 I2C の Read データ ( 必要な回数 ) 繰り返し 41 68 N/A 47 4 図 4-4 Wishbone バスから IC2 マクロで Read を行うためのレジスタアクセス例 15
5 Wishbone から SPI マクロへのアクセス 5.1 SPI マスターモード時の制御 5.1.1 Write アクセス MachXO2 の SPI マクロをマスタとして 接続されるスレーブデバイスに [N]byte のデータを Write するには 図 5-1 の手順に従って wishbone バスにアクセスします 1 3 2 4 図 5-1 Wishbone バスから SPI マクロで [N]byte データの Write を行うためのフローの例 1 Write データの出力開始タイミングについて SPI マクロがアクティブでマスターモード設定されている場合 アドレス 0x59 にデータを write すると SPI のポートからクロックと Write したデータの出力が開始されます 1byte のデータ出力が終わると 次のデータがアドレス 0x59 に write されるまで SPI の出力クロックは停止します ( 図 5-2) 16
図 5-2 SPI データ出力開始タイミング 2 ダミーデータの Read について SPI マクロは回路構成上 アクセス内容にかかわらずクロックを出力すると SI ポートのデータを受信データとして取り込んでしまいます Write アクセスの際は 余分なデータが受信データ用のバッファに保存されてしまうので 以後の Read アクセスを正常に行うためにデータを出力する度に余分なデータを破棄する必要があります 3 byte データの送信完了確認について SPI マクロには アドレス 0x59 に write したデータの送信完了フラグがありません 前述のように Write アクセス時にも SI ポート上のデータがマクロ内に取り込まれ 1byte 分たまると受信データの read 可能フラグ (RRDY) が立つので それを送信完了フラグの代わりに使用します 4 繰り返し回数について α は SPI のコマンドおよびオペランドの byte 数です 17
wb_clk_i wb_cyc_i wb_stb_i wb_we_i wb_adr_i[7:0] wb_dat_i wb_dat_o wb_ack_o 56 N/A 5A 5A 59 N/A 5A 5A 59 56 C0 N/A 2 N/A 80 1 1 3 3 4 1 TRDY(wb_dat_o[4]) をチェック 2 任意の出力データ ( コマンド オペランド Write データ ) 3 RRDY(wb_dat_o[3]) をチェック 4 Read したデータは破棄 ( 必要な回数 ) 繰り返し 図 5-3 Wishbone バスから SPI マクロで Write を行うためのレジスタアクセス例 18
5.1.2 Read アクセス MachXO2 の SPI マクロをマスタとして 接続されるスレーブデバイスから [N]byte のデータを Read するには 図 5-4 の手順に従って wishbone バスにアクセスします 1 2 19
3 図 5-4 Wishbone バスから SPI マクロで [N]byte データの Read を行うためのフローの例 1 Write データの出力開始タイミングについて SPI マクロがアクティブでマスターモード設定されている場合 アドレス 0x59 にデータを write すると SPI のポートからクロックと Write したデータの出力が開始されます 1byte のデータ出力が終わると 次のデータがアドレス 0x59 に write されるまで SPI の出力クロックは停止します ( 図 5-5) 図 5-5 SPI データ出力開始タイミング 20
2 ダミーデータの Read について SPI マクロは回路構成上 アクセス内容にかかわらずクロックを出力すると SI ポートのデータを受信データとして取り込んでしまいます Write アクセスの際は 余分なデータが受信データ用のバッファに保存されてしまうので 以後の Read アクセスを正常に行うためにデータを出力する度に余分なデータを破棄する必要があります 3 ダミーデータの write についてマスターモードの SPI マクロから SPI クロックを出力するためにはアドレス 0x59 へのデータの write が必要になります このため Read アクセスの際でもクロックを出力させるためにアドレス 0x59 へのダミーデータの write を行います 21
wb_clk_i wb_cyc_i wb_stb_i wb_we_i wb_adr_i[7:0] wb_dat_i wb_dat_o wb_ack_o 56 N/A 5A 5A 59 N/A 5A 5A 59 59 N/A 5A 5A N/A 59 56 C0 N/A 2 N/A 0 N/A N/A 80 1 1 3 3 4 3 3 5 1 TRDY(wb_dat_o[4]) をチェック 2 任意の出力データ ( コマンド オペランド Write データ ) 3 RRDY(wb_dat_o[3]) をチェック 4 ダミーの Read データ (Read したデータは破棄 ) 5 SPI の Read データ ( 必要な回数 ) 繰り返し ( 必要な回数 ) 繰り返し 図 5-6 Wishbone バスから SPI マクロで Read を行うためのレジスタアクセス例 22
6 EFB のシミュレーション 6.1 テストベンチ作成時の注意点 EFB のシミュレーションには 最上位階層のテストベンチに以下の 2 つのモジュールのインスタンスが必要です また これらのモジュールのインスタンス名は以下のものでないと エラーになります 表 6-1 GSR/PUR のインスタンス名 モジュール名インスタンス名備考 GSR GSR_INST Global Set/Reset 出力モジュール PUR PUR_INST Power Up Set/Reset 出力モジュール エラメッセージの例 # ELAB2: Fatal Error: ELAB2_0036 Unresolved hierarchical reference to "GSR_INST.GSRNET" from module "testbench.u1_efb_i2c_ms.efbinst_0" (module not found). # ELAB2: Last instance before error: /u1_efb_i2c_ms/efbinst_0 # KERNEL: Error: E8005 : Kernel process initialization failed. # Error: Fatal error occurred during simulation initialization. 記述例 library ieee, std; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith; use ieee.std_logic_textio.all; use std.textio.all; library ovi_machxo2; use ovi_machxo2.all; entity testbench is end testbench; architecture BL of testbench is component GSR port( GSR : in std_logic ); end component; component PUR port( PUR : in std_logic ); end component; 23
Begin GSR_INST : GSR port map( GSR => wb_xrst_i ); PUR_INST : PUR port map( PUR => c_vcc ); end BL; 6.2 I2C マクロの入出力信号 I2C マクロからの出力は I2C の仕様どおり 0 または Z です I2C マクロから 1 や H は出力されません 従って外部で H レベルへのプルアップ処理が必要になります 図 6-1 I2C マクロ入出力ポートの接続と記述例 24
6.3 WISHBONE バスへの入力データ WISHBONE バスから EFB にアクセスする場合 クロックに対してデータの遅延が小さい場合は wb_ack_o 信号がテクニカルノート TN1205 のタイムチャートとは違うタイミングでアサートされます ( 図 6-2 図 6-3) ----------------------------------------------------------------------------------------------------------------------------------- ただし Read/Write アクセス自体は正しく行われます ----------------------------------------------------------------------------------------------------------------------------------- 図 6-2 WISHBONE バスのアクセス波形 (TN1205) 図 6-3 WISHBONE バスのシミュレーション波形 ( 入力データ遅延なし ) シミュレーション時の wb_ack_o のタイミングを TN1205 と同じにするためには WISHBONE バスへの入力信号に クロックに対して 20ps 以上の遅延をつけてください 図 6-4 WISHBONE バスのシミュレーション波形 ( 入力データ遅延あり ) 25
7 改訂履歴 表 7-1 改訂履歴 バージョン リリース 改訂内容 Ver1.0 June. 2011 初版リリース 26