我有2个接口:
interface IAvsBus(input bit clk);
bit [15:0] wraddr, rdaddr;
bit [31:0] wrdata;
logic [31:0] rddata;
bit write, read;
endinterface
interface ISpi();
logic sclk, csn, mosi, miso;
endinterface
带有接口的2个类:
class AvsBus;
virtual IAvsBus bus;
function new(virtual IAvsBus bus);
this.bus = bus;
endfunction
task automatic Write(int unsigned addr, int unsigned data);
...
endtask
task automatic Read(int unsigned addr, output int unsigned data);
...
endtask
endclass :AvsBus
class SpiBus;
virtual ISpi spi;
function new(virtual ISpi spi);
this.spi = spi;
this.spi.sclk = 0;
this.spi.csn = 1;
this.spi.mosi = 1;
endfunction
task WriteSingle(input shortint addr, input int data, output bit result);
...
endtask
task ReadSingle(shortint unsigned addr, output int unsigned read_data, output bit result);
...
endtask
endclass :SpiBus
在testbench中使用其中一个的公共类:
class Task;
...
task Write(ref AvsBus bus);
...
endtask
task SpiWrite(ref SpiBus spi);
...
endtask
endclass :Task
如果我从公共类中注释掉未使用的类和未使用的任务,那么所有工作。如果两者都存在则不起作用。 ModelSim抛出一个错误,例如:
虚拟接口解析无法找到虚拟IAvsBus'
的匹配实例
答案 0 :(得分:0)
这是旧版Questa / Modelsim的问题。编译器仍然需要为使用虚拟接口变量的任务生成代码,并且无法知道它们永远不会被调用。通常选择是在运行时如何设置+ UVM_TESTNAME。这是一个问题,尤其是在参数化接口时。