OpenCores
URL https://opencores.org/ocsvn/openfire2/openfire2/trunk

Subversion Repositories openfire2

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /
    from Rev 1 to Rev 2
    Reverse comparison

Rev 1 → Rev 2

/trunk/utils/append-prom.bat
0,0 → 1,2
@echo off
pc.pl -f mcs -swap on -uf %1 -pf %2
trunk/utils/append-prom.bat Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/utils/bin2prom.exe =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/utils/bin2prom.exe =================================================================== --- trunk/utils/bin2prom.exe (nonexistent) +++ trunk/utils/bin2prom.exe (revision 2)
trunk/utils/bin2prom.exe Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/utils/bin2rom.exe =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/utils/bin2rom.exe =================================================================== --- trunk/utils/bin2rom.exe (nonexistent) +++ trunk/utils/bin2rom.exe (revision 2)
trunk/utils/bin2rom.exe Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/utils/bin2prom.c =================================================================== --- trunk/utils/bin2prom.c (nonexistent) +++ trunk/utils/bin2prom.c (revision 2) @@ -0,0 +1,57 @@ +#include +#include + +#define PROM_SYNC_PATTERN "8F9FAFBF" + +long filesize(FILE *stream) +{ + long curpos, length; + + curpos = ftell(stream); + fseek(stream, 0L, SEEK_END); + length = ftell(stream); + fseek(stream, curpos, SEEK_SET); + return length; +} + +void main(int argn, char **argc) +{ + int len, k; + FILE *f1, *f2; + char c; + + if(argn < 4 || argn > 5) + { + printf("usage: bin2prom bin-file prom-file file-num [sync pattern]\n"); + exit(1); + } + f1 = fopen(argc[1], "rb"); // open bin file + if(f1 == NULL) + { + printf("error: can't open BIN file %s\n", argc[1]); + exit(1); + } + len = filesize(f1); // get file size + f2 = fopen(argc[2], "w"); // create prom file (ascii) + // headers (for info) + fprintf(f2, "# SYNC PATTERN: 0x%s\n", argn == 5 ? argc[4] : PROM_SYNC_PATTERN); + fprintf(f2, "# FILE NUMBER : 0x%02X\n", atoi(argc[3]) ); + fprintf(f2, "# FILE SIZE : 0x%06X\n", len & 0xFFFFFF); + + fprintf(f2, "%s", argn == 5 ? argc[4] : PROM_SYNC_PATTERN); // 4 bytes write header + fprintf(f2, "%02X", atoi(argc[3])); // 1 bytes + fprintf(f2, "%06X", len & 0xFFFFFF); // 3 bytes + + k = 8; // current header is 8 bytes length + while(len-- > 0) + { + fread(&c, sizeof(char), 1, f1); // read current byte + fprintf(f2, "%02X", ((unsigned) c) & 0xff); + if(++k == 16) { fprintf(f2, "\n"); k = 0; } + } + for(; k < 16; k++) fprintf(f2, "00"); + + fprintf(f2, "\n"); + fclose(f2); + fclose(f1); +} \ No newline at end of file Index: trunk/utils/bin2rom.c =================================================================== --- trunk/utils/bin2rom.c (nonexistent) +++ trunk/utils/bin2rom.c (revision 2) @@ -0,0 +1,37 @@ +#include +#include +#include + +void main(int argn, char **argc) +{ + FILE *f1, *f2; + unsigned char bloque[4]; + int swap; + + if(argn < 3 || argn > 4) + { + printf("uso: bin2rom [-swap]\n"); + exit(1); + } + if(argn == 4 && strcmpi(argc[3], "-swap") == 1) swap = 1; else swap = 0; + + f1 = fopen(argc[1], "rb"); + f2 = fopen(argc[2], "w"); + + while( !feof(f1) ) + { + fread(bloque, 4, 1, f1); + if(swap) + fprintf(f2, "%02x%02x%02x%02x\n", ((unsigned)bloque[3]) & 0xff, + ((unsigned)bloque[2])&0xff, ((unsigned)bloque[1])&0xff, + ((unsigned)bloque[0])&0xff); + else + fprintf(f2, "%02x%02x%02x%02x\n", ((unsigned)bloque[0]) & 0xff, + ((unsigned)bloque[1])&0xff, ((unsigned)bloque[2])&0xff, + ((unsigned)bloque[3])&0xff); + } + fclose(f1); + fclose(f2); +} + + Index: trunk/utils/ensamblar.bat =================================================================== --- trunk/utils/ensamblar.bat (nonexistent) +++ trunk/utils/ensamblar.bat (revision 2) @@ -0,0 +1,12 @@ +@echo off +if not exist %1.asm goto error +mb-as -a=%1.lst -o %1.o %1.asm %2 %3 %4 %5 %6 +mb-ld -N -Ttext 0x0 --cref -Map %1.map -o %1.elf %1.o +mb-objcopy -O binary %1.elf %1.bin +..\..\utils\bin2bram ..\..\rtl\openfire_template_bootram.v %1.bin %1.v +rm %1.o +rm %1.elf +goto fin +:error +echo error: %1.asm no existe +:fin
trunk/utils/ensamblar.bat Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/utils/compilar.bat =================================================================== --- trunk/utils/compilar.bat (nonexistent) +++ trunk/utils/compilar.bat (revision 2) @@ -0,0 +1,11 @@ +@echo off +if not exist %1.c goto error +mb-gcc -Wl,"-Map=%1.map" -Wl,"-Ttext=0x0" -Wa,-ahlms=%1.lst -nostartfiles -nodefaultlibs %1.c +mb-objcopy -O binary a.out %1.bin +..\utils\bin2bram ..\rtl\openfire_template_bootram.v %1.bin %1.v +rm a.out +rm %1.bin +goto fin +:error +echo No existe fichero %1.c +:fin
trunk/utils/compilar.bat Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Index: trunk/utils/bin2bram.exe =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: trunk/utils/bin2bram.exe =================================================================== --- trunk/utils/bin2bram.exe (nonexistent) +++ trunk/utils/bin2bram.exe (revision 2)
trunk/utils/bin2bram.exe Property changes : Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: trunk/utils/pc.pl =================================================================== --- trunk/utils/pc.pl (nonexistent) +++ trunk/utils/pc.pl (revision 2) @@ -0,0 +1,560 @@ +####***************************************************************************************** +####** +####** Disclaimer: LIMITED WARRANTY AND DISCLAMER. These designs are +####** provided to you "as is". Xilinx and its licensors make and you +####** receive no warranties or conditions, express, implied, statutory +####** or otherwise, and Xilinx specifically disclaims any implied +####** warranties of merchantability, non-infringement, or fitness for a +####** particular purpose. Xilinx does not warrant that the functions +####** contained in these designs will meet your requirements, or that the +####** operation of these designs will be uninterrupted or error free, or +####** that defects in the Designs will be corrected. Furthermore, Xilinx +####** does not warrant or make any representations regarding use or the +####** results of the use of the designs in terms of correctness, accuracy, +####** reliability, or otherwise. +####** +####** LIMITATION OF LIABILITY. In no event will Xilinx or its licensors be +####** liable for any loss of data, lost profits, cost or procurement of +####** substitute goods or services, or for any special, incidental, +####** consequential, or indirect damages arising from the use or operation +####** of the designs or accompanying documentation, however caused and on +####** any theory of liability. This limitation will apply even if Xilinx +####** has been advised of the possibility of such damage. This limitation +####** shall apply not-withstanding the failure of the essential purpose of +####** any limited remedies herein. +####** +####***************************************************************************************** + +print "**********************************\n"; +print "*\n"; +print "* Preliminary script v1.01\n"; +print "* Author: Stephan Neuhold\n"; +print "*\n"; +print "**********************************\n\n"; +# +# +# +# +################################ +################################ +#Default commandline switch settings +%default = ( -f => mcs, + -swap => off, + -uf => user.txt, + -pf => prom.mcs); +# +# +# +# +################################ +################################ +#Define USAGE of script +sub usage +{ + if ($argument eq "-f") + { + print "You have not specified a PROM file format!\n" + } + elsif ($argument eq "-swap") + { + print "You have not specified if bits should be swapped or not!\n" + } + elsif ($argument eq "-uf") + { + print "You have not specified a file containing user data!\n" + } + elsif ($argument eq "-pf") + { + print "You have not specifed a PROM file!\n" + } + print "usage:\n + pc.pl [-f : PROM file format {mcs|hex}] [-swap : bits should be swapped {on|off}] [-uf : user data file {}] [-pf : PROM file {filename.ext}]\n + -f = PROM file format used + mcs => Intel file format + hex => Simple hex file format\n + + -swap = Specify if bits are to be swapped + on => swaps bits in every byte + off => bits are not swapped\n + + -uf = File containing user data to be added to PROM file\n + + -pf = PROM file to which user data is to be added\n\n"; +} +# +# +# +# +################################ +################################ +#Place command line arguments into hash +%commandline_arguments = @ARGV; +# +# +# +# +################################ +################################ +#Check if all necessary arguments have been given and store them seperately +foreach $argument(keys (%default)) +{ + if (exists($commandline_arguments{$argument})) + { + if ($argument eq "-f") + { + $format = $commandline_arguments{$argument}; + } + elsif ($argument eq "-swap") + { + $do_swap = $commandline_arguments{$argument}; + } + elsif ($argument eq "-uf") + { + $user_file = $commandline_arguments{$argument}; + } + elsif ($argument eq "-pf") + { + $prom_file = $commandline_arguments{$argument}; + } + } + else + { + print usage($argument); + exit; + } +} +# +# +# +# +################################ +################################ +#Initialise all variables +$prom_line_number = 0; +$user_line_number = 0; +# +# +# +# +################################ +################################ +#Print settings used +print "\n\n"; +print "Running script with following settings:\n"; +print " PROM file format ==> $format\n"; +print " Bit swapping ==> $do_swap\n"; +print " User data file ==> $user_file\n"; +print " Original PROM file ==> $prom_file\n\n\n"; +print "New PROM file is ==> new_$prom_file\n\n"; +# +# +# +# +################################ +################################ +#Open files and begin processing +open (PROM_FILE, "<$prom_file") || die "Cannot open file $prom_file: $!"; +open (NEW_PROM_FILE, ">new_$prom_file") || die "Cannot open file new_$prom_file: $!"; +open (USER_DATA, "<$user_file") || die "Cannot open file $user_file: $!"; +while () +{ + $current_prom_line = $_; + + #Process "mcs" file format + if ($format eq "mcs") + { + print "Copying original PROM line number $prom_line_number... \r"; + $prom_line_number = $prom_line_number + 1; + + #Get the last information for record type "04" + get_current_mcs_prom_line_data(); + + #If the current PROM line is not the last line in the PROM + #file then just print it into the new PROM file. If the line + #is the last line in the PROM file then we take the previous + #line and find its address, so we can add a new line, with + #new data at the next address. Also, we calculate a checksum + #for the new line in the PROM file and append that to the new + #PROM line. + if ($current_prom_line =~ /\:00000001FF$/) + { + print "\n"; + #New address offset starts at 0 + $new_address_offset = 0; + #Add user data to PROM file + while () + { + chomp; + if ($_ =~ /^\#/) + { + #Ignoring comments + print "Ignoring comment\r"; + } + elsif ($_ =~ /\#/g) + { + @split_user_line = split(/\#/, $_); + $current_user_line = @split_user_line[0]; + print "Processing USER line $user_line_number... \r"; + $user_line_number = $user_line_number + 1; + #Calculate the new address + get_mcs_address(); + } + else + { + $current_user_line = $_; + print "Processing USER line $user_line_number... \r"; + $user_line_number = $user_line_number + 1; + #Calculate the new address + get_mcs_address(); + } + } + print NEW_PROM_FILE $current_prom_line; + } + else + { + #Print the line to the new PROM file unchanged + print NEW_PROM_FILE $current_prom_line; + #Store the current line for use in next iteration + $previous_prom_line = $current_prom_line; + } + } + elsif ($format eq "hex") + { + #Print the original PROM file contents to the new PROM file. + if ($do_swap eq "on") + { + $current_prom_line = $_; + print "Copying original PROM line number $prom_line_number...\r"; + $prom_line_number = $prom_line_number + 1; + print NEW_PROM_FILE $current_prom_line; + print "\n"; + while () + { + if ($_ =~ /^\#/) + { + print "Ignoring comment\r"; + } + elsif ($_ =~ /\#/g) + { + chomp; + @split_user_line = split(/\#/, $_); + $current_user_line = @split_user_line[0]; + print "Processing USER line $user_line_number... \r"; + $user_line_number = $user_line_number + 1; + #Extract bytes from user data + (@bytes_hex) = unpack("A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2", $current_user_line); + foreach $byte_hex(@bytes_hex) + { + #Convert hex to decimal + $byte_dec = hex($byte_hex); + #Convert decimal to binary + $byte_binary = decimal2binary($byte_dec); + #Get the last eight bits + $last_eight_bits = substr($byte_binary, -8); + #Extract each bit + (@last_eight_bits_not_swapped) = unpack("A1 A1 A1 A1 A1 A1 A1 A1", $last_eight_bits); + #Bit swap each bit + @last_eight_bits_swapped = reverse(@last_eight_bits_not_swapped); + $byte_swapped_bin = 0; + #Concatenate the bits to form a byte + foreach $bit(@last_eight_bits_swapped) + { + $byte_swapped_bin = $byte_swapped_bin.$bit; + } + #Convert binary to decimal + $byte_swapped_dec = binary2decimal($byte_swapped_bin); + #Convert decimal to hex + $byte_swapped_hex = sprintf "%lx", $byte_swapped_dec; + #Get the last byte + $byte_hex = substr($byte_swapped_hex, -2); + #If the value is less than 0x0F then concatenate a "0" to the front + if ($byte_swapped_dec <= 15) + { + $byte_hex = "0$byte_hex"; + } + print NEW_PROM_FILE uc("$byte_hex"); + } + } + else + { + chomp; + $current_user_line = $_; + print "Processing USER line $user_line_number... \r"; + $user_line_number = $user_line_number + 1; + #Extract bytes from user data + (@bytes_hex) = unpack("A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2", $current_user_line); + foreach $byte_hex(@bytes_hex) + { + #Convert hex to decimal + $byte_dec = hex($byte_hex); + #Convert decimal to binary + $byte_binary = decimal2binary($byte_dec); + #Get the last eight bits + $last_eight_bits = substr($byte_binary, -8); + #Extract each bit + (@last_eight_bits_not_swapped) = unpack("A1 A1 A1 A1 A1 A1 A1 A1", $last_eight_bits); + #Bit swap each bit + @last_eight_bits_swapped = reverse(@last_eight_bits_not_swapped); + $byte_swapped_bin = 0; + #Concatenate the bits to form a byte + foreach $bit(@last_eight_bits_swapped) + { + $byte_swapped_bin = $byte_swapped_bin.$bit; + } + #Convert binary to decimal + $byte_swapped_dec = binary2decimal($byte_swapped_bin); + #Convert decimal to hex + $byte_swapped_hex = sprintf "%lx", $byte_swapped_dec; + #Get the last byte + $byte_hex = substr($byte_swapped_hex, -2); + #If the value is less than 0x0F then concatenate a "0" to the front + if ($byte_swapped_dec <= 15) + { + $byte_hex = "0$byte_hex"; + } + print NEW_PROM_FILE uc("$byte_hex"); + } + } + } + } + #Simply print the original file and then the user data + #into the new PROM file. + elsif ($do_swap eq "off") + { + $current_prom_line = $_; + print "Copying original PROM line number $prom_line_number...\r"; + $prom_line_number = $prom_line_number + 1; + print NEW_PROM_FILE $current_prom_line; + print "\n"; + while () + { + if ($_ =~ /^\#/) + { + print "Ignoring comment\r"; + } + elsif ($_ =~ /\#/g) + { + chomp; + @split_user_line = split(/\#/, $_); + $current_user_line = @split_user_line[0]; + print "Processing USER line $user_line_number... \r"; + $user_line_number = $user_line_number + 1; + print NEW_PROM_FILE uc("$current_user_line"); + } + else + { + chomp; + print "Processing USER line $user_line_number... \r"; + $user_line_number = $user_line_number + 1; + $current_user_line = $_; + print NEW_PROM_FILE uc("$current_user_line"); + } + } + } + } +} +close (USER_DATA) || die "Cannot close file $user_file: $!"; +close (PROM_FILE) || die "Cannot close file $prom_file: $!"; +close (NEW_PROM_FILE) || die "Cannot close file new_$prom_file: $!"; +print "\nDONE...\n"; +# +# +# +# +################################ +################################ +#Get the data from the current prom line +sub get_current_mcs_prom_line_data +{ + ($start_character, $byte_count_hex) = unpack("A1 A2", $current_prom_line); + #Convert byte count from hex to decimal + $byte_count_dec = hex($byte_count_hex); + $byte_count_dec = $byte_count_dec * 2; + #Based on byte count get other fields from the PROM line + ( $start_character, + $byte_count_hex, + $address_hex[0], + $address_hex[1], + $record_type_hex, + $all_data_hex, + $checksum_hex + ) = unpack("A1 A2 A2 A2 A2 A$byte_count_dec A2", $current_prom_line); + #If this is a "04" record type then store its information + if ($record_type eq "04") + { + $last_04_record_data_hex = $all_data_hex; + } +} +# +# +# +# +################################ +################################ +#Calculate the new address to be used +sub get_mcs_address +{ + #Get the address from the PROM file + ($address_hex) = unpack("x3 A4", $previous_prom_line); + #Convert the hex address to decimal + $address_dec = hex($address_hex); + #Calculate new address value based on existing address value + if ($address_dec eq "65520") + { + #Store current user data temporarily + $temporary_current_user_line = $current_user_line; + #New address starts at zero + $new_address_dec = 0; + $new_address_hex = "0000"; + ($address_hex[0], $address_hex[1]) = unpack("A2 A2", $new_address_hex); + $address_dec[0] = hex($address_hex[0]); + $address_dec[1] = hex($address_hex[1]); + $new_address_offset = 0; + #Convert hex record data to decimal + $new_04_record_data_dec = hex($last_04_record_data_hex); + #Calculate new record "04" data + $new_04_record_data_dec = $new_04_record_data_dec + 1; + #Convert to hex + $new_04_record_data_hex = sprintf "%lx", $new_04_record_data_dec; + #Store for next use + $last_04_record_data_hex = $new_04_record_data_hex; + #Make data at least 4 characters long (i.e. 2 data bytes) + $length = length($new_04_record_data_hex); + if ($length > 4) + { + die "Record data is too large....Quitting: $!"; + } + else + { + for ($i = 0; $i < 4 - $length; $i++) + { + $new_04_record_data_hex = "0$new_04_record_data_hex"; + } + } + #Define new record data + $byte_count_hex = "02"; + $byte_count_dec = hex($byte_count_hex); + $record_type_hex = "04"; + $record_type_dec = hex($record_type_hex); + $current_user_line = $new_04_record_data_hex; + #Calculate checksum for new "04" record + calculate_mcs_checksum(); + #Print new "04" record to new PROM file + print NEW_PROM_FILE uc(":$byte_count_hex$new_address_hex$record_type_hex$new_04_record_data_hex$checksum_hex\n"); + $previous_prom_line = uc(":$byte_count_hex$new_address_hex$record_type_hex$new_04_record_data_hex$checksum_hex\n"); + #Restore current user data from temporary storage + $current_user_line = $temporary_current_user_line; + } + else + { + #Calculate the offset for the next address to be used in the PROM file + $new_address_offset = 16;#$new_address_offset + 16; + #Calculate the new address + $new_address_dec = $address_dec + $new_address_offset; + } + #Convert new address to hex + $new_address_hex = sprintf "%lx", $new_address_dec; + #Make address at least 4 characters long (i.e. 2 address bytes) + $length = length($new_address_hex); + if ($length > 4) + { + die "Address is too large....Quitting: $!"; + } + else + { + for ($i = 0; $i < 4 - $length; $i++) + { + $new_address_hex = "0$new_address_hex"; + } + } + ($address_hex[0], $address_hex[1]) = unpack("A2 A2", $new_address_hex); + $address_dec[0] = hex($address_hex[0]); + $address_dec[1] = hex($address_hex[1]); + $byte_count_dec = "16"; + $byte_count_hex = "10"; + $record_type_dec = "00"; + $record_type_hex = "00"; + #Calculate checksum for current user data + calculate_mcs_checksum(); + #Print new data to new PROM file + print NEW_PROM_FILE uc(":$byte_count_hex$new_address_hex$record_type_hex$current_user_line$checksum_hex\n"); + $previous_prom_line = uc(":$byte_count_hex$new_address_hex$record_type_hex$current_user_line$checksum_hex\n"); +} +# +# +# +# +################################ +################################ +#Calculate the checksum for the new line +sub calculate_mcs_checksum +{ + $skip = 0; + $data_sum_hex = 0; + $data_sum_dec = 0; + #Based on byte count get individual data bytes and their sum + for ($d = 0; $d < $byte_count_dec; $d++) + { + ($data_hex[$d]) = unpack("x$skip A2", $current_user_line); + $skip = $skip + 2; + #Convert data byte to decimal format + $data_dec[$d] = hex($data_hex[$d]); + #Add all data bytes together + $data_sum_dec = $data_sum_dec + $data_dec[$d]; + #convert decimal to hex format + $data_sum_hex = sprintf "%lx", $data_sum_dec; + } + #Add all fields together + $all_sum_dec = $data_sum_dec + $byte_count_dec + $address_dec[0] + $address_dec[1] + $record_type_dec; + #Convert the decimal sum to hex format + $all_sum_hex = sprintf "%lx", $all_sum_dec; + #Get the last two bytes of the hex sum + $last_two_bytes_of_sum_hex = substr($all_sum_hex, -2); + #Convert the last two bytes of the hex sum to decimal format + $last_two_bytes_of_sum_dec = hex($last_two_bytes_of_sum_hex); + #Invert the bits - 1's complement + $inverted_dec = $last_two_bytes_of_sum_dec ^ 255; + #Convert the 1's complement to hex format + $inverted_hex = sprintf "%lx", $inverted_dec; + #Get the last two bytes of 1's complement in hex format + $last_two_bytes_of_inverted_dec = hex($inverted_hex); + #Add 1 to last two bytes - 2's complement + $checksum_dec = $last_two_bytes_of_inverted_dec + 1; + #Convert 2's complement to hex format + $last_two_bytes_2s_hex = uc(sprintf "%lx", $checksum_dec); + #Get the last two bytes of hex 2's compliment + ($checksum_he) = substr($last_two_bytes_2s_hex, -2); + #If value is less than two characters then add a '0' + if ($checksum_dec <= 15) + { + $checksum_hex = "0$checksum_he"; + } + else + { + $checksum_hex = $checksum_he; + } +} +# +# +# +# +################################ +################################ +#Decimal to binary representation conversion +sub decimal2binary +{ + my $bin_value = unpack("B32", pack("N", shift)); + $bin_value =~ s/^0+(?=d)//; + return $bin_value; +} +# +# +# +# +################################ +################################ +#Binary to decimal representation conversion +sub binary2decimal +{ + return unpack("N", pack("B32", substr("0" x 32 . shift, -32))); +} \ No newline at end of file Index: trunk/utils/bin2bram.c =================================================================== --- trunk/utils/bin2bram.c (nonexistent) +++ trunk/utils/bin2bram.c (revision 2) @@ -0,0 +1,93 @@ +// bin2bram : program to fill the template "bootram" with the provided +// binary code + +#include +#include +#include + +#define MAX_RAM 2048 +#define MAX_LINE 128 +#define DUMP_TOKEN "$DUMP_INIT_RAM" +#define DUMP_LINE "defparam MEM%u.INIT_%02X = 256'h%s;\n" /* memory content */ +#define DUMP_INITIAL_1 "defparam MEM%u.INIT_%c = 9'h0%02X;\n" /* dword 0 at startupt */ +#define DUMP_INITIAL_2 "defparam MEM%u.SRVAL_%c = 9'h0%02X;\n" /* dword 0 at reset */ + +int main(int argn, char **argc) +{ + char line[MAX_LINE], hexcodes[MAX_LINE], tmp[MAX_LINE]; + char memory[MAX_RAM][4]; // code loaded from BIN file + int count, offset = 0; + FILE *f, *ftemplate; + + if(argn != 4) + { + printf("usage: %s