mirror of
https://github.com/YosysHQ/sby.git
synced 2025-08-11 15:50:56 +00:00
Test property statuses for cover_assert
Cover properties shouldn't be marked fail when the test failed early due to an assertion. This should fail without other changes.
This commit is contained in:
parent
4d8462b58e
commit
911ae02ee5
5 changed files with 105 additions and 0 deletions
2
tests/statusdb/Makefile
Normal file
2
tests/statusdb/Makefile
Normal file
|
@ -0,0 +1,2 @@
|
|||
SUBDIR=statusdb
|
||||
include ../make/subdir.mk
|
59
tests/statusdb/mixed.py
Normal file
59
tests/statusdb/mixed.py
Normal file
|
@ -0,0 +1,59 @@
|
|||
import json
|
||||
import sqlite3
|
||||
import sys
|
||||
|
||||
def get_prop_type(prop: str):
|
||||
prop = json.loads(prop or "[]")
|
||||
name_parts = prop[-1].split("_")
|
||||
if name_parts[0] == "\check":
|
||||
# read_verilog style
|
||||
# \check_cover_mixed_v...
|
||||
return name_parts[1]
|
||||
else:
|
||||
# verific style
|
||||
# \assert_auto_verificsva_cc...
|
||||
return name_parts[0][1:]
|
||||
|
||||
def main():
|
||||
workdir = sys.argv[1]
|
||||
with open(f"{workdir}/status.path", "r") as status_path_file:
|
||||
status_path = f"{workdir}/{status_path_file.read().rstrip()}"
|
||||
# read only database
|
||||
con = sqlite3.connect(f"file:{status_path}?mode=ro", uri=True)
|
||||
db = con.cursor()
|
||||
# custom sql to get all task property statuses for the current workdir
|
||||
rows = db.execute(
|
||||
"""
|
||||
SELECT task.id, task_property.name, task_property.src, task_property_status.status
|
||||
FROM task
|
||||
LEFT JOIN task_property ON task_property.task=task.id
|
||||
LEFT JOIN task_property_status ON task_property_status.task_property=task_property.id
|
||||
WHERE task.workdir=:workdir;
|
||||
""",
|
||||
{"workdir": workdir}
|
||||
).fetchall()
|
||||
# only check the most recent iteration of the test
|
||||
last_id = 0
|
||||
for row_id, _, _, _ in rows:
|
||||
if row_id > last_id:
|
||||
last_id = row_id
|
||||
for row_id, prop, src, status in rows:
|
||||
if row_id != last_id:
|
||||
continue
|
||||
prop_type = get_prop_type(prop)
|
||||
valid_status: list[None|str] = []
|
||||
if workdir in ["mixed_bmc", "mixed_assert"] and prop_type == "assert":
|
||||
valid_status = ["FAIL"]
|
||||
elif workdir == "mixed_bmc" and prop_type == "cover":
|
||||
valid_status = [None, "UNKNOWN"]
|
||||
elif workdir == "mixed_assert" and prop_type == "cover":
|
||||
valid_status = ["PASS", None, "UNKNOWN"]
|
||||
elif workdir == "mixed_no_assert" and prop_type == "assert":
|
||||
valid_status = [None, "UNKNOWN"]
|
||||
elif workdir == "mixed_no_assert" and prop_type == "cover":
|
||||
valid_status = ["PASS"]
|
||||
assert status in valid_status, f"Unexpected {prop_type} status {status} for {prop} ({src})"
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
24
tests/statusdb/mixed.sby
Normal file
24
tests/statusdb/mixed.sby
Normal file
|
@ -0,0 +1,24 @@
|
|||
[tasks]
|
||||
no_assert cover
|
||||
assert cover
|
||||
bmc
|
||||
|
||||
[options]
|
||||
cover: mode cover
|
||||
bmc: mode bmc
|
||||
bmc: depth 1
|
||||
|
||||
assert: cover_assert on
|
||||
no_assert: expect pass
|
||||
~no_assert: expect fail
|
||||
|
||||
[engines]
|
||||
cover: smtbmc boolector
|
||||
bmc: smtbmc boolector
|
||||
|
||||
[script]
|
||||
read -formal mixed.v
|
||||
prep -top test
|
||||
|
||||
[files]
|
||||
mixed.v
|
4
tests/statusdb/mixed.sh
Normal file
4
tests/statusdb/mixed.sh
Normal file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
python3 $SBY_MAIN -f $SBY_FILE $TASK
|
||||
python3 ${SBY_FILE%.sby}.py $WORKDIR
|
16
tests/statusdb/mixed.v
Normal file
16
tests/statusdb/mixed.v
Normal file
|
@ -0,0 +1,16 @@
|
|||
module test (input CP, CN, input A, B, output reg XP, XN);
|
||||
reg [7:0] counter = 0;
|
||||
always @* begin
|
||||
assume (A || B);
|
||||
assume (!A || !B);
|
||||
assert (A == B);
|
||||
cover (counter == 3 && A);
|
||||
cover (counter == 3 && B);
|
||||
end
|
||||
always @(posedge CP)
|
||||
counter <= counter + 1;
|
||||
always @(posedge CP)
|
||||
XP <= A;
|
||||
always @(negedge CN)
|
||||
XN <= B;
|
||||
endmodule
|
Loading…
Add table
Add a link
Reference in a new issue