実際にWISHBONEバスが多く使われています。II(Prime)のQsysにモジュールとして登録するには、WISHBONEバスをAvalon-MMに変換する必要があります。(もちろん、Qsysにモジュールとして登録しないで利用する方法もありますが)。core)をQsysにモジュールとして登録するには、Avalon-MMスレーブの変換回路が必要です。次のタイミングチャートは、Avalon-MMスレーブとWISHBONEバスの変換例です。MMスレーブ、下半分がWISHBONEバスの信号です。動作としては、Avalon-MMスレーブからシングルのリード・アクセスとライト・アクセスを連続して行っています。バス・プロトコル変換のポイントは、ストローブ信号アドレスデータ・バス幅アクノリッジ信号の4つです。SlaveとWISHBONEバスの変換1.ストローブ信号の変換Avalon-MMは、リード時とライト時のストローブ信号が分かれています(i_av_rとi_av_w)。バスはリード/ライトでストローブ信号は共通です(strobe_i)。WISHBONEバスでは、ストローブが共通のため、その種別を表す信号we_iが必要になります。we_iは、Avalon-MMのi_av_wがそのまま利用できます。具体的なVerilogコードは、次のようになります。i_av_w;2.アドレスの変換OpenCoresのIPコアは、インターフェースが同じWISHBONEバスであっても、データバス幅やアドレスの扱いは異なります。データバス幅は、8ビットもあれば、32ビットもあります。アドレスの扱いも統一されていません。32ビットのデータバス幅では、本来バイト/ハーフワードの信号(アドレスの下位2ビット)は情報としては不要ですが、IPコアによってその扱いはまちまちです。IPコアの場合は、8ビットデータバス幅のWISHBONEバスです。このため、Avalon-MM側のバイトイネーブル信号をWISHBONEバスの下位2ビットに追加する必要があります。具体的なVerilogコードは次のとおりです。{i_av_adr,w_ba};このような変換がわずらわしい場合は、32ビットのデータバスの上位24ビットを無効フィールドとして、Avalon-MMのデータバスの下位8ビットに直接マッピングする方法もあります。3.データ・バス幅の変換Avalon-MMスレーブ側が32ビット、WISHBONEバス側が8ビットの場合、バス幅の変換を行う必要があります。ライト・データは、Avalon-MMスレーブ側のアドレスの下位2ビットの値に応じて、32ビットから8ビットを選択してWISHBONEバス側のライトデータとします。一方のリードデータは、WISHBONEバス側の8ビットを単純に4回並べて32ビットに変換します。具体的なVerilogコードは次のとおりです。{'d4{data_o}};4.アクノリッジ信号の変換Avalon-MMスレーブ側のアクノリッジ信号o_av_waitは、次のような論理になります。通常状態(IDLE状態)ではLレベルi_av_rまたはi_av_wがHレベルになると、ウェイト状態(Hレベル)になって、WISHBONEバス側の応答を待つWISHBONEバス側のアクノリッジ信号(ack_o)を認識するとLレベルになる具体的なVerilogコードは次のとおりです。P_ACK_OUT));全コード実際には、タイミングに余裕を持たせるために、Avalon-MMからのアクセスを一度サンプリングしています。FPGAvivadoコマンドライン実行のまとめ最低限の設定ファイルを使って、Vivadoのコマンドラインからプロジェクト環境を再構築する場合の例です。TclスクリプトファイルとRTL、SDK用のCソースがあれば、プロジェクト環境を再生成できます。System)のAXIスレーブ・インターフェースです。LTS(64bit)にインストールした時のメモです。Metal:ベアメタル)を実行するまでの手順です。GUIのImplementationをコマンドラインから実行する場合の手順です。HLS(高位合成)を無償で試せるようになりました。HLSを使うと、CやC++で記述したコードからVerilogやVHDLのコードが生成できます。ディジタル技術資料タイトルとURLをコピーしました。