1.可变时钟有3种:

1)不同case 时钟不同。

2)同一case 不关心过渡期clk。

3)关心过渡期clk。


2.第一种,使用config_db:

UVM:10.1.2 可变时钟_测试用例


top_tb 使用get:

UVM:10.1.2 可变时钟_测试用例_02

1)my_case0 就是uvm_test_top。

2)使用非直线获取。my_case0的set 是设置给自己的参数,真正使用是在top_tb。

3)由于set 在0 时刻执行,如果get 也在0时刻,可能无法得到设置的数值,所以#1。


3.第二种:

UVM:10.1.2 可变时钟_测试用例_03

测试用例随着时间不同:

UVM:10.1.2 可变时钟_测试用例_04


4.上面很难实现第三种。需要专门编写时钟接口:

UVM:10.1.2 可变时钟_测试用例_05

top_tb 中例化并引用:

UVM:10.1.2 可变时钟_测试用例_06

为可变时钟从uvm_component 派生一个类:

UVM:10.1.2 可变时钟_测试用例_07

env例化:

UVM:10.1.2 可变时钟_测试用例_08

需要新的时钟模型时,从clk_model 派生新类,然后在新的类中实现时钟模型。然后把clk_model 重载掉。

怎么解决第三个问题?