エンベデッド・ペリフェラルIPユーザーガイド

ID 683130
日付 9/21/2020
Public
ドキュメント目次
1. 概要 2. Avalon® -ST Multi-Channel Shared Memory FIFOコア 3. Avalon® -STシングルクロックFIFOコアおよびデュアルクロックFIFOコア 4. Avalon® -STシリアル・ペリフェラル・インターフェイス・コア 5. SPIコア 6. SPI Slave to Avalon® Master Bridgeコア/JTAG to Avalon® Master Bridgeコア 7. インテル eSPIスレーブコア 8. eSPI to LPCブリッジコア 9. イーサネットMDIOコア 10. インテルFPGA 16550互換UARTコア 11. UARTコア 12. JTAG UARTコア 13. インテル FPGA Avalon® Mailboxコア 14. インテル FPGA Avalon® ミューテックス・コア 15. インテル FPGA Avalon® I2C (Master) コア 16. インテル FPGA I2C Slave to Avalon® -MM Master Bridgeコア 17. インテルFPGA Avalon® コンパクト・フラッシュ・コア 18. EPCS/EPCQAシリアル・フラッシュ・コントローラー・コア 19. インテルFPGAシリアル・フラッシュ・コントローラー・コア 20. インテルFPGAシリアル・フラッシュ・コントローラーIIコア 21. インテルFPGA汎用クアッドSPIコントローラー・コア 22. インテルFPGA汎用クアッドSPIコントローラーIIコア 23. インターバル・タイマー・コア 24. インテルFPGA Avalon FIFOメモリーコア 25. オンチップメモリー (RAMおよびROM) コア 26. Optrex 16207 LCDコントローラー・コア 27. PIOコア 28. PLLコア 29. DMAコントローラー・コア 30. Modular Scatter-Gather DMAコア 31. Scatter-Gather DMAコントローラー・コア 32. SDRAMコントローラー・コア 33. トライステートSDRAMコア 34. Video Sync GeneratorコアとPixel Converterコア 35. インテル FPGA Interrupt Latency Counterコア 36. パフォーマンス・カウンター・ユニット・コア 37. ベクトル割り込みコントローラー・コア 38. Avalon® -STデータ・パターン・ジェネレーター・コアとデータ・パターン・チェッカー・コア 39. Avalon® -STテスト・パターン・ジェネレーター・コアとテスト・パターン・チェッカー・コア 40. システムIDペリフェラル・コア 41. Avalon® Packets to Transactions Converterコア 42. Avalon® -STマルチプレクサー・コアとデマルチプレクサー・コア 43. Avalon® -ST Bytes to Packets ConverterコアとPackets to Bytes Converterコア 44. Avalon® -ST Delayコア 45. Avalon® -STラウンド・ロビン・スケジューラー・コア 46. Avalon® -ST Splitterコア 47. Avalon® -MM DDR Memory Half Rate Bridgeコア 48. インテル FPGA GMII to RGMIIコンバーター・コア 49. インテル FPGA MII to RMIIコンバーター・コア 50. インテルFPGA HPS GMII to TSE 1000BASE-X/SGMII PCSブリッジコア 51. インテル FPGA HPS EMAC to Multi-rate PHY GMIIアダプターコア 52. インテル FPGA MSI to GICジェネレーター・コア

36.5.2. パフォーマンス・カウンターの使用

Nios® IIシステムでは、パフォーマンス・カウンター・コアを一連の高効率Cマクロで制御し、結果をC関数で抽出することができます。

ハードウェア定数

APIの概要

パフォーマンス・カウンター・コア向けの Nios® II API (アプリケーション・プログラム・インターフェイス) は、関数、マクロ、および定数で構成されています。

表 366.  パフォーマンス・カウンターのマクロおよび関数
名称 概要
PERF_RESET() すべてのカウンターを停止および無効にし、0にリセットします。
PERF_START_MEASURING() グローバルカウンターを開始し、セクションカウンターを有効にします。
PERF_STOP_MEASURING() グローバルカウンターを停止し、セクションカウンターを無効にします。
PERF_BEGIN() コードセクションの計測を開始します。
PERF_END() コードセクションの計測を停止します。
perf_print_formatted_report() プロファイリング結果のフォーマット化された要約をstdoutに送信します。
perf_get_total_time() グローバル・プロファイリング時間の合計をクロックサイクル数で返します。
perf_get_section_time() 1つのセクションの合計時間をクロックサイクル数で返します。
perf_get_num_starts() カウンターのイベント数を返します。
alt_get_cpu_freq() CPU周波数をHzで返します。

各マクロと関数についての完全な説明は、パフォーマンス・カウンターのAPIのセクションを参照してください。

パフォーマンス・カウンターのハードウェア・パラメーターは、system.hで定義されている定数から取得することができます。定数名は、プラットフォーム・デザイナーSystem Contentsタブで指定されるパフォーマンス・カウンターのインスタンス名に基づいています。

表 367.  パフォーマンス・カウンターの定数
名称 (1) 意味
PERFORMANCE_COUNTER_BASE コアのベースアドレス
PERFORMANCE_COUNTER_SPAN ハードウェア・レジスター数
PERFORMANCE_COUNTER_HOW_MANY_SECTIONS セクションカウンター数
注意
  1. この例は、インスタンス名performance_counterに基づいています。

起動

パフォーマンス・カウンター・コアを使用する前に、PERF_RESETを呼び出し、すべてのカウンターを停止して無効にし、0にします。

グローバルカウンターの使用法

グローバルカウンターを使用して、パフォーマンス・カウンター・コア全体を有効または無効にします。例えば、ソフトウェアが初期化を完了するまでプロファイリングを無効にしておくことを選択することができます。

セクションカウンターの使用法

コード内のセクションを測定するには、そのセクションをマクロのPERF_BEGIN() およびPERF_END() で囲みます。これらのマクロは、パフォーマンス・カウンター・コアへの単一の書き込みで構成されます。

コードのセクションの測定は、プラットフォーム・デザイナーで指定されている数まで必要に応じて同時に行うことができます。詳細は、カウンターの定義のセクションを参照してください。カウンターは、個別に、またはグループとして開始および停止できます。

通常、プロファイリングするコードの各セクションに1つのカウンターを割り当てます。ただし、状況によっては、コードの複数のセクションを1つのセクションカウンターにグループ化することが必要になる場合があります。例えば、全体的な割り込みオーバーヘッドを測定する際に、すべての割り込みサービスルーチン (ISR) を1つのカウンターで測定することができます。

混乱を避けるため、各セクション番号にニーモニック記号を割り当てます。

カウンター値の表示

ライブラリー・ルーチンを使用すると、結果を取得し解析することができます。perf_print_formatted_report() を使用し、stdoutに結果を一覧表示します。次に例を示します。

表 368.  例1

perf_print_formatted_report(
     (void *)PERFORMANCE_COUNTER_BASE, // Peripheral's HW base address
     alt_get_cpu_freq(),               // defined in "system.h"
     3,                                // How many sections to print
     "1st checksum_test",              // Display-names of sections
     "pc_overhead",

 "ts_overhead");

次の例では、このような表が作成されます。

表 369.  例2

--Performance Counter Report--

Total Time: 2.07711 seconds (103855534 clock-cycles)

+-----------------+--------+-----------+---------------+-----------+

| Section         |    %   | Time (sec)| Time (clocks) |Occurrences|

+-----------------+--------+-----------+---------------+-----------+

|1st checksum_test|     50 |   1.03800 |      51899750 |         1 |

+-----------------+--------+-----------+---------------+-----------+

| pc_overhead     |1.73e-05|   0.00000 |            18 |         1 |

+-----------------+--------+-----------+---------------+-----------+

| ts_overhead     |4.24e-05|   0.00000 |            44 |         1 |

+-----------------+--------+-----------+---------------+-----------+

perf_print_formatted_report() の完全な説明については、パフォーマンスとカウンターのAPIを参照してください。