为什么课程需要实例,但我不使用它?

时间:2018-01-21 06:02:13

标签: class system-verilog

我有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'

的匹配实例

1 个答案:

答案 0 :(得分:0)

这是旧版Questa / Modelsim的问题。编译器仍然需要为使用虚拟接口变量的任务生成代码,并且无法知道它们永远不会被调用。通常选择是在运行时如何设置+ UVM_TESTNAME。这是一个问题,尤其是在参数化接口时。