新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

python で Xilinx の bit ファイルを解析

http://moxi.jp/wiki/wiki.cgi?page=H8(PIC%2CAVR)%A4%CA%A4%C9%A4%AB%A4%E9+SpartanII+%A4%F2%A5%B3%A5%F3%A5%D5%A5%A3%A5%B0%A4%B9%A4%EB%BC%EA%BD%E7
この通りに解析したら bit ファイルを bin ファイルにできた

       def skip_field(self, fin, is_print = False) :
                return self.__skip_field(fin, is_print)

        def __copy_body(self, fin, bin_file) :
                field_len, = unpack(">L", fin.read(4)) # big endian
                print "field_len:", field_len
                if bin_file != False :
                        fout = open(bin_file, "wb")
                else:
                        fout = fd

                for i in range(0, field_len, 4) :
                        data, = unpack(">L", fin.read(4))
                        fout.write(pack("<L", data))

                if bin_file != False :
                        fout.close()

       def strip_bit(self, bit_file, bin_file = False) :
                with open(bit_file, "rb") as fin:
                        self.__skip_field(fin)
                        self.__skip_field(fin)
                        self.__skip_field(fin)

                        magic = fin.read(1)
                        if magic != 'b' :
                                return False
                        self.__skip_field(fin)

                        magic = fin.read(1)
                        if magic != 'c' :
                                return False
                        self.__skip_field(fin)

                        magic = fin.read(1)
                        if magic != 'd' :
                                return False
                        self.__skip_field(fin)

                        magic = fin.read(1)
                        if magic != 'e' :
                                return False
                        self.__copy_body(fin, bin_file)