关于virtual interface

来源:互联网 发布:海信电视mac是什么 编辑:程序博客网 时间:2024/06/05 08:32

关于VIF
张强书中如是将:

那么如何在driver中使用interface呢?一种想法是在driver中声明如下语句,然后再通过赋值的形式将top_tb中的input_if传递给它:代码清单 2-14class my_driver extends uvm_driver;  my_if  drv_if;  …endclass读者可以试一下,这样的使用方式是会报语法错误的,因为my_driver是一个类,在类中不能使用上述方式声明一个interface,只有在类似top_tb这样的模块(module)中才可以。在类中使用的是virtual interface:代码清单 2-15文件:src/ch2/section2.2/2.2.4/my_driver.sv  3 class my_driver extends uvm_driver;  4  5   virtual my_if vif;在声明了vif后,就可以在main_phase中使用如下方式驱动其中的信号:代码清单 2-16文件:src/ch2/section2.2/2.2.4/my_driver.sv 23 task my_driver::main_phase(uvm_phase phase); 24    phase.raise_objection(this); 25    `uvm_info("my_driver", "main_phase is called", UVM_LOW); 26    vif.data <= 8'b0; 27    vif.valid <= 1'b0; 28    while(!vif.rst_n) 29       @(posedge vif.clk); 30    for(int i = 0; i < 256; i++)begin 31       @(posedge vif.clk); 32       vif.data <= $urandom_range(0, 255); 33       vif.valid <= 1'b1; 34       `uvm_info("my_driver", "data is drived", UVM_LOW); 35    end 36    @(posedge vif.clk); 37    vif.valid <= 1'b0; 38    phase.drop_objection(this); 39 endtask

从这段表述中只看出了,这是为了在类中使用IF,才使用VIF ,似乎类中无法直接调用硬件内容。
从绿皮书P284也有类似叙述,那么VIF 的作用只是为了在类中调用IF,才定义为virtual形吗?
我也还不知道啊
大约 也还有为了重复使用的目的吧