在谷歌搜索时,我在systemverilog中遇到了abstract class。
但是我不确定为什么我们需要在systemverilog中使用抽象类。
所以,请您帮我了解系统Verilog中的抽象类吗?我们为什么需要它,何时需要它。
答案 0 :(得分:0)
一个抽象类被设计为可扩展且无法实例化。除了提供可重用或覆盖的现有功能之外,抽象类对于定义扩展类的约定(即扩展类必须实现特定功能)很有用。纯虚函数在抽象类中未实现,但必须在扩展类中(形成合同)实现。
示例:
virtual class animal;
// Implemented functionality that can be overridden in extended classes or used as-is
virtual function int get_legs();
return 4;
endfunction
// Functions that must be implemented by extended classes
pure virtual function string get_sound();
pure virtual function string get_name();
endclass
class cat extends animal;
virtual function string get_sound();
return "meow";
endfunction
virtual function string get_name();
return "Mog";
endfunction
endclass
class dog extends animal;
virtual function string get_sound();
return "woof";
endfunction
virtual function string get_name();
return "Rover";
endfunction
endclass
class duck extends animal;
// override default functionality
virtual function int get_legs();
return 2;
endfunction
virtual function string get_sound();
return "quack";
endfunction
virtual function string get_name();
return "Feathers";
endfunction
endclass
module my_module;
initial begin
animal animals[$];
cat c;
dog d;
duck du;
c = new();
d = new();
du = new();
animals.push_back(c);
animals.push_back(d);
animals.push_back(du);
foreach(animals[a])
begin
$display("%s has %0d legs and makes the sound %s",
animals[a].get_name(), animals[a].get_legs(), animals[a].get_sound());
end
end
endmodule
如果使用的是UVM,则uvm_subscriber是抽象类的SystemVerilog示例(必须在扩展类中实现写函数)。