- 导出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,后面就是我们采的信号的名称,但这个信号名称是包含例化的层级结构名字的。
- 处理十进制数据
如果我们在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()
- 处理十六进制数据
如果我们保存的是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))
- 处理二进制数据
二进制跟十六进制的处理方式基本相同,
代码语言: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))
- 并行数据分离
在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)