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代码及结果如下:

  • 相关阅读:
    docker search 报错
    mgo连接池
    饿了么这样跳过Redis Cluster遇到的“坑”
    Linux Swap的那些事
    epoll使用详解(精髓)(转)
    select、poll、epoll之间的区别总结[整理](转)
    git merge 和 git rebase 小结(转)
    linux查看端口占用情况
    [LeetCode] Combinations——递归
    C++中的static关键字的总结(转)
  • 原文地址:https://www.cnblogs.com/kl2blog/p/6623279.html
Copyright © 2011-2022 走看看