vivado保存ila波形数据用MATLAB分析(补码与十进制转换)

目录

 

一、保存与读取ila数据

二、数据进制转换_补码 


一、保存与读取ila数据

0.把想要观测的信号线加入在线逻辑分析仪中。上板测试,trigger到想要的实时数据。

1.保存ila数据的TCL命令
write_hw_ila_data E:/yourpath/name_ila.ila [upload_hw_ila_data hw_ila_4]
注意:
目录中不能有space,中文
name_ila为保存的文件名,需要带路径,注意是右斜“/”.hw_ila_4为你的ILA的名字,[ ]中为对应的ILA核。

2.可以读取保存的ila数据,并在vivado上显示
read_hw_ila_data E:/yourpath/name_ila.ila
display_hw_ila_data

3.把保存好的.ila格式的文件导入matlab中,在matlab中用unzip语句解压,会出现一个csv格式的文件,这个文件可以用excel或者matlab打开,并能直观地看到所有sample,保存的数据都是二进制。
在matlab中:unzip('filename','file path');

4.可在excel中用自带的函数功能对数据进行处理,处理后可以再导入matlab中进行高级处理。
也可以在matlab中,用如下函数读取.csv文件的某一列数据,B列xx行至B列xxx行赋给name:
在matlab中:name = xlsread('waveform.csv','Bxx:Bxxx');

用MATLAB直接读取整个CSV中波形时,注意第一行内容是接口名称。

二、数据进制转换_补码

name = xlsread('waveform.csv','Bxx:Bxxx');得到的变量name的元素MATLAB认为是十进制,即十进制的01串,而实际上是二进制的01串,所以要使用下面的函数进行转换。(以下所说的都是整数)
    num2str() :十进制数字变为字符串
    bin2dec() :字符串类型的二进制(matlab认为是无符号二进制)变为>=0的十进制。

那么问题来了,当你的ila数据实际是二进制补码的时候怎么转换呢?

实际就是函数 bin2dec()在将N位二进制转换为十进制后进一步判断:

当补码表示的是>=0,即二进制最高位为0时(<(2^N-1)-1),转换正确。

当补码表示的是<0,即二进制最高位为1时(>=(2^N-1)),signed_name=name-2^N

因为:设绝对值=A,补码=A取反加1=B,A+B=2^N,-A=B-2^N

反过来,如果想要通过MATLAB生成二进制补码,有对应的dec2bin()、str2num(),此时dec2bin()函数在转换前需要判断十进制的数<0,signed_dec=2^N+dec

关于补码与原码的关系可以看我写的[2]补码的意义及Verilog中的小数计算问题
参考链接:

[1] vivado保存debug波形

[2]补码的意义及Verilog中的小数计算问题

你可能感兴趣的:(vivado保存ila波形数据用MATLAB分析(补码与十进制转换))