2016-10-14 118 views
0

我知道,如果我的Verilog輸出二進制文件,那麼我可以使用下面的Verilog IO標準功能:的Verilog fwrite的輸出字節

$fwrite(fd,"%u",32'hABCDE124); 

但上面的命令寫入的4字節數據到文件。如果我想寫入的二進制數據只有一個字節,兩個字節或三個字節會怎樣? 我該怎麼做?

例如,我知道下面會不會做我想做的:

$fwrite(fd,"%u",8'h24); 
$fwrite(fd,"%u",16'hE124); 
$fwrite(fd,"%u",24'hCDE124); 

有沒有辦法,我可以寫一個非4字節的多個數據到一個文件什麼辦法?

感謝,

--Rudy

回答

0

您可以使用%c寫出一個字節。您可以使用的比特流投射到您的數據轉換成字節數組,然後做

foreach(array_of_bytes[i]) $fwrite(fd,"%c",array_of_bytes[i]); 

如果你有大量的數據,你可能想通過寫出來的4-多重優化這個字節爲%u,其餘字節爲'%c'。

0

我建議dave_59的答案的另一個版本。關鍵是使用多個%c

wire [7:0] byte; 
wire [15:0] two_bytes; 
wire [23:0] three_bytes; 
---- 
assign byte = 8'h24; 
assign two_bytes = 16'hE124; 
assign three_bytes = 24'hCDE124; 
---- 
$fwrite(fd_s,"%c",byte); 
$fwrite(fd_s,"%c%c",two_bytes[15-:8],two_bytes[7-:8]); 
$fwrite(fd_s,"%c%c%c",three_bytes[23-:8],three_bytes[15-:8],three_bytes[7-:8]); 

當使用%U - 要知道你的系統字節順序的,它使用本地默認。