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

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

FPGAの部屋

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

AXI Performance Monitor IPを試してみた2(SDK)

AXI Performance Monitor IPを試してみた1(インプリメント)”の続き。

前回は、AXI Performance Monitor をXPSプロジェクトに入れて設定し、PlanAheadに戻ってインプリメントを行った。今回はSDKを起動して、XMDでAXI Performance Monitor が動作しているどうかを確認する。

・PlanAheadのFileメニューからExport -> Export Hardware... を選択した。

・ダイアログが開く。Launch SDKにチェックを入れて、OKボタンをクリックした。
PlanAhead141_82_120518.png

・SDKが立ち上げた。
AXI_P_Monitor_9_120530.png

・Xilinx ToolsメニューからProgram FPGAを選択した。(ビットファイルをダウンロードするため)

・Program FPGAダイアログで、そのまま、Programボタンを押して、Atlysボードにビットファイルをダウンロードした。
AXI_P_Monitor_10_120530.png

・結果はエラーだった。やはり、Data2MEMでエラーだった。

・仕方が無いので、またiMPACTを起動してビットファイルをダウンロードした。ビットファイルは、tlys_XPS_CDC_SVGA_141_PA.sdk\SDK\SDK_Export\Atlys_XPS_CDC_SVGA_141_hw_platformの下にあるsystem.bitだ。
AXI_P_Monitor_11_120530.png

・Xilinx Cプロジェクト(axi_perf_mon_test) と作って、その中にaxi_perf_mon_test.c を生成した。これはデバックモードににするため、コンパイル出来ればなんでも良い。下のリストに示す。Cソフトウェアを生成した。(この辺は前から嫌というほどやってきたので省略する)

/*
 * axi_perf_mon_test.c
 *
 *  Created on: 2012/05/31
 *      Author: Masaaki
 */

#include "xbasic_types.h"
#include "xio.h"
#include "mb_interface.h"
#include "xparameters.h"

int main()
{
    unsigned int data;

    data = *(volatile unsigned int *)(XPAR_AXI_PERF_MON_0_BASEADDR);

    return 0;
}



・2つダイアログが出てきたが、デバックモードになった。XMDのウインドウを右はじに移動した。(コマンドの履歴が見えるように)
AXI_P_Monitor_13_120531.png

AXI Performance Monitor のベースアドレスは、”AXI Performance Monitor IPを試してみた1(インプリメント)”のXPSプロジェクトのAddresses タブに示されている様に0x41d00000 にマップしてある。
このAXI Performance Monitor にはレジスタがたくさんある。

C_BASEADDR +0x0000 にControl Registerがあって、レジスタ群のイネーブルやリセットを行う。Control Registerの図を”LogiCORE™ AXI Perf Mon IP (v1.00.a)”(以下マニュアルとする)のFigure 2: Control Registerから引用させていただく。
AXI_P_Monitor_15_120601.png

Control Register(32ビット長)のビット割り当てを下に示す。
ビット9:Metrics_Cnt_Reset でMetric Counter群をリセットする。
ビット8:Metrics_Cnt_En でMetric Counter群をリセットする。
ビット1:Global_Clk_Cnt_Reset でフリーランニングしているGlobal Clock Counter をリセットする。
ビット0:Global_Clk_Cnt_En でフリーランニングしているGlobal Clock Counter をイネーブルする。

すべてのレジスタを列挙する。すべてのレジスタのビット長は32ビット。(LogiCORE IP AXI Performance Monitor v1.00.a Product Guide PG037 May 22, 2012 を参照してレジスタを追加した)

C_BASEADDR +0x0000 : Control Register
C_BASEADDR +0x0004 : Read Latency Range A Register
C_BASEADDR +0x0008 : Read Latency Range B Register
C_BASEADDR +0x000C : Read Latency Range C Register
C_BASEADDR +0x0010 : Read Latency Range D Register
C_BASEADDR +0x0014 : Write Latency Range A Register
C_BASEADDR +0x0018 : Write Latency Range B Register
C_BASEADDR +0x0024 : Metric Selector register
C_BASEADDR +0x0028 : Sample Interval MSB
C_BASEADDR +0x002C : Sample Interval LSB
C_BASEADDR +0x0030 : Sample Interval Control Register
C_BASEADDR +0x0040 : Global Interrupt Enable Register
C_BASEADDR +0x0044 : Interrupt Enable Register
C_BASEADDR +0x0048 : Interrupt Status Register
C_BASEADDR +0x1000 : Metric Counter 0 (High)
C_BASEADDR +0x1004 : Metric Counter 0 (Low)
C_BASEADDR +0x1008 : Metric Counter 1 (High)
C_BASEADDR +0x100C : Metric Counter 1 (Low)
C_BASEADDR +0x1010 : Metric Counter 2 (High)
C_BASEADDR +0x1014 : Metric Counter 2 (Low)
C_BASEADDR +0x1018 : Metric Counter 3 (High)
C_BASEADDR +0x101C : Metric Counter 3 (Low)
C_BASEADDR +0x1020 : Metric Counter 4 (High)
C_BASEADDR +0x1024 : Metric Counter 4 (Low)
C_BASEADDR +0x1028 : Metric Counter 5 (High)
C_BASEADDR +0x102C : Metric Counter 5 (Low)
C_BASEADDR +0x1030 : Metric Counter 6 (High)
C_BASEADDR +0x1034 : Metric Counter 6 (Low)
C_BASEADDR +0x1038 : Metric Counter 7 (High)
C_BASEADDR +0x103C : Metric Counter 7 (Low)
C_BASEADDR +0x1040 : Metric Counter 8 (High)
C_BASEADDR +0x1044 : Metric Counter 8 (Low)
C_BASEADDR +0x1048 : Metric Counter 9 (High)
C_BASEADDR +0x104C : Metric Counter 9 (Low)
C_BASEADDR +0x0800 : Global Clock Counter (127 downto 96)
C_BASEADDR +0x0804 : Global Clock Counter (95 downto 64)
C_BASEADDR +0x0808 : Global Clock Counter (63 downto 32)
C_BASEADDR +0x080C : Global Clock Counter (Lower 32-bit data)
C_BASEADDR +0x2000 : Sampled Metric Counter 0 (High)
C_BASEADDR +0x2004 : Sampled Metric Counter 0 (Low)
C_BASEADDR +0x2008 : Sampled Metric Counter 1 (High)
C_BASEADDR +0x200C : Sampled Metric Counter 1 (Low)
C_BASEADDR +0x2010 : Sampled Metric Counter 2 (High)
C_BASEADDR +0x2014 : Sampled Metric Counter 2 (Low)
C_BASEADDR +0x2018 : Sampled Metric Counter 3 (High)
C_BASEADDR +0x201C : Sampled Metric Counter 3 (Low)
C_BASEADDR +0x2020 : Sampled Metric Counter 4 (High)
C_BASEADDR +0x2024 : Sampled Metric Counter 4 (Low)
C_BASEADDR +0x2028 : Sampled Metric Counter 5 (High)
C_BASEADDR +0x202C : Sampled Metric Counter 5 (Low)
C_BASEADDR +0x2030 : Sampled Metric Counter 6 (High)
C_BASEADDR +0x2034 : Sampled Metric Counter 6 (Low)
C_BASEADDR +0x2038 : Sampled Metric Counter 7 (High)
C_BASEADDR +0x203C : Sampled Metric Counter 7 (Low)
C_BASEADDR +0x2040 : Sampled Metric Counter 8 (High)
C_BASEADDR +0x2044 : Sampled Metric Counter 8 (Low)
C_BASEADDR +0x2048 : Sampled Metric Counter 9 (High)
C_BASEADDR +0x204C : Sampled Metric Counter 9 (Low)


Metric Selector register の設定によってMetric Counterの測定する項目が変化する。LogiCORE IP AXI Performance Monitor v1.00.a Product Guide PG037 May 22, 2012の31ページから”Figure 2-8: Metric Selector Register”と”Table 2-21: Metric Selector Register Bit Definitions (C_BASEADDR + 0x0024)”を引用させていただく。
AXI_P_Monitor_16_120601.png

次にMetric_Set_Selの値によるMetric Counter Registers の測定項目を示す。
LogiCORE IP AXI Performance Monitor v1.00.a Product Guide PG037 May 22, 201236,37ページの2-28, 2-29, 2-30表を引用させていただく。
AXI_P_Monitor_17_1_120601.png
AXI_P_Monitor_17_2_120601.png
AXI_P_Monitor_17_5_120601.png

この様にたくさんの項目を測定することができるようだ。今回はSet4を確かめて見ることにする。
XMDでmwr, mrd コマンドを使用して各レジスタをWrite/Readしてみた。
AXI_P_Monitor_14_120531.png

最初にControl Registerをリセットしてから、リセットを外し、イネーブルだけにする。
Metric Selector register にSet4を設定する。Set4のMetric Register を読みだす。Num_Wr_Reqs、Num_WLasts、Write Byte Count、Total Write Latencyをそれぞれ2回ずつReadしている。増えているのがわかると思う。ちなみにAXI Performance Monitor のカウンタのビット長を32ビットに設定してあるので、Highの方はないはずだ。
最後に、C_BASEADDR +0x080C : Global Clock Counter (Low)をReadしてみたが、実装されていないようだ。C_BASEADDR +0x0808 : Global Clock Counter (High)だけなのかもしれない(未確認)。 よく見たらアドレスが間違っていました。もう一度やってみます。

(追加)
C_BASEADDR +0x080C : Global Clock Counter (Low)をもう一度やってみました。2回Readしてみたところ2回目のほうが増えてました。ちゃんとカウントしているようです。
AXI_P_Monitor_18_120601.png

(追加2)
LogiCORE IP AXI Performance Monitor v1.00.a Product Guide PG037 May 22, 2012 によるとレジスタが増えていたので記事のレジスタを書き換えました。
  1. 2012年05月31日 05:59 |
  2. IP
  3. | トラックバック:0
  4. | コメント:0