import numpy as np
import matplotlib.pyplot as plt
import os
import shutil
DEPTH = 512
WIDTH = 8
base = 2**(WIDTH - 1) - 1
headfile = '''-- Quartus II generated Memory Initialization File (.mif)
DEPTH = 256;
WIDTH = 8;
ADDRESS_RADIX = HEX;
DATA_RADIX = HEX;
CONTENT BEGIN
'''
x = np.linspace(0, 2*np.pi, DEPTH)
y = (DEPTH/2*np.sin(x)+DEPTH/2)
y1 = y.astype(int)
i= range(DEPTH)
#y1 = int(base + (-1 if i >= DEPTH // 2 else 1) * base) # 方波
#y1 = int(base + sin(i / DEPTH * 2 * pi) * base) # 正弦波
#y1 = int(i / DEPTH * (2 ** WIDTH - 1)) # 锯齿波
#y1 = int((1 - abs((i * 2 / (DEPTH - 1)) - 1)) * (2**WIDTH - 1)) # 三角波
plt.plot(x,y)
plt.show()
mif = open('sin.mif', 'w')
mif.writelines(headfile)
i = 0
for item in y1:
mif.writelines(str(hex(i)[2:]))#wirtelines()只能输入字符串类型
mif.writelines(' : ')
mif.writelines(str(hex(item)[2:]))
mif.writelines(';')
mif.writelines('\n')
i += 1
mif.write('END;')
Shell
#!/bin/bash
#
echo "Start==============Replace==========>"
Num_temp=0
let num_ascii=0
let num_ascii2=0
function check(){
local a="$1"
printf "%d" "$a" &>/dev/null && echo "integer" && return
printf "%d" "$(echo $a|sed 's/^[+-]\?0\+//')" &>/dev/null && echo "integer" && return
printf "%f" "$a" &>/dev/null && echo "number" && return
[ ${#a} -eq 1 ] && echo "char" && return
echo "string"
}
function sin_hex(){
res=$1
let j=0
for((m=1;m<=$res;m++))
do
sin_y=`echo $m | awk -v xx="$m" -v yy="$res" '{printf("%x",(sin(3.14159265358979*2*xx/yy)+1)*(yy-1)/2)}'`
echo "res" $res $m $sin_y
if [ $j -le 6 ] ;then
echo -n $sin_y" " >> hex.rom
let j=j+1
else
let j=0
echo -n $sin_y" " >> hex.rom
echo "" >> hex.rom
fi
done
}
function gen_rom() {
echo "read file: "$1
cat "./"$1 | while read line || [[ -n ${line} ]]
do
echo $line
Num_temp=`echo $line | awk -F'[(,) ]+' '{print NF}'`
#echo " "$Num_temp
for((m=1;m<=Num_temp;m++))
do
str_find=` echo $line | awk -v var="$m" -F'[(,) ]+' '{print $var}' `
#echo $str_find
printf "\x$str_find" >> binary.rom
#echo $t
#printf \\x`printf %x $num_ascii2`
#echo $str_find ${str_find:0:1} ${str_find:1:1} $num_ascii $(check num_ascii) $t $(check $t) $ascii_new
#echo "obase=2; ibase=10;$t"|bc
#echo -n $t >> binary.rom
done
#echo "END"
done
}
rm -rf ./hex.rom
res=8
let num=2**$res
echo $num
sin_hex $num;
rm -rf binary.rom
gen_rom "hex.rom"