-
Notifications
You must be signed in to change notification settings - Fork 895
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add test for SMT backend. Tests if SMT is valid and compares simulati…
…on with yosys sim
- Loading branch information
1 parent
264aec6
commit 857342e
Showing
1 changed file
with
91 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
#!/bin/bash | ||
|
||
# Initialize an array to store the names of failing RTLIL files and their failure types | ||
declare -A failing_files | ||
# Initialize an array to store the names of successful RTLIL files | ||
declare -A successful_files | ||
|
||
# Function to run the test on a given RTLIL file | ||
run_test() { | ||
# Define the common variable for the relative path | ||
BASE_PATH="../../../" | ||
|
||
local rtlil_file=$1 | ||
|
||
# Extract the base name without extension | ||
local base_name=$(basename "$rtlil_file" .il) | ||
|
||
# Run yosys to process each RTLIL file | ||
if ${BASE_PATH}yosys -p "read_rtlil $rtlil_file; write_functional_smt2 ${base_name}.smt2"; then | ||
echo "Yosys processed $rtlil_file successfully." | ||
# Check that the smt file generated is valid | ||
# Execute the Python script to create a VCD file from the SMT2 file | ||
if z3 "${base_name}.smt2"; then | ||
echo "SMT file ${base_name}.smt2 is valid ." | ||
|
||
if python3 using_smtio.py "${base_name}.smt2"; then | ||
echo "Python script generated VCD file for $rtlil_file successfully." | ||
|
||
# Check if VCD file was generated successfully | ||
if [ -f "${base_name}.smt2.vcd" ]; then | ||
echo "VCD file ${base_name}.vcd generated successfully by Python." | ||
|
||
# Run yosys simulation to generate a reference VCD file | ||
if ${BASE_PATH}yosys -p "read_rtlil $rtlil_file; sim -vcd ${base_name}_yosys.vcd -r ${base_name}.smt2.vcd -scope gold -timescale 1us"; then | ||
echo "Yosys simulation for $rtlil_file completed successfully." | ||
successful_files["$rtlil_file"]="Success" | ||
else | ||
echo "Yosys simulation failed for $rtlil_file." | ||
failing_files["$rtlil_file"]="Yosys simulation failure" | ||
fi | ||
else | ||
|
||
echo "Failed to generate VCD file (${base_name}.vcd) for $rtlil_file. " | ||
failing_files["$rtlil_file"]="VCD generation failure" | ||
fi | ||
else | ||
echo "Failed to run Python script for $rtlil_file." | ||
failing_files["$rtlil_file"]="Python script failure" | ||
fi | ||
else | ||
echo "SMT file for $rtlil_file is invalid" | ||
failing_files["$rtlil_file"]="Invalid SMT" | ||
fi | ||
else | ||
echo "Yosys failed to process $rtlil_file." | ||
failing_files["$rtlil_file"]="Yosys failure" | ||
fi | ||
} | ||
|
||
# Main function to run all tests | ||
run_all_tests() { | ||
# Loop through all RTLIL files in the rtlil directory | ||
for rtlil_file in rtlil/*.il; do | ||
run_test "$rtlil_file" | ||
done | ||
|
||
# Check if the array of failing files is empty | ||
if [ ${#failing_files[@]} -eq 0 ]; then | ||
echo "All files passed." | ||
echo "The following files passed:" | ||
for file in "${!successful_files[@]}"; do | ||
echo "$file" | ||
done | ||
return 0 | ||
else | ||
echo "The following files failed:" | ||
for file in "${!failing_files[@]}"]; do | ||
echo "$file: ${failing_files[$file]}" | ||
done | ||
echo "The following files passed:" | ||
for file in "${!successful_files[@]}"]; do | ||
echo "$file" | ||
done | ||
return 1 | ||
fi | ||
} | ||
|
||
# If the script is being sourced, do not execute the tests | ||
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then | ||
run_all_tests | ||
fi |