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

    xiaoxiao2023-11-16  200

    目录

     

    一、保存与读取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中的小数计算问题

    最新回复(0)