スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[SystemVerilog] $fopenを使おう(Read編 - その1)

今回は Read編です。

  • indata.txt
  • W 100
    R
    I 10
    

というテキストがあったとします。
これを各方法で読んだ場合どういう結果になるかというと。


$fgets

  • サンプルコード

  • module testbench ();
    
      int fd;
      int data = 0;
    
      initial begin
        fd = $fopen("indata.txt", "r");
        data = $fgetc(fd); $display("data = %s", data);
        data = $fgetc(fd); $display("data = %s", data);
        data = $fgetc(fd); $display("data = %s", data);
        data = $fgetc(fd); $display("data = %s", data);
        data = $fgetc(fd); $display("data = %s", data);
        data = $fgetc(fd); $display("data = %s", data);
        data = $fgetc(fd); $display("data = %s", data);
        data = $fgetc(fd); $display("data = %s", data);
        data = $fgetc(fd); $display("data = %s", data);
      end
    
      final begin
        $fclose(fd); 
      end
    
    endmodule: testbench
  • 実行結果

  • # run -all 
    # data =    W
    # data =     
    # data =    1
    # data =    0
    # data =    0
    # data =    
    # 
    # data =    R
    # data =    
    # 
    # data =    I
    #  quit 
    

となります。


$ungetc

$fgetcを繰り返すことで、次々とテキストが Readされていることが分かると思います。


$ungetcを使うことで、テキストの読み位置を戻すことが出来ます。

  • サンプルコード

  • module testbench ();
    
      int fd;
      int data = 0;
      int _data = 0;
    
      initial begin
        fd = $fopen("indata.txt", "r");
        data = $fgetc(fd);           $write("data = %s, ", data);
          _data = $ungetc(data, fd); $write("data_ = %s\n", _data);
        data = $fgetc(fd);           $write("data = %s, ", data);
          _data = $ungetc(data, fd); $write("data_ = %s\n", _data);
        data = $fgetc(fd);           $write("data = %s, ", data);
          _data = $ungetc(data, fd); $write("data_ = %s\n", _data);
        data = $fgetc(fd);           $write("data = %s, ", data);
          _data = $ungetc(data, fd); $write("data_ = %s\n", _data);
        data = $fgetc(fd);           $write("data = %s, ", data);
          _data = $ungetc(data, fd); $write("data_ = %s\n", _data);
      end
    
      final begin
        $fclose(fd); 
      end
    
    endmodule: testbench
  • 実行結果

  • # run -all 
    # data =    W, data_ =     
    # data =    W, data_ =     
    # data =    W, data_ =     
    # data =    W, data_ =     
    # data =    W, data_ =     
    #  quit 
    

というように先頭の「W」しか Readできていないことが分かります。

関連記事

コメントの投稿

非公開コメント

プロフィール

Kocha

Author:Kocha
なんでもチャレンジ!(^o^)/
E-mail
github:Kocha
イベントカレンダー

カレンダー
09 | 2017/10 | 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
カテゴリ
OVP (4)
最新記事
最新コメント
アーカイブ
リンク
Twitter
アクセス人数
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。