Виртуальный интерфейс между монитором/водителем и их BFM ??? Что они собой представляют, может кто-нибудь объяснить?

Я читал кулинарную книгу UVM и запутался в виртуальном интерфейсе между монитором, драйвером и их BFM. Означает ли это, что может быть несколько драйверов или мониторов, или это не зависит от интерфейса, который не знает ни своего монитора, ни драйвера. Кто-нибудь может помочь?


person shailesh tripathi    schedule 17.07.2018    source источник


Ответы (2)


Ключевое слово virtual повторно используется несколько раз в SystemVerilog. Интерфейс является виртуальным в том смысле, что его иерархический путь задается во время выполнения путем передачи его через переменную. Все остальные соединения в Verilog/SystemVerilog являются фиксированными путями.

Это действительно позволяет вам иметь несколько экземпляров одного и того же кода драйвера, подключаемых к нескольким экземплярам интерфейса. Это также помогает в повторном использовании блоков в системе, поэтому вы можете изменить иерархический путь по мере того, как интерфейс углубляется на уровень вашей системы.

person dave_59    schedule 17.07.2018
comment
Спасибо, Дэйв, это действительно полезно. Можете объяснить на примере? - person shailesh tripathi; 17.07.2018

Verilog создавался не как язык программирования, более того, он не подходил для объектно-ориентированного программирования. С другой стороны, язык испытательного стенда System Verilog создавался как объектно-ориентированный язык программирования.

Одна из проблем заключается в том, чтобы семантически связать HDL verilog с TB. Все объекты Verilog HDL/RTL компилируются статически и не могут управляться динамически (что необходимо в TB). Вы не можете получить указатели на модули, переменные и т. д. (ну, кроме как через какой-то черный механизм PLI).

Итак, System Verilog придумал конструкцию interface, которая была задумана как объект подключения в мире RTL. Он похож на module в том смысле, что это статический объект времени компиляции. Но SV также добавил трюк, который позволяет вам иметь ссылку на interface. Трюк называется virtual interface.

С точки зрения программиста вы можете думать об этом как о ссылке или указателе на объект статического интерфейса. Это дает вам возможность передать эту ссылку другому классу TB или создать несколько ссылок на один и тот же интерфейс.

Вот схематический пример:

class Transaction;
   virtual dut_if trans; // <<< virtual interface
   function new(virtual dut_if t);
      trans = t; // <<<< assign it to trans
   endfunction // new
endclass // Transaction

// definition of the interface
interface  dut_if import trans_pkg::*;
    (input trans_t trans);
endinterface

// instantiate the interface in module 'rtl'
bind rtl dut_if dut_if(data);

program tb;
   // pass it to the constructor as a virtual interface pointer.
   Transaction trans1 = new (rtl.dut_if);
   Transaction trans2 = new (rtl.dut_if);
endprogram // tb
person Serge    schedule 18.07.2018
comment
Спасибо за пример и объяснение. - person shailesh tripathi; 20.07.2018