подключение uvm_analysis_export и функция записи

Я изучил два шаблона дизайна написания подписчика:

1) Вывести из uvm_subscriber, переопределить функцию write, которая затем вызывается через встроенный порт анализа

2) вывести из uvm_component, установить uvm_analysis_export и uvm_tlm_analysis_fifo, соединить их и обработать в run_phase

Меня интересует следующее. Если я не получаю от uvm_subscriber, а от uvm_component, устанавливаю uvm_analysis_export и пишу функцию write, которая должна вызываться через uvm_analysis_export по соответствующему порту, как мне подключить uvm_analysis_export к write? Это вообще возможно?


uvm
person Andy    schedule 25.01.2018    source источник


Ответы (1)


Невозможно "подключить uvm_analysis_export к write". Вместо этого вам нужно получить uvm_component, установить uvm_analysis_imp (imp, а не export) и написать функцию write.

imp — это конечная точка; (с шаблоном подписчика) именно он вызывает метод write. export — это путевая точка; его можно подключить только к другому export или imp.

Если мы посмотрим на исходный код класса uvm_subscriber, мы увидим, как это сделать:

virtual class uvm_subscriber #(type T=int) extends uvm_component;

  typedef uvm_subscriber #(T) this_type;

  // Port: analysis_export
  //
  // This export provides access to the write method, which derived subscribers
  // must implement.

  uvm_analysis_imp #(T, this_type) analysis_export;

  // Function: new
  //
  // Creates and initializes an instance of this class using the normal
  // constructor arguments for <uvm_component>: ~name~ is the name of the
  // instance, and ~parent~ is the handle to the hierarchical parent, if any.

  function new (string name, uvm_component parent);
    super.new(name, parent);
    analysis_export = new("analysis_imp", this);
  endfunction

  // Function: write
  //
  // A pure virtual method that must be defined in each subclass. Access
  // to this method by outside components should be done via the
  // analysis_export.

  pure virtual function void write(T t);

endclass

Я не совсем понимаю, зачем вам это нужно, потому что, как видите, вы просто переписываете то, что уже сделано за вас в uvm_subscriber. Я думаю, задав вопрос, вы кое-чему научились, а я освежил некоторые знания, отвечая на него.

person Matthew Taylor    schedule 25.01.2018