2016-07-21 33 views
-1

私はテストベンチのSystemVerilogにバイナリファイルを書き込もうとしました。バイナリ書き込みSystemVerilog

int file = $fopen(path,"w"); 
if (!file) begin 
    $error("File could not be open: ", path); 
    return; 
end 
$fwrite(file, "%u", 32'h4D424D42); 
$fclose(file); 

そして、取得結果:私はQuestaSum 10.2cを使用 02 0C 02 0C

。 なぜこの結果が得られますか?ありがとう。

+0

使用%hは、http://www.csee.umbc.edu/portal/help/VHDL/verilog/system.html –

+1

何あなたが得ることを期待しないフォーマットの表示を確認してください?なぜこれが問題なのですか?どうやってファイルを読んでいるのですか? – toolic

+0

%hを使用すると、データは "4D424D42"のテキストとしてファイルに出力されます。 $ fwriteデータ型を呼び出す前に、4状態データ型を2状態にキャストして、正しい結果を得ようとしました。 int tmp = int '(32'h4D424D42); $ fwrite(ファイル "%u"、tmp); –

答えて

1

%uは未フォーマットのバイナリデータをファイルに書き込みます。それが読める形式であることは期待しないでください。ファイルをバイナリ形式の "rb"または "wb"で開いていることを確認してください。バイナリデータを読み返してみてください。書き込まれた値が表示されます。

4つの状態値を保存する場合は、%zを使用できます。

int rd; 
int file = $fopen(path,"wb"); // open in binary mode 
if (!file) begin 
    $error("File could not be open: ", path); 
    return; 
end 
$fwrite(file, "%u", 32'h4D424D42); 
$fclose(file); 
// read back binary data from file 
file = $fopen (path,"rb"); // open in binary mode 
if (!file) begin 
    $error("File could not be open: ", path); 
    return; 
end 
$fscanf(file,"%u",rd); 
$fclose(file); 
$display("%h",rd);