原创 Systemverilog(綠皮書)第三章——過程塊和方法

在做設計驗證機需要寫很多的代碼,其中大部分在任務和函數中使用。systemverilog在這方面增加了很多改進,使其更加接近C語言,從而使代碼的編寫變得更加容易,尤其是在處理參數的傳遞上。 在Systemverilog中,過程塊和其方法通

原创 Systemverilog(綠皮書)第八章——OOP進階(一)類型轉換

class Transaction; //父類 rand bit [31:0] src; function void display(input string prefix = ""); //成

原创 Systemverilog(綠皮書)第九章——功能覆蓋率(四)覆蓋選項

covergroup CoverLength; coverpoint tr.length; option.per_intance = 1; //單獨計算每個實例覆蓋率 endgroup 註釋 如果有多個cover

原创 Systemverilog(綠皮書)第九章——功能覆蓋率(三)數據採樣

covergroup CovPort; options.auto_bin_max = 8; //所有的coverpoint auto_bin數量是8 coverpoint tr.port {

原创 Systemverilog(綠皮書)第九章——功能覆蓋率(二)覆蓋組

//在類中定義covergroup class Transactor; Transaction tr; mailbox mbx_in; covergroup CovPort; c

原创 Systemverilog(綠皮書)第七章——線程及其通信(三)線程通信

event e1,e2; initial begin $display("@%0t: 1:before trigger", $time); -> e1; @e2;

原创 Systemverilog(綠皮書)第六章——隨機化(五)隨機控制

隨機序列 (1)產生隨機事務序列的另一種方法就是使用SV的 randsequence結構。這對於隨機安排組織原子(atomic)測試序列很有幫助。 initial begin for (int i=0; i<15; i++) b

原创 Systemverilog(綠皮書)第六章——隨機化(四)數組的約束

在約束隨機標量 的同時,我們還可以對隨機化的數組進行約束 class dyn_size; rand logic [31:0] d[]; //隨機化d[]數組; constraint d_size (

原创 Systemverilog(綠皮書)第六章——隨機化(三)隨機函數

我們更希望把隨機變量用rand和randc修飾,之後把它們封裝到 一個類裏面。類是 一些變量的自洽體,可以把一些相關的變量放到這個軟件的變量盒子中,變量 與變量之間的約束關係也可以放到類中。 如果我們在調用randomize時候,給ra

原创 Systemverilog(綠皮書)第七章——線程及其通信(二)線程控制

initial begin $display("@%0t: start fork ... join example", $time); #10 $display("@$0t: sequential after #10"

原创 Systemverilog(綠皮書)第五章——類與對象(四)句柄的使用

由於句柄可以作爲函數的參數進行傳遞,此時就涉及 一個問題, 函數參數方向的問題。若不給函數形式參數指明方向可能會出現報錯。 function void create Transaction (tr); tr = new();

原创 Systemverilog(綠皮書)第五章——類與對象(三)類的繼承

在OOP中我們通過繼承的方式給子類賦值或者增加新的功能: class cat; protected color_t color; local bit is_good; function set_good(bit