labor-mst/src/gen_sine.sh
Greek64 19aadb159e Add gen_sine.sh
Add Shell Script that generates sine wave arrays in VHDL packages.
2021-03-25 11:57:51 +01:00

126 lines
2.6 KiB
Bash
Executable File

#!/bin/sh
usage() {
echo "USAGE: $0 -h|--help"
echo "USAGE: $0 [-z NUMBER] [-a NUMBER] [-n NUMBER] [-f FILE]"
echo ""
echo "Options:"
echo " -z Sine Zero value in decimal (sin(0))"
echo " -a Sine Amplitude value in decimal (sin(pi))"
echo " -n Number of Period Samples"
echo " -f Output VHDL File"
}
#**********MAIN**********
FILE="test_sine.vhd"
amp=1024
zero=512
num=1024
while [ $# -gt 0 ]; do
case "$1" in
-a)
shift
amp=$1
shift
case $amp in
''|*[!0-9]*)
echo "ERROR: -a Option needs a Decimal Number."
usage
exit 1
;;
*);;
esac
;;
-z)
shift
zero=$1
shift
case $zero in
''|*[!0-9]*)
echo "ERROR: -z Option needs a Decimal Number."
usage
exit 1
;;
*);;
esac
;;
-n)
shift
num=$1
shift
case $num in
''|*[!0-9]*)
echo "ERROR: -n Option needs a Decimal Number."
usage
exit 1
;;
*);;
esac
;;
-f)
shift
FILE=$1
shift
;;
-h|--help)
usage
exit
;;
*)
echo "ERROR: Unknown Option"
usage
exit 1
;;
esac
done
#SANITY CHECK
if [ $amp -gt $zero ]
then
echo "ERROR: The Sine Amplitude has to be smaller than the Zero point."
usage
exit 1
fi
if [ $(echo "$amp+$zero" | bc -l) -gt 4095 ]
then
echo "ERROR: The requested Sine exceeds the 12 Bits representation (2^12=4096)"
usage
exit 1
fi
#Calculate Stepping
step=$(echo "(2*(4*a(1)))/$num" | bc -l)
num=$(echo "$num-1" | bc -l)
cat <<EOF >$FILE
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
package sine_package is
EOF
echo " type SINE_ARRAY_TYPE is array (0 to $num)" >>$FILE
array=" constant sine : SINE_ARRAY_TYPE := ("
for i in $(seq 0 $num)
do
#Calculate Value
val=$(echo "($amp * s($i*$step))+$zero" | bc -l)
#Round
val=$(printf '%.0f' $val)
array=$array$(printf 'x"%03X"' $val)
if [ $i -eq $num ]
then
array=$array$(printf ');\n')
else
array=$array", "
fi
done
echo $array >>$FILE
echo "end package;" >>$FILE