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代碼及結果如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM