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

ID 683819
日付 7/08/2024
Public
ドキュメント目次

7.5.5. モニターサービスの使用

モニターサービスはホストサービス上に構築され、 Avalon® メモリーマップド・インターフェイス・エージェントの定期的なインターバルでの読み出しを可能にします。このサービスは、完全にソフトウェア・ベースです。 モニターサービスに追加のソフトロジックは必要ありません。このサービスでは、インターバル読み出しを実行するロジックが効率化され、読み出しにホストサービスを手動で実行するよりも優れたパフォーマンスが得られます。

モニターサービス

  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

    With the first host, read 100 bytes starting at address 0x2000 every 100 milliseconds.

  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を使用します。