Fir
Fir
###
muls = []
src = self.i
for c in self.coef:
sreg = Signal((self.wsize, True))
self.sync += sreg.eq(src)
src = sreg
c_fp = int(c*2**(self.wsize - 1))
muls.append(c_fp*sreg)
sum_full = Signal((2*self.wsize-1, True))
self.sync += sum_full.eq(reduce(add, muls))
self.comb += self.o.eq(sum_full >> self.wsize-1)
if __name__ == "__main__":
# Compute filter coefficients with SciPy.]
cutoff=800.0
trans_width=100
fs=2000
numtaps=30
coef = signal.remez(numtaps, [0, cutoff, cutoff+trans_width, 0.5*fs],
[1,0],fs=fs)
in_signals = []
out_signals = []
entrada = []
for frequency in [0.025,0.1,0.45,0.5]:
dut = FIR(coef)
tb = fir_tb(dut, frequency, in_signals,out_signals)
run_simulation(dut, tb)
with open("entrada_default.txt", "w") as file:
for value in in_signals:
file.write(f"{value}\n")
plt.plot(in_signals)
plt.plot(out_signals)
plt.title("Respostas para 50hz 200hz 900hz 1000hz")
plt.xlabel("Frequencia:50hz 200hz 900hz 1000hz" )
plt.ylabel("Amplitude")
plt.grid()
plt.show()
impulse_in = []
impulse_out = []
dut = FIR(coef)
run_simulation(dut, impulse_response_tb(dut, impulse_in, impulse_out))
plt.figure()
plt.title("Resposta ao Impulso")
plt.stem(impulse_out, use_line_collection=True)
plt.xlabel("Amostra")
plt.ylabel("Amplitude")
plt.grid()
plt.show()
fir = FIR(coef)
print(verilog.convert(fir, ios={fir.i, fir.o}).write("fir.sv"))