zoukankan      html  css  js  c++  java
  • 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代码及结果如下:

  • 相关阅读:
    盘子序列
    最大矩形面积
    【模板】ST表
    排队
    map循环遍历
    vue循环遍历给div添加id
    正则 匹配
    字符串拼接
    js对象追加到数组里
    二级标题左侧加粗线条
  • 原文地址:https://www.cnblogs.com/kl2blog/p/6623279.html
Copyright © 2011-2022 走看看