verilog中讀取文件中的字符串_modelsim高級仿真


  今天給個程序大家玩玩。因為今天遇到一個問題,就是要向UART發送指令,指令非常多,都是字符串。一直copy 函數 UART ("COMM_1");  UART ("COMM_2");........可是指令有好幾十個哦。如果遇上百個豈不是更慘。

  如果是C語言,大家肯定想到用數組遍歷。不過Verilog中想用數組遍歷,我沒有嘗試過 —— 我這里是字符串不是簡單的16進制數。有興趣的同學可以自己玩玩,大家一起交流。目前我采用的是文件的方式來做

第一步建立一個文件 ,名稱是test_case.dat。里面保存你需要發送的指令,例如:

FPGA!!
gong--
cheng-
shi---
zhi---
jia---
oyeoye

第二步使用下列代碼

 1 `timescale 1ns/1ps 
 2 
 3 
 4 
 5 module readfile ; 
 6 
 7 integer str_cnt ; 
 8 integer file_r,file_w ; 
 9 
10 reg  [47:0]reg0 ; 
11 reg        str_p ; 
12 initial begin 
13     str_cnt = 0 ; 
14     file_r = $fopen ("test_case.dat","r");
15     file_w = $fopen ("test_case_h.dat","w");
16     
17     while(!$feof(file_r)) begin
18         str_p = $fgets(reg0,file_r);
19         if(reg0==10);  //Tab 
20         else if (reg0==0) ;  //file finish
21         else begin   
22                 str_cnt = str_cnt + 1 ; 
23                 $display("%s",reg0);
24                 $fwrite(file_w, "NO=%d,   %s = %h\n", str_cnt,reg0, reg0);
25                 end 
26         end
27         
28     $fclose (file_r);
29     $fclose (file_w);
30     #2
31     $stop ; 
32     end 
33     
34 endmodule 

 

輸出到一個 test_case_h.dat文件。輸出是這個樣子的

 

NO=          1,   FPGA!! = 465047412121
NO=          2,   gong-- = 676f6e672d2d
NO=          3,   cheng- = 6368656e672d
NO=          4,   shi--- = 7368692d2d2d
NO=          5,   zhi--- = 7a68692d2d2d
NO=          6,   jia--- = 6a69612d2d2d
NO=          7,   oyeoye = 6f79656f7965

   注意看哦,我的test_case.dat中所有的字符串都是6*8bit的。對應程序中的reg0是48bit的。如果字符串bit少了會把換行符讀進去,如果字符串的bit多了會遺漏。 

都說了是給大家玩的程序。所以有興趣的朋友可以查詢一下standard中對$feof以及$fgets的解讀

 

 

 

歡迎加入: FPGA廣東交流群:162664354

      FPGA開發者聯盟: 485678884


免責聲明!

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



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