• Techo

[IC驗證] 使用 uvm_do_with 應該要注意的事情

UVM 其中一個強大的特性是各式各樣的 macro

讓你執行 uvm_sequence 或是 uvm_sequence_item 時可以不用每次都用繁瑣的步驟

也就是 create_item > start_item > randomize > finish_item

只要使用 uvm_do(req) 即可完成以上步驟

而 uvm_do_with 是 uvm_do 的延伸

可以讓你使用 macro 的第二個參數來加入你的 constraint

例如 `uvm_do_with(req , { req.addr == adr; req.data == dat; });

但是如果使用錯誤的話會造成一些危險

比如說你寫成: `uvm_do_with(req , { req.addr == addr; req.data == data; });

這樣子的話在 systemverilog iniline constraint searching 會發生預料之外的事

在大括號中的 constraint 將無法 bind sequence 內部的 local variable

此定義在 SystemVerilog standard IEEE-1800-2012 section 18.7

所以當我們想要 constraint 與 req 相同名稱的變數時

我們必須寫成這樣 `uvm_do_with(req , { req.addr == local::addr; req.data == local::data; });

這樣才能把想要 constraint 的數值 bind 到 systemverilog inline constraint


除此之外

如果有機會的話每個學習 UVM 的人都應該去看看 source code 的內容

sequence 相關的程式放在 framework 的以下路徑

$UVM_HOME/src/macros/uvm_sequence_defines.svh

219 次瀏覽
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.