FC2カウンター FPGAの部屋 2011年08月24日
FC2ブログ

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

FPGAの部屋

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

Spartan-3A Starter KitでEDKを使ってカメラ表示5(PLBV46 Master Burstのシングル転送)

Spartan-3A Starter KitでEDKを使ってカメラ表示4(カスタムIPの作成)”の続き。

XPSのアドレスタプをクリックすると、camera_controller_0, display_controller_0, sccb_controller_0がunmaped addresses の下に入っている。これにメモリサイズを割り当てる。
Spa3A_SKit_OV7670_43_110822.png

まずは、sccb_controller_0に64Kバイトを割り当てた。
Spa3A_SKit_OV7670_44_110822.png

sccb_controller_0 のBase Address に0x84080000を設定した。
Spa3A_SKit_OV7670_45_110822.png

同様に、camera_controller_0, display_controller_0に64Kバイトを割り当て、それぞれBase Addressを0x84040000, 0x84060000に設定した。
Spa3A_SKit_OV7670_46_110822.png


さて、次は、HDLを書いて、PLB Masterとして動作させよう。PLBV46 Master Burst(v1.01a) を参照する。

PLBV46 Master Burst IPは、IBM CoreConnect compatibleのPLBとClient IP Interface をインターフェースするモジュールのようだ。双方向でシングル転送、2から16データビートの固定値のバースト・データ転送に対応している。

以前、PowerPCのインターフェース回路を設計したことがあるが、アドレス転送とデータ転送に信号が分かれていた。PLBもそのようになっているようだ。
下に、シングルWriteとシングルRead転送のプロトコルを説明する。

Single Data Beat Read Operation
PLBV46 Master Burst(v1.01a) のFigure 3: PLB Single Data Beat Read Timingを下に引用させたいただいた。
Spa3A_SKit_OV7670_48_110823.png

()内はどちらの回路がドライブするかを示す。

1.IP2Bus_Mst_Typeを0(シングル転送)、IP2Bus_MstRd_Reqを1(Read)、IP2Bus_Mst_Addrに有効なアドレスを出力、IP2Bus_Mst_BEにバイト・イネーブルを出力して、IP2Bus_MstRd_Reqを1にする。(ユーザー回路)

2.Bus2IP_Mst_CmdAckが1になると、IPICコマンド転送終了。(IPIC) ユーザー回路はコマンド信号をディアサートする。(ユーザー回路)

3.予め、IP2Bus_MstRd_dst_rdy_nを0(active low) にして、ユーザー回路がデータを受け入れ可能なことを宣言しておく。(ユーザー回路)

4.シングル転送なので、Bus2IP_MstRd_sof_nとBus2IP_MstRd_eof_nが同時に0になる。同時にBus2IP_MstRd_dにReadデータが出力され、Bus2IP_MstRd_src_dsc_nが0になり、Readデータが有効なことを示す。(IPIC)

5.IP2Bus_MstRd_dst_rdy_nを0にすでにアサートされていて、IPICはBus2IP_MstRd_src_dsc_nを0にアサートするときに、IPICはBus2IP_Mst_Cmpltを1にアサートして転送終了を宣言する。(IPIC)


あまり詳しい説明は書いていないのだが、これであっているんじゃないか?と思う。

Single Data Beat Write Operation
PLBV46 Master Burst(v1.01a) のFigure 4: PLB Single Data Beat Write Timingを下に引用させたいただいた。
Spa3A_SKit_OV7670_49_110824.png

()内はどちらの回路がドライブするかを示す。

1.IP2Bus_Mst_Typeを0(シングル転送)、IP2Bus_MstWr_Reqを1(Write)、IP2Bus_Mst_Addrに有効なアドレスを出力、IP2Bus_Mst_BEにバイト・イネーブルを出力して、IP2Bus_MstRd_Reqを1にする。(ユーザー回路)

2.1.と同時に(でなくても良いと思うが)IP2Bus_MstWr_dにWriteデータを出力し、IP2Bus_MstWr_REMはマスクのようなので、IP2Bus_Mst_BEを反転して出力すれば良いと思う。IP2Bus_MstWr_sof_n、IP2Bus_MstWr_eof_n、IP2Bus_MstWr_src_rdy_nを0にアサートする。(ユーザー回路)

3.IPICがBus2IP_MstWr_dst_rdy_nを0にアサートして、Writeデータを受け取ったことを示す。(IPIC)

4.IPICが、次のクロックでBus2IP_Mst_CmdAck、Bus2IP_Mst_Cmpltを1にアサートして、データ転送の終了をユーザー回路に通知する。(IPIC) ユーザー回路はすべての信号をディアサートする。(ユーザー回路)



rem[0:3]の参考文献
  1. 2011年08月24日 05:16 |
  2. EDK
  3. | トラックバック:0
  4. | コメント:0