diff options
author | Jannis Harder <me@jix.one> | 2022-05-09 16:40:34 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-05-09 16:40:34 +0200 |
commit | 587e09d551d753d6c9a3ca3635e2c7f66e978024 (patch) | |
tree | 3ee945bb1b6d05fc3da07a10f5c201931a364952 /tests | |
parent | 5ca2ee0c3114464c91743b73efd7c4c4f15fb0dd (diff) | |
parent | a855d62b420446756a8a36f5fd25a5c77ff07e16 (diff) | |
download | yosys-587e09d551d753d6c9a3ca3635e2c7f66e978024.tar.gz yosys-587e09d551d753d6c9a3ca3635e2c7f66e978024.tar.bz2 yosys-587e09d551d753d6c9a3ca3635e2c7f66e978024.zip |
Merge pull request #3305 from jix/sva_value_change_logic
verific: Improve logic generated for SVA value change expressions
Diffstat (limited to 'tests')
-rw-r--r-- | tests/sva/.gitignore | 1 | ||||
-rw-r--r-- | tests/sva/Makefile | 1 | ||||
-rw-r--r-- | tests/sva/runtest.sh | 4 | ||||
-rw-r--r-- | tests/sva/sva_value_change_changed.sv | 17 | ||||
-rw-r--r-- | tests/sva/sva_value_change_rose.sv | 20 | ||||
-rw-r--r-- | tests/sva/sva_value_change_sim.sv | 51 | ||||
-rw-r--r-- | tests/sva/sva_value_change_sim.ys | 3 |
7 files changed, 96 insertions, 1 deletions
diff --git a/tests/sva/.gitignore b/tests/sva/.gitignore index cc254049a..b1965c97d 100644 --- a/tests/sva/.gitignore +++ b/tests/sva/.gitignore @@ -3,5 +3,6 @@ /*_pass /*_fail /*.ok +/*.fst /vhdlpsl[0-9][0-9] /vhdlpsl[0-9][0-9].sby diff --git a/tests/sva/Makefile b/tests/sva/Makefile index 1b217f746..dcabcf42b 100644 --- a/tests/sva/Makefile +++ b/tests/sva/Makefile @@ -10,4 +10,5 @@ clean: rm -rf $(addsuffix .ok,$(TESTS)) $(addsuffix .sby,$(TESTS)) $(TESTS) rm -rf $(addsuffix _pass.sby,$(TESTS)) $(addsuffix _pass,$(TESTS)) rm -rf $(addsuffix _fail.sby,$(TESTS)) $(addsuffix _fail,$(TESTS)) + rm -rf $(addsuffix .fst,$(TESTS)) diff --git a/tests/sva/runtest.sh b/tests/sva/runtest.sh index 8ed7f8cbc..2ecc9780c 100644 --- a/tests/sva/runtest.sh +++ b/tests/sva/runtest.sh @@ -57,7 +57,9 @@ generate_sby() { fi } -if [ -f $prefix.sv ]; then +if [ -f $prefix.ys ]; then + $PWD/../../yosys -q -e "Assert .* failed." -s $prefix.ys +elif [ -f $prefix.sv ]; then generate_sby pass > ${prefix}_pass.sby generate_sby fail > ${prefix}_fail.sby sby --yosys $PWD/../../yosys -f ${prefix}_pass.sby diff --git a/tests/sva/sva_value_change_changed.sv b/tests/sva/sva_value_change_changed.sv new file mode 100644 index 000000000..8f3a05a2f --- /dev/null +++ b/tests/sva/sva_value_change_changed.sv @@ -0,0 +1,17 @@ +module top ( + input clk, + input a, b +); + default clocking @(posedge clk); endclocking + + assert property ( + $changed(b) + ); + +`ifndef FAIL + assume property ( + b !== 'x ##1 $changed(b) + ); +`endif + +endmodule diff --git a/tests/sva/sva_value_change_rose.sv b/tests/sva/sva_value_change_rose.sv new file mode 100644 index 000000000..d1c5290f1 --- /dev/null +++ b/tests/sva/sva_value_change_rose.sv @@ -0,0 +1,20 @@ +module top ( + input clk, + input a, b +); + default clocking @(posedge clk); endclocking + + wire a_copy; + assign a_copy = a; + + assert property ( + $rose(a) |-> b + ); + +`ifndef FAIL + assume property ( + $rose(a_copy) |-> b + ); +`endif + +endmodule diff --git a/tests/sva/sva_value_change_sim.sv b/tests/sva/sva_value_change_sim.sv new file mode 100644 index 000000000..80ff309cd --- /dev/null +++ b/tests/sva/sva_value_change_sim.sv @@ -0,0 +1,51 @@ +module top ( + input clk +); + +reg [7:0] counter = 0; + +reg a = 0; +reg b = 1; +reg c; + +wire a_fell; assign a_fell = $fell(a, @(posedge clk)); +wire a_rose; assign a_rose = $rose(a, @(posedge clk)); +wire a_stable; assign a_stable = $stable(a, @(posedge clk)); + +wire b_fell; assign b_fell = $fell(b, @(posedge clk)); +wire b_rose; assign b_rose = $rose(b, @(posedge clk)); +wire b_stable; assign b_stable = $stable(b, @(posedge clk)); + +wire c_fell; assign c_fell = $fell(c, @(posedge clk)); +wire c_rose; assign c_rose = $rose(c, @(posedge clk)); +wire c_stable; assign c_stable = $stable(c, @(posedge clk)); + +always @(posedge clk) begin + counter <= counter + 1; + + case (counter) + 0: begin + assert property ( $fell(a) && !$rose(a) && !$stable(a)); + assert property (!$fell(b) && $rose(b) && !$stable(b)); + assert property (!$fell(c) && !$rose(c) && $stable(c)); + a <= 1; b <= 1; c <= 1; + end + 1: begin a <= 0; b <= 1; c <= 'x; end + 2: begin + assert property ( $fell(a) && !$rose(a) && !$stable(a)); + assert property (!$fell(b) && !$rose(b) && $stable(b)); + assert property (!$fell(c) && !$rose(c) && !$stable(c)); + a <= 0; b <= 0; c <= 0; + end + 3: begin a <= 0; b <= 1; c <= 'x; end + 4: begin + assert property (!$fell(a) && !$rose(a) && $stable(a)); + assert property (!$fell(b) && $rose(b) && !$stable(b)); + assert property (!$fell(c) && !$rose(c) && !$stable(c)); + a <= 'x; b <= 'x; c <= 'x; + end + 5: begin a <= 0; b <= 1; c <= 'x; counter <= 0; end + endcase; +end + +endmodule diff --git a/tests/sva/sva_value_change_sim.ys b/tests/sva/sva_value_change_sim.ys new file mode 100644 index 000000000..e004520ce --- /dev/null +++ b/tests/sva/sva_value_change_sim.ys @@ -0,0 +1,3 @@ +read -sv sva_value_change_sim.sv +hierarchy -top top +sim -clock clk -fst sva_value_change_sim.fst |