FC2カウンター FPGAの部屋 2012年02月25日
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする2(Pcoreテンプレート生成)

ar37425のAXI4 Masterサンプルを試す1(AXI_Master IPの登録、接続)”で作成したプロジェクトをコピーして、キャラクタ・ディスプレイ・コントローラのAXI4スレーブ・デバイスを作成することにした。

1.最初に、Add IPしたaxi_master_0 をDelete Instance した。
CDC_axi_slave_1_120225.png

2.Atlys_XPS_CDC_SVGA_134\pcores フォルダで、axi_slave_v1_00_a フォルダをコピーして、CDC_axi_slave_v1_00_a と名前を変更した。
CDC_axi_slave_2_120225.png

3.Atlys_XPS_CDC_SVGA_134\pcores\CDC_axi_slave_v1_00_a\data の下のファイル名を変更した。

4.CDC_axi_slave_v2_1_0.mpd の 46行目の BEGIN axi_slave を BEGIN CDC_axi_slave に変更した。

4A.CDC_axi_slave_v2_1_0.mpd の 52,53行目を以下のように変更した。

OPTION DESC = CDC_AXI Slave
OPTION LONG_DESC = CDC_AXI Slave


5.CDC_axi_slave_v2_1_0.pao の 50行目の lib axi_slave_v1_00_a axi_slave.vhd vhdl を lib CDC_axi_slave_v1_00_a CDC_axi_slave.vhd vhdl に変更した。

6.Atlys_XPS_CDC_SVGA_134\pcores\CDC_axi_slave_v1_00_a\hdl\vhdl の axi_slave.vhd を CDC_axi_slave.vhd に変更して、ファイルの中の axi_slave も CDC_axi_slave に変更した。

7.この状態で、XPSのPoject メニューからRescan User Repositoriesを選択し、リポジトリを更新した。

8.IP CatalogウインドウのProject Local PCores のUSER の下に、CDC_AXI Slaveが入った。
CDC_axi_slave_3_120225.png

*これで、IPコア名を変えて、Pcoreとして生成する目処が付いた。ここから、HDLファイルを追加して、CDC_axi_slave.vhd や.mpd, .paoファイルを修正する。現在修正中だ。
  1. 2012年02月25日 12:18 |
  2. AXI4 Slave IPの作製
  3. | トラックバック:0
  4. | コメント:6

キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする1(仕様の検討)

キャラクタ・ディスプレイ・コントローラの仕様の変更”で作ったキャラクタ・ディスプレイ・コントローラをAXI4スレーブ・デバイスとして、MicroBlaze のシステムに接続しようと思う。つまり、AXI4バスのスレーブ・デバイス用のラッパーを作ろうと思っている。今回は仕様の検討を行う。

・キャラクタ・ディスプレイ・コントローラの使用できるポートは1つだけだ。AXI4バスはWrite, Read それぞれ独立にアクセスされる可能性があるが、1度に実行できるのはどちらかの転送となる。よって、アービタを作ってラウンドロビンでアービトレーションを行う。(ただし、MicroBlaze では、X1倍動作なので、IOバッファ(あるとすれば?)に溜まったRead, Writeが同時に発行されることはないと思われる)(追加:やはり、同じクロックでARVALIDとAWVALIDがアサートされる確率は少ないと思うので、Write優先ということにする)

・オーバーラップしてRead 及び Write 要求が来る可能性があるが、現在処理中のトランザクションがあったら、AWREADY または、ARREADYを0にしておいて要求を受け付けない。

・AXI4バスのビット幅は32ビット幅とする。その内の下16ビットだけをキャラクタ・ディスプレイ・コントローラのデータとして使用する。上の16ビットは、MicroBlaze からのRead時には0を返す。Writeは書き捨てとする。

・基本的に32ビット幅のアクセスを考えている。つまり、ソフトウェアではunsigned int かint でのRead, Writeとする。

・AXI4バスからのWrite はそのままキャラクタ・ディスプレイ・コントローラのバスへのWriteとする。Waitしても、1クロックごとにリアルタイムに書き込みができるからだ。

・AXI4バスからのRead は、分散RAMによるFWFTのFIFOを間に挟む。BlockRAMからのReadは1クロック遅延するため、AXI4バス・マスタ・デバイスからのRREAYがディアサートされて、ReadがWaitされた時にキャラクタ・ディスプレイ・コントローラ側もアドレスを戻すために1クロックWaitする必要があるからだ。

・上記の機能を、AXIバスのクロックに同期して、キャラクタ・ディスプレイ・コントローラが行えるようにプロセッサ側の動作クロックと描画側の動作クロックを分離する。

AXI4バス・サンプルのシミュレーション結果は、”ar37425のAXI4 Masterサンプルを試す6(シミュレーション3)”を参照のこと。

(2012/02/25:追加)
下に概念図を追加する。
CDC_axi_slave_4_120226.png

上の図で、制御部のWrite Transaction State Machine とRead Transaction State Machine は協調動作して、一方がアクティブの場合は、片方は動作しない。同時にアクティブになろうとした場合にはWriteの方が優先される。
データパスではWriteは直結だが、Write Transaction State Machine がアクティブの場合のみ直結される。その以外はWREADYはディアサートされる。
ReadはFIFOが間に入る。このFIFOは分散RAMを使用した16深度、32ビット幅のFIFOだ。これにより、Waitが入るとバーストすることができない(というか1つお休みする必要がある)BlockRAMのReadをバースト可能にする。
  1. 2012年02月25日 04:27 |
  2. AXI4 Slave IPの作製
  3. | トラックバック:0
  4. | コメント:0