在uvm 中可以利用factory机制的重载作用改变某些component的特性, 而不用去修改testbench。比如说:
你写了2个driver的class, 但是uvm环境中只需要用到一个,如果这两个driver都是用factory注册,那么就可以用override的方式替换当前uvm环境中的driver。
使用override有两点需要注意: 一、注册component时候使用uvm_component_utils
, 并且在创建instance的时候使用::type_id::creat()
, 而不是使用new()
下面举一个例子加以说明:
1 | Components: |
- 定义一个data packet的base class, 然后在派生出一个子类:
1 | //------------------ eth_packet----------------------------------- |
- 创建一个driver的base class, 然后派生出两个子类:eth_driver和spi_driver:
1 | //------------------ base_driver----------------------------------- |
- 定义几个sequence:
1 | //----------------- base_sequence----------------------------------- |
- 如下所示创建2个 agent
1 | //----------------- my_agent ------------------------------------------- |
- my_agent包含base_driver, my_agent_v2包含eth_driver, 那么env如下:
1 | class my_env extends uvm_env ; |
整个uvm环境如下图所示:
- 创建test case如下:
1 | class feature_test extends base_test; |
定义PKT_OVERRIDE
, DRV_STYLE3
, SEQ_INST
, 那么运行结果为:
1 | ---------------------------------------------------------------- |