예제 #1
0
파일: rdl.py 프로젝트: rainliu20/regenerate
    def save(self, reg_list):
        """
        Converts the extracted data into register and bit field values, and
        loads the new data into the database.
        """
        lookup = {'rw': BitField.READ_WRITE,
                  'w': BitField.WRITE_ONLY,
                  'r': BitField.READ_ONLY}

        for (reg_name, addr_txt, field_list) in reg_list:
            register = Register()
            register.address = int(addr_txt, 16)
            register.register_name = reg_name
            register.token = reg_name
            self.dbase.add_register(register)

            for item in field_list:
                field = BitField()
                field.field_name = item.name
                field.field_type = lookup.get(item.software_access,
                                              BitField.READ_ONLY)
                field.start_position = item.start
                field.stop_position = item.stop
                field.reset_value = item.reset
                field.description = item.description
                register.add_bit_field(field)
예제 #2
0
    def save(self, reg_list):
        """
        Converts the extracted data into register and bit field values, and
        loads the new data into the database.
        """
        lookup = {'rw': BitField.TYPE_READ_WRITE,
                  'w': BitField.TYPE_WRITE_ONLY,
                  'r': BitField.TYPE_READ_ONLY}

        name_count = {}
        for reg in reg_list:
            for item in reg.field_list:
                if item.name in name_count:
                    name_count[item.name] = name_count[item.name] + 1
                else:
                    name_count[item.name] = 1
        duplicates = set([key for key in name_count if name_count[key] > 1])
        current_duplicates = {}

        offset = self.dbase.data_bus_width / 8

        for reg in reg_list:
            register = Register()
            register.address = reg.address
            register.register_name = reg.reg_name
            register.token = reg.token
            if not reg.description:
                register.description = reg.description
            else:
                register.description = reg.reg_name
            register.width = self.dbase.data_bus_width
            
            for item in reg.field_list:
                if item.name.startswith("OBSOLETE"):
                    continue

                delta = (register.address % offset) * 8

                if item.name in duplicates:
                    if item.name in current_duplicates:
                        index = current_duplicates[item.name] + 1
                    else:
                        index = 1
                    current_duplicates[item.name] = index
                    name = "%s_%d" % (item.name, index)
                else:
                    name = item.name
                width = (item.stop - item.start) + 1

                field = BitField()
                field.field_name = name
                field.field_type = lookup.get(item.software_access,
                                              BitField.READ_ONLY)
                field.start_position = item.start - delta
                field.stop_position = item.stop - delta
                field.reset_value = item.reset
                field.volatile = item.volatile
                field.description = item.description
                register.add_bit_field(field)
            self.dbase.add_register(register)
예제 #3
0
    def save(self, reg_list):
        """
        Converts the extracted data into register and bit field values, and
        loads the new data into the database.
        """
        lookup = {
            '"rw"': BitField.TYPE_READ_WRITE,
            '"w"': BitField.TYPE_WRITE_ONLY,
            '"r"': BitField.TYPE_READ_ONLY
        }

        for (reg_name, addr_txt, width, field_list) in reg_list:
            register = Register()
            register.address = int(addr_txt, 16)
            register.register_name = reg_name
            register.width = width
            register.token = reg_name
            self.dbase.add_register(register)

            for item in field_list:
                field = BitField()
                field.field_name = item.name
                try:
                    field.field_type = lookup[item.software_access]
                except IndexError:
                    field.field_type = BitField.TYPE_READ_ONLY

                field.start_position = item.start
                field.stop_position = item.stop
                field.reset_value = item.reset
                field.description = item.description
                register.add_bit_field(field)