Source code for caf_verilog.io_helper
import os
import csv
from . quantizer import bin_num
[docs]def write_quantized_output(output_dir, filename, x, y=None):
"""
Write an output file with x.real,x.imag,y.real,y.imag values into a comma delimited file.
:param output_dir:
:param filename:
:param x:
:param y:
:return:
"""
y_vals = type(y) is not type(None)
with open(os.path.join(output_dir, filename), 'w+') as quant_file:
quant_writer = csv.writer(quant_file, delimiter=',')
for ii in range(0, len(x)):
row = [int(x[ii].real), int(x[ii].imag)]
if y_vals:
row.append(int(y[ii].real))
row.append(int(y[ii].imag))
quant_writer.writerow(row)
[docs]def write_buffer_values(output_dir, buffer_filename, buffer_quant, i_bits=12, q_bits=None):
"""
:param output_dir:
:param buffer_filename:
:param buffer_quant:
:param i_bits:
:param q_bits:
:return:
"""
q_bits = i_bits if not q_bits else q_bits
with open(os.path.join(output_dir, buffer_filename), 'w+') as rbf:
for val in buffer_quant:
i_bin = bin_num(val.real, i_bits)
q_bin = bin_num(val.imag, q_bits)
rbf.write(i_bin + q_bin + "\n")
[docs]def read_complex_output(filename):
"""
Read a file written with complex output, ex. i,j
:param filename: Full path to open a file handler with.
:return:
"""
cpx = []
with open(filename) as cpx_file:
cpx_reader = csv.reader(cpx_file, delimiter=',')
for row in cpx_reader:
try:
i_data = int(row[0])
q_data = int(row[1]) * 1j
cpx.append(i_data + q_data)
except TypeError as te:
Warning(te)
except ValueError as ve:
Warning(ve)
except IndexError as ie:
Warning(ie)
return cpx