• 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
  • 相关阅读:
    远程桌面连接win10问题解决
    为什么n各节点的的二叉链表中有n+1个空链域
    西门子Step7找不到有效授权的解决方法
    表达式树获取函数命名
    逆波兰表达式
    双向循环链表实践
    快速找到未知长度单链表的中间节点
    java的ArrayList(线性表)和LinkedList(双向链表)的深入学习
    23种设计模式中的访问者模式
    23种设计模式中的原型模式
  • 原文地址:https://www.cnblogs.com/woshitianma/p/2828370.html
Copyright © 2020-2023  润新知