FC2カウンター FPGAの部屋 キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする11(インプリメント3)
FC2ブログ

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

FPGAの部屋

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

キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする11(インプリメント3)

キャラクタ・ディスプレイ・コントローラをAXI4スレーブにする10(インプリメント2)”でインプリメントすることができたので、今度はソフトウェアを作成して、キャラクタ・ディスプレイ・コントローラをテストする。

その前にMAPのレポートを下に貼っておく。

Release 13.4 Map O.87xd (nt)
Xilinx Mapping Report File for Design 'system_top'

Design Information
------------------
Command Line   : map -intstyle ise -p xc6slx45-csg324-2 -w -logic_opt off -ol
high -t 1 -xt 0 -register_duplication off -r 4 -global_opt off -mt off -ir off
-pr off -lc off -power off -o system_top_map.ncd system_top.ngd system_top.pcf 
Target Device  : xc6slx45
Target Package : csg324
Target Speed   : -2
Mapper Version : spartan6 -- $Revision: 1.55 $
Mapped Date    : MON 19 MAR 6:1:45 2012

Design Summary
--------------
Number of errors:      0
Number of warnings:   30
Slice Logic Utilization:
  Number of Slice Registers:                 4,171 out of  54,576    7%
    Number used as Flip Flops:               4,156
    Number used as Latches:                      0
    Number used as Latch-thrus:                  0
    Number used as AND/OR logics:               15
  Number of Slice LUTs:                      5,209 out of  27,288   19%
    Number used as logic:                    4,777 out of  27,288   17%
      Number using O6 output only:           3,550
      Number using O5 output only:             113
      Number using O5 and O6:                1,114
      Number used as ROM:                        0
    Number used as Memory:                     292 out of   6,408    4%
      Number used as Dual Port RAM:            108
        Number using O6 output only:             4
        Number using O5 output only:             1
        Number using O5 and O6:                103
      Number used as Single Port RAM:            4
        Number using O6 output only:             4
        Number using O5 output only:             0
        Number using O5 and O6:                  0
      Number used as Shift Register:           180
        Number using O6 output only:            83
        Number using O5 output only:             1
        Number using O5 and O6:                 96
    Number used exclusively as route-thrus:    140
      Number with same-slice register load:    123
      Number with same-slice carry load:        12
      Number with other load:                    5

Slice Logic Distribution:
  Number of occupied Slices:                 2,143 out of   6,822   31%
  Nummber of MUXCYs used:                      880 out of  13,644    6%
  Number of LUT Flip Flop pairs used:        6,114
    Number with an unused Flip Flop:         2,333 out of   6,114   38%
    Number with an unused LUT:                 905 out of   6,114   14%
    Number of fully used LUT-FF pairs:       2,876 out of   6,114   47%
    Number of unique control sets:             343
    Number of slice register sites lost
      to control set restrictions:           1,353 out of  54,576    2%

  A LUT Flip Flop pair for this architecture represents one LUT paired with
  one Flip Flop within a slice.  A control set is a unique combination of
  clock, reset, set, and enable signals for a registered element.
  The Slice Logic Distribution report is not meaningful if the design is
  over-mapped for a non-slice resource or if Placement fails.

IO Utilization:
  Number of bonded IOBs:                        97 out of     218   44%
    Number of LOCed IOBs:                       97 out of      97  100%
    IOB Flip Flops:                             11
    IOB Master Pads:                             4
    IOB Slave Pads:                              4

Specific Feature Utilization:
  Number of RAMB16BWERs:                        29 out of     116   25%
  Number of RAMB8BWERs:                          0 out of     232    0%
  Number of BUFIO2/BUFIO2_2CLKs:                 1 out of      32    3%
    Number used as BUFIO2s:                      1
    Number used as BUFIO2_2CLKs:                 0
  Number of BUFIO2FB/BUFIO2FB_2CLKs:             0 out of      32    0%
  Number of BUFG/BUFGMUXs:                       5 out of      16   31%
    Number used as BUFGs:                        5
    Number used as BUFGMUX:                      0
  Number of DCM/DCM_CLKGENs:                     0 out of       8    0%
  Number of ILOGIC2/ISERDES2s:                   6 out of     376    1%
    Number used as ILOGIC2s:                     6
    Number used as ISERDES2s:                    0
  Number of IODELAY2/IODRP2/IODRP2_MCBs:        24 out of     376    6%
    Number used as IODELAY2s:                    0
    Number used as IODRP2s:                      2
    Number used as IODRP2_MCBs:                 22
  Number of OLOGIC2/OSERDES2s:                  58 out of     376   15%
    Number used as OLOGIC2s:                     5
    Number used as OSERDES2s:                   53
  Number of BSCANs:                              1 out of       4   25%
  Number of BUFHs:                               0 out of     256    0%
  Number of BUFPLLs:                             1 out of       8   12%
  Number of BUFPLL_MCBs:                         1 out of       4   25%
  Number of DSP48A1s:                            3 out of      58    5%
  Number of ICAPs:                               0 out of       1    0%
  Number of MCBs:                                1 out of       2   50%
  Number of PCILOGICSEs:                         0 out of       2    0%
  Number of PLL_ADVs:                            2 out of       4   50%
  Number of PMVs:                                0 out of       1    0%
  Number of STARTUPs:                            0 out of       1    0%
  Number of SUSPEND_SYNCs:                       0 out of       1    0%

Average Fanout of Non-Clock Nets:                3.94

Peak Memory Usage:  407 MB
Total REAL time to MAP completion:  7 mins 6 secs 
Total CPU time to MAP completion:   7 mins 20 secs 


それでは、ソフトウェアを作るためにSDKを起動しよう。

・Project Navigator でsystem.xmp をクリックして、Export Hardware Desin To SDK with Bitstream をダブルクリックする。
CDC_axi_slave_40_120320.png

・SDKが立ち上がる。ワークスペースを聞いてくるので、Atlys_XPS_CDC_SVGA_134\SDK を指定した。

・SDKが立ち上がった。
CDC_axi_slave_41_120320.png

・FileメニューからNew -> Xilinx C Project を選択する。

・New Project ダイアログが立ち上がる。chardispctrl_test プロジェクトを作成する。Select Project Templete でEmpty Application を選択した。
CDC_axi_slave_42_120320.png

・Board Support Package project を作成する。
CDC_axi_slave_43_120320.png

・chardispctrl_test プロジェクトとempty_application_bsp_0 プロジェクトが生成された。

・・FileメニューからNew -> Source File を選択する。New Source File が出るので、Source file にchardispctrl_test.c を指定した。
CDC_axi_slave_45_120320.png

キャラクタ・ディスプレイ・コントローラの仕様は、”キャラクタ・ディスプレイ・コントローラの仕様の変更”に書いた。”赤 (R) の色情報は 15~13ビット目の3ビット、緑 (R) の色情報は 12~10ビット目の3ビット、青 (B) の色情報は 9~7ビット目の3ビットとする。6~0ビット目はキャラクタコードとする。”

・これを元に、ソフトウェアを作ろうとして、適当なソフトウェアを用意したが、SDKのXilinx ToolsメニューからProgram FPGA を選択したら、エラーになった。エラーを下に示す。

Program FPGA failed
Data2MEM failed.


・SDKからFPGAをコンフィグレーションできないので、iMPACTからコンフィグレーションした。

・SDKで.elf ファイルの右クリックメニューからDebug As を選択して、デバックモードへ。

・XMDで0x10000000 にデータをWriteしたが、Readはできなかった。

・microblaze_0 のAXI4バスに接続するとWrite/Readできないが、AXI4 Liteバスに接続すると、XMDのコマンドでWrite/Read することができて、画面をみてもキャラクタが正常に表示されている。

なぜAXI4バスに接続すると、Write/Readできないのかわからない?そのためシミュレーションを行うことにした。

(2010/03/21:追加)
シミュレーションは、キャラクタ・ディスプレイ・コントローラのAXI4バス・スレーブIPのCDC_axi_slaveのCDCが大文字のためシミュレーションがエラーになってしまった。ここは小文字にするべき。

ChipScope を入れて確かめてみることにする。
  1. 2012年03月20日 18:37 |
  2. AXI4 Slave IPの作製
  3. | トラックバック:0
  4. | コメント:4

コメント

ハマってますね
SDKのProgram FPGAは13.4から正常に出来なくなりました。
Data2Memでエラーになります。
僕の環境(Win7-x64)ではこの現象はSDKを単体で起動していると発生します。
Project NavigatorかXPSの「Export Hardware Design To SDK」からSDKを起動したときには正常に書込みできます。
異常時と正常時ではSDKのコンソールに表示されるData2Memの起動コマンドラインが違っているので、おそらくSDK起動時の環境変数の設定が違っているのだと思います。
  1. 2012/03/23(金) 11:25:17 |
  2. URL |
  3. windy #-
  4. [ 編集 ]

連投ですみません
AXI-Liteで動作してAXIで動作しないのは、おそらくMicroBlaze(以下MB)のキャッシュ領域とIPのアドレス範囲が合っていないためです。
AXIはMBのDC(Data Cache)ポートに接続しているのでキャッシュ有効アドレス範囲内で、キャッシュ有効でないとアクセスされません。
AXI-LiteはMBのDP(Data Peripheral)ポートに接続しているので、キャッシュ範囲外なら常にアクセスされます。
AXIに接続するなら、IPのアドレス空間がMBのキャッシュ有効アドレス範囲内に入っている事を確認して下さい。
XPSの「Generate Addresses」を実行すればMBのキャッシュ有効アドレスも含めて設定されます(はずです)。

キャッシュ有効範囲内でも、MBのMSRレジスタでデータキャッシュが有効になっていないとDCからはアクセスされません。
MBの設定「Use Cache Links for All Memory Accesses」のチェックがオンになっていれば、MSRの設定に関係なくキャッシュ有効範囲内ならばDCからアクセスされます。
この場合、MSRでキャッシュ有効になっていなければシングルアクセスになります。

ちなみにこのIPはバースト対応しているようですが、MBからキャッシュアクセスする前提ですか?
ライト時はライトスルー動作で問題ないと思いますが、MBのキャッシュリードはクリティカルワードファーストのラップバーストが出てきます。
  1. 2012/03/23(金) 11:53:28 |
  2. URL |
  3. windy #JalddpaA
  4. [ 編集 ]

はまってますが、これはiMPACTでコンフィグすれば問題ないようです。

うちの環境では、「Export Hardware Design To SDK」からSDKを起動したときにも、Program FPGAでエラーになります。

MicroBlaze のAXI4バスに接続したスレーブIPのアドレスを叩いてもアクセスが来ないという経験はないでしょうか?
  1. 2012/03/23(金) 11:56:15 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

windyさん、詳しい説明、本当にありがとうございます。よくわかりました。それでMCBはアクセスできて、自作スレーブIPはアクセス出来ないのですね。
キャッシュリードはキャッシュラインサイズのラップバーストですね。これはまずいです。これには対応していません。
MCBはアクセスできているので、「Use Cache Links for All Memory Accesses」のチェックがオンになっている可能性があると思います。教えて頂いたことを参考にやってみます。
  1. 2012/03/23(金) 12:08:18 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
http://marsee101.blog.fc2.com/tb.php/2091-9f8e0748
この記事にトラックバックする(FC2ブログユーザー)