У меня есть модуль BFM, предоставленный поставщиком, созданный глубоко в моей иерархии; назовем путь top.dut.u1.u2.bfm1
. API BFM немного архаичен и неудобен для наших нужд. Я хотел бы написать «объект» (класс? интерфейс? что-то еще?), который будет предоставлять задачи с более простым интерфейсом вызова и может вызывать задачи конкретного BFM, с которым он был «связан». Это "связь", которую я не могу понять.
У меня есть простая версия, определенная как модуль, который использует `define для указания пути к BFM, что-то вроде:
`define BFM top.dut.u1.u2.bfm1
module bfm_wrapper;
...
task read_burst(...);
...
`BFM.read_burst(...);
endtask;
...
endmodule
Очевидно, что это не очень многоразовое использование. Как заменить `BFM чем-то более переносимым или абстрагированным на следующий более высокий уровень?
Я относительный новичок в SystemVerilog, и я еще даже не использую UVM, но я рискну, если есть что-то, что поможет. Любая помощь приветствуется.
[Обновление] Несколько ограничений, о которых я не упомянул:
- I can't change or replace the vendor-supplied BFM. I'd prefer to not even wrap it (i.e., instantiate it in my wrapper).
- For reasons that I don't want to go into here, the BFM needs to be instantiated inside the DUT. Changing that would require more effort than I can invest right now.
bind
в этой ситуации. Вы говорите привязатьbfm_wrapper
к области, в которой создается экземпляр BFM? Если да, то что мне поставить вместо`BFM
в приведенном выше (псевдо)коде? - person Jabberwock   schedule 26.02.2016bind
перейти кu2
модулю или пути. В оболочке есть собственная задача read_burst, которая использует ссылку вверх по имени IEEE1800- 2012 §23.8. Сама оболочка может содержать код для связывания вашего вспомогательного кода с классами, виртуальными интерфейсами, uvm_config_db и т. д. - person Greg   schedule 27.02.2016bind
перейду наu2
, я все еще не знаю, как сослаться на BFM. Чтобы оболочку можно было использовать повторно, я не могу предположить, что она называетсяbfm1
. На самом деле я не хочу предполагать, что существует только один BFM (например, еслиu2
содержит две независимые шины). Или вы имели в виду привязку кbfm1
? Я прочитаю ссылки и посмотрю, сработает ли это. - person Jabberwock   schedule 27.02.2016