3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2026-05-01 08:03:46 +00:00

symfpu: Verifying rounding modes

Works for everything but muladd.
Which I saw coming, but am still frustrated by.
This commit is contained in:
Krystine Sherwin 2026-01-21 13:08:01 +13:00
parent 9db187469d
commit 5c99ff204b
No known key found for this signature in database
3 changed files with 75 additions and 59 deletions

View file

@ -3,63 +3,40 @@ set -eu
source ../gen-tests-makefile.sh
# operators
ops="sqrt add sub mul div muladd"
for op in $ops; do
rm -f ${op}_edges.*
done
rm -f *_edges.*
prove_op() {
prove_rm() {
op=$1
defs=$2
ys_file=${op}_edges.ys
rm=$2
defs=$3
ys_file=${op}_${rm}_edges.ys
echo """\
symfpu -op $op
symfpu -op $op -rm $rm
sat -prove-asserts -verify
chformal -remove
opt
read_verilog -sv -formal $defs edges.sv
read_verilog -sv -formal $defs -D${rm} edges.sv
chformal -lower
prep -top edges -flatten
sat -prove-asserts -verify
sat -set-assumes -prove-asserts -verify
""" > $ys_file
}
prove_op() {
op=$1
defs=$2
rms="RNE RNA RTP RTN RTZ"
for rm in $rms; do
prove_rm $op $rm "$defs"
done
}
prove_op sqrt "-DSQRT"
prove_op add "-DADD -DADDSUB -DADDS"
prove_op sub "-DSUB -DADDSUB -DADDS"
prove_op mul "-DMUL -DMULS"
prove_op div "-DDIV"
prove_op muladd "-DMULADD -DMULS -DADDS"
# rounding modes
rms="RNE RNA RTP RTN RTZ"
for rm in $rms; do
rm -f ${rm}_edges.*
done
prove_rm() {
rm=$1
defs=$2
ys_file=${rm}_edges.ys
echo """\
symfpu -rm $rm
sat -prove-asserts -verify
chformal -remove
opt
read_verilog -sv -formal $defs edges.sv
chformal -lower
prep -top edges -flatten
sat -prove-asserts -verify
""" > $ys_file
}
prove_rm RNE "-DRNE"
prove_rm RNA "-DRNA"
prove_rm RTP "-DRTP"
prove_rm RTN "-DRTN"
prove_rm RTZ "-DRTZ"
# prove_op muladd "-DMULADD -DMULS -DADDS"
generate_mk --yosys-scripts