System verilog 为什么我需要systemverilog中的抽象类?
我在谷歌搜索时,在systemverilog中偶然发现 但我不明白为什么我们需要systemverilog中的抽象类System verilog 为什么我需要systemverilog中的抽象类?,system-verilog,System Verilog,我在谷歌搜索时,在systemverilog中偶然发现 但我不明白为什么我们需要systemverilog中的抽象类 所以你们能帮我理解一下系统verilog中的抽象类吗?为什么我们需要它,什么时候我们需要它。抽象类被设计为可扩展的,不能被实例化。除了提供可重用或重写的现有功能外,抽象类还可用于定义扩展类的契约(即扩展类必须实现特定的功能)。纯虚函数在抽象类中未实现,但必须在扩展类中实现(形成契约) 例如: virtual class animal; // Implemented funct
所以你们能帮我理解一下系统verilog中的抽象类吗?为什么我们需要它,什么时候我们需要它。抽象类被设计为可扩展的,不能被实例化。除了提供可重用或重写的现有功能外,抽象类还可用于定义扩展类的契约(即扩展类必须实现特定的功能)。纯虚函数在抽象类中未实现,但必须在扩展类中实现(形成契约) 例如:
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,则是一个抽象类的SystemVerilog示例(其中写入函数必须在扩展类中实现)