前回開いたVivadoプロジェクトの中身を見てみます。
ブロックデザインを見てみる
このVivadoプロジェクトでは、ブロックデザインという形でデザインが作成されています。
これは、XilinxやDigilent、もしくは自分で作成した機能ブロック (IPと呼ばれます)を回路図的につなげていくものです。
この中で重要なブロックを見ていきます。
その前に、ZynqデバイスではARMのCPUコア部分とプログラム可能なロジック回路要素部分に分かれていると書きました。
前者はPS(Processing System)部、後者はPL(Programmable Logic)部という名前が付いています。
Xilinxサイトに出ている図が分かりやすいです。
https://japan.xilinx.com/content/dam/xilinx/imgs/block-diagrams/zynq-mp-core-dual.png
上側がPS部、下側がPL部になっています。
ブロックデザインに戻ります。
まず、この"ZYNQ7 Processing System"と書かれている部分が、PS部を表したブロックになります。
ブロックデザインの機能ブロックには、入出力ポートが出ていて、これが他の機能ブロックと接続されています。
特に大事なポートは、
- DDR
Zynqデバイスの外に接続されているDDR3メモリにつながるポートです。データ線、アドレス線などが含まれています。 - M_AXI_GP0
PS部からPL部のブロックに指示を出すポートです。
AXIという、ARMが策定したインターフェースになっています。
"レジスタアクセス"という形で、アドレスを指定しての書き込み・読み出しを行います。 - FCLK_CLK0, FCLK_CLK1
今回のデザインでは、PS部からPL部にクロックを供給するようになっています。そのクロックポートです。 - S_AXI_HP0
PL部から、PS部に接続されているDDR3メモリへのアクセスを行うためのポートです。
こちらもAXIインターフェースになっています。 - FIXED_IO
今回のデザインでは、この中にUART、USB、イーサネット信号が入っていて、デバイスの外につながっています。
次は、AXI interconnectブロックです。
これは、AXIインターフェースの1対多(N vs Mも可)を実現するブロックです。
- S00_AXI
ここがPS部のM_AXI_GP0ポートにつながっています。 - M00_AXI~M13_AXI
これらが、PL部のブロックに接続されています。
次、AXI GPIOとaxi_i2s_adiブロック。
これらのS_AXIポートが、先ほどのAXI interconnectのMxx_AXIポートにつながっています。
また、デバイス外部のLED、スイッチ、I2Sデバイスにつながっています。
HDMIポートにデータを出力する系のブロックです。
- Video Timing Controller
AXI4-Stream to Video Outに、画像信号出力のタイミング信号を出力します。 - AXI4-Stream to Video Out
video inポートにAXI4-Streamからのデータ入力を受け、RGBのビデオ信号として出力します。
※AXI4-Stream : AXIインターフェースで、データストリーム伝送に特化したタイプのもの - RGB to Video Encoder (Source)
RGB信号から、HDMI信号の形に変換します。
上記のHDMI出力系にデータを流し込むブロック(AXI Video Direct Memory Access)。
- M_AXI_MM2Sポートが、PS部のS_AXI_HP0ポートに接続され、ここからDDR3メモリに格納した画像データの読み出しを行います。
- M_AXIS_MM2Sポートから、AXI4-Streamインターフェースで画像データを出力します。
ここがAXI4-Stream to Video Outブロックのvideo inポートに接続されます。
ブロックデザインの読解はこの程度で。