UVM入門
本篇文章適合想在家自學UVM的人。
萬事起頭難, 希望這篇文能幫到一些人
參考資料: chip verify 的 UVM tutorial
Q: 學UVM能當DV嗎?
A: DV可能會用到UVM, 但會UVM不一定能當DV
但機會是留給準備好的人, 共勉之
Q: 為什麼要UVM?
A: UVM規範了testbench的程式結構, 是業界通用的標準
Q: 什麼樣的人適合學UVM?
A1: 有用verilog寫的testbench經驗, 然後要會一點物件導向(要會繼承之類的),
建議 verilog -> 一點點物件導向 -> UVM,
任何地方卡住, 就要回過頭來補知識, , 現在問AI很方便
A2: 喜歡coding, 看log
A3: 有修過數位IC相關的課, 會寫verilog
Q: 建議的學習方式?
Step1. 事前準備:
1. 文獻/工具書(chip verify)
2. 一個別人寫好的簡單UVM code 跟能 run UVM 的環境
以下提供我改的(從chip verify UVM hello world改的): 以及Chip verify 原始的:
我的code做了一些檔案分割, 每個檔案大概就是一個學習的chapter/section, 公司應該也是類似我分割的方法
Step2. 看懂一份簡單的 UVM code
吃檔結構:
以我的code來說, top是testbench.sv,
該檔案會吃 include_files.sv跟design.sv, include.sv 會再把所有驗證用的檔案吃進來
UVM結構:
UVM底層有規範好一些特定的UVM component
我們會extend 出來, 並用 uvm_component_utils 來登記
看的順序, top down:
top (testbench.sv) -> test (my_test.svh)-> env (my_env.svh) -> other
遇到不會的東西就先查資料, 最好是知道每行code在幹嘛
ex: phase.raise_objection是什麼? UVM的phase是什麼?
Step3. Run code -> 嘗試自己改一點code -> Run code 看 log -> 改code -> run code
->改code ->and so on
慢慢將初始code加入新的feature(如scoreboard), 改成一個成熟的UVM
(以下是一個別人寫好的AXI 驗證, 可以想一下怎麼從初始code發展成他那樣)

