Example #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)
Example #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)
Example #3
0
 def __handle_edited_address(self, register, path, new_text):
     """
     Called when an address in the table has changed
     """
     try:
         if ":" in new_text:
             self.__handle_ram_address(register, path, new_text)
         else:
             self.__handle_reg_address(register, path, new_text)
     except ValueError:
         LOGGER.warning('Address %0x was not changed: invalid value "%s"' % (register.address, new_text))
Example #4
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)
Example #5
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
Example #6
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)
Example #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)
Example #8
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)
Example #9
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)
Example #10
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()
Example #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, ""])
Example #12
0
def crossreference(db):
    names = sorted([reg.register_name for reg in db.get_all_registers()],
                   key=len,
                   reverse=True)

    re_list = [r'([^`])({0}) ((R|r)egister)'.format(name) for name in names]

    LOGGER.info("Cross Referencing...")
    while gtk.events_pending():
        gtk.main_iteration()

    for reg in db.get_all_registers():
        for regex in re_list:
            reg.description = re.sub(regex, r'\1`\2`_ \3', reg.description)
        for field in reg.get_bit_fields():
            for regex in re_list:
                field.description = re.sub(regex, r'\1`\2`_ \3',
                                           field.description)
Example #13
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)
Example #14
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
Example #15
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
Example #16
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)
Example #17
0
    def write_register(self, reg, dbase, of):

        rname = "reg_%s_%s" % (dbase.set_name, reg.token.lower())

        of.write("/*! \\class %s\n" % rname)
        of.write(" *  \\brief %s\n" % reg.description)
        of.write(" *\n * \\addtogroup registers\n")
        of.write(" * * @{\n")
        of.write(" */\n")
        of.write("  class %s extends uvm_reg;\n\n" % rname)
        of.write("    `uvm_object_utils(%s);\n\n" % rname)
        field_list = []
        for field in reg.get_bit_fields():
            of.write("    uvm_reg_field %s;\n" % self._fix_name(field))
            if field.reset_type == BitField.RESET_PARAMETER:
                field_list.append(field)

        for field in field_list:
            if field.reset_parameter:
                name = field.reset_parameter
            else:
                name = "p%s" % field.field_name.upper()

            if field.width == 1:
                of.write("    bit %s = 1'b0;\n" % name)
            else:
                of.write("    bit [%d:0] %s = '0;\n" % (field.width - 1,
                                                        name))

        grps = set()

        for field in reg.get_bit_fields():
            if field.values:
                n = self._fix_name(field)
                grps.add("cov_%s" % n)
                of.write("\n      covergroup cov_%s;\n" % n)
                of.write("         option.per_instance = 1;\n")
                of.write("         %s: coverpoint %s.value {\n" %
                         (n.upper(), n.lower()))
                for value in field.values:
                    of.write("            bins bin_%s = {'h%x};\n" %
                             self.mk_coverpt(value))
                of.write("      }\n")
                of.write("      endgroup : cov_%s\n" % n)

        of.write('\n    function new(string name = "%s");\n' %
                 reg.token.lower())
        if grps:
            of.write('       super.new(name, %d, ' % reg.width)
            of.write('build_coverage(UVM_CVR_FIELD_VALS));\n')
            for item in grps:
                of.write('       %s = new;\n' % item)
        else:
            of.write('      super.new(name, %d' % reg.width)
            of.write(', UVM_NO_COVERAGE);\n')

        of.write('    endfunction : new\n\n')

        if grps:
            of.write('    function void sample(uvm_reg_data_t data,\n')
            of.write('                         uvm_reg_data_t byte_en,\n')
            of.write('                         bit            is_read,\n')
            of.write('                         uvm_reg_map    map);\n')
            for item in grps:
                of.write('     %s.sample();\n' % item)
            of.write('    endfunction: sample\n\n')

        of.write('    virtual function void build();\n')

        for field in reg.get_bit_fields():
            of.write('      %s = uvm_reg_field::type_id::create("%s"' %
                     (self._fix_name(field), self._fix_name(field)))
            of.write(', , get_full_name());\n')

        dont_test = False
        side_effects = False
        no_reset_test = False

        for field in reg.get_bit_fields():
            size = field.width
            if field.start_position >= reg.width:
                lsb = field.start_position % reg.width
                tok = reg.token
                msg = "%s has bits that exceed the register width" % tok
                LOGGER.warning(msg)
            else:
                lsb = field.start_position

            access = access_map.get(field.field_type, None)
            if access is None:
                dont_test = True
                continue

            if field.output_has_side_effect:
                side_effects = True

            volatile = is_volatile(field)
            has_reset = 1
            if field.reset_type == BitField.RESET_PARAMETER:
                no_reset_test = True
                if field.reset_parameter:
                    reset = field.reset_parameter
                else:
                    reset = "p%s" % field.field_name.upper()
            else:
                reset = "%d'h%x" % (field.width, field.reset_value)
            is_rand = 0
            ind_access = individual_access(field, reg)

            of.write('      %s.configure(this, %d, %d, "%s", %d, %s, %d, %d, %d);\n' %
                     (self._fix_name(field), size, lsb, access, volatile,
                      reset, has_reset, is_rand, ind_access))

        if reg.do_not_test or dont_test:
            of.write('      uvm_resource_db #(bit)::set({"REG::", '
                     'get_full_name()}, "NO_REG_TESTS", 1);\n')
        else:
            if side_effects:
                of.write('      uvm_resource_db #(bit)::set({"REG::", '
                         'get_full_name()}, "NO_REG_BIT_BASH_TEST", 1);\n')
                of.write('      uvm_resource_db #(bit)::set({"REG::", '
                         'get_full_name()}, "NO_REG_ACCESS_TEST", 1);\n')
                of.write('      uvm_resource_db #(bit)::set({"REG::", '
                         'get_full_name()}, "NO_REG_SHARED_ACCESS_TEST", 1);\n')
            if no_reset_test:
                of.write('      uvm_resource_db #(bit)::set({"REG::", '
                         'get_full_name()}, "NO_REG_HW_RESET_TEST", 1);\n')

        of.write('      reset();\n')
        of.write('    endfunction : build\n\n')
        of.write('  endclass : %s\n\n' % rname)
        of.write('/*!@}*/\n')
Example #18
0
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
"""
Provides a preview editor, tying a text buffer to a webkit display. All
changes to the buffer cause an update on the webkit display, after the
text is converted from restructuredText to HTML.
"""

from regenerate.db import LOGGER

try:
    import webkit
    from preview import html_string
    PREVIEW_ENABLED = True
except ImportError:
    PREVIEW_ENABLED = False
    LOGGER.warning("Webkit is not installed, preview of formatted "
                   "comments will not be available")


class PreviewEditor(object):
    """
    Connects a text buffer to a webkit display.
    """

    def __init__(self, text_buffer, webkit_container):
        if not PREVIEW_ENABLED:
            return

        self.__webkit = webkit.WebView()
        self.__container = webkit_container
        self.__container.add(self.__webkit)
        self.__container.hide()
Example #19
0
    from rst_doc import RstDoc
    from uvm_reg_block import UVMRegBlockRegisters
    from sdc import Sdc
    from spyglass import Spyglass

for module in MODULES:
    for mpath in IMPORT_PATHS:
        try:
            fullpath = mpath + "." + module[0]
            a = __import__(fullpath, globals(), locals(), module[1])
            for t, info in a.EXPORTERS:
                if t == WriterBase.TYPE_BLOCK:
                    EXPORTERS.append(info)
                elif t == WriterBase.TYPE_GROUP:
                    GRP_EXPORTERS.append(info)
                else:
                    PRJ_EXPORTERS.append(info)
            break
        except ImportError, msg:
            continue
        except AttributeError, msg:
            continue
        except SyntaxError, msg:
            print str(msg)
            continue
    else:
        LOGGER.warning('Cound not import the "{0}" module'.format(module[0]))



Example #20
0
# Attempt to load the GTK spell package to provide basic spell checking.
# If the import fails (gtkspell not installed), then create a dummy
# spell object that does nothing.

from regenerate.db import LOGGER

try:

    from gtkspell import Spell

except ImportError:

    class Spell(object):
        "Empty class for compatiblity if the spell checker is not found"

        def __init__(self, obj):
            pass

        def detach(self):
            pass

    LOGGER.warning("gtkspell is not installed, "
                   "spell checking will not be available")
Example #21
0
def errmsg(msg):
    """Displays an error message"""
    LOGGER.error(msg)