verilog modelsim 對文件進行仿真讀寫


當需要對大量數據進行仿真驗證時,可使用文件的讀寫方式驗證;

 

1.仿真文件讀取($readmemb,$readmemh)

1.1二進制文件讀取

(1)$readmemb("<數據文件名>",<存儲器名>);

(2)$readmemb("<數據文件名>",<存儲器名>,<起始地址>);

(3)$readmemb("<數據文件名>",<存儲器名>,<起始地址>,<終止地址>);

1.2十六進制文件讀取

(1)$readmemb("<數據文件名>",<存儲器名>);

(2)$readmemb("<數據文件名>",<存儲器名>,<起始地址>);

(3)$readmemb("<數據文件名>",<存儲器名>,<起始地址>,<終止地址>);

eg:

reg [7:0] bl_test_data[0:383];//定義寄存器數組用來緩存需要讀取文件中的數據
initial
begin
   $readmemh("H:/sim/bl_data/tem_filter_data_file_hex.txt",bl_test_data);  //初始化時從 H:/sim/bl_data/tem_filter_data_file_hex.txt 中把數據讀出並緩存到寄存器數組當中;
end

 

2.仿真文件寫入($fopen,$fwrite, $fclose)

(1)$fopen ("<數據文件名>")打開文件;

(2) $fwrite (文件指針,"%h ",需寫入的數據);//其中文件指針需要提前定義,%h表示十六進制,%d表示十進制,$fwrite與$fdisplay的區別是fwrite不自動換行可加n來換行,fdisplay可自動換行;$fwrite(“%d\n”)和$fdisplay(“%d”) 效果一樣

(3)$fclose(文件指針);關閉文件,關閉后文件寫入無效,寫不進去;

(4)display(“need display data = %d ”,j);數據打印

eg

initial begin:block_0
  integer lsf_data_hex;//定義數據指針lsf_data_hex
  integer lsf_data_dex;//定義數據指針lsf_data_dex
  integer j;
  lsf_data_hex = $fopen ("H:/sim/dig_bl/lsf_data_hex.txt");//初始化時打開文件lsf_data_hex,文件不存在時自動生成文件;
  lsf_data_dex = $fopen ("H:/sim/dig_bl/lsf_data_dex.txt");//初始化時打開文件lsf_data_dex,文件不存在時自動生成文件;
  forever begin
    @(posedge video_clk_in);
   if(write_test_start)begin//滿足條件是往文件中寫入相關數據
      for(j=0;j<8294400;j=j+1)begin
         $fwrite (lsf_data_hex,"%h ",lsf_data_rd_mem[j]);
         $fwrite (lsf_data_dex,"%d ",lsf_data_rd_mem[j]);
         $display ("%d",j);
         if(j == 8294399)begin//當寫入文件的個數達到需求是關閉文件,后續的數據將寫不進去,除非再次打開文件
            $fclose (lsf_data_hex);
            $fclose (lsf_data_dex);
            end
         end
     end
  end
end


免責聲明!

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



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