• Techo

[IC驗證] 如何在UVM上實現 polymorphic interfaces, parameterized interface with interface proxy 範例程式

更新日期:6月 6

如何在 systemverilog interface中加入多形(polynorphic)

How to use polymorphic on interface (systemverilog)

如何使用interface代理來傳遞遇有參數的interface

How to passing parameterized interfaces by interface proxy

如何使用固定的 uvm_driver 實現多種 interface

How to use a template uvm_driver with different interface

我訂下許多關鍵字就是為了讓大家可以更容易找到這間文章

因為我當時要找相關資料實在太難找了


而方法就是在 interface 中定義一個繼承許多抽象方法的class

透過在上層中傳遞class instance的方式可以將具有參數的interface傳遞至uvm_driver底層

因此可以只使用單一 uvm_driver 模板來實現 interface多形的設計

在下面的程式碼將會更詳細說明


abstrat_c.sv

abstract class

先定義一個抽象類別具有多個 virtual function 作為存取訊號用到的 funciton

我們必須要定義這個 class 要不然 uvm_driver 會因為 scope 問題無法使用 function

test_if.sv

polymorphic interface

在 interface 中定義一個class extend abstract_c

並創造其實體 inst 以及一個 funtion get_inst

目的是為了讓我們在外界可以透過這個funciton得到物件

藉由得到的物件來使用多形


top.sv

uvm top module

我們在上頭說的傳遞class就是在這裡

uvm_config_db#(uvm_object)::set(......., intf.get_inst);

我們使用 base datatype uvm_object 來當作 config_db 的型態

將 interface 中的 class放到了對應driver database

請注意這三個driver都是同一種

但是卻傳了三個不同(parameter)的interface給他們


test_driver.sv

uvm_driver

這裡需要注意我們創了一個 abstract_c api

將class instance 從 config 拿到後透過 downcast 得到了使用 virtual funciton 的權力

藉由在 run_phase 呼叫 virtual funciton 即可存取(不同的) inteface 的能力

透過 class method 來存取 interface 的設計即為 class proxy



以下附上(對熟練UVM的人)剩下不重要的程式碼

這三個放在同一個檔案 test.sv


uvm_agent

uvm_env

uvm_test

abs_pkg.sv 自己key

寄信跟我要source code一律不回


#polynorphic #systemverilog #interface #class_proxy #parameterized_interfaces

252 次瀏覽
Logo2020.JPG
  • Instagram - White Circle
  • Google+ - White Circle
  • Facebook - White Circle

Contact Us

Techo私人程式家教

官方LINE ID : @tutortecho

zh-Hant.png

© Copyright 2018 by Sherry Wu and Techo Chao.

Proudly created with Wix.com,

but page loading is too slow,so I don't recommend it.