diff --git a/frontends/ast/simplify.cc b/frontends/ast/simplify.cc index 1b8bd9dc2..7486f676e 100644 --- a/frontends/ast/simplify.cc +++ b/frontends/ast/simplify.cc @@ -3487,7 +3487,7 @@ skip_dynamic_range_lvalue_expansion:; goto apply_newNode; } - if (str == "\\$size" || str == "\\$bits" || str == "\\$high" || str == "\\$low" || str == "\\$left" || str == "\\$right") + if (str == "\\$increment" || str == "\\$size" || str == "\\$bits" || str == "\\$high" || str == "\\$low" || str == "\\$left" || str == "\\$right") { int dim = 1; if (str == "\\$bits") { @@ -3556,6 +3556,8 @@ skip_dynamic_range_lvalue_expansion:; result = left; else if (str == "\\$right") result = right; + else if (str == "\\$increment") + result = left >= right ? 1 : -1; else if (str == "\\$size") result = width; else { // str == "\\$bits" diff --git a/tests/sat/sizebits.sv b/tests/sat/sizebits.sv index de2e7ecc1..a31cae78c 100644 --- a/tests/sat/sizebits.sv +++ b/tests/sat/sizebits.sv @@ -90,4 +90,17 @@ assert property ($right(z, 3) == 0); assert property ($right(z[3]) == 9); assert property ($right(z[3][3]) == 0); assert property ($right(z[3], 2) == 0); + +assert property ($increment(x) == 1); +assert property ($increment(y) == -1); +assert property ($increment(y, 1) == -1); +assert property ($increment(y, (1+1)) == 1); + +assert property ($increment(z) == 1); +assert property ($increment(z, 1) == 1); +assert property ($increment(z, 2) == -1); +assert property ($increment(z, 3) == 1); +assert property ($increment(z[3]) == -1); +assert property ($increment(z[3][3]) == 1); +assert property ($increment(z[3], 2) == 1); endmodule diff --git a/tests/svtypes/struct_sizebits.sv b/tests/svtypes/struct_sizebits.sv index 092d9ecef..7f33fe72c 100644 --- a/tests/svtypes/struct_sizebits.sv +++ b/tests/svtypes/struct_sizebits.sv @@ -107,6 +107,19 @@ always_comb begin assert ($right(s.sz.z[3]) == 9); assert ($right(s.sz.z[3][3]) == 4); assert ($right(s.sz.z[3], 2) == 4); + + assert ($increment(s.x) == 1); + assert ($increment(s.sy.y) == -1); + assert ($increment(s.sy.y, 1) == -1); + assert ($increment(s.sy.y, (1+1)) == 1); + + assert ($increment(s.sz.z) == 1); + assert ($increment(s.sz.z, 1) == 1); + assert ($increment(s.sz.z, 2) == -1); + assert ($increment(s.sz.z, 3) == -1); + assert ($increment(s.sz.z[3]) == -1); + assert ($increment(s.sz.z[3][3]) == -1); + assert ($increment(s.sz.z[3], 2) == -1); end endmodule