Add gen_sine.sh
Add Shell Script that generates sine wave arrays in VHDL packages.
This commit is contained in:
parent
3f111508c1
commit
19aadb159e
125
src/gen_sine.sh
Executable file
125
src/gen_sine.sh
Executable file
@ -0,0 +1,125 @@
|
||||
#!/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
|
||||
Loading…
Reference in New Issue
Block a user