导出ILA数据到Python

2022-01-24 13:47:31 浏览数 (1)

  1. 导出ILA数据

在空白处右键,选择Export ILA Data

导出csv格式的文件,并选择文件路径和文件名:

上面两步也可以使用tcl脚本代替:

代码语言:javascript复制
write_hw_ila_data -csv_file {C:usrzhjilailadata.csv} hw_ila_data_1

导出后的文件如下图所示,第一行是标题,有Sample in Buffer、Sample in Window、TRIGGER,后面就是我们采的信号的名称,但这个信号名称是包含例化的层级结构名字的。

  1. 处理十进制数据

  如果我们在hw_ila的窗口中设置显示的数据格式为10进制,那么我们直接读取数据并绘图显示都是比较方便的:

代码语言:javascript复制
# -*- coding: utf-8 -*-
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

csv_name = r'davinci.csv'
csv_data = pd.read_csv(csv_name)
adc_data = np.array(csv_data['hs_adc_dac_module_top_inst/hs_adc_dac_module_core_inst/dbg_adc_data[7:0]'])
plt.figure()
plt.plot(adc_data)
plt.show()
  1. 处理十六进制数据

  如果我们保存的是16进制数据,那读进来后,是16进制的字符串序列,如下图的data_hex,我们只需将该序列转成int型的序列即可。

通过如下方式进行转换:

代码语言:javascript复制
data_hex = np.array(csv_data['hs_adc_dac_module_top_inst/hs_adc_dac_module_core_inst/inst_adc/m_axis_data_tdata[15:0]'])
data_int = list(map(lambda x:int(x, 16), data_hex))
  1. 处理二进制数据

  二进制跟十六进制的处理方式基本相同,

代码语言:javascript复制
data_bin = np.array(csv_data['hs_adc_dac_module_top_inst/hs_adc_dac_module_core_inst/inst_adc/m_axis_data_tdata[15:0]'])
data_int = list(map(lambda x:int(x, 2), data_bin))
  1. 并行数据分离

  在FPGA中,我们经常需要处理一些并行数据,比如ADC采样率比较高时,数据往往是以并行的方式呈现,在debug时也将他们一起加入到ila中。

  假设FPGA内部数据以32路并行的方式进行传输,adc的量化位数为14bit,那么整个数据位宽是32*14=448,那么存储的文件内容如下:

我们需要做的,就是将448bit数据,拆分成32个14bit数据,并将这些数据拼接成一个序列,绘图显示。

代码语言:javascript复制
adc_data_448 = np.array(csv_data['adc_inst/phy_data[447:0]'])
lst = np.array([])
for dat1 in adc_data_448:
    dat2 = '{0:0448b}'.format(int(dat1,16)) #将16进制数据转成448bit的二进制
    for i in range(32):
        tmp = int(dat2[0 i*14:14 i*14],2)
        if tmp > 8192:
            tmp = tmp - 16384
        lst = np.append(lst, tmp)

0 人点赞