SystemVerilog - Constraint

2023-07-24
SystemVerilog

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