verilog常用系统函数以及例子

 

1.打开文件

  integer file_id;

  file_id = fopen("file_path/file_name");

2.写入文件:$fmonitor,$fwrite,$fdisplay,$fstrobe

  //$fmonitor只要有变化就一直记录

  $fmonitor(file_id, "%format_char", parameter);

  $fmonitor(file_id, "%m: %t in1=%d o1=%h", $time, in1, o1);

//$fwrite需要触发条件才记录

  $fwrite(file_id, "%format_char", parameter);

//$fdisplay需要触发条件才记录

  $fdisplay(file_id, "%format_char", parameter);

$fstrobe();

3.读取文件:$fread

  integer file_id;

  file_id = $fread("file_path/file_name", "r");

4.关闭文件:$fclose

  $fclose(fjile_id);

5.由文件设定存储器初值:$readmemh,$readmemb

  $readmemh("file_name", memory_name"); //初始化数据为十六进制

  $readmemb("file_name", memory_name"); //初始化数据为二进制

6、文件显示:$monitor,$write,$display

 $display,$write用于输出信息

  $display("rvel = %h hex %d decimal",rvel,rvel);

  $monitor($time, ,"rxd = %b txd = %b",rxd ,txd)

6、文件定位

  $fseek,文件定位,可以从任意点对文件进行操作;

  $fscanf,对文件一行进行读写。

7、退出仿真器$finish

8、随机数据产生:$random

  1 下面是一些常见的应用:
  2         1、读写文件
  3 `timescale 1 ns/1 ns
  4 module FileIO_tb;
  5 integer fp_r, fp_w, cnt;
  6 reg [7:0] reg1, reg2, reg3;
  7 initial begin
  8   fp_r = $fopen("data_in.txt", "r");
  9   fp_w = $fopen("data_out.txt", "w");
 10  
 11   while(!$feof(fp_r)) begin
 12     cnt = $fscanf(fp_r, "%d %d %d", reg1, reg2, reg3);
 13     $display("%d %d %d", reg1, reg2, reg3);
 14     $fwrite(fp_w, "%d %d %d\n", reg3, reg2, reg1);
 15   end
 16  
 17   $fclose(fp_r);
 18   $fclose(fp_w);
 19 end
 20 endmodule
 21            2、
 22 integer file, char;
 23 reg eof;
 24 initial begin
 25    file = $fopenr("myfile.txt");
 26    eof = 0;
 27    while (eof == 0) begin
 28        char = $fgetc(file);
 29        eof = $feof (file);
 30        $display ("%s", char); 
 31    end
 32 end
 33         3、文件处理定位
 34 `define SEEK_SET 0
 35 `define SEEK_CUR 1
 36 `define SEEK_END 2
 37 integer file, offset, position, r;
 38 r = $fseek(file, 0, `SEEK_SET);
 39 r = $fseek(file, 0, `SEEK_CUR);
 40 r = $fseek(file, 0, `SEEK_END);
 41 r = $fseek(file, position, `SEEK_SET);
 42       4、
 43 integer r, file, start, count;
 44 reg [15:0] mem[0:10], r16;
 45 r = $fread(file, mem[0], start, count);
 46 r = $fread(file, r16);
 47          5、
 48 integer file, position;
 49 position = $ftell(file);
 50            6、
 51 integer file, r, a, b;
 52 reg [80*8:1] string;
 53 file = $fopenw("output.log");
 54 r = $sformat(string, "Formatted %d %x", a, b);
 55 r = $sprintf(string, "Formatted %d %x", a, b);
 56 r = $fprintf(file, "Formatted %d %x", a, b);
 57        7、
 58 integer file, r;
 59 file = $fopenw("output.log");
 60 r = $fflush(file);
 61         8、
 62 // This is a pattern file - read_pattern.pat
 63 // time bin dec hex
 64 10: 001 1 1
 65 20.0: 010 20 020
 66 50.02: 111 5 FFF
 67 62.345: 100 4 DEADBEEF
 68 75.789: XXX 2 ZzZzZzZz
 69 `timescale 1ns / 10 ps
 70 `define EOF 32'hFFFF_FFFF
 71 `define NULL 0
 72 `define MAX_LINE_LENGTH 1000
 73 
 74 module read_pattern;
 75 integer file, c, r;
 76 reg [3:0] bin;
 77 reg [31:0] dec, hex;
 78 real real_time;
 79 reg [8*`MAX_LINE_LENGTH:0] line;
 80 
 81 initial
 82     begin : file_block
 83     $timeformat(-9, 3, "ns", 6);
 84     $display("time bin decimal hex");
 85     file = $fopenr("read_pattern.pat");
 86     if (file == `NULL) // If error opening file
 87         disable file_block; // Just quit
 88 
 89     c = $fgetc(file);
 90     while (c != `EOF)
 91         begin
 92        
 93         if (c == "/")
 94             r = $fgets(line, `MAX_LINE_LENGTH, file);
 95         else
 96             begin
 97             // Push the character back to the file then read the next time
 98             r = $ungetc(c, file);
 99             r = $fscanf(file," %f:\n", real_time);
100 
101             // Wait until the absolute time in the file, then read stimulus
102             if ($realtime > real_time)
103                 $display("Error - absolute time in file is out of order - %t",
104                         real_time);
105                 else
106                     #(real_time - $realtime)
107                         r = $fscanf(file," %b %d %h\n",bin,dec,hex);
108                 end // if c else
109             c = $fgetc(file);
110         end // while not EOF
111 
112     r = $fcloser(file);
113     end // initial
114 
115 // Display changes to the signals
116 always @(bin or dec or hex)
117     $display("%t %b %d %h", $realtime, bin, dec, hex);
118 
119 endmodule // read_pattern
120         9、自动比较输出结果
121 `define EOF 32'hFFFF_FFFF
122 `define NULL 0
123 `define MAX_LINE_LENGTH 1000
124 module compare;
125 integer file, r;
126 reg a, b, expect, clock;
127 wire out;
128 reg [`MAX_LINE_LENGTH*8:1];
129 parameter cycle = 20;
130 
131 initial
132     begin : file_block
133     $display("Time Stim Expect Output");
134     clock = 0;
135 
136     file = $fopenr("compare.pat");
137     if (file == `NULL)
138         disable file_block;
139 
140     r = $fgets(line, MAX_LINE_LENGTH, file); // Skip comments
141     r = $fgets(line, MAX_LINE_LENGTH, file);
142 
143     while (!$feof(file))
144         begin
145         // Wait until rising clock, read stimulus
146         @(posedge clock)
147         r = $fscanf(file, " %b %b %b\n", a, b, expect);
148 
149         // Wait just before the end of cycle to do compare
150         #(cycle - 1)
151         $display("%d %b %b %b %b", $stime, a, b, expect, out);
152         $strobe_compare(expect, out);
153         end // while not EOF
154 
155     r = $fcloser(file);
156     $stop;
157     end // initial
158 
159 always #(cycle / 2) clock = !clock; // Clock generator
160 
161 and #4 (out, a, b); // Circuit under test
162 endmodule // compare
163         10、从文件中读数据到mem(这个好像一般人用的最多了)
164 `define EOF 32'HFFFF_FFFF
165 `define MEM_SIZE 200_000
166 module load_mem;
167 integer file, i;
168 reg [7:0] mem[0:`MEM_SIZE];
169 reg [80*8:1] file_name;
170 initial    
171 begin    
172 file_name = "data.bin";    
173 file = $fopenr(file_name);    
174 i = $fread(file, mem[0]);    
175 $display("Loaded %0d entries \n", i);    
176 i = $fcloser(file);    
177 $stop;    
178 end endmodule // load_mem

 

posted @ 2012-12-21 17:42  天马行空W  阅读(28402)  评论(1编辑  收藏  举报