基于SystemVerilog和基于verilog的驗(yàn)證平臺(tái)有什么不同
SystemVerilog是對(duì)于Verilog的擴(kuò)展,但是這種擴(kuò)展幾乎是一個(gè)新語(yǔ)言的誕生,因?yàn)镾ystemVerilog增加了對(duì)于面向?qū)ο蠹夹g(shù)(Object Orientated
Programming,OOP)的支持從而更加適合于EDA仿真驗(yàn)證。
SystemVerilog語(yǔ)言增強(qiáng)的關(guān)鍵就是class,基于class構(gòu)建測(cè)試平臺(tái)更符合當(dāng)今驗(yàn)證環(huán)境越來(lái)越復(fù)雜的現(xiàn)狀。
目前工業(yè)界最通用的UVM就是提供了一些用于創(chuàng)建通用測(cè)試平臺(tái)的SystemVerilog基類庫(kù),這個(gè)基類庫(kù)可以在任何支持IEEE 1800標(biāo)準(zhǔn)的仿真器上運(yùn)行。
class是所需要?jiǎng)?chuàng)建對(duì)象的模板,只有在實(shí)際創(chuàng)建對(duì)象的時(shí)候才會(huì)占用內(nèi)存,當(dāng)該對(duì)象不被使用后就會(huì)自動(dòng)被后臺(tái)進(jìn)程回收內(nèi)存。class中定義了成員變量和方法,這個(gè)方法可以是不消耗時(shí)間的function,也可以是消耗時(shí)間的task。
在創(chuàng)建類對(duì)象之前,這個(gè)類的定義必須要已經(jīng)存在于內(nèi)存當(dāng)中,因此在SystemVerilog測(cè)試平臺(tái)中需要在module中定義不同驗(yàn)證組件類,因?yàn)閙odule中存在的都是靜態(tài)對(duì)象,其在仿真過(guò)程中會(huì)一直存在。同理,一個(gè)class定義中不能包含一個(gè)module。因?yàn)閏lass是動(dòng)態(tài)對(duì)象,會(huì)在仿真過(guò)程中被回收。?下面是一個(gè)如何在靜態(tài)module中創(chuàng)建對(duì)象和回收對(duì)象的示例:
一個(gè)包含數(shù)據(jù)message和相應(yīng)的函數(shù)的class:
class example;
string message;
function void set_message(string ip_string);
message = ip_string;
endfunction: set_message
function void print();
$display("%s", message);
endfunction: print
endclass: example
在module中仿真開始創(chuàng)建對(duì)象和釋放對(duì)象內(nèi)存:module tb;
example C; // Null handle after elaboration
initial begin
C = new(); // Handle points to C object in memory
C.set_message("This object has been created");
#10;
C.print();
C = null; // C has been dereferenced, object can be garbage collected
end
endmodule: tb