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)
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)
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))
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)
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
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)
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)
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)
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)
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()
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, ""])
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)
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)
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
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
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)
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')
# 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()
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]))
# 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")
def errmsg(msg): """Displays an error message""" LOGGER.error(msg)