【Vivado那些事儿】使用Python提取ILA数据

作者:碎碎思 来源:开放式FPGA

ILA应该是调试AMD-Xilinx FPGA最常用的IP。

1.png

在调试中,我们希望ILA中的波形能够提供有关设计问题的所有信息,但情况并非如此。对于复杂的调试,我们还需要将ILA捕获的真实数据存储到进一步处理的文件中。根据放置ILA的位置,我们可以通过不同的方式使用文件中包含的信息。

  • ILA 监视输出数据 – 可用于验证模型的实例化的正确性。

  • ILA 监视输入数据 – 可用于将数据输入到测试台中,尝试不同的数据对测试平台的影响。当然,在这种情况下也可以复制硬件中观察到的信号模块。

这两种方法在我们的开发、验证和验证中都非常强大。在使用 ILA 时,我们更加熟悉波形图,但是,我们可以使用以下命令轻松粘合 ILA 信息保存为 CVS 文件。

write_hw_ila_data ila_file.csv [upload_hw_ila_data hw_ila_1] -csv

这将 CSV 文件保存到 Vivado 的当前工作目录中(如果不确定,请在 tcl 窗口中运行 pwd 命令来确定)。

我们还可以使用“文件”->“导出”->“导出ILA数据”来保存ILA数据。将打开一个对话框,询问要导出哪个ILA、导出数据的位置以及数据格式。

2.png

我们使用一个简单的 LFSR 实例进行演示,可以在 Vivado 中打开 ILA 并导出 CSV。

3.png

通过查看ILA CSV数据,第一列显示窗口中的样本,第二列显示窗口中的样本。

无论是否在触发中配置窗口,样本都会按顺序对坐标中的每个样本进行计数。窗口中的第二个样本计数到窗口大小。

例如,如果我们为 4 个窗口配置了 1024 个样本样本,则窗口计数中的样本将在 0 到 255 个计数之间四次,而计数中的样本从 0 线性递增到 1023。

第三个触发是触发。该值设置为1指示采样窗口中何时发生触发。可以在下面的窗口中看到,看到当触发值时,该窗口在显示第三列中1(本在本在)例中为 0x00 为 LFSR 序列的开始)。

4.png

我们将 LFSR 序列写入到一个文本文件中,可以使用 Python 一点将文本文件的结果与 ILA CSV 进行比较。

import csv

csv_file = '<location>iladata_trig.csv'

text_file = '<location>fibonacci.txt'


with open(csv_file, newline='') as csvfile:

    reader = csv.reader(csvfile)

    # Skip the top two rows of the CSV File

    next(reader)

    next(reader)


    Fibonacci_hw_values = []

    # Store Fibonacci Sequence

    for i, row in enumerate(reader):

        if i < 256:

            Fibonacci_hw_values.append(row[3])

        else:

            break


Fibonacci_tb_values = []


# Open test bench text file

with open(text_file, 'r') as file:

    for line in file:

        # Strip newlines and any whitespace around the value

        value = line.strip()

        Fibonacci_tb_values.append(value)


non_matching_in_a = []

non_matching_in_b = []


Fibonacci_tb_values = [item.lower() for item in Fibonacci_tb_values]


for item in Fibonacci_tb_values:

    if item not in Fibonacci_hw_values:

        non_matching_in_a.append(item)


for item in Fibonacci_hw_values:

    if item not in Fibonacci_tb_values:

        non_matching_in_b.append(item)


print("Non-matching in HW:", non_matching_in_a)

print("Non-matching in TB:", non_matching_in_b)


在Python中,我们可以打开这两个文件把它们读入Python列表中;一个来自测试台文本文件,另一个来自CSV文件。初步结果如下。

5.JPG

运行Python脚本展示了我们如何使用Python CSV包处理来自ILA的数据。如果我们想提取一列数据并生成一个文本文件,也很简单。如下:

6.png

注意:如果使用 Versal 设备,我们可以使用一个名为 ChipScoPy 的 Python 接口来控制 Versal ILA。

最新文章

最新文章