Intel® Quartus® Prime Pro Edition用户指南: 调试工具

ID 683819
日期 9/30/2019
Public
文档目录

7.8.5. 监控服务(Monitor Service)

监控器服务建立在master服务之上,以支持定期读取 Avalon® -MM slave。此服务是完全基于软件的。 监控服务不需要额外的软逻辑。此服务简化了进行间隔读取的逻辑,并且与手动执行master服务相比,此服务提供了更好的性能。

监控服务(Monitor Service)

  1. 确定要轮询的master和存储器地址范围:
    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

    使用第一个master,从地址0x2000开始,每100毫秒读取100个字节。

  2. 打开监控服务:
    set monitor [lindex [get_service_paths monitor] 0]
    set claimed_monitor [claim_service monitor $monitor mylib]

    监控服务自动打开master服务。

  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
    }
    注: 如果此程序使用的时间超过间隔时间,那么监控服务可能要跳过对此程序的下一个调用或多个调用。在这种情况下,monitor_read_data返回最新的轮询数据。
  6. 使用打开的监控服务寄存此回调:Register this callback with the opened monitor service:
    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对此进行验证。要关闭监控,在以上命令中使用0,而不是1。