在sv中,養成使用巨集的習慣可以大大提高code 的可閱讀性,讓我們從簡單重複的工作中脫離出來,聚焦技術方法本身或者硬體的理解上,可以有效的提高我們的驗證效率。在我們驗證的過程或多或少的會遇到在tb/test中使用巨集的方法,當然我們是看的懂的,但是我們一定要思考這個tb、test為什麼要這麼寫,有什麼好處,如果讓我們自己開搭建的話,我們會思考使用這種方法嗎,而不能僅僅停留在看的懂,會用的level,畢竟這個是可以成為我們的核心技能的。下面我們給個實際的工程例子
class base_test extends uvm_test;
............
............
............
function new(string name,uvm_component parent);
super.new(name,parent);
endfunction
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
endfunction
task run_phase(uvm_phase phase);
endtask
endclass
`define add_my_test(clssname.seqname) \
class classname extends base_test; \
`uvm_component_utils(classname) \
\function new(string name=`"classname`",uvm_component parent); \
super.new(name,parent); \
endfunction \
task run_phase(uvm_phase phase); \
seqname seq; \
seq=seqname::type_id::create("seq"); \
seq.start(sequencer); \
endtask \
endclass
` add_my_test(test1,seq1)
` add_my_test(test2,seq2)
上述就是在tb、test中使用`define 巨集的大概方法,有關巨集的具體語法這裡不做說明,資料很多。其實巨集的使用不僅僅在tb、test中有非常顯著的有點,在assert,coverpoint,covergroup等中都有使用
其實在uvm src code中大量的使用了巨集的方法,看的時候可以注意思考並總結一下。
總結:在寫tb或者test的使用,盡量要避免簡單重複的勞動,讓我們寫的**賞心悅目,精煉,這個需要我們不斷的總結以及思考,現在的驗證愈來愈軟體化,一定要注意**規範,這裡大家可以去學習計算機軟體中有關編碼規範的知識。
精髓就是相似,重複的都可以使用巨集來定義。
SV 巨集定義(macro)引發的災難
在開發中,用巨集定義可以帶來很多方便,但是使用不當,也會帶來災難,並且不容易debug出來,如下圖所示的程式碼 define switch 64 128 bit 0 define svt axi max data widtn d64 switch 64 128 bit d64 int lane nu...
SV 使用斷言(Assertion)的優點
朋友們,這次我決定寫關於斷言的文章。我個人認為斷言是非常方便和非常有用的資產,當我們談 能驗證時,即在給定的rtl設計中發現缺陷 確保驗證完整性。它是一種令人驚嘆的驗證技術,用較少的 提供了如此多的好處。如果你閱讀了我之前關於斷言的文章 關於斷言的基礎知識 我們在這裡討論了乙個斷言示例,並與相應的v...
SV中的隨機化
sv搭建testbench的關鍵概念 crt constraint random test 測試集的隨機化。由於物件class由資料和操作組成,所以對資料的隨機化一般放在乙個class內。對環境或環境的配置也可以反映在配置引數的隨機化上 乙個constraint包括兩部分 rand randc變數宣...