SystemVerilog 2012 : unique constraint
Bringing in uniqueness constraint to SystemVerilog ? welcome P1800-2012 より、SystemVerilog 2012では constraintにも uniqueが設定出来るようになるみたいです。
これは便利かも!
unique とは?
case文を記述例としてあげています。
unique/priorityについては後日書きます。
- サンプルコード
module testbench; logic [2:0] data; initial begin for(int i=0; i<8; i++) begin #10 data = i; end #10; $finish(1); end always_comb begin unique case(data) 0 : $display("data = 0"); 1 : $display("data = 1"); 2 : $display("data = 2"); 3 : $display("data = 3"); 3,4 : $display("data = 3 or 4"); // ①値 3が重複 5 : $display("data = 5"); 6 : $display("data = 6"); 7 : $display("data = 7"); // default: $display("none"); // ②全条件が記載されていない。 endcase end endmodule: testbench
- 実行結果
# vsim -L work -do {run -all; quit} -c testbench # Loading sv_std.std # Loading work.testbench # run -all # ** Warning: (vsim-8315) sample.sv(14): No condition is true in the unique/priority if/case statement. # data = 0 # data = 1 # data = 2 # ** Warning: (vsim-8360) sample.sv(14): The if/case statement is not unique. # data = 3 # data = 3 or 4 # data = 5 # data = 6 # data = 7 # ** Note: $finish : sample.sv(10)
このように、
① 条件が重複していないこと ② すべての条件が記述されている
をチェックしてくれます。