Constraint是用來限制Random產生出來的值,有很多Constraint的用法,以下是constraint的基本語法
語法
constraint [name_of_constraint] { [expression 1];
[expression N]; }
這邊用幾個例子簡單練習
Example:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class rand_cls; rand bit[2:0] rand_val;
constraint c_rand_val;
function display_val(); $display("rand_val:%0d", rand_val); return 0; endfunction endclass
constraint rand_cls::c_rand_val { rand_val <= 3; }
module tb; rand_cls rand_pkg;
initial begin rand_pkg = new(); for (int i = 0; i < 10; i++) begin rand_pkg.randomize(); rand_pkg.display_val(); end end endmodule
|
這個例子的constraint名字是c_rand_val,用來限制rand_val的random結果小於等於三,然後有刻意使用External Constraint作為例子,所以是在class先宣告Constraint的名字,然後在Class外面描述這個Constraint的條件,所以這個例子random出來的結果都小於等於三,結果如下。
Output
1 2 3 4 5 6 7 8 9 10
| # KERNEL: rand_val:3 # KERNEL: rand_val:2 # KERNEL: rand_val:1 # KERNEL: rand_val:2 # KERNEL: rand_val:3 # KERNEL: rand_val:2 # KERNEL: rand_val:1 # KERNEL: rand_val:0 # KERNEL: rand_val:3 # KERNEL: rand_val:0
|