예제 #1
0
 def change_repeat(self, path, text):
     """
     Called when the base address of an instance has been edited in the
     InstanceList
     """
     node = self.get_iter(path)
     try:
         int(text)
         self.set_value(node, InstMdl.RPT_COL, text)
     except ValueError:
         LOGGER.error('Illegal repeat count: "%s"' % text)
예제 #2
0
 def change_base(self, path, text):
     """
     Called when the base address of an instance has been edited in the
     InstanceList
     """
     node = self.get_iter(path)
     try:
         self.set_value(node, InstMdl.SORT_COL, int(text, 16))
         self.set_value(node, InstMdl.BASE_COL, text)
     except ValueError:
         LOGGER.error('Illegal base address: "%s"' % text)
예제 #3
0
 def change_repeat_offset(self, path, text):
     """
     Called when the base address of an instance has been edited in the
     InstanceList
     """
     node = self.get_iter(path)
     try:
         value = int(text, 16)
         self.set_value(node, InstMdl.OFF_COL, "%x" % value)
     except ValueError:
         LOGGER.error('Illegal repeat offset column: "%s"' % text)
예제 #4
0
 def visible_cb(self, model, iter):
     if self._text == "":
         return True
     try:
         search_text = self._text.upper()
         for i in self._fields:
             text = model.get_value(iter, i).upper()
             if text.find(search_text) != -1:
                 return True
         return False
     except:
         LOGGER.error("Error filtering")
         return False
예제 #5
0
 def change_repeat_offset(self, path, text):
     """
     Called when the base address of an instance has been edited in the
     InstanceList
     """
     node = self.get_iter(path)
     try:
         value = int(text, 16)
         self.set_value(node, InstMdl.OFF_COL, "{0:x}".format(value))
         self.callback()
     except ValueError:
         LOGGER.error('Illegal repeat offset column: "{0}"'.format(text))
     obj = self.get_value(node, InstMdl.OBJ_COL)
     if obj:
         obj.repeat_offset = int(text, 16)
예제 #6
0
 def change_repeat(self, path, text):
     """
     Called when the base address of an instance has been edited in the
     InstanceList
     """
     node = self.get_iter(path)
     try:
         int(text)
         self.set_value(node, InstMdl.RPT_COL, text)
         self.callback()
     except ValueError:
         LOGGER.error('Illegal repeat count: "{0}"'.format(text))
     obj = self.get_value(node, InstMdl.OBJ_COL)
     if obj:
         obj.repeat = int(text)
예제 #7
0
 def change_base(self, path, text):
     """
     Called when the base address of an instance has been edited in the
     InstanceList
     """
     node = self.get_iter(path)
     try:
         self.set_value(node, InstMdl.SORT_COL, int(text, 16))
         self.set_value(node, InstMdl.BASE_COL, text)
         self.callback()
     except ValueError:
         LOGGER.error('Illegal base address: "{0}"'.format(text))
     obj = self.get_value(node, InstMdl.OBJ_COL)
     if obj:
         obj.base = int(text, 16)
예제 #8
0
    def change_inst(self, path, text):
        """
        Called when the ID of an instance has been edited in the InstanceList
        """

        items = []
        node = self.get_iter_root()
        while node:
            items.append(self.get_value(node, 0))
            node = self.iter_next(node)

        if text in set(items):
            LOGGER.error('"%s" has already been used as a group name' % text)
        else:
            node = self.get_iter(path)
            self.set_value(node, InstMdl.INST_COL, text)
예제 #9
0
    def _name_changed(self, cell, path, new_text, col):
        """
        Called when the name field is changed.
        """
        if len(path) != 1:
            return

        current_maps = set([i.name for i in self._prj.get_address_maps()])
        if new_text in current_maps:
            LOGGER.error('"%s" has already been used as an address map name'
                         % new_text)
        else:
            node = self._model.get_iter(path)
            name = self._model.get_value(node, AddrMapMdl.NAME_COL)
            self._prj.change_address_map_name(name, new_text)
            self._model[path][AddrMapMdl.NAME_COL] = new_text
            self._prj.set_modified()
예제 #10
0
    def populate(self):
        """
        Loads the data from the project
        """
        if self._prj is None:
            return

        self._model.clear()
        for base in self._prj.get_address_maps():
            if base.width not in INT2SIZE:
                LOGGER.error(
                    'Illegal width ({0}) for address map "{1}"'.format(
                        base.width, base.name))
                base = AddrMapData(base.name, base.base, 4,
                                   base.fixed, base.uvm)
            data = (base.name, "{0:x}".format(base.base), base.fixed,
                    base.uvm, INT2SIZE[base.width], "")
            node = self._model.append(row=data)
예제 #11
0
    def populate(self):
        """
        Loads the data from the project
        """
        if self._prj is None:
            return

        self._model.clear()
        for base in self._prj.get_address_maps():
            if base.width not in INT2SIZE:
                LOGGER.error('Illegal width (%d) for address map "%s"' %
                             (base.width, base.name))
                base = AddrMapData(base.name, base.base, 4, base.fixed)
            data = (base.name, "%x" % base.base, base.fixed,
                    INT2SIZE[base.width])
            node = self._model.append(None, row=data)
            for name in self._prj.get_address_map_groups(base.name):
                self._model.append(node, row=[name, "", False, ""])
예제 #12
0
    def _base_changed(self, cell, path, new_text, col):
        """
        Called when the base address field is changed.
        """
        if len(path) != 1:
            return
        try:
            value = int(new_text, 16)
        except ValueError:
            LOGGER.error('Illegal address: "{0}"'.format(new_text))
            return
        if new_text:
            node = self._model.get_iter(path)
            name = self._model.get_value(node, AddrMapMdl.NAME_COL)
            fixed = self._model.get_value(node, AddrMapMdl.FIXED_COL)
            uvm = self._model.get_value(node, AddrMapMdl.UVM_COL)
            width = STR2SIZE[self._model.get_value(node, AddrMapMdl.WIDTH_COL)]

            self._prj.set_address_map(name, value, width, fixed, uvm)
            self._model[path][AddrMapMdl.BASE_COL] = new_text
            self._prj.modified = True
예제 #13
0
    def change_inst(self, path, text):
        """
        Called when the ID of an instance has been edited in the InstanceList
        """

        items = []
        node = self.get_iter_root()
        while node:
            items.append(self.get_value(node, InstMdl.INST_COL))
            node = self.iter_next(node)

        if text in set(items):
            LOGGER.error(
                '"{0}" has already been used as a group name'.format(text))
        else:
            node = self.get_iter(path)
            self.set_value(node, InstMdl.INST_COL, text)
            self.callback()
            obj = self.get_value(node, InstMdl.OBJ_COL)
            if obj:
                obj.name = text
예제 #14
0
    def change_inst(self, path, text):
        """
        Called when the ID of an instance has been edited in the InstanceList
        """

        # get the previous value, bail if it is the same as the new value

        i2 = self.get_iter(path)
        old_value = self.get_value(i2, InstMdl.INST_COL)
        if old_value == text:
            return

        items = []
        node = self.get_iter_root()
        while node:
            items.append(self.get_value(node, InstMdl.INST_COL))
            node = self.iter_next(node)

        if text in set(items):
            LOGGER.error(
                '"{0}" has already been used as a group name'.format(text))
            return

        node = self.get_iter(path)
        self.set_value(node, InstMdl.INST_COL, text)
        self.callback()
        obj = self.get_value(node, InstMdl.OBJ_COL)
        if obj:
            obj.name = text

        if len(path.split(":")) == 1:
            self.project.change_subsystem_name(old_value, text)
        else:
            pnode = self.get_iter(path.split(":")[0])
            parent = self.get_value(pnode, InstMdl.INST_COL)
            self.project.change_instance_name(parent, old_value, text)
예제 #15
0
def errmsg(msg):
    """Displays an error message"""
    LOGGER.error(msg)