2016-10-14 6 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]); 

При использовании % у - быть в курсе вашей системы байт заказа, он использует родной по умолчанию.