インテル® Quartus® Primeプロ・エディション・ユーザーガイド: デバッグツール

ID 683819
日付 9/30/2019
Public
ドキュメント目次

7.8.5. モニターサービス

モニターサービスは、マスターサービスの上に構築され、Avalon-MMスレーブの読み出しが通常のインターバルで可能です。このサービスは、完全にソフトウェアベースです。 モニターサービスでは追加のソフトロジックは不要です。このサービスでは、インターバル読み出しを実行するロジックが効率化され、読み出しにマスターサービスを手動で実行するよりも優れたパフォーマンスが得られます。

モニターサービス

  1. ポーリングするマスターとメモリーのアドレス範囲を決定します。
    set master_index  0
    set master [lindex [get_service_paths master] $master_index]
    set address  0x2000
    set bytes_to_read 100
    set read_interval_ms 100

    最初のマスターで100バイトを読み出します。最初はアドレス0x2000からで、ミリ秒毎に行います。

  2. モニターサービスを開きます。
    set monitor [lindex [get_service_paths monitor] 0]
    set claimed_monitor [claim_service monitor $monitor mylib]

    モニターサービスによってマスターサービスが自動的に開きます。

  3. モニターサービスを使用して、アドレスの範囲とタイム・インターバルを登録します。
    monitor_add_range $claimed_monitor $master $address $bytes_to_read
    monitor_set_interval $claimed_monitor $read_interval_ms
  4. 範囲をさらに追加し、各インターバルでの結果を定義します。
    global monitor_data_buffer
    set monitor_data_buffer [list]
  5. データを収集し、そのデータにグローバル変数を追加します。
    proc store_data {monitor master address bytes_to_read} {
      global monitor_data_buffer
    # monitor_read_data returns the range of data polled from the running design as a list
    #(in this example, a 100-element list).
      set data [monitor_read_data $claimed_monitor $master $address $bytes_to_read]
    # Append the list as a single element in the monitor_data_buffer global list.
      lappend monitor_data_buffer $data
    }
    注: このプロシージャーにかかる時間がインターバル時間よりも長い場合、モニターサービスでは、場合によってはプロシージャーへの次の1つ以上の呼び出しをスキップする必要があります。この場合、 monitor_read_data では、最後にポーリングされたデータを返します。
  6. このコールバックの登録には、開いているモニターサービスを使用します。
    set callback [list store_data $claimed_monitor $master $address $bytes_to_read]
    monitor_set_callback $claimed_monitor $callback
  7. このコールバック変数を使用した呼び出しの実行は、モニターでインターバルを完了するときです。
    monitor_set_enabled $claimed_monitor 1

    モニターでは、指定された範囲をデバイスから直ちに読み出し、指定されたインターバルでコールバックを呼び出します。この検証には、 monitor_data_buffer の内容を確認します。モニターをオフにするには、上記のコマンドの1の代わりに0を使用します。