Оглавление
§ Актуальная версия
Я написал программу для языка программирования PHP для ПЛИС из-за того что мне он хорошо знаком, а Python я не изучал и как-то пока не хочется. Так что запускать можно пока что вот так:
php bin2mif.php 32 in.bin out.mif
Здесь 32 – объем 32Кб; in.bin – входящий файл; out.mif – исходящий.
Можно опустить последний аргумент и будет выдано в stdout.
<?php
/*
* Конвертирование из Bin -> MIF файл
* Аргумент 1 : Размер памяти (256k = 262144 )
* Аргумент 2 : bin-файл
* Аргумент 3 : Куда выгрузить
*/
$size = (int ) $argv [1 ];
$data = file_get_contents ($argv [2 ]);
$len = strlen($data );
if ($size < 1024 ) $size *= 1024 ;
if (empty($size )) { echo "size required\n" ; exit(1 ); }
$out = [
"WIDTH=8;" ,
"DEPTH=$size;" ,
"ADDRESS_RADIX=HEX;" ,
"DATA_RADIX=HEX;" ,
"CONTENT BEGIN" ,
];
$a = 0 ;
while ($a < $len ) {
for ($b = $a + 1 ; $b < $len && $data [$a ] == $data [$b ]; $b ++);
if ($b - $a < 3 ) {
for ($i = $a ; $i < $b ; $i ++) $out [] = sprintf (" %X: %02X;" , $a ++, ord($data [$i ]));
} else {
$out [] = sprintf (" [%X..%X]: %02X;" , $a , $b - 1 , ord($data [$a ]));
$a = $b ;
}
}
if ($len < $size ) $out [] = sprintf (" [%X..%X]: 00;" , $len , $size -1 );
$out [] = "END;" ;
$pb = join ("\n" , $out );
if (isset ($argv [3 ])) file_put_contents ($argv [3 ], $pb ); else echo $pb ;
§ Упрощенная версия
Также можно использовать версию попроще. Но надо чтобы $data был заполнен какими-то определенными значениями.
WIDTH: Ширина 8 бит
DEPTH: Количество байт
$out = "WIDTH=8;\nDEPTH=256;\nADDRESS_RADIX=HEX;\nDATA_RADIX=HEX;\nCONTENT BEGIN\n" ;
for ($i = 0 ; $i < 256 ; $i ++) $out .= sprintf (" %02X: %02X;\n" , $i , $data [$i ]);
$out .= "END;\n" ;
© 2011-2026 Все права защищены (10 янв, 13:12)