午夜性刺激免费看_小说区图片区偷拍区另_一级片视频免费_一级口次A片,欧美a片免费在线观看,国产Av无码一区二区三区,99视频在线观看视频6,A片免费无码一级,亚洲五月花AV在线,激情影院a,国产在线观看综合

內(nèi)頁(yè)廣告7

熱搜關(guān)鍵詞: PCIe高速數(shù)據(jù)采集卡RFSOC高速數(shù)據(jù)采集軟件無(wú)線電平臺(tái)VPX高速數(shù)據(jù)采集卡高速信號(hào)采集卡PCIe數(shù)據(jù)采集數(shù)字信號(hào)處理

您的當(dāng)前位置:首頁(yè) » 資訊中心 » 技術(shù)文章 » 通過(guò)文件讀寫(xiě)方式實(shí)現(xiàn)Matlab和Modelsim的聯(lián)合仿真

通過(guò)文件讀寫(xiě)方式實(shí)現(xiàn)Matlab和Modelsim的聯(lián)合仿真

返回列表 來(lái)源:坤馳科技 查看手機(jī)網(wǎng)址
掃一掃!通過(guò)文件讀寫(xiě)方式實(shí)現(xiàn)Matlab和Modelsim的聯(lián)合仿真掃一掃!
瀏覽:- 發(fā)布日期:2015-07-26 19:31:00【

  本文的主要內(nèi)容是現(xiàn)在MATLAB中產(chǎn)生仿真所需要的輸入信號(hào),,以十六進(jìn)制形式存放在數(shù)據(jù)文件中,,在modelsim中用verilog語(yǔ)言編寫(xiě)測(cè)試文件,,做時(shí)序仿真,,后將結(jié)果存入另外一個(gè)數(shù)據(jù)文件,后在matlab中將modelsim的仿真輸出文件讀入一個(gè)數(shù)組中,,以便可以作圖分心,,進(jìn)一步做誤差分析。
  雖然Modelsim的功能非常強(qiáng)大,,仿真的波形可以以多種形式進(jìn)行顯示,,但是當(dāng)涉及到數(shù)字信號(hào)處理的算法的仿真驗(yàn)證的時(shí)候,則顯得有點(diǎn)不足,。而進(jìn)行數(shù)字信號(hào)處理是Matlab的強(qiáng)項(xiàng),,不但有大量的關(guān)于數(shù)字信號(hào)處理的函數(shù),而且圖形顯示功能也很強(qiáng)大,,所以在做數(shù)字信號(hào)處理算法的FPGA驗(yàn)證的時(shí)候借助Matlab會(huì)大大加快算法驗(yàn)證的速度,。
 
  關(guān)于Matlab和Modelsim聯(lián)合仿真,我從網(wǎng)上看到兩種方法,,一種是通過(guò)Link for Modelsim建立Matlab和Modelsim的聯(lián)合仿真接口,;另一種就是通過(guò)文件讀寫(xiě)的方式實(shí)現(xiàn)Matlab和Modelsim的聯(lián)合仿真 。關(guān)于第二種方法,,只是通過(guò)幾個(gè)文件讀寫(xiě)函數(shù)就可以實(shí)現(xiàn)了,,而且基本可以滿足當(dāng)前仿真的要求 。
  1. Matlab產(chǎn)生數(shù)據(jù)用作Modelsim仿真
  在FPGA進(jìn)行算法驗(yàn)證的時(shí)候,,經(jīng)常需要輸入仿真數(shù)據(jù),,這些數(shù)據(jù)可以用FPGA產(chǎn)生,但是如果數(shù)據(jù)產(chǎn)生過(guò)程很復(fù)雜的話,,需要耗費(fèi)很大的精力,,并且產(chǎn)生的數(shù)據(jù)的準(zhǔn)確性也不能保證。例如,,如果要驗(yàn)證一個(gè)通信接收機(jī)的相關(guān)算法,,那么我們就需要先產(chǎn)生發(fā)送數(shù)據(jù),也就是說(shuō)得先做一個(gè)發(fā)射機(jī),,如果這個(gè)過(guò)程也由FPGA實(shí)現(xiàn)的話,,也是一個(gè)很復(fù)雜的過(guò)程。這時(shí)候我們就可以借助Matlab,,利用Matlab內(nèi)部自帶的各種函數(shù),,產(chǎn)生需要的信號(hào),再經(jīng)過(guò)定點(diǎn)化,,就作為FPGA接收模塊的輸入信號(hào)了,。這樣做無(wú)疑會(huì)節(jié)約很多時(shí)間和精力,。
  下面用一個(gè)簡(jiǎn)單的例子說(shuō)明如何用Matlab產(chǎn)生的數(shù)據(jù)用作Modelsim仿真。
  首先利用matlab產(chǎn)生一個(gè)周期256點(diǎn)8bit的正弦波數(shù)據(jù),,然后以16進(jìn)制形式寫(xiě)入sin.txt文件
          N = 256;
          n = 1:256;
          x = fix(128 + (2^7 - 1) * sin(2*pi*n/N));
          fid = fopen('sin.txt','wt');
          fprintf(fid,'%x\n',x);
         fclose(fid);
  下圖是截取的產(chǎn)生的數(shù)據(jù)文件的內(nèi)容


 
 

  然后將產(chǎn)生的sin.txt文件復(fù)制到Modelsim的工程下,,在Verilog文件中先定義一個(gè)8bit X 256數(shù)組,然后通過(guò)$readmemh命令,,將文件中的數(shù)據(jù)讀入,,相關(guān)的Verilog代碼如下:
reg [7:0] data_mem[0:255]; //定義一個(gè)8bit X 256的數(shù)組
initial
    begin
    $readmemh("sin.txt",data_mem); //將sin.txt中的數(shù)據(jù)讀入存儲(chǔ)器data_mem
    end
    關(guān)于$readmemh的用法可以參見(jiàn)Verilog的參考書(shū),這里就不詳細(xì)說(shuō)了,。
  后面就可以用data_mem作為你的測(cè)試數(shù)據(jù)了。例如可以通過(guò)以下代碼,,將data_mem的數(shù)據(jù)送給data_out:
always @(posedge clk)
begin
    if(rst)
        begin
        data_out <= 8'd0;
        i <= 8'd0;
        end
    else
        begin
        data_out <= data_mem[i]; //將存儲(chǔ)器中的數(shù)據(jù)輸出
        i <= i + 8'd1;
        end
end
  這樣利用data_out就可以輸出一個(gè)正弦波波形,,下圖是Molesim仿真產(chǎn)生的正弦波波形:
  2. Matlab對(duì)Modelsim仿真生成的數(shù)據(jù)進(jìn)行分析
    Matlab對(duì)Modelsim仿真生成數(shù)據(jù)的處理也是通過(guò)文件讀寫(xiě)實(shí)現(xiàn)的。即通過(guò)Verilog語(yǔ)句,,將仿真過(guò)程中的某個(gè)信號(hào)寫(xiě)入文件,,然后在Matlab中在把這個(gè)文件的數(shù)據(jù)讀出來(lái),就可以在Matlab中進(jìn)行分析了,。
    下圖也通過(guò)一個(gè)簡(jiǎn)單的例子,,說(shuō)明一下整個(gè)過(guò)程。
    以下的Verilog語(yǔ)句實(shí)現(xiàn)將信號(hào)data_out的數(shù)據(jù)寫(xiě)入data_out.txt文件
    integer w_file;
    initial w_file = $fopen("data_out.txt");
    always @(i)
    begin
        $fdisplay(w_file,"%h",data_out);
        if(i == 8'd255)    //共寫(xiě)入256個(gè)數(shù)據(jù)
            $stop;
    end
  下圖是截取的data_out.txt的部分內(nèi)容:

 
  然后就可以編一小段Matlab的程序?qū)ata_out.txt中的數(shù)據(jù)讀取進(jìn)行分析了,。下面一段Matlab的程序是將數(shù)據(jù)讀取,,并通過(guò)圖形顯示出數(shù)據(jù)的波形。
    fid = fopen('data_out.txt','r');
    for i = 1 : 256;
        num(i) = fscanf(fid, '%x', 1);    %這句話的意思是從fid所指的文件以16進(jìn)制方式讀出一個(gè)數(shù)據(jù),。
    end
    fclose(fid);
    plot(num);
  當(dāng)利用fscanf函數(shù)時(shí)要注意兩點(diǎn),,
  :保證讀取的數(shù)據(jù)格式和文件中保存的數(shù)據(jù)格式是相同的,例如這里文件中保存的格式是十六進(jìn)制,,所以讀取的時(shí)候也應(yīng)該以十六進(jìn)制的形式讀出,。
  第二:要保證文件中數(shù)據(jù)的個(gè)數(shù)和設(shè)定的讀取的數(shù)目(這里是256)保持一致。例如,,要將生成文件data_out.txt中多余的換行符去掉(一般后會(huì)多出一行),,否則Matlab會(huì)將空的行也當(dāng)做一個(gè)數(shù)據(jù),從而兩個(gè)數(shù)目不一致,,導(dǎo)致Matlab報(bào)錯(cuò),。
  下圖是Matlab將data_out.txt中的數(shù)據(jù)讀出,并顯示出的波形:

 
  當(dāng)然,,有了Matlab這個(gè)強(qiáng)大的工具,也就可以很方便的看信號(hào)的頻譜等信息了,。
  另外在說(shuō)一點(diǎn),,就是關(guān)于通過(guò)Verilog將數(shù)據(jù)寫(xiě)入文件有多種方法,,上面用的是$fdisplay這個(gè)系統(tǒng)函數(shù),當(dāng)然還有$fmonitor和$fwrite等幾個(gè)命令,,下面簡(jiǎn)單說(shuō)一下這幾個(gè)命令的不同,。
• $fdisplay
  這個(gè)命令需要有觸發(fā)條件,才會(huì)把數(shù)據(jù)寫(xiě)入文件,,例如,,上例的觸發(fā)條件就是always(i),當(dāng)i變化的時(shí)候才寫(xiě)入,。每寫(xiě)入一次數(shù)據(jù)會(huì)自動(dòng)增加一個(gè)換行符,。
• $fmonitor
  這個(gè)命令不需要觸發(fā)條件,只要有變化就可以將數(shù)據(jù)寫(xiě)入文件,。例如可以通過(guò)以下語(yǔ)句:
initial $fmonitor(w_file,"%h",data_out);
  這樣可以將整個(gè)仿真過(guò)程產(chǎn)生的data_out數(shù)據(jù)都寫(xiě)入文件中,。
• $fwrite
  這個(gè)命令和$fdisplay基本相同,也是需要觸發(fā)條件才會(huì)寫(xiě)入,,不同的是每寫(xiě)入一個(gè)數(shù)據(jù)不會(huì)自動(dòng)添加換行符,。例如可以通過(guò)以下語(yǔ)句:
always @(posedge clk)
begin
    $fwrite(w_file,"%h\n",data_out);
end
  關(guān)于這幾個(gè)命令的詳細(xì)介紹,大家可以參考Verilog的相關(guān)數(shù)據(jù),。
  簡(jiǎn)單總結(jié)一下上面用到的幾個(gè)函數(shù):
• 關(guān)于Matlab的函數(shù)有:fopen,, fscanf,fclose,。
• 關(guān)于Modelsim的函數(shù)有:$fopen,, $fclose,$readmemh,,$readmemb,,$fmonitor,$fdisplay,,$fwrite,。
  上面就是我關(guān)于Matlab和Modesim進(jìn)行聯(lián)合仿真的一些心得,如果大家還有其他更好的方法,,希望不吝賜教?。?br />          

  若您有高速數(shù)據(jù)采集板卡定制需求,,請(qǐng)聯(lián)系我們:400-000-4026
 

  關(guān)于坤馳科技:
  坤馳科技是專注于高速數(shù)據(jù)采集與信號(hào)處理,、高速數(shù)據(jù)存儲(chǔ)與記錄的高科技公司。坤馳科技為用戶提供成熟的標(biāo)準(zhǔn)高速數(shù)據(jù)采集產(chǎn)品與技術(shù),,也可為用戶提供定制化的高速信號(hào)采集解決方案,。目前坤馳科技服務(wù)過(guò)的研究所、科研單位已達(dá)近百家,。高速數(shù)據(jù)采集產(chǎn)品線涵蓋PCIExpress,、cPCI,、PXIe、VPX,、USB等總線,,包含高速AD、DA平臺(tái),、FPGA,、DSP處理平臺(tái),SATA/SSD,、Flash存儲(chǔ)平臺(tái)等,。
  全國(guó)咨詢電話:400-000-4026

  公司官方網(wǎng)站:http://m.jtyykv.cn  

推薦閱讀

    【本文標(biāo)簽】:高速采集卡 高速信號(hào)采集卡 高速數(shù)據(jù)采集卡
    【責(zé)任編輯】:坤馳科技版權(quán)所有:轉(zhuǎn)載請(qǐng)注明出處