VIVADO导出仿真数据到MATLAB中进行分析

发布于:2025-06-25 ⋅ 阅读:(21) ⋅ 点赞:(0)

VIVADO导出仿真数据到MATLAB中进行分析

目录

前言

一、导出仿真数据需要编写的RTL代码

二、MATLAB读入txt文件中的数据

三、需要注意的点

总结


前言

        在使用 Xilinx Vivado 进行 FPGA 开发时,如何将 RTL 仿真生成的数据导出,进行进一步分析与可视化,是很多开发者常遇到的问题。Vivado自带仿真工具不支持直接导出仿真数据,但是我们可以通过编写一段简单的RTL代码即可将需要的仿真数据保存到txt文件中,后续MATLAB有自带的的textscan函数可以将txt中的数据读出来,本文将介绍这一过程。


提示:以下是本篇文章正文内容,禁止转载,引用请附上链接!

一、导出仿真数据需要编写的RTL代码

        示例:

integer fd;

initial begin

    fd = $fopen("output.txt", "w");

end

always @(posedge clk)

begin

    if(wr_en)

        begin

            $fwrite(fd, "%h, %h, %h\n", wr_addr_row, wr_addr_col, wr_data);

        end

end

        这段代码可以在仿真时加到design RTL代码中,综合实现的时候要去掉,代码本身是实现不了的。这段代码的含义,首先打开一个名为 output.txt 的可写文件,如果不存在,会自动创建。然后在每个时钟上升沿,当wr_en为高时,会以16进制的格式往txt文本中写入wr_addr_row, wr_addr_col, wr_data这三个数据。如果想以二进制写入,将%h改为%b即可。

        编写完代码以后,重新开始仿真,运行仿真直到仿真完要写入的所有数据停止仿真,然后关闭仿真,就能在工程目录下找到一个名为output的文本文件,如下图所示:

打开该文本文件就能看到如图所示的仿真数据了。

二、MATLAB读入txt文件中的数据

        在MATLAB中使用下面一段代码即可读出txt文本中的数据:

% 读取文件

fid = fopen('output.txt', 'r');

data = textscan(fid, '%s %s %s', 'Delimiter', ',', 'HeaderLines', 0);

fclose(fid);

% 提取三列数据

c1 = strtrim(data{1}); % 移除可能的空格

c2 = strtrim(data{2});

c3 = strtrim(data{3});

% 转换时间戳(十六进制 -> 十进制整数)

row = hex2dec(c1);

col = hex2dec(c2);

data_hex=string(c3);

三、需要注意的点

        1、这段代码仿真时可以加到设计文件中,综合实现时要删除;

        2、添加这段代码后需要重新运行仿真,仿真结束后 close simulation 才能在前文所示目录下找到包含仿真数据的txt文本文件;

        3、仿真停止,打印数据就停止,所以请确保仿真时间长度足以覆盖自己打印所需要的数据。


总结

        以上就是今天要讲的内容,本文详细介绍了如何将VIVADO仿真数据导出至txt文本文件中,然后导入到MATLAB中进行分析。


网站公告

今日签到

点亮在社区的每一天
去签到