modelsim数据导出用于matlab绘图

  最近在做基于FPGA的仿核脉冲信号发生器,在写完部分代码之后,需要验证是否符合所预期的效果,即相邻脉冲的时间间隔符合指数分布,计数率即一定时间内的脉冲数是否符合泊松分布,于是希望用matlab进行绘图,看起来更直观。那么modelsim中的波形数据怎么导出呢?这里用的方法是将数据导出到txt文件中,再在matlab中导入。

  要将波形导入txt文件,需要用到$fopen()和$fdisplay();先贴上代码,后面再解释。

      integer i;
      integer w_file;

      initial begin
        Rst_n = 0;
        i = 0;
        #(`clk_period*20+1);
        Rst_n = 1;
        /*导出space_cnt的波形数据*/
        w_file = $fopen("space_cnt.txt");
        for(i=0;i<=2047;i=i+1)begin
            wait(pulse);
            #50;
            $fdisplay(w_file,"%d",space_cnt);
            if(i == 2047)
                $fclose(w_file);
        end

         /* 导出Opulse_cnt的波形数据
            w_file = $fopen("Opulse_cnt.txt");
            for(i=0;i<=8191;i=i+1)begin
            #10_000;
            $fdisplay(w_file,"%d",Opulse_cnt);
            if(i == 8191)
            $fclose(w_file);
            end*/


        #(`clk_period*2000);
        $stop;
    end

  这里的space_cnt.txt就是数据导入的文件,这个文件不用自己去新建,testbench会帮你生成好。space_cnt是数据信号线,即要导出的数据。

做脉冲间隔计数,关注的就是两个脉冲之间有多少个时钟周期,所以这里每两个脉冲检测完我只输出一个最终数据,而将计数器的计数过程选择不关心,即x。从波形可以看出,space_cnt的输出时刻比pulse的上升沿滞后了50ns,所以代码中在等待到pulse的上升沿之后,延时50ns再去将数据写入txt。注意:这里写入2048个数据,还是会有个别的数据为x,这些x在matlab读取时是读不出来的而且会阻断它后面的数据读取。所以在matlab读取之前需要将txt中的x全部替换成空。

matlab代码及结果如下:

原文地址:https://www.cnblogs.com/kl2blog/p/6623279.html