先说结论一句话:
UVM 的 factory “重载”指的不是 C++/SV 里的函数重载,而是“把本来要 new 的类,换成你指定的另一个类”——而且是“全局换”或“按实例点对点换”。
下面我用通俗一点的方式,把这个机制和用法讲清楚。
1. 先搞清楚:UVM factory 是干嘛的?
正常 SystemVerilog 里你会这么干:
my_driver drv;
drv = new("drv", parent);
这里 new 写死了是 my_driver,以后要改成别的 driver(比如加 coverage、加延时)就得改源码。
UVM 想解决的就是这个问题:不要在代码里写死 new 的具体类,而是通过 “工厂 factory” 去创建对象,这样你可以在 外面 换类,而不用改原始组件的源码。
UVM 里的习惯写法是:
my_driver drv;
drv = my_driver::type_id::create("drv", parent);
关键点:
type_id::create()不是直接new,而是让 factory 来决定到底 new 哪个类。- factory 默认为你创建
my_driver,但是你可以用 override(重载/覆盖) 把它换成别的类。

最低0.47元/天 解锁文章
5306

被折叠的 条评论
为什么被折叠?



