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

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

如果我們在調用randomize時候,給randomize函數中添加一些參數,來指定隨機化哪些變量。這時只有寫進參數列表中的變量會被隨機化,其他變量 都會被當做狀態不會被隨機化。其它變量即便有rand修飾符依然 

此不行。所有約束依然有效, 只有使用constraint 關掉之後才失效。

同時,randomize()函數 中的參數不管 有沒有被rand修飾都會被隨機化。

class Rising;
    byte low;        //未被隨機約束變量
    rand byte med, hi;    //隨機化的變量,8位有符號值
    constraint up
        {    low < med; med < hi;}
endclass

initial begin
    Rising r;
    r = new();
    r.randomize();        //    隨機化hi,但是不改變low
    r.randomize(med);     //    只隨機化med
    r.randomize(low);     //    只隨機化low
end

上述代碼中,例化了r之後,先調用r.randomize(low),那麼low,med和hi的組合值可能是下面哪一組?

(A)low = -1,med=0, hi=0
(B)low = -1,med=1, hi=2
(C)low = 報錯,med=0, hi=0
(D)low = 報錯,med=null, hi=報錯

此時 只隨機low,而med和hi不被隨機。 C

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章