mirror of
				https://github.com/Minres/RDL-Editor.git
				synced 2025-11-04 04:31:37 +00:00 
			
		
		
		
	update target platform incl. XText/Xtend
This commit is contained in:
		@@ -5,7 +5,6 @@ package com.minres.rdl;
 | 
			
		||||
 | 
			
		||||
import com.google.inject.Binder;
 | 
			
		||||
import com.google.inject.name.Names;
 | 
			
		||||
import com.minres.rdl.AbstractRDLRuntimeModule;
 | 
			
		||||
import com.minres.rdl.converter.RdlTerminalConverters;
 | 
			
		||||
import org.eclipse.xtext.conversion.IValueConverterService;
 | 
			
		||||
import org.eclipse.xtext.scoping.IGlobalScopeProvider;
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,6 @@
 | 
			
		||||
 */
 | 
			
		||||
package com.minres.rdl;
 | 
			
		||||
 | 
			
		||||
import com.minres.rdl.RDLStandaloneSetupGenerated;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Initialization support for running Xtext languages without Equinox extension registry.
 | 
			
		||||
 */
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
package com.minres.rdl;
 | 
			
		||||
 | 
			
		||||
import com.google.common.base.Objects;
 | 
			
		||||
import com.minres.rdl.IntegerWithRadix;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentDefinition;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentDefinitionType;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentInstance;
 | 
			
		||||
@@ -14,7 +13,9 @@ import com.minres.rdl.rdl.PropertyAssignmentRhs;
 | 
			
		||||
import com.minres.rdl.rdl.PropertyEnum;
 | 
			
		||||
import com.minres.rdl.rdl.RValue;
 | 
			
		||||
import com.minres.rdl.rdl.RValueConstant;
 | 
			
		||||
import com.minres.rdl.rdl.Range;
 | 
			
		||||
import org.eclipse.emf.common.util.EList;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.Conversions;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.Functions.Function1;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.Functions.Function2;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.IterableExtensions;
 | 
			
		||||
@@ -260,4 +261,87 @@ public class RdlUtil {
 | 
			
		||||
    }
 | 
			
		||||
    return componentSize;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  public static ComponentDefinition getComponentDefinition(final Instantiation instantiation) {
 | 
			
		||||
    ComponentDefinition _xifexpression = null;
 | 
			
		||||
    ComponentDefinition _component = instantiation.getComponent();
 | 
			
		||||
    boolean _tripleNotEquals = (_component != null);
 | 
			
		||||
    if (_tripleNotEquals) {
 | 
			
		||||
      _xifexpression = instantiation.getComponent();
 | 
			
		||||
    } else {
 | 
			
		||||
      _xifexpression = instantiation.getComponentRef();
 | 
			
		||||
    }
 | 
			
		||||
    return _xifexpression;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  public static long absSize(final Range range) {
 | 
			
		||||
    Object _size = range.getSize();
 | 
			
		||||
    boolean _tripleNotEquals = (_size != null);
 | 
			
		||||
    if (_tripleNotEquals) {
 | 
			
		||||
      Object _size_1 = range.getSize();
 | 
			
		||||
      return ((IntegerWithRadix) _size_1).value;
 | 
			
		||||
    } else {
 | 
			
		||||
      Object _left = range.getLeft();
 | 
			
		||||
      Object _right = range.getRight();
 | 
			
		||||
      long _abs = Math.abs((((IntegerWithRadix) _left).value - ((IntegerWithRadix) _right).value));
 | 
			
		||||
      return (_abs + 1);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  public static boolean isFilledByField(final Instantiation instantiation) {
 | 
			
		||||
    final int fieldCount = RdlUtil.instanceCountOfType(RdlUtil.getComponentDefinition(instantiation), ComponentDefinitionType.FIELD);
 | 
			
		||||
    if ((fieldCount == 1)) {
 | 
			
		||||
      final long instSize = RdlUtil.getSize(instantiation);
 | 
			
		||||
      final Instantiation field = ((Instantiation[])Conversions.unwrapArray(RdlUtil.instantiationsOfType(instantiation.getComponent(), ComponentDefinitionType.FIELD), Instantiation.class))[0];
 | 
			
		||||
      final ComponentInstance inst = field.getComponentInstances().get(0);
 | 
			
		||||
      final Range range = inst.getRange();
 | 
			
		||||
      if ((range == null)) {
 | 
			
		||||
        long _size = RdlUtil.getSize(field);
 | 
			
		||||
        return (instSize == _size);
 | 
			
		||||
      }
 | 
			
		||||
      Object _size_1 = range.getSize();
 | 
			
		||||
      boolean _tripleNotEquals = (_size_1 != null);
 | 
			
		||||
      if (_tripleNotEquals) {
 | 
			
		||||
        Object _size_2 = range.getSize();
 | 
			
		||||
        return (instSize == ((IntegerWithRadix) _size_2).value);
 | 
			
		||||
      } else {
 | 
			
		||||
        Object _left = range.getLeft();
 | 
			
		||||
        final long left = ((IntegerWithRadix) _left).value;
 | 
			
		||||
        Object _right = range.getRight();
 | 
			
		||||
        final long right = ((IntegerWithRadix) _right).value;
 | 
			
		||||
        long _xifexpression = (long) 0;
 | 
			
		||||
        if ((left > right)) {
 | 
			
		||||
          _xifexpression = ((left - right) + 1);
 | 
			
		||||
        } else {
 | 
			
		||||
          _xifexpression = ((right - left) + 1);
 | 
			
		||||
        }
 | 
			
		||||
        final long size = _xifexpression;
 | 
			
		||||
        return (instSize == size);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  public static int instanceCountOfType(final ComponentDefinition definition, final ComponentDefinitionType type) {
 | 
			
		||||
    Integer _xblockexpression = null;
 | 
			
		||||
    {
 | 
			
		||||
      final Iterable<Instantiation> insts = RdlUtil.instantiationsOfType(definition, type);
 | 
			
		||||
      Integer _xifexpression = null;
 | 
			
		||||
      int _size = IterableExtensions.size(insts);
 | 
			
		||||
      boolean _greaterThan = (_size > 0);
 | 
			
		||||
      if (_greaterThan) {
 | 
			
		||||
        final Function1<Instantiation, Integer> _function = (Instantiation it) -> {
 | 
			
		||||
          return Integer.valueOf(it.getComponentInstances().size());
 | 
			
		||||
        };
 | 
			
		||||
        final Function2<Integer, Integer, Integer> _function_1 = (Integer p1, Integer p2) -> {
 | 
			
		||||
          return Integer.valueOf(((p1).intValue() + (p2).intValue()));
 | 
			
		||||
        };
 | 
			
		||||
        _xifexpression = IterableExtensions.<Integer>reduce(IterableExtensions.<Instantiation, Integer>map(insts, _function), _function_1);
 | 
			
		||||
      } else {
 | 
			
		||||
        _xifexpression = Integer.valueOf(0);
 | 
			
		||||
      }
 | 
			
		||||
      _xblockexpression = _xifexpression;
 | 
			
		||||
    }
 | 
			
		||||
    return (_xblockexpression).intValue();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,9 +2,6 @@ package com.minres.rdl.converter;
 | 
			
		||||
 | 
			
		||||
import com.google.inject.Inject;
 | 
			
		||||
import com.minres.rdl.IntegerWithRadix;
 | 
			
		||||
import com.minres.rdl.converter.IDValueConverter;
 | 
			
		||||
import com.minres.rdl.converter.NUMValueConverter;
 | 
			
		||||
import com.minres.rdl.converter.STRValueConverter;
 | 
			
		||||
import org.eclipse.xtext.common.services.DefaultTerminalConverters;
 | 
			
		||||
import org.eclipse.xtext.conversion.IValueConverter;
 | 
			
		||||
import org.eclipse.xtext.conversion.ValueConverter;
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,6 @@ package com.minres.rdl.generator;
 | 
			
		||||
 | 
			
		||||
import com.minres.rdl.IntegerWithRadix;
 | 
			
		||||
import com.minres.rdl.RdlUtil;
 | 
			
		||||
import com.minres.rdl.generator.RdlBaseGenerator;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentDefinition;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentDefinitionType;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentInstance;
 | 
			
		||||
@@ -19,7 +18,12 @@ public class AddrmapGenerator extends RdlBaseGenerator {
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  @Override
 | 
			
		||||
  public String generateHeader() {
 | 
			
		||||
  public boolean getOverwrite() {
 | 
			
		||||
    return true;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  @Override
 | 
			
		||||
  public String generateHeader(final String namespace) {
 | 
			
		||||
    StringConcatenation _builder = new StringConcatenation();
 | 
			
		||||
    _builder.append("#ifndef _");
 | 
			
		||||
    String _upperCase = RdlUtil.effectiveName(this.componentDefinition).toUpperCase();
 | 
			
		||||
@@ -33,7 +37,7 @@ public class AddrmapGenerator extends RdlBaseGenerator {
 | 
			
		||||
    _builder.newLineIfNotEmpty();
 | 
			
		||||
    _builder.append("// need double braces, see https://stackoverflow.com/questions/6893700/how-to-construct-stdarray-object-with-initializer-list#6894191");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("const std::array<sysc::target_memory_map_entry<32>, ");
 | 
			
		||||
    _builder.append("const std::array<scc::target_memory_map_entry<32>, ");
 | 
			
		||||
    int _instanceCount = RdlUtil.instanceCount(this.componentDefinition, ComponentDefinitionType.REGFILE);
 | 
			
		||||
    _builder.append(_instanceCount);
 | 
			
		||||
    _builder.append("> ");
 | 
			
		||||
@@ -48,10 +52,10 @@ public class AddrmapGenerator extends RdlBaseGenerator {
 | 
			
		||||
          EList<ComponentInstance> _componentInstances = instantiation.getComponentInstances();
 | 
			
		||||
          for(final ComponentInstance instance : _componentInstances) {
 | 
			
		||||
            _builder.append("    ");
 | 
			
		||||
            _builder.append("{&i_");
 | 
			
		||||
            _builder.append("{i_");
 | 
			
		||||
            String _name = instance.getName();
 | 
			
		||||
            _builder.append(_name, "    ");
 | 
			
		||||
            _builder.append(", ");
 | 
			
		||||
            _builder.append(".socket, ");
 | 
			
		||||
            IntegerWithRadix _addressValue = RdlUtil.addressValue(instance);
 | 
			
		||||
            _builder.append(_addressValue, "    ");
 | 
			
		||||
            _builder.append(", 0x");
 | 
			
		||||
@@ -75,7 +79,7 @@ public class AddrmapGenerator extends RdlBaseGenerator {
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  @Override
 | 
			
		||||
  public String generateSource() {
 | 
			
		||||
  public String generateSource(final String namespace) {
 | 
			
		||||
    return "";
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,6 @@ package com.minres.rdl.generator;
 | 
			
		||||
 | 
			
		||||
import com.minres.rdl.IntegerWithRadix;
 | 
			
		||||
import com.minres.rdl.RdlUtil;
 | 
			
		||||
import com.minres.rdl.generator.RdlBaseGenerator;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentDefinition;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentDefinitionType;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentInstance;
 | 
			
		||||
@@ -24,11 +23,16 @@ public class FwAddrmapGenerator extends RdlBaseGenerator {
 | 
			
		||||
  private final LinkedHashSet<Object> nameMap = CollectionLiterals.<Object>newLinkedHashSet();
 | 
			
		||||
  
 | 
			
		||||
  @Override
 | 
			
		||||
  public String generateHeader() {
 | 
			
		||||
  public boolean getOverwrite() {
 | 
			
		||||
    return true;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  @Override
 | 
			
		||||
  public String generateHeader(final String namespace) {
 | 
			
		||||
    StringConcatenation _builder = new StringConcatenation();
 | 
			
		||||
    _builder.append("////////////////////////////////////////////////////////////////////////////////");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("// Copyright (C) 2020, MINRES Technologies GmbH");
 | 
			
		||||
    _builder.append("// Copyright (C) 2020-2022, MINRES Technologies GmbH");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("// All rights reserved.");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
@@ -120,8 +124,14 @@ public class FwAddrmapGenerator extends RdlBaseGenerator {
 | 
			
		||||
            String _name_1 = instantiation.getComponent().getName();
 | 
			
		||||
            _builder.append(_name_1);
 | 
			
		||||
            _builder.append(".h\"");
 | 
			
		||||
            String _xifexpression = null;
 | 
			
		||||
            boolean _add = this.nameMap.add(instantiation.getComponent().getName());
 | 
			
		||||
            _builder.append(_add);
 | 
			
		||||
            if (_add) {
 | 
			
		||||
              _xifexpression = "";
 | 
			
		||||
            } else {
 | 
			
		||||
              _xifexpression = "";
 | 
			
		||||
            }
 | 
			
		||||
            _builder.append(_xifexpression);
 | 
			
		||||
            _builder.newLineIfNotEmpty();
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
@@ -131,8 +141,14 @@ public class FwAddrmapGenerator extends RdlBaseGenerator {
 | 
			
		||||
            String _name_2 = instantiation.getComponentRef().getName();
 | 
			
		||||
            _builder.append(_name_2);
 | 
			
		||||
            _builder.append(".h\"");
 | 
			
		||||
            String _xifexpression_1 = null;
 | 
			
		||||
            boolean _add_1 = this.nameMap.add(instantiation.getComponentRef().getName());
 | 
			
		||||
            _builder.append(_add_1);
 | 
			
		||||
            if (_add_1) {
 | 
			
		||||
              _xifexpression_1 = "";
 | 
			
		||||
            } else {
 | 
			
		||||
              _xifexpression_1 = "";
 | 
			
		||||
            }
 | 
			
		||||
            _builder.append(_xifexpression_1);
 | 
			
		||||
            _builder.newLineIfNotEmpty();
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
@@ -194,7 +210,7 @@ public class FwAddrmapGenerator extends RdlBaseGenerator {
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  @Override
 | 
			
		||||
  public String generateSource() {
 | 
			
		||||
  public String generateSource(final String namespace) {
 | 
			
		||||
    return "";
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,6 @@ package com.minres.rdl.generator;
 | 
			
		||||
import com.google.common.base.Objects;
 | 
			
		||||
import com.minres.rdl.IntegerWithRadix;
 | 
			
		||||
import com.minres.rdl.RdlUtil;
 | 
			
		||||
import com.minres.rdl.generator.RdlBaseGenerator;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentDefinition;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentDefinitionType;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentInstance;
 | 
			
		||||
@@ -12,9 +11,7 @@ import com.minres.rdl.rdl.Range;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import org.eclipse.emf.common.util.EList;
 | 
			
		||||
import org.eclipse.xtend2.lib.StringConcatenation;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.Conversions;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.Functions.Function1;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.Functions.Function2;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.IterableExtensions;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.ListExtensions;
 | 
			
		||||
 | 
			
		||||
@@ -27,11 +24,16 @@ public class FwRegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  @Override
 | 
			
		||||
  public String generateHeader() {
 | 
			
		||||
  public boolean getOverwrite() {
 | 
			
		||||
    return true;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  @Override
 | 
			
		||||
  public String generateHeader(final String namespace) {
 | 
			
		||||
    StringConcatenation _builder = new StringConcatenation();
 | 
			
		||||
    _builder.append("////////////////////////////////////////////////////////////////////////////////");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("// Copyright (C) 2020, MINRES Technologies GmbH");
 | 
			
		||||
    _builder.append("// Copyright (C) 2020-2022, MINRES Technologies GmbH");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("// All rights reserved.");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
@@ -176,7 +178,7 @@ public class FwRegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
        {
 | 
			
		||||
          if (((instantiation.getComponent() != null) && Objects.equal(instantiation.getComponent().getType(), ComponentDefinitionType.REG))) {
 | 
			
		||||
            {
 | 
			
		||||
              boolean _isFilledByField = this.isFilledByField(instantiation);
 | 
			
		||||
              boolean _isFilledByField = RdlUtil.isFilledByField(instantiation);
 | 
			
		||||
              boolean _not = (!_isFilledByField);
 | 
			
		||||
              if (_not) {
 | 
			
		||||
                _builder.append("    ");
 | 
			
		||||
@@ -228,7 +230,7 @@ public class FwRegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
              boolean _tripleEquals = (_range == null);
 | 
			
		||||
              if (_tripleEquals) {
 | 
			
		||||
                {
 | 
			
		||||
                  boolean _isFilledByField_1 = this.isFilledByField(instantiation_1);
 | 
			
		||||
                  boolean _isFilledByField_1 = RdlUtil.isFilledByField(instantiation_1);
 | 
			
		||||
                  if (_isFilledByField_1) {
 | 
			
		||||
                    _builder.append("    ");
 | 
			
		||||
                    _builder.append("static inline uint");
 | 
			
		||||
@@ -255,7 +257,7 @@ public class FwRegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
                {
 | 
			
		||||
                  boolean _isFilledByField_2 = this.isFilledByField(instantiation_1);
 | 
			
		||||
                  boolean _isFilledByField_2 = RdlUtil.isFilledByField(instantiation_1);
 | 
			
		||||
                  boolean _not_1 = (!_isFilledByField_2);
 | 
			
		||||
                  if (_not_1) {
 | 
			
		||||
                    _builder.append("    ");
 | 
			
		||||
@@ -289,14 +291,14 @@ public class FwRegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
              boolean _tripleNotEquals = (_range_1 != null);
 | 
			
		||||
              if (_tripleNotEquals) {
 | 
			
		||||
                {
 | 
			
		||||
                  boolean _isFilledByField_3 = this.isFilledByField(instantiation_1);
 | 
			
		||||
                  boolean _isFilledByField_3 = RdlUtil.isFilledByField(instantiation_1);
 | 
			
		||||
                  if (_isFilledByField_3) {
 | 
			
		||||
                    _builder.append("    ");
 | 
			
		||||
                    _builder.append("static inline nonstd::span<uint");
 | 
			
		||||
                    long _size_2 = RdlUtil.getSize(instantiation_1);
 | 
			
		||||
                    _builder.append(_size_2, "    ");
 | 
			
		||||
                    _builder.append("_t, ");
 | 
			
		||||
                    long _absSize = this.absSize(instance.getRange());
 | 
			
		||||
                    long _absSize = RdlUtil.absSize(instance.getRange());
 | 
			
		||||
                    _builder.append(_absSize, "    ");
 | 
			
		||||
                    _builder.append(">& ");
 | 
			
		||||
                    String _name_7 = instance.getName();
 | 
			
		||||
@@ -309,7 +311,7 @@ public class FwRegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
                    long _size_3 = RdlUtil.getSize(instantiation_1);
 | 
			
		||||
                    _builder.append(_size_3, "        ");
 | 
			
		||||
                    _builder.append("_t, ");
 | 
			
		||||
                    long _absSize_1 = this.absSize(instance.getRange());
 | 
			
		||||
                    long _absSize_1 = RdlUtil.absSize(instance.getRange());
 | 
			
		||||
                    _builder.append(_absSize_1, "        ");
 | 
			
		||||
                    _builder.append(">*>(BASE_ADDR+");
 | 
			
		||||
                    IntegerWithRadix _addressValue_2 = RdlUtil.addressValue(instance);
 | 
			
		||||
@@ -322,7 +324,7 @@ public class FwRegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
                {
 | 
			
		||||
                  boolean _isFilledByField_4 = this.isFilledByField(instantiation_1);
 | 
			
		||||
                  boolean _isFilledByField_4 = RdlUtil.isFilledByField(instantiation_1);
 | 
			
		||||
                  boolean _not_2 = (!_isFilledByField_4);
 | 
			
		||||
                  if (_not_2) {
 | 
			
		||||
                    _builder.append("    ");
 | 
			
		||||
@@ -330,7 +332,7 @@ public class FwRegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
                    String _name_8 = instance.getName();
 | 
			
		||||
                    _builder.append(_name_8, "    ");
 | 
			
		||||
                    _builder.append("_t, ");
 | 
			
		||||
                    long _absSize_2 = this.absSize(instance.getRange());
 | 
			
		||||
                    long _absSize_2 = RdlUtil.absSize(instance.getRange());
 | 
			
		||||
                    _builder.append(_absSize_2, "    ");
 | 
			
		||||
                    _builder.append(">& ");
 | 
			
		||||
                    String _name_9 = instance.getName();
 | 
			
		||||
@@ -343,7 +345,7 @@ public class FwRegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
                    String _name_10 = instance.getName();
 | 
			
		||||
                    _builder.append(_name_10, "        ");
 | 
			
		||||
                    _builder.append("_t, ");
 | 
			
		||||
                    long _absSize_3 = this.absSize(instance.getRange());
 | 
			
		||||
                    long _absSize_3 = RdlUtil.absSize(instance.getRange());
 | 
			
		||||
                    _builder.append(_absSize_3, "        ");
 | 
			
		||||
                    _builder.append(">*>(BASE_ADDR+");
 | 
			
		||||
                    IntegerWithRadix _addressValue_3 = RdlUtil.addressValue(instance);
 | 
			
		||||
@@ -372,66 +374,8 @@ public class FwRegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
    return _builder.toString();
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  public long absSize(final Range range) {
 | 
			
		||||
    Object _size = range.getSize();
 | 
			
		||||
    boolean _tripleNotEquals = (_size != null);
 | 
			
		||||
    if (_tripleNotEquals) {
 | 
			
		||||
      Object _size_1 = range.getSize();
 | 
			
		||||
      return ((IntegerWithRadix) _size_1).value;
 | 
			
		||||
    } else {
 | 
			
		||||
      Object _left = range.getLeft();
 | 
			
		||||
      Object _right = range.getRight();
 | 
			
		||||
      long _abs = Math.abs((((IntegerWithRadix) _left).value - ((IntegerWithRadix) _right).value));
 | 
			
		||||
      return (_abs + 1);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  public boolean isFilledByField(final Instantiation instantiation) {
 | 
			
		||||
    final int fieldCount = this.instanceCountOfType(instantiation.getComponent(), ComponentDefinitionType.FIELD);
 | 
			
		||||
    if ((fieldCount == 1)) {
 | 
			
		||||
      final long instSize = RdlUtil.getSize(instantiation);
 | 
			
		||||
      final Instantiation field = ((Instantiation[])Conversions.unwrapArray(RdlUtil.instantiationsOfType(instantiation.getComponent(), ComponentDefinitionType.FIELD), Instantiation.class))[0];
 | 
			
		||||
      final ComponentInstance inst = field.getComponentInstances().get(0);
 | 
			
		||||
      final Range range = inst.getRange();
 | 
			
		||||
      if ((range == null)) {
 | 
			
		||||
        long _size = RdlUtil.getSize(field);
 | 
			
		||||
        return (instSize == _size);
 | 
			
		||||
      }
 | 
			
		||||
      Object _size_1 = range.getSize();
 | 
			
		||||
      boolean _tripleNotEquals = (_size_1 != null);
 | 
			
		||||
      if (_tripleNotEquals) {
 | 
			
		||||
        Object _size_2 = range.getSize();
 | 
			
		||||
        return (instSize == ((IntegerWithRadix) _size_2).value);
 | 
			
		||||
      } else {
 | 
			
		||||
        Object _left = range.getLeft();
 | 
			
		||||
        final long left = ((IntegerWithRadix) _left).value;
 | 
			
		||||
        Object _right = range.getRight();
 | 
			
		||||
        final long right = ((IntegerWithRadix) _right).value;
 | 
			
		||||
        long _xifexpression = (long) 0;
 | 
			
		||||
        if ((left > right)) {
 | 
			
		||||
          _xifexpression = ((left - right) + 1);
 | 
			
		||||
        } else {
 | 
			
		||||
          _xifexpression = ((right - left) + 1);
 | 
			
		||||
        }
 | 
			
		||||
        final long size = _xifexpression;
 | 
			
		||||
        return (instSize == size);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  public int instanceCountOfType(final ComponentDefinition definition, final ComponentDefinitionType type) {
 | 
			
		||||
    final Function1<Instantiation, Integer> _function = (Instantiation it) -> {
 | 
			
		||||
      return Integer.valueOf(it.getComponentInstances().size());
 | 
			
		||||
    };
 | 
			
		||||
    final Function2<Integer, Integer, Integer> _function_1 = (Integer p1, Integer p2) -> {
 | 
			
		||||
      return Integer.valueOf(((p1).intValue() + (p1).intValue()));
 | 
			
		||||
    };
 | 
			
		||||
    return (int) IterableExtensions.<Integer>reduce(IterableExtensions.<Instantiation, Integer>map(RdlUtil.instantiationsOfType(definition, type), _function), _function_1);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  @Override
 | 
			
		||||
  public String generateSource() {
 | 
			
		||||
  public String generateSource(final String namespace) {
 | 
			
		||||
    return "";
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,6 @@ import com.google.inject.Inject;
 | 
			
		||||
import com.google.inject.Injector;
 | 
			
		||||
import com.google.inject.Provider;
 | 
			
		||||
import com.minres.rdl.RDLStandaloneSetup;
 | 
			
		||||
import com.minres.rdl.generator.Options;
 | 
			
		||||
import java.lang.reflect.MalformedParametersException;
 | 
			
		||||
import java.text.ParseException;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
@@ -14,7 +13,6 @@ import org.eclipse.emf.ecore.resource.Resource;
 | 
			
		||||
import org.eclipse.emf.ecore.resource.ResourceSet;
 | 
			
		||||
import org.eclipse.emf.mwe.utils.ProjectMapping;
 | 
			
		||||
import org.eclipse.emf.mwe.utils.StandaloneSetup;
 | 
			
		||||
import org.eclipse.xtext.generator.GeneratorContext;
 | 
			
		||||
import org.eclipse.xtext.generator.GeneratorDelegate;
 | 
			
		||||
import org.eclipse.xtext.generator.IFileSystemAccess;
 | 
			
		||||
import org.eclipse.xtext.generator.JavaIoFileSystemAccess;
 | 
			
		||||
@@ -33,7 +31,7 @@ import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
 | 
			
		||||
 | 
			
		||||
@SuppressWarnings("all")
 | 
			
		||||
public class Main {
 | 
			
		||||
  private final String USAGE_STR = "RDL2code [-h] [-v] [-I <RDL include dir] [-o <output dir>] <input file> <input file>";
 | 
			
		||||
  private final String USAGE_STR = "RDL2code [-h] [-v] [-f] [-n <namespace>] [-I <RDL include dir] [-o <output dir>] <input file> <input file>";
 | 
			
		||||
  
 | 
			
		||||
  public static void main(final String[] args) {
 | 
			
		||||
    boolean _isEmpty = ((List<String>)Conversions.doWrapArray(args)).isEmpty();
 | 
			
		||||
@@ -91,6 +89,8 @@ public class Main {
 | 
			
		||||
    final Options opt = new Options(args, 0, Integer.MAX_VALUE);
 | 
			
		||||
    opt.getSet().addOption("h", Options.Multiplicity.ZERO_OR_ONE);
 | 
			
		||||
    opt.getSet().addOption("v", Options.Multiplicity.ZERO_OR_ONE);
 | 
			
		||||
    opt.getSet().addOption("f", Options.Multiplicity.ZERO_OR_ONE);
 | 
			
		||||
    opt.getSet().addOption("n", Options.Separator.BLANK, Options.Multiplicity.ZERO_OR_ONE);
 | 
			
		||||
    opt.getSet().addOption("o", Options.Separator.BLANK, Options.Multiplicity.ZERO_OR_ONE);
 | 
			
		||||
    opt.getSet().addOption("I", Options.Separator.BLANK, Options.Multiplicity.ZERO_OR_ONE);
 | 
			
		||||
    boolean _check = opt.check(false, false);
 | 
			
		||||
@@ -154,11 +154,16 @@ public class Main {
 | 
			
		||||
          int _size = issues.size();
 | 
			
		||||
          throw new ParseException(_plus_1, _size);
 | 
			
		||||
        }
 | 
			
		||||
        GeneratorContext _generatorContext = new GeneratorContext();
 | 
			
		||||
        final Procedure1<GeneratorContext> _function_2 = (GeneratorContext it) -> {
 | 
			
		||||
        RdlGeneratorContext _rdlGeneratorContext = new RdlGeneratorContext();
 | 
			
		||||
        final Procedure1<RdlGeneratorContext> _function_2 = (RdlGeneratorContext it) -> {
 | 
			
		||||
          it.setCancelIndicator(CancelIndicator.NullImpl);
 | 
			
		||||
        };
 | 
			
		||||
        final GeneratorContext context = ObjectExtensions.<GeneratorContext>operator_doubleArrow(_generatorContext, _function_2);
 | 
			
		||||
        final RdlGeneratorContext context = ObjectExtensions.<RdlGeneratorContext>operator_doubleArrow(_rdlGeneratorContext, _function_2);
 | 
			
		||||
        context.forceOverwrite = opt.getSet().isSet("f");
 | 
			
		||||
        boolean _isSet_4 = opt.getSet().isSet("n");
 | 
			
		||||
        if (_isSet_4) {
 | 
			
		||||
          context.namespace = opt.getSet().getOption("n").getResultValue(0);
 | 
			
		||||
        }
 | 
			
		||||
        this.generator.generate(resource, this.fileAccess, context);
 | 
			
		||||
        if (verbose) {
 | 
			
		||||
          InputOutput.<String>println((("Code generation for " + string) + " finished"));
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,310 @@
 | 
			
		||||
package com.minres.rdl.generator;
 | 
			
		||||
 | 
			
		||||
import com.google.common.base.Objects;
 | 
			
		||||
import com.minres.rdl.RdlUtil;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentDefinition;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentDefinitionType;
 | 
			
		||||
import com.minres.rdl.rdl.Instantiation;
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
import org.eclipse.emf.common.notify.Notifier;
 | 
			
		||||
import org.eclipse.xtend2.lib.StringConcatenation;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.Functions.Function1;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.IterableExtensions;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.IteratorExtensions;
 | 
			
		||||
 | 
			
		||||
@SuppressWarnings("all")
 | 
			
		||||
public class ModuleGenerator extends RdlBaseGenerator {
 | 
			
		||||
  private final ComponentDefinition componentDefinition;
 | 
			
		||||
  
 | 
			
		||||
  public ModuleGenerator(final ComponentDefinition definition) {
 | 
			
		||||
    this.componentDefinition = definition;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  @Override
 | 
			
		||||
  public boolean getOverwrite() {
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  @Override
 | 
			
		||||
  public String generateHeader(final String namespace) {
 | 
			
		||||
    String _xblockexpression = null;
 | 
			
		||||
    {
 | 
			
		||||
      ComponentDefinitionType _type = this.componentDefinition.getType();
 | 
			
		||||
      boolean _notEquals = (!Objects.equal(_type, ComponentDefinitionType.REGFILE));
 | 
			
		||||
      if (_notEquals) {
 | 
			
		||||
        return "";
 | 
			
		||||
      }
 | 
			
		||||
      final Function1<Notifier, Boolean> _function = (Notifier it) -> {
 | 
			
		||||
        return Boolean.valueOf((it instanceof ComponentDefinition));
 | 
			
		||||
      };
 | 
			
		||||
      final Function1<Notifier, ComponentDefinition> _function_1 = (Notifier it) -> {
 | 
			
		||||
        return ((ComponentDefinition) it);
 | 
			
		||||
      };
 | 
			
		||||
      final Function1<ComponentDefinition, Boolean> _function_2 = (ComponentDefinition it) -> {
 | 
			
		||||
        ComponentDefinitionType _type_1 = it.getType();
 | 
			
		||||
        return Boolean.valueOf(Objects.equal(_type_1, ComponentDefinitionType.ADDRMAP));
 | 
			
		||||
      };
 | 
			
		||||
      final Function1<ComponentDefinition, Boolean> _function_3 = (ComponentDefinition def) -> {
 | 
			
		||||
        final Function1<Instantiation, Boolean> _function_4 = (Instantiation it) -> {
 | 
			
		||||
          ComponentDefinition _componentRef = it.getComponentRef();
 | 
			
		||||
          return Boolean.valueOf(Objects.equal(_componentRef, this.componentDefinition));
 | 
			
		||||
        };
 | 
			
		||||
        int _size = IterableExtensions.size(IterableExtensions.<Instantiation>filter(def.getInstantiations(), _function_4));
 | 
			
		||||
        return Boolean.valueOf((_size > 0));
 | 
			
		||||
      };
 | 
			
		||||
      final Iterator<ComponentDefinition> addrMaps = IteratorExtensions.<ComponentDefinition>filter(IteratorExtensions.<ComponentDefinition>filter(IteratorExtensions.<Notifier, ComponentDefinition>map(IteratorExtensions.<Notifier>filter(this.componentDefinition.eResource().getResourceSet().getAllContents(), _function), _function_1), _function_2), _function_3);
 | 
			
		||||
      int _size = IteratorExtensions.size(addrMaps);
 | 
			
		||||
      boolean _equals = (_size == 0);
 | 
			
		||||
      if (_equals) {
 | 
			
		||||
        return "";
 | 
			
		||||
      }
 | 
			
		||||
      StringConcatenation _builder = new StringConcatenation();
 | 
			
		||||
      _builder.append("#ifndef _");
 | 
			
		||||
      String _upperCase = namespace.toUpperCase();
 | 
			
		||||
      _builder.append(_upperCase);
 | 
			
		||||
      _builder.append("_");
 | 
			
		||||
      String _upperCase_1 = RdlUtil.effectiveName(this.componentDefinition).toUpperCase();
 | 
			
		||||
      _builder.append(_upperCase_1);
 | 
			
		||||
      _builder.append("_H_");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.append("#define _");
 | 
			
		||||
      String _upperCase_2 = namespace.toUpperCase();
 | 
			
		||||
      _builder.append(_upperCase_2);
 | 
			
		||||
      _builder.append("_");
 | 
			
		||||
      String _upperCase_3 = RdlUtil.effectiveName(this.componentDefinition).toUpperCase();
 | 
			
		||||
      _builder.append(_upperCase_3);
 | 
			
		||||
      _builder.append("_H_");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.append("#include <scc/tlm_target.h>");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("namespace ");
 | 
			
		||||
      _builder.append(namespace);
 | 
			
		||||
      _builder.append(" {");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.append("namespace gen {");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("class ");
 | 
			
		||||
      String _effectiveName = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
      _builder.append(_effectiveName);
 | 
			
		||||
      _builder.append("_regs;");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.append("}");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("class ");
 | 
			
		||||
      String _effectiveName_1 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
      _builder.append(_effectiveName_1);
 | 
			
		||||
      _builder.append(" : public sc_core::sc_module, public scc::tlm_target<> {");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.append("public:");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("    ");
 | 
			
		||||
      _builder.append("sc_core::sc_in<sc_core::sc_time> clk_i{\"clk_i\"};");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("    ");
 | 
			
		||||
      _builder.append("sc_core::sc_in<bool> rst_i{\"rst_i\"};");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("    ");
 | 
			
		||||
      String _effectiveName_2 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
      _builder.append(_effectiveName_2, "    ");
 | 
			
		||||
      _builder.append("(sc_core::sc_module_name nm);");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.append("    ");
 | 
			
		||||
      _builder.append("virtual ~");
 | 
			
		||||
      String _effectiveName_3 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
      _builder.append(_effectiveName_3, "    ");
 | 
			
		||||
      _builder.append("() override;");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("protected:");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("    ");
 | 
			
		||||
      _builder.append("void clock_cb();");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("    ");
 | 
			
		||||
      _builder.append("void reset_cb();");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("    ");
 | 
			
		||||
      _builder.append("sc_core::sc_time clk;");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("    ");
 | 
			
		||||
      _builder.append("std::unique_ptr<gen::");
 | 
			
		||||
      String _effectiveName_4 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
      _builder.append(_effectiveName_4, "    ");
 | 
			
		||||
      _builder.append("_regs> regs;");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.append("};");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("} /* namespace ");
 | 
			
		||||
      _builder.append(namespace);
 | 
			
		||||
      _builder.append(" */");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("#endif /* _");
 | 
			
		||||
      String _upperCase_4 = namespace.toUpperCase();
 | 
			
		||||
      _builder.append(_upperCase_4);
 | 
			
		||||
      _builder.append("_");
 | 
			
		||||
      String _upperCase_5 = RdlUtil.effectiveName(this.componentDefinition).toUpperCase();
 | 
			
		||||
      _builder.append(_upperCase_5);
 | 
			
		||||
      _builder.append("_H_ */");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _xblockexpression = _builder.toString();
 | 
			
		||||
    }
 | 
			
		||||
    return _xblockexpression;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  @Override
 | 
			
		||||
  public String generateSource(final String namespace) {
 | 
			
		||||
    String _xblockexpression = null;
 | 
			
		||||
    {
 | 
			
		||||
      ComponentDefinitionType _type = this.componentDefinition.getType();
 | 
			
		||||
      boolean _notEquals = (!Objects.equal(_type, ComponentDefinitionType.REGFILE));
 | 
			
		||||
      if (_notEquals) {
 | 
			
		||||
        return "";
 | 
			
		||||
      }
 | 
			
		||||
      final Function1<Notifier, Boolean> _function = (Notifier it) -> {
 | 
			
		||||
        return Boolean.valueOf((it instanceof ComponentDefinition));
 | 
			
		||||
      };
 | 
			
		||||
      final Function1<Notifier, ComponentDefinition> _function_1 = (Notifier it) -> {
 | 
			
		||||
        return ((ComponentDefinition) it);
 | 
			
		||||
      };
 | 
			
		||||
      final Function1<ComponentDefinition, Boolean> _function_2 = (ComponentDefinition it) -> {
 | 
			
		||||
        ComponentDefinitionType _type_1 = it.getType();
 | 
			
		||||
        return Boolean.valueOf(Objects.equal(_type_1, ComponentDefinitionType.ADDRMAP));
 | 
			
		||||
      };
 | 
			
		||||
      final Function1<ComponentDefinition, Boolean> _function_3 = (ComponentDefinition def) -> {
 | 
			
		||||
        final Function1<Instantiation, Boolean> _function_4 = (Instantiation it) -> {
 | 
			
		||||
          ComponentDefinition _componentRef = it.getComponentRef();
 | 
			
		||||
          return Boolean.valueOf(Objects.equal(_componentRef, this.componentDefinition));
 | 
			
		||||
        };
 | 
			
		||||
        int _size = IterableExtensions.size(IterableExtensions.<Instantiation>filter(def.getInstantiations(), _function_4));
 | 
			
		||||
        return Boolean.valueOf((_size > 0));
 | 
			
		||||
      };
 | 
			
		||||
      final Iterator<ComponentDefinition> addrMaps = IteratorExtensions.<ComponentDefinition>filter(IteratorExtensions.<ComponentDefinition>filter(IteratorExtensions.<Notifier, ComponentDefinition>map(IteratorExtensions.<Notifier>filter(this.componentDefinition.eResource().getResourceSet().getAllContents(), _function), _function_1), _function_2), _function_3);
 | 
			
		||||
      int _size = IteratorExtensions.size(addrMaps);
 | 
			
		||||
      boolean _equals = (_size == 0);
 | 
			
		||||
      if (_equals) {
 | 
			
		||||
        return "";
 | 
			
		||||
      }
 | 
			
		||||
      StringConcatenation _builder = new StringConcatenation();
 | 
			
		||||
      _builder.append("/*");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append(" ");
 | 
			
		||||
      _builder.append("* Copyright (c) 2019 -2022 MINRES Technologies GmbH");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append(" ");
 | 
			
		||||
      _builder.append("*");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append(" ");
 | 
			
		||||
      _builder.append("* SPDX-License-Identifier: Apache-2.0");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append(" ");
 | 
			
		||||
      _builder.append("*/");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("#include \"");
 | 
			
		||||
      String _effectiveName = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
      _builder.append(_effectiveName);
 | 
			
		||||
      _builder.append(".h\"");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.append("#include \"gen/");
 | 
			
		||||
      String _effectiveName_1 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
      _builder.append(_effectiveName_1);
 | 
			
		||||
      _builder.append(".h\"");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("#include <scc/utilities.h>");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("namespace ");
 | 
			
		||||
      _builder.append(namespace);
 | 
			
		||||
      _builder.append(" {");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.append("SC_HAS_PROCESS(");
 | 
			
		||||
      String _effectiveName_2 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
      _builder.append(_effectiveName_2);
 | 
			
		||||
      _builder.append(");// NOLINT");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      String _effectiveName_3 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
      _builder.append(_effectiveName_3);
 | 
			
		||||
      _builder.append("::");
 | 
			
		||||
      String _effectiveName_4 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
      _builder.append(_effectiveName_4);
 | 
			
		||||
      _builder.append("(sc_core::sc_module_name nm)");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.append(": sc_core::sc_module(nm)");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append(", scc::tlm_target<>(clk)");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append(", NAMEDD(regs, gen::");
 | 
			
		||||
      String _effectiveName_5 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
      _builder.append(_effectiveName_5);
 | 
			
		||||
      _builder.append("_regs) {");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.append("    ");
 | 
			
		||||
      _builder.append("regs->registerResources(*this);");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("    ");
 | 
			
		||||
      _builder.append("SC_METHOD(clock_cb);");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("    ");
 | 
			
		||||
      _builder.append("sensitive << clk_i;");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("    ");
 | 
			
		||||
      _builder.append("SC_METHOD(reset_cb);");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("    ");
 | 
			
		||||
      _builder.append("sensitive << rst_i;");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("}");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      String _effectiveName_6 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
      _builder.append(_effectiveName_6);
 | 
			
		||||
      _builder.append("::~");
 | 
			
		||||
      String _effectiveName_7 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
      _builder.append(_effectiveName_7);
 | 
			
		||||
      _builder.append("() {} // NOLINT");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("void ");
 | 
			
		||||
      String _effectiveName_8 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
      _builder.append(_effectiveName_8);
 | 
			
		||||
      _builder.append("::clock_cb() { this->clk = clk_i.read(); }");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("void ");
 | 
			
		||||
      String _effectiveName_9 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
      _builder.append(_effectiveName_9);
 | 
			
		||||
      _builder.append("::reset_cb() {");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _builder.append("    ");
 | 
			
		||||
      _builder.append("if (rst_i.read()) {");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("        ");
 | 
			
		||||
      _builder.append("regs->reset_start();");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("    ");
 | 
			
		||||
      _builder.append("} else {");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("        ");
 | 
			
		||||
      _builder.append("regs->reset_stop();");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("    ");
 | 
			
		||||
      _builder.append("}");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("}");
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.newLine();
 | 
			
		||||
      _builder.append("} /* namespace ");
 | 
			
		||||
      _builder.append(namespace);
 | 
			
		||||
      _builder.append(" */");
 | 
			
		||||
      _builder.newLineIfNotEmpty();
 | 
			
		||||
      _xblockexpression = _builder.toString();
 | 
			
		||||
    }
 | 
			
		||||
    return _xblockexpression;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
@@ -4,11 +4,6 @@
 | 
			
		||||
package com.minres.rdl.generator;
 | 
			
		||||
 | 
			
		||||
import com.minres.rdl.RdlUtil;
 | 
			
		||||
import com.minres.rdl.generator.AddrmapGenerator;
 | 
			
		||||
import com.minres.rdl.generator.FwAddrmapGenerator;
 | 
			
		||||
import com.minres.rdl.generator.FwRegfileGenerator;
 | 
			
		||||
import com.minres.rdl.generator.RdlBaseGenerator;
 | 
			
		||||
import com.minres.rdl.generator.RegfileGenerator;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentDefinition;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentDefinitionType;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
@@ -35,6 +30,20 @@ import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;
 | 
			
		||||
public class RDLGenerator extends AbstractGenerator {
 | 
			
		||||
  @Override
 | 
			
		||||
  public void doGenerate(final Resource resource, final IFileSystemAccess2 fsa, final IGeneratorContext context) {
 | 
			
		||||
    boolean _xifexpression = false;
 | 
			
		||||
    if ((context instanceof RdlGeneratorContext)) {
 | 
			
		||||
      _xifexpression = ((RdlGeneratorContext)context).forceOverwrite;
 | 
			
		||||
    } else {
 | 
			
		||||
      _xifexpression = false;
 | 
			
		||||
    }
 | 
			
		||||
    final boolean force = _xifexpression;
 | 
			
		||||
    String _xifexpression_1 = null;
 | 
			
		||||
    if ((context instanceof RdlGeneratorContext)) {
 | 
			
		||||
      _xifexpression_1 = ((RdlGeneratorContext)context).namespace;
 | 
			
		||||
    } else {
 | 
			
		||||
      _xifexpression_1 = "sysc";
 | 
			
		||||
    }
 | 
			
		||||
    final String namespace = _xifexpression_1;
 | 
			
		||||
    final Function1<Notifier, Boolean> _function = (Notifier it) -> {
 | 
			
		||||
      return Boolean.valueOf((it instanceof ComponentDefinition));
 | 
			
		||||
    };
 | 
			
		||||
@@ -45,19 +54,21 @@ public class RDLGenerator extends AbstractGenerator {
 | 
			
		||||
      final Map<String, RdlBaseGenerator> genMap = this.fileGenerator(it);
 | 
			
		||||
      if ((genMap != null)) {
 | 
			
		||||
        final BiConsumer<String, RdlBaseGenerator> _function_3 = (String p1, RdlBaseGenerator gen) -> {
 | 
			
		||||
          final String header = gen.generateHeader();
 | 
			
		||||
          if (((header != null) && (header.length() > 0))) {
 | 
			
		||||
            String _effectiveName = RdlUtil.effectiveName(it);
 | 
			
		||||
            String _plus = ((p1 + "/") + _effectiveName);
 | 
			
		||||
            String _plus_1 = (_plus + ".h");
 | 
			
		||||
            fsa.generateFile(_plus_1, this.outputConfig(fsa, "incl-out"), header);
 | 
			
		||||
          final String header = gen.generateHeader(namespace);
 | 
			
		||||
          String _effectiveName = RdlUtil.effectiveName(it);
 | 
			
		||||
          String _plus = ((p1 + "/") + _effectiveName);
 | 
			
		||||
          final String inclFileName = (_plus + ".h");
 | 
			
		||||
          final String inclCfg = this.outputConfig(fsa, "incl-out");
 | 
			
		||||
          if (((((force || (!fsa.isFile(inclFileName, inclCfg))) || gen.getOverwrite()) && (header != null)) && (header.length() > 0))) {
 | 
			
		||||
            fsa.generateFile(inclFileName, inclCfg, header);
 | 
			
		||||
          }
 | 
			
		||||
          final String source = gen.generateSource();
 | 
			
		||||
          if (((source != null) && (source.length() > 0))) {
 | 
			
		||||
            String _effectiveName_1 = RdlUtil.effectiveName(it);
 | 
			
		||||
            String _plus_2 = ((p1 + "/") + _effectiveName_1);
 | 
			
		||||
            String _plus_3 = (_plus_2 + ".cpp");
 | 
			
		||||
            fsa.generateFile(_plus_3, this.outputConfig(fsa, "src-out"), source);
 | 
			
		||||
          final String source = gen.generateSource(namespace);
 | 
			
		||||
          String _effectiveName_1 = RdlUtil.effectiveName(it);
 | 
			
		||||
          String _plus_1 = ((p1 + "/") + _effectiveName_1);
 | 
			
		||||
          final String srcFileName = (_plus_1 + ".cpp");
 | 
			
		||||
          final String srcCfg = this.outputConfig(fsa, "src-out");
 | 
			
		||||
          if (((((force || (!fsa.isFile(srcFileName, srcCfg))) || gen.getOverwrite()) && (source != null)) && (source.length() > 0))) {
 | 
			
		||||
            fsa.generateFile(srcFileName, srcCfg, source);
 | 
			
		||||
          }
 | 
			
		||||
        };
 | 
			
		||||
        genMap.forEach(_function_3);
 | 
			
		||||
@@ -73,17 +84,19 @@ public class RDLGenerator extends AbstractGenerator {
 | 
			
		||||
      switch (_type) {
 | 
			
		||||
        case REGFILE:
 | 
			
		||||
          RegfileGenerator _regfileGenerator = new RegfileGenerator(definition);
 | 
			
		||||
          Pair<String, RegfileGenerator> _mappedTo = Pair.<String, RegfileGenerator>of("vp", _regfileGenerator);
 | 
			
		||||
          Pair<String, RegfileGenerator> _mappedTo = Pair.<String, RegfileGenerator>of("gen", _regfileGenerator);
 | 
			
		||||
          FwRegfileGenerator _fwRegfileGenerator = new FwRegfileGenerator(definition);
 | 
			
		||||
          Pair<String, FwRegfileGenerator> _mappedTo_1 = Pair.<String, FwRegfileGenerator>of("fw", _fwRegfileGenerator);
 | 
			
		||||
          _switchResult = Collections.<String, RdlBaseGenerator>unmodifiableMap(CollectionLiterals.<String, RdlBaseGenerator>newHashMap(_mappedTo, _mappedTo_1));
 | 
			
		||||
          ModuleGenerator _moduleGenerator = new ModuleGenerator(definition);
 | 
			
		||||
          Pair<String, ModuleGenerator> _mappedTo_2 = Pair.<String, ModuleGenerator>of(".", _moduleGenerator);
 | 
			
		||||
          _switchResult = Collections.<String, RdlBaseGenerator>unmodifiableMap(CollectionLiterals.<String, RdlBaseGenerator>newHashMap(_mappedTo, _mappedTo_1, _mappedTo_2));
 | 
			
		||||
          break;
 | 
			
		||||
        case ADDRMAP:
 | 
			
		||||
          AddrmapGenerator _addrmapGenerator = new AddrmapGenerator(definition);
 | 
			
		||||
          Pair<String, AddrmapGenerator> _mappedTo_2 = Pair.<String, AddrmapGenerator>of("vp", _addrmapGenerator);
 | 
			
		||||
          Pair<String, AddrmapGenerator> _mappedTo_3 = Pair.<String, AddrmapGenerator>of("gen", _addrmapGenerator);
 | 
			
		||||
          FwAddrmapGenerator _fwAddrmapGenerator = new FwAddrmapGenerator(definition);
 | 
			
		||||
          Pair<String, FwAddrmapGenerator> _mappedTo_3 = Pair.<String, FwAddrmapGenerator>of("fw", _fwAddrmapGenerator);
 | 
			
		||||
          _switchResult = Collections.<String, RdlBaseGenerator>unmodifiableMap(CollectionLiterals.<String, RdlBaseGenerator>newHashMap(_mappedTo_2, _mappedTo_3));
 | 
			
		||||
          Pair<String, FwAddrmapGenerator> _mappedTo_4 = Pair.<String, FwAddrmapGenerator>of("fw", _fwAddrmapGenerator);
 | 
			
		||||
          _switchResult = Collections.<String, RdlBaseGenerator>unmodifiableMap(CollectionLiterals.<String, RdlBaseGenerator>newHashMap(_mappedTo_3, _mappedTo_4));
 | 
			
		||||
          break;
 | 
			
		||||
        default:
 | 
			
		||||
          _switchResult = null;
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,9 @@ package com.minres.rdl.generator;
 | 
			
		||||
 | 
			
		||||
@SuppressWarnings("all")
 | 
			
		||||
public abstract class RdlBaseGenerator {
 | 
			
		||||
  public abstract String generateHeader();
 | 
			
		||||
  public abstract String generateHeader(final String namespace);
 | 
			
		||||
  
 | 
			
		||||
  public abstract String generateSource();
 | 
			
		||||
  public abstract String generateSource(final String namespace);
 | 
			
		||||
  
 | 
			
		||||
  public abstract boolean getOverwrite();
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,10 @@
 | 
			
		||||
package com.minres.rdl.generator;
 | 
			
		||||
 | 
			
		||||
import org.eclipse.xtext.generator.GeneratorContext;
 | 
			
		||||
 | 
			
		||||
@SuppressWarnings("all")
 | 
			
		||||
public class RdlGeneratorContext extends GeneratorContext {
 | 
			
		||||
  public boolean forceOverwrite = false;
 | 
			
		||||
  
 | 
			
		||||
  public String namespace = "scc";
 | 
			
		||||
}
 | 
			
		||||
@@ -3,7 +3,6 @@ package com.minres.rdl.generator;
 | 
			
		||||
import com.google.common.base.Objects;
 | 
			
		||||
import com.minres.rdl.IntegerWithRadix;
 | 
			
		||||
import com.minres.rdl.RdlUtil;
 | 
			
		||||
import com.minres.rdl.generator.RdlBaseGenerator;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentDefinition;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentDefinitionType;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentInstance;
 | 
			
		||||
@@ -12,11 +11,8 @@ import com.minres.rdl.rdl.Range;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import org.eclipse.emf.common.util.EList;
 | 
			
		||||
import org.eclipse.xtend2.lib.StringConcatenation;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.Conversions;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.Functions.Function1;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.Functions.Function2;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.IterableExtensions;
 | 
			
		||||
import org.eclipse.xtext.xbase.lib.ListExtensions;
 | 
			
		||||
 | 
			
		||||
@SuppressWarnings("all")
 | 
			
		||||
public class RegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
@@ -27,11 +23,16 @@ public class RegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  @Override
 | 
			
		||||
  public String generateHeader() {
 | 
			
		||||
  public boolean getOverwrite() {
 | 
			
		||||
    return true;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  @Override
 | 
			
		||||
  public String generateHeader(final String namespace) {
 | 
			
		||||
    StringConcatenation _builder = new StringConcatenation();
 | 
			
		||||
    _builder.append("////////////////////////////////////////////////////////////////////////////////");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("// Copyright (C) 2017, MINRES Technologies GmbH");
 | 
			
		||||
    _builder.append("// Copyright (C) 2017-2022, MINRES Technologies GmbH");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("// All rights reserved.");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
@@ -94,8 +95,8 @@ public class RegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
    _builder.append(_date);
 | 
			
		||||
    _builder.newLineIfNotEmpty();
 | 
			
		||||
    _builder.append("//             *      ");
 | 
			
		||||
    String _name = this.componentDefinition.getName();
 | 
			
		||||
    _builder.append(_name);
 | 
			
		||||
    String _effectiveName = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
    _builder.append(_effectiveName);
 | 
			
		||||
    _builder.append(".h Author: <RDL Generator>");
 | 
			
		||||
    _builder.newLineIfNotEmpty();
 | 
			
		||||
    _builder.append("//");
 | 
			
		||||
@@ -104,57 +105,89 @@ public class RegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("#ifndef _");
 | 
			
		||||
    String _upperCase = this.componentDefinition.getName().toUpperCase();
 | 
			
		||||
    String _upperCase = namespace.toUpperCase();
 | 
			
		||||
    _builder.append(_upperCase);
 | 
			
		||||
    _builder.append("_H_");
 | 
			
		||||
    _builder.newLineIfNotEmpty();
 | 
			
		||||
    _builder.append("#define _");
 | 
			
		||||
    String _upperCase_1 = this.componentDefinition.getName().toUpperCase();
 | 
			
		||||
    _builder.append("_GEN_");
 | 
			
		||||
    String _upperCase_1 = RdlUtil.effectiveName(this.componentDefinition).toUpperCase();
 | 
			
		||||
    _builder.append(_upperCase_1);
 | 
			
		||||
    _builder.append("_H_");
 | 
			
		||||
    _builder.newLineIfNotEmpty();
 | 
			
		||||
    _builder.append("#define _");
 | 
			
		||||
    String _upperCase_2 = namespace.toUpperCase();
 | 
			
		||||
    _builder.append(_upperCase_2);
 | 
			
		||||
    _builder.append("_GEN_");
 | 
			
		||||
    String _upperCase_3 = RdlUtil.effectiveName(this.componentDefinition).toUpperCase();
 | 
			
		||||
    _builder.append(_upperCase_3);
 | 
			
		||||
    _builder.append("_H_");
 | 
			
		||||
    _builder.newLineIfNotEmpty();
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("#include <sysc/utilities.h>");
 | 
			
		||||
    _builder.append("#include <scc/utilities.h>");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("#include <util/bit_field.h>");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("#include <sysc/register.h>");
 | 
			
		||||
    _builder.append("#include <scc/register.h>");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("#include <sysc/tlm_target.h>");
 | 
			
		||||
    _builder.append("#include <scc/tlm_target.h>");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    {
 | 
			
		||||
      EList<Instantiation> _instantiations = this.componentDefinition.getInstantiations();
 | 
			
		||||
      for(final Instantiation instantiation : _instantiations) {
 | 
			
		||||
        {
 | 
			
		||||
          ComponentDefinitionType _type = RdlUtil.getComponentDefinition(instantiation).getType();
 | 
			
		||||
          boolean _equals = Objects.equal(_type, ComponentDefinitionType.REGFILE);
 | 
			
		||||
          if (_equals) {
 | 
			
		||||
            _builder.append("#include \"");
 | 
			
		||||
            String _effectiveName_1 = RdlUtil.effectiveName(RdlUtil.getComponentDefinition(instantiation));
 | 
			
		||||
            _builder.append(_effectiveName_1);
 | 
			
		||||
            _builder.append(".h\"");
 | 
			
		||||
            _builder.newLineIfNotEmpty();
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("namespace sysc {");
 | 
			
		||||
    _builder.append("namespace ");
 | 
			
		||||
    _builder.append(namespace);
 | 
			
		||||
    _builder.append(" {");
 | 
			
		||||
    _builder.newLineIfNotEmpty();
 | 
			
		||||
    _builder.append("namespace gen {");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("class ");
 | 
			
		||||
    String _name_1 = this.componentDefinition.getName();
 | 
			
		||||
    _builder.append(_name_1);
 | 
			
		||||
    _builder.append(" :");
 | 
			
		||||
    String _effectiveName_2 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
    _builder.append(_effectiveName_2);
 | 
			
		||||
    _builder.append("_regs :");
 | 
			
		||||
    _builder.newLineIfNotEmpty();
 | 
			
		||||
    _builder.append("        ");
 | 
			
		||||
    _builder.append("public sc_core::sc_module,");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("        ");
 | 
			
		||||
    _builder.append("public sysc::resetable");
 | 
			
		||||
    _builder.append("public scc::resetable");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("{");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("public:");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("    ");
 | 
			
		||||
    _builder.append("//////////////////////////////////////////////////////////////////////////////");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("    ");
 | 
			
		||||
    _builder.append("// storage declarations");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("    ");
 | 
			
		||||
    _builder.append("//////////////////////////////////////////////////////////////////////////////");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    {
 | 
			
		||||
      EList<ComponentDefinition> _componentDefinitions = this.componentDefinition.getComponentDefinitions();
 | 
			
		||||
      for(final ComponentDefinition cdef : _componentDefinitions) {
 | 
			
		||||
        {
 | 
			
		||||
          ComponentDefinitionType _type = cdef.getType();
 | 
			
		||||
          boolean _equals = Objects.equal(_type, ComponentDefinitionType.REG);
 | 
			
		||||
          if (_equals) {
 | 
			
		||||
          ComponentDefinitionType _type_1 = cdef.getType();
 | 
			
		||||
          boolean _equals_1 = Objects.equal(_type_1, ComponentDefinitionType.REG);
 | 
			
		||||
          if (_equals_1) {
 | 
			
		||||
            _builder.append("    ");
 | 
			
		||||
            _builder.append("BEGIN_BF_DECL(");
 | 
			
		||||
            String _effectiveName = RdlUtil.effectiveName(cdef);
 | 
			
		||||
            _builder.append(_effectiveName, "    ");
 | 
			
		||||
            String _effectiveName_3 = RdlUtil.effectiveName(cdef);
 | 
			
		||||
            _builder.append(_effectiveName_3, "    ");
 | 
			
		||||
            _builder.append("+\'_t\'», uint");
 | 
			
		||||
            _builder.append(cdef, "    ");
 | 
			
		||||
            _builder.append("_t);");
 | 
			
		||||
@@ -170,221 +203,186 @@ public class RegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    {
 | 
			
		||||
      EList<Instantiation> _instantiations = this.componentDefinition.getInstantiations();
 | 
			
		||||
      for(final Instantiation instantiation : _instantiations) {
 | 
			
		||||
        {
 | 
			
		||||
          if (((instantiation.getComponentRef() != null) && Objects.equal(instantiation.getComponentRef().getType(), ComponentDefinitionType.REG))) {
 | 
			
		||||
            _builder.append("    ");
 | 
			
		||||
            String _effectiveName_1 = RdlUtil.effectiveName(instantiation.getComponentRef());
 | 
			
		||||
            _builder.append(_effectiveName_1, "    ");
 | 
			
		||||
            _builder.append("+\'_t\' ");
 | 
			
		||||
            final Function1<ComponentInstance, String> _function = (ComponentInstance it) -> {
 | 
			
		||||
              return it.getName();
 | 
			
		||||
            };
 | 
			
		||||
            String _join = IterableExtensions.join(ListExtensions.<ComponentInstance, String>map(instantiation.getComponentInstances(), _function), ", ");
 | 
			
		||||
            _builder.append(_join, "    ");
 | 
			
		||||
            _builder.append(";");
 | 
			
		||||
            _builder.newLineIfNotEmpty();
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        {
 | 
			
		||||
          if (((instantiation.getComponent() != null) && Objects.equal(instantiation.getComponent().getType(), ComponentDefinitionType.REG))) {
 | 
			
		||||
            {
 | 
			
		||||
              boolean _isFilledByField = this.isFilledByField(instantiation);
 | 
			
		||||
              if (_isFilledByField) {
 | 
			
		||||
                {
 | 
			
		||||
                  final Function1<ComponentInstance, Boolean> _function_1 = (ComponentInstance it) -> {
 | 
			
		||||
                    Range _range = it.getRange();
 | 
			
		||||
                    return Boolean.valueOf((_range == null));
 | 
			
		||||
                  };
 | 
			
		||||
                  int _size = IterableExtensions.size(IterableExtensions.<ComponentInstance>filter(instantiation.getComponentInstances(), _function_1));
 | 
			
		||||
                  boolean _greaterThan = (_size > 0);
 | 
			
		||||
                  if (_greaterThan) {
 | 
			
		||||
                    _builder.append("    ");
 | 
			
		||||
                    _builder.append("uint");
 | 
			
		||||
                    long _size_1 = RdlUtil.getSize(instantiation);
 | 
			
		||||
                    _builder.append(_size_1, "    ");
 | 
			
		||||
                    _builder.append("_t ");
 | 
			
		||||
                    final Function1<ComponentInstance, Boolean> _function_2 = (ComponentInstance it) -> {
 | 
			
		||||
                      Range _range = it.getRange();
 | 
			
		||||
                      return Boolean.valueOf((_range == null));
 | 
			
		||||
                    };
 | 
			
		||||
                    final Function1<ComponentInstance, String> _function_3 = (ComponentInstance it) -> {
 | 
			
		||||
                      String _name_2 = it.getName();
 | 
			
		||||
                      return ("r_" + _name_2);
 | 
			
		||||
                    };
 | 
			
		||||
                    String _join_1 = IterableExtensions.join(IterableExtensions.<ComponentInstance, String>map(IterableExtensions.<ComponentInstance>filter(instantiation.getComponentInstances(), _function_2), _function_3), ", ");
 | 
			
		||||
                    _builder.append(_join_1, "    ");
 | 
			
		||||
                    _builder.append(";");
 | 
			
		||||
                    _builder.newLineIfNotEmpty();
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
                {
 | 
			
		||||
                  final Function1<ComponentInstance, Boolean> _function_4 = (ComponentInstance it) -> {
 | 
			
		||||
                    Range _range = it.getRange();
 | 
			
		||||
                    return Boolean.valueOf((_range != null));
 | 
			
		||||
                  };
 | 
			
		||||
                  Iterable<ComponentInstance> _filter = IterableExtensions.<ComponentInstance>filter(instantiation.getComponentInstances(), _function_4);
 | 
			
		||||
                  for(final ComponentInstance componentInstance : _filter) {
 | 
			
		||||
                    _builder.append("    ");
 | 
			
		||||
                    _builder.append("std::array<uint");
 | 
			
		||||
                    long _size_2 = RdlUtil.getSize(instantiation);
 | 
			
		||||
                    _builder.append(_size_2, "    ");
 | 
			
		||||
                    _builder.append("_t, ");
 | 
			
		||||
                    long _absSize = this.absSize(componentInstance.getRange());
 | 
			
		||||
                    _builder.append(_absSize, "    ");
 | 
			
		||||
                    _builder.append("> r_");
 | 
			
		||||
                    String _name_2 = componentInstance.getName();
 | 
			
		||||
                    _builder.append(_name_2, "    ");
 | 
			
		||||
                    _builder.append(";");
 | 
			
		||||
                    _builder.newLineIfNotEmpty();
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
            {
 | 
			
		||||
              boolean _isFilledByField_1 = this.isFilledByField(instantiation);
 | 
			
		||||
              boolean _not = (!_isFilledByField_1);
 | 
			
		||||
              if (_not) {
 | 
			
		||||
                _builder.append("    ");
 | 
			
		||||
                _builder.append("BEGIN_BF_DECL(");
 | 
			
		||||
                String _effectiveName_2 = RdlUtil.effectiveName(instantiation.getComponent());
 | 
			
		||||
                _builder.append(_effectiveName_2, "    ");
 | 
			
		||||
                _builder.append("_t, uint");
 | 
			
		||||
                long _size_3 = RdlUtil.getSize(instantiation);
 | 
			
		||||
                _builder.append(_size_3, "    ");
 | 
			
		||||
                _builder.append("_t);");
 | 
			
		||||
                _builder.newLineIfNotEmpty();
 | 
			
		||||
                _builder.append("    ");
 | 
			
		||||
                _builder.append("    ");
 | 
			
		||||
                String _genFieldDeclarations_1 = this.genFieldDeclarations(RdlUtil.definingComponent(instantiation));
 | 
			
		||||
                _builder.append(_genFieldDeclarations_1, "        ");
 | 
			
		||||
                _builder.newLineIfNotEmpty();
 | 
			
		||||
                _builder.append("    ");
 | 
			
		||||
                _builder.append("END_BF_DECL() ");
 | 
			
		||||
                final Function1<ComponentInstance, Boolean> _function_5 = (ComponentInstance it) -> {
 | 
			
		||||
                  Range _range = it.getRange();
 | 
			
		||||
                  return Boolean.valueOf((_range == null));
 | 
			
		||||
                };
 | 
			
		||||
                final Function1<ComponentInstance, String> _function_6 = (ComponentInstance it) -> {
 | 
			
		||||
                  String _name_3 = it.getName();
 | 
			
		||||
                  return ("r_" + _name_3);
 | 
			
		||||
                };
 | 
			
		||||
                String _join_2 = IterableExtensions.join(IterableExtensions.<ComponentInstance, String>map(IterableExtensions.<ComponentInstance>filter(instantiation.getComponentInstances(), _function_5), _function_6), ", ");
 | 
			
		||||
                _builder.append(_join_2, "    ");
 | 
			
		||||
                _builder.append(";");
 | 
			
		||||
                _builder.newLineIfNotEmpty();
 | 
			
		||||
                {
 | 
			
		||||
                  final Function1<ComponentInstance, Boolean> _function_7 = (ComponentInstance it) -> {
 | 
			
		||||
                    Range _range = it.getRange();
 | 
			
		||||
                    return Boolean.valueOf((_range != null));
 | 
			
		||||
                  };
 | 
			
		||||
                  Iterable<ComponentInstance> _filter_1 = IterableExtensions.<ComponentInstance>filter(instantiation.getComponentInstances(), _function_7);
 | 
			
		||||
                  for(final ComponentInstance componentInstance_1 : _filter_1) {
 | 
			
		||||
                    _builder.append("    ");
 | 
			
		||||
                    _builder.append("std::array<");
 | 
			
		||||
                    String _effectiveName_3 = RdlUtil.effectiveName(instantiation.getComponent());
 | 
			
		||||
                    _builder.append(_effectiveName_3, "    ");
 | 
			
		||||
                    _builder.append("_t, ");
 | 
			
		||||
                    long _absSize_1 = this.absSize(componentInstance_1.getRange());
 | 
			
		||||
                    _builder.append(_absSize_1, "    ");
 | 
			
		||||
                    _builder.append("> r_");
 | 
			
		||||
                    String _name_3 = componentInstance_1.getName();
 | 
			
		||||
                    _builder.append(_name_3, "    ");
 | 
			
		||||
                    _builder.append(";");
 | 
			
		||||
                    _builder.newLineIfNotEmpty();
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
            _builder.append("    ");
 | 
			
		||||
            _builder.newLine();
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    _builder.append("    ");
 | 
			
		||||
    _builder.append("// register declarations");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    {
 | 
			
		||||
      EList<Instantiation> _instantiations_1 = this.componentDefinition.getInstantiations();
 | 
			
		||||
      for(final Instantiation instantiation_1 : _instantiations_1) {
 | 
			
		||||
        {
 | 
			
		||||
          EList<ComponentInstance> _componentInstances = instantiation_1.getComponentInstances();
 | 
			
		||||
          for(final ComponentInstance instance : _componentInstances) {
 | 
			
		||||
          ComponentDefinitionType _type_2 = RdlUtil.getComponentDefinition(instantiation_1).getType();
 | 
			
		||||
          boolean _equals_2 = Objects.equal(_type_2, ComponentDefinitionType.REGFILE);
 | 
			
		||||
          if (_equals_2) {
 | 
			
		||||
            {
 | 
			
		||||
              Range _range = instance.getRange();
 | 
			
		||||
              boolean _tripleEquals = (_range == null);
 | 
			
		||||
              if (_tripleEquals) {
 | 
			
		||||
                {
 | 
			
		||||
                  boolean _isFilledByField_2 = this.isFilledByField(instantiation_1);
 | 
			
		||||
                  if (_isFilledByField_2) {
 | 
			
		||||
                    _builder.append("    ");
 | 
			
		||||
                    _builder.append("sysc::sc_register<uint");
 | 
			
		||||
                    long _size_4 = RdlUtil.getSize(instantiation_1);
 | 
			
		||||
                    _builder.append(_size_4, "    ");
 | 
			
		||||
                    _builder.append("_t> ");
 | 
			
		||||
                    String _name_4 = instance.getName();
 | 
			
		||||
                    _builder.append(_name_4, "    ");
 | 
			
		||||
                    _builder.append(";");
 | 
			
		||||
                    _builder.newLineIfNotEmpty();
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
                {
 | 
			
		||||
                  boolean _isFilledByField_3 = this.isFilledByField(instantiation_1);
 | 
			
		||||
                  boolean _not_1 = (!_isFilledByField_3);
 | 
			
		||||
                  if (_not_1) {
 | 
			
		||||
                    _builder.append("    ");
 | 
			
		||||
                    _builder.append("sysc::sc_register<");
 | 
			
		||||
                    String _effectiveName_4 = RdlUtil.effectiveName(instantiation_1.getComponent());
 | 
			
		||||
                    _builder.append(_effectiveName_4, "    ");
 | 
			
		||||
                    _builder.append("_t> ");
 | 
			
		||||
                    String _name_5 = instance.getName();
 | 
			
		||||
                    _builder.append(_name_5, "    ");
 | 
			
		||||
                    _builder.append(";");
 | 
			
		||||
                    _builder.newLineIfNotEmpty();
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
              EList<ComponentInstance> _componentInstances = instantiation_1.getComponentInstances();
 | 
			
		||||
              for(final ComponentInstance instance : _componentInstances) {
 | 
			
		||||
                _builder.append("    ");
 | 
			
		||||
                String _effectiveName_4 = RdlUtil.effectiveName(RdlUtil.getComponentDefinition(instantiation_1));
 | 
			
		||||
                _builder.append(_effectiveName_4, "    ");
 | 
			
		||||
                _builder.append("_regs i_");
 | 
			
		||||
                String _name = instance.getName();
 | 
			
		||||
                _builder.append(_name, "    ");
 | 
			
		||||
                _builder.append("{\"");
 | 
			
		||||
                String _name_1 = instance.getName();
 | 
			
		||||
                _builder.append(_name_1, "    ");
 | 
			
		||||
                _builder.append("\"};");
 | 
			
		||||
                _builder.newLineIfNotEmpty();
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
            {
 | 
			
		||||
              Range _range_1 = instance.getRange();
 | 
			
		||||
              boolean _tripleNotEquals = (_range_1 != null);
 | 
			
		||||
              if (_tripleNotEquals) {
 | 
			
		||||
                {
 | 
			
		||||
                  boolean _isFilledByField_4 = this.isFilledByField(instantiation_1);
 | 
			
		||||
                  if (_isFilledByField_4) {
 | 
			
		||||
                    _builder.append("    ");
 | 
			
		||||
                    _builder.append("sysc::sc_register_indexed<uint");
 | 
			
		||||
                    long _size_5 = RdlUtil.getSize(instantiation_1);
 | 
			
		||||
                    _builder.append(_size_5, "    ");
 | 
			
		||||
                    _builder.append("_t, ");
 | 
			
		||||
                    long _absSize_2 = this.absSize(instance.getRange());
 | 
			
		||||
                    _builder.append(_absSize_2, "    ");
 | 
			
		||||
                    _builder.append("> ");
 | 
			
		||||
                    String _name_6 = instance.getName();
 | 
			
		||||
                    _builder.append(_name_6, "    ");
 | 
			
		||||
                    _builder.append(";");
 | 
			
		||||
                    _builder.newLineIfNotEmpty();
 | 
			
		||||
          } else {
 | 
			
		||||
            ComponentDefinitionType _type_3 = RdlUtil.getComponentDefinition(instantiation_1).getType();
 | 
			
		||||
            boolean _equals_3 = Objects.equal(_type_3, ComponentDefinitionType.REG);
 | 
			
		||||
            if (_equals_3) {
 | 
			
		||||
              {
 | 
			
		||||
                boolean _isFilledByField = RdlUtil.isFilledByField(instantiation_1);
 | 
			
		||||
                if (_isFilledByField) {
 | 
			
		||||
                  {
 | 
			
		||||
                    final Function1<ComponentInstance, Boolean> _function = (ComponentInstance it) -> {
 | 
			
		||||
                      Range _range = it.getRange();
 | 
			
		||||
                      return Boolean.valueOf((_range == null));
 | 
			
		||||
                    };
 | 
			
		||||
                    int _size = IterableExtensions.size(IterableExtensions.<ComponentInstance>filter(instantiation_1.getComponentInstances(), _function));
 | 
			
		||||
                    boolean _greaterThan = (_size > 0);
 | 
			
		||||
                    if (_greaterThan) {
 | 
			
		||||
                      _builder.append("    ");
 | 
			
		||||
                      _builder.append("uint");
 | 
			
		||||
                      long _size_1 = RdlUtil.getSize(instantiation_1);
 | 
			
		||||
                      _builder.append(_size_1, "    ");
 | 
			
		||||
                      _builder.append("_t ");
 | 
			
		||||
                      final Function1<ComponentInstance, Boolean> _function_1 = (ComponentInstance it) -> {
 | 
			
		||||
                        Range _range = it.getRange();
 | 
			
		||||
                        return Boolean.valueOf((_range == null));
 | 
			
		||||
                      };
 | 
			
		||||
                      final Function1<ComponentInstance, String> _function_2 = (ComponentInstance it) -> {
 | 
			
		||||
                        String _name_2 = it.getName();
 | 
			
		||||
                        return ("r_" + _name_2);
 | 
			
		||||
                      };
 | 
			
		||||
                      String _join = IterableExtensions.join(IterableExtensions.<ComponentInstance, String>map(IterableExtensions.<ComponentInstance>filter(instantiation_1.getComponentInstances(), _function_1), _function_2), ", ");
 | 
			
		||||
                      _builder.append(_join, "    ");
 | 
			
		||||
                      _builder.append(";");
 | 
			
		||||
                      _builder.newLineIfNotEmpty();
 | 
			
		||||
                    }
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
                {
 | 
			
		||||
                  boolean _isFilledByField_5 = this.isFilledByField(instantiation_1);
 | 
			
		||||
                  boolean _not_2 = (!_isFilledByField_5);
 | 
			
		||||
                  if (_not_2) {
 | 
			
		||||
                  {
 | 
			
		||||
                    final Function1<ComponentInstance, Boolean> _function_3 = (ComponentInstance it) -> {
 | 
			
		||||
                      Range _range = it.getRange();
 | 
			
		||||
                      return Boolean.valueOf((_range != null));
 | 
			
		||||
                    };
 | 
			
		||||
                    Iterable<ComponentInstance> _filter = IterableExtensions.<ComponentInstance>filter(instantiation_1.getComponentInstances(), _function_3);
 | 
			
		||||
                    for(final ComponentInstance componentInstance : _filter) {
 | 
			
		||||
                      _builder.append("    ");
 | 
			
		||||
                      _builder.append("std::array<uint");
 | 
			
		||||
                      long _size_2 = RdlUtil.getSize(instantiation_1);
 | 
			
		||||
                      _builder.append(_size_2, "    ");
 | 
			
		||||
                      _builder.append("_t, ");
 | 
			
		||||
                      long _absSize = RdlUtil.absSize(componentInstance.getRange());
 | 
			
		||||
                      _builder.append(_absSize, "    ");
 | 
			
		||||
                      _builder.append("> r_");
 | 
			
		||||
                      String _name_2 = componentInstance.getName();
 | 
			
		||||
                      _builder.append(_name_2, "    ");
 | 
			
		||||
                      _builder.append(";");
 | 
			
		||||
                      _builder.newLineIfNotEmpty();
 | 
			
		||||
                    }
 | 
			
		||||
                  }
 | 
			
		||||
                } else {
 | 
			
		||||
                  int _size_3 = RdlUtil.getComponentDefinition(instantiation_1).getInstantiations().size();
 | 
			
		||||
                  boolean _equals_4 = (_size_3 == 0);
 | 
			
		||||
                  if (_equals_4) {
 | 
			
		||||
                    {
 | 
			
		||||
                      final Function1<ComponentInstance, Boolean> _function_4 = (ComponentInstance it) -> {
 | 
			
		||||
                        Range _range = it.getRange();
 | 
			
		||||
                        return Boolean.valueOf((_range == null));
 | 
			
		||||
                      };
 | 
			
		||||
                      int _size_4 = IterableExtensions.size(IterableExtensions.<ComponentInstance>filter(instantiation_1.getComponentInstances(), _function_4));
 | 
			
		||||
                      boolean _greaterThan_1 = (_size_4 > 0);
 | 
			
		||||
                      if (_greaterThan_1) {
 | 
			
		||||
                        _builder.append("    ");
 | 
			
		||||
                        _builder.append("uint");
 | 
			
		||||
                        long _size_5 = RdlUtil.getSize(instantiation_1);
 | 
			
		||||
                        _builder.append(_size_5, "    ");
 | 
			
		||||
                        _builder.append("_t ");
 | 
			
		||||
                        final Function1<ComponentInstance, Boolean> _function_5 = (ComponentInstance it) -> {
 | 
			
		||||
                          Range _range = it.getRange();
 | 
			
		||||
                          return Boolean.valueOf((_range == null));
 | 
			
		||||
                        };
 | 
			
		||||
                        final Function1<ComponentInstance, String> _function_6 = (ComponentInstance it) -> {
 | 
			
		||||
                          String _name_3 = it.getName();
 | 
			
		||||
                          return ("r_" + _name_3);
 | 
			
		||||
                        };
 | 
			
		||||
                        String _join_1 = IterableExtensions.join(IterableExtensions.<ComponentInstance, String>map(IterableExtensions.<ComponentInstance>filter(instantiation_1.getComponentInstances(), _function_5), _function_6), ", ");
 | 
			
		||||
                        _builder.append(_join_1, "    ");
 | 
			
		||||
                        _builder.append(";");
 | 
			
		||||
                        _builder.newLineIfNotEmpty();
 | 
			
		||||
                      }
 | 
			
		||||
                    }
 | 
			
		||||
                    {
 | 
			
		||||
                      final Function1<ComponentInstance, Boolean> _function_7 = (ComponentInstance it) -> {
 | 
			
		||||
                        Range _range = it.getRange();
 | 
			
		||||
                        return Boolean.valueOf((_range != null));
 | 
			
		||||
                      };
 | 
			
		||||
                      Iterable<ComponentInstance> _filter_1 = IterableExtensions.<ComponentInstance>filter(instantiation_1.getComponentInstances(), _function_7);
 | 
			
		||||
                      for(final ComponentInstance componentInstance_1 : _filter_1) {
 | 
			
		||||
                        _builder.append("    ");
 | 
			
		||||
                        _builder.append("std::array<uint");
 | 
			
		||||
                        long _size_6 = RdlUtil.getSize(instantiation_1);
 | 
			
		||||
                        _builder.append(_size_6, "    ");
 | 
			
		||||
                        _builder.append("_t, ");
 | 
			
		||||
                        long _absSize_1 = RdlUtil.absSize(componentInstance_1.getRange());
 | 
			
		||||
                        _builder.append(_absSize_1, "    ");
 | 
			
		||||
                        _builder.append("> r_");
 | 
			
		||||
                        String _name_3 = componentInstance_1.getName();
 | 
			
		||||
                        _builder.append(_name_3, "    ");
 | 
			
		||||
                        _builder.append(";");
 | 
			
		||||
                        _builder.newLineIfNotEmpty();
 | 
			
		||||
                      }
 | 
			
		||||
                    }
 | 
			
		||||
                  } else {
 | 
			
		||||
                    _builder.append("    ");
 | 
			
		||||
                    _builder.append("sysc::sc_register_indexed<");
 | 
			
		||||
                    _builder.append("BEGIN_BF_DECL(");
 | 
			
		||||
                    String _effectiveName_5 = RdlUtil.effectiveName(instantiation_1.getComponent());
 | 
			
		||||
                    _builder.append(_effectiveName_5, "    ");
 | 
			
		||||
                    _builder.append("_t, ");
 | 
			
		||||
                    long _absSize_3 = this.absSize(instance.getRange());
 | 
			
		||||
                    _builder.append(_absSize_3, "    ");
 | 
			
		||||
                    _builder.append("> ");
 | 
			
		||||
                    String _name_7 = instance.getName();
 | 
			
		||||
                    _builder.append(_name_7, "    ");
 | 
			
		||||
                    _builder.append("_t, uint");
 | 
			
		||||
                    long _size_7 = RdlUtil.getSize(instantiation_1);
 | 
			
		||||
                    _builder.append(_size_7, "    ");
 | 
			
		||||
                    _builder.append("_t);");
 | 
			
		||||
                    _builder.newLineIfNotEmpty();
 | 
			
		||||
                    _builder.append("    ");
 | 
			
		||||
                    _builder.append("    ");
 | 
			
		||||
                    String _genFieldDeclarations_1 = this.genFieldDeclarations(RdlUtil.definingComponent(instantiation_1));
 | 
			
		||||
                    _builder.append(_genFieldDeclarations_1, "        ");
 | 
			
		||||
                    _builder.newLineIfNotEmpty();
 | 
			
		||||
                    _builder.append("    ");
 | 
			
		||||
                    _builder.append("END_BF_DECL() ");
 | 
			
		||||
                    final Function1<ComponentInstance, Boolean> _function_8 = (ComponentInstance it) -> {
 | 
			
		||||
                      Range _range = it.getRange();
 | 
			
		||||
                      return Boolean.valueOf((_range == null));
 | 
			
		||||
                    };
 | 
			
		||||
                    final Function1<ComponentInstance, String> _function_9 = (ComponentInstance it) -> {
 | 
			
		||||
                      String _name_4 = it.getName();
 | 
			
		||||
                      return ("r_" + _name_4);
 | 
			
		||||
                    };
 | 
			
		||||
                    String _join_2 = IterableExtensions.join(IterableExtensions.<ComponentInstance, String>map(IterableExtensions.<ComponentInstance>filter(instantiation_1.getComponentInstances(), _function_8), _function_9), ", ");
 | 
			
		||||
                    _builder.append(_join_2, "    ");
 | 
			
		||||
                    _builder.append(";");
 | 
			
		||||
                    _builder.newLineIfNotEmpty();
 | 
			
		||||
                    {
 | 
			
		||||
                      final Function1<ComponentInstance, Boolean> _function_10 = (ComponentInstance it) -> {
 | 
			
		||||
                        Range _range = it.getRange();
 | 
			
		||||
                        return Boolean.valueOf((_range != null));
 | 
			
		||||
                      };
 | 
			
		||||
                      Iterable<ComponentInstance> _filter_2 = IterableExtensions.<ComponentInstance>filter(instantiation_1.getComponentInstances(), _function_10);
 | 
			
		||||
                      for(final ComponentInstance componentInstance_2 : _filter_2) {
 | 
			
		||||
                        _builder.append("    ");
 | 
			
		||||
                        _builder.append("std::array<");
 | 
			
		||||
                        String _effectiveName_6 = RdlUtil.effectiveName(instantiation_1.getComponent());
 | 
			
		||||
                        _builder.append(_effectiveName_6, "    ");
 | 
			
		||||
                        _builder.append("_t, ");
 | 
			
		||||
                        long _absSize_2 = RdlUtil.absSize(componentInstance_2.getRange());
 | 
			
		||||
                        _builder.append(_absSize_2, "    ");
 | 
			
		||||
                        _builder.append("> r_");
 | 
			
		||||
                        String _name_4 = componentInstance_2.getName();
 | 
			
		||||
                        _builder.append(_name_4, "    ");
 | 
			
		||||
                        _builder.append(";");
 | 
			
		||||
                        _builder.newLineIfNotEmpty();
 | 
			
		||||
                      }
 | 
			
		||||
                    }
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
@@ -394,54 +392,209 @@ public class RegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    _builder.append("    ");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("    ");
 | 
			
		||||
    String _name_8 = this.componentDefinition.getName();
 | 
			
		||||
    _builder.append(_name_8, "    ");
 | 
			
		||||
    _builder.append("(sc_core::sc_module_name nm);");
 | 
			
		||||
    _builder.newLineIfNotEmpty();
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("    ");
 | 
			
		||||
    _builder.append("template<unsigned BUSWIDTH=32>");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("    ");
 | 
			
		||||
    _builder.append("void registerResources(sysc::tlm_target<BUSWIDTH>& target);");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("};");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("}");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("//////////////////////////////////////////////////////////////////////////////");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("// member functions");
 | 
			
		||||
    _builder.append("    ");
 | 
			
		||||
    _builder.append("// register declarations");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("    ");
 | 
			
		||||
    _builder.append("//////////////////////////////////////////////////////////////////////////////");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("inline sysc::");
 | 
			
		||||
    String _name_9 = this.componentDefinition.getName();
 | 
			
		||||
    _builder.append(_name_9);
 | 
			
		||||
    _builder.append("::");
 | 
			
		||||
    String _name_10 = this.componentDefinition.getName();
 | 
			
		||||
    _builder.append(_name_10);
 | 
			
		||||
    _builder.append("(sc_core::sc_module_name nm)");
 | 
			
		||||
    _builder.newLineIfNotEmpty();
 | 
			
		||||
    _builder.append(": sc_core::sc_module(nm)");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    {
 | 
			
		||||
      EList<Instantiation> _instantiations_2 = this.componentDefinition.getInstantiations();
 | 
			
		||||
      for(final Instantiation instantiation_2 : _instantiations_2) {
 | 
			
		||||
        {
 | 
			
		||||
          EList<ComponentInstance> _componentInstances_1 = instantiation_2.getComponentInstances();
 | 
			
		||||
          for(final ComponentInstance instance_1 : _componentInstances_1) {
 | 
			
		||||
            _builder.append(", NAMED(");
 | 
			
		||||
            String _name_11 = instance_1.getName();
 | 
			
		||||
            _builder.append(_name_11);
 | 
			
		||||
            _builder.append(", r_");
 | 
			
		||||
            String _name_12 = instance_1.getName();
 | 
			
		||||
            _builder.append(_name_12);
 | 
			
		||||
            _builder.append(", 0, *this)");
 | 
			
		||||
            _builder.newLineIfNotEmpty();
 | 
			
		||||
            {
 | 
			
		||||
              ComponentDefinitionType _type_4 = RdlUtil.getComponentDefinition(instantiation_2).getType();
 | 
			
		||||
              boolean _equals_5 = Objects.equal(_type_4, ComponentDefinitionType.REGFILE);
 | 
			
		||||
              if (_equals_5) {
 | 
			
		||||
                _builder.append("    ");
 | 
			
		||||
                _builder.append("// scc::sc_register_file<");
 | 
			
		||||
                String _effectiveName_7 = RdlUtil.effectiveName(RdlUtil.getComponentDefinition(instantiation_2));
 | 
			
		||||
                _builder.append(_effectiveName_7, "    ");
 | 
			
		||||
                _builder.append("_regs> ");
 | 
			
		||||
                String _name_5 = instance_1.getName();
 | 
			
		||||
                _builder.append(_name_5, "    ");
 | 
			
		||||
                _builder.append(";");
 | 
			
		||||
                _builder.newLineIfNotEmpty();
 | 
			
		||||
              } else {
 | 
			
		||||
                ComponentDefinitionType _type_5 = RdlUtil.getComponentDefinition(instantiation_2).getType();
 | 
			
		||||
                boolean _equals_6 = Objects.equal(_type_5, ComponentDefinitionType.REG);
 | 
			
		||||
                if (_equals_6) {
 | 
			
		||||
                  {
 | 
			
		||||
                    Range _range = instance_1.getRange();
 | 
			
		||||
                    boolean _tripleEquals = (_range == null);
 | 
			
		||||
                    if (_tripleEquals) {
 | 
			
		||||
                      {
 | 
			
		||||
                        int _size_8 = RdlUtil.getComponentDefinition(instantiation_2).getInstantiations().size();
 | 
			
		||||
                        boolean _equals_7 = (_size_8 == 0);
 | 
			
		||||
                        if (_equals_7) {
 | 
			
		||||
                          _builder.append("    ");
 | 
			
		||||
                          _builder.append("scc::sc_register<uint");
 | 
			
		||||
                          long _size_9 = RdlUtil.getSize(instantiation_2);
 | 
			
		||||
                          _builder.append(_size_9, "    ");
 | 
			
		||||
                          _builder.append("_t> ");
 | 
			
		||||
                          String _name_6 = instance_1.getName();
 | 
			
		||||
                          _builder.append(_name_6, "    ");
 | 
			
		||||
                          _builder.append(";");
 | 
			
		||||
                          _builder.newLineIfNotEmpty();
 | 
			
		||||
                        } else {
 | 
			
		||||
                          boolean _isFilledByField_1 = RdlUtil.isFilledByField(instantiation_2);
 | 
			
		||||
                          if (_isFilledByField_1) {
 | 
			
		||||
                            _builder.append("    ");
 | 
			
		||||
                            _builder.append("scc::sc_register<uint");
 | 
			
		||||
                            long _size_10 = RdlUtil.getSize(instantiation_2);
 | 
			
		||||
                            _builder.append(_size_10, "    ");
 | 
			
		||||
                            _builder.append("_t> ");
 | 
			
		||||
                            String _name_7 = instance_1.getName();
 | 
			
		||||
                            _builder.append(_name_7, "    ");
 | 
			
		||||
                            _builder.append(";");
 | 
			
		||||
                            _builder.newLineIfNotEmpty();
 | 
			
		||||
                          } else {
 | 
			
		||||
                            _builder.append("    ");
 | 
			
		||||
                            _builder.append("scc::sc_register<");
 | 
			
		||||
                            String _effectiveName_8 = RdlUtil.effectiveName(RdlUtil.getComponentDefinition(instantiation_2));
 | 
			
		||||
                            _builder.append(_effectiveName_8, "    ");
 | 
			
		||||
                            _builder.append("_t> ");
 | 
			
		||||
                            String _name_8 = instance_1.getName();
 | 
			
		||||
                            _builder.append(_name_8, "    ");
 | 
			
		||||
                            _builder.append(";");
 | 
			
		||||
                            _builder.newLineIfNotEmpty();
 | 
			
		||||
                          }
 | 
			
		||||
                        }
 | 
			
		||||
                      }
 | 
			
		||||
                    } else {
 | 
			
		||||
                      {
 | 
			
		||||
                        int _size_11 = RdlUtil.getComponentDefinition(instantiation_2).getInstantiations().size();
 | 
			
		||||
                        boolean _equals_8 = (_size_11 == 0);
 | 
			
		||||
                        if (_equals_8) {
 | 
			
		||||
                          _builder.append("    ");
 | 
			
		||||
                          _builder.append("scc::sc_register_indexed<uint");
 | 
			
		||||
                          long _size_12 = RdlUtil.getSize(instantiation_2);
 | 
			
		||||
                          _builder.append(_size_12, "    ");
 | 
			
		||||
                          _builder.append("_t, ");
 | 
			
		||||
                          long _absSize_3 = RdlUtil.absSize(instance_1.getRange());
 | 
			
		||||
                          _builder.append(_absSize_3, "    ");
 | 
			
		||||
                          _builder.append("> ");
 | 
			
		||||
                          String _name_9 = instance_1.getName();
 | 
			
		||||
                          _builder.append(_name_9, "    ");
 | 
			
		||||
                          _builder.append(";");
 | 
			
		||||
                          _builder.newLineIfNotEmpty();
 | 
			
		||||
                        } else {
 | 
			
		||||
                          boolean _isFilledByField_2 = RdlUtil.isFilledByField(instantiation_2);
 | 
			
		||||
                          if (_isFilledByField_2) {
 | 
			
		||||
                            _builder.append("    ");
 | 
			
		||||
                            _builder.append("scc::sc_register_indexed<uint");
 | 
			
		||||
                            long _size_13 = RdlUtil.getSize(instantiation_2);
 | 
			
		||||
                            _builder.append(_size_13, "    ");
 | 
			
		||||
                            _builder.append("_t, ");
 | 
			
		||||
                            long _absSize_4 = RdlUtil.absSize(instance_1.getRange());
 | 
			
		||||
                            _builder.append(_absSize_4, "    ");
 | 
			
		||||
                            _builder.append("> ");
 | 
			
		||||
                            String _name_10 = instance_1.getName();
 | 
			
		||||
                            _builder.append(_name_10, "    ");
 | 
			
		||||
                            _builder.append(";");
 | 
			
		||||
                            _builder.newLineIfNotEmpty();
 | 
			
		||||
                          } else {
 | 
			
		||||
                            _builder.append("    ");
 | 
			
		||||
                            _builder.append("scc::sc_register_indexed<");
 | 
			
		||||
                            String _effectiveName_9 = RdlUtil.effectiveName(instantiation_2.getComponent());
 | 
			
		||||
                            _builder.append(_effectiveName_9, "    ");
 | 
			
		||||
                            _builder.append("_t, ");
 | 
			
		||||
                            long _absSize_5 = RdlUtil.absSize(instance_1.getRange());
 | 
			
		||||
                            _builder.append(_absSize_5, "    ");
 | 
			
		||||
                            _builder.append("> ");
 | 
			
		||||
                            String _name_11 = instance_1.getName();
 | 
			
		||||
                            _builder.append(_name_11, "    ");
 | 
			
		||||
                            _builder.append(";");
 | 
			
		||||
                            _builder.newLineIfNotEmpty();
 | 
			
		||||
                          }
 | 
			
		||||
                        }
 | 
			
		||||
                      }
 | 
			
		||||
                    }
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    _builder.append("    ");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("    ");
 | 
			
		||||
    String _effectiveName_10 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
    _builder.append(_effectiveName_10, "    ");
 | 
			
		||||
    _builder.append("_regs(sc_core::sc_module_name nm);");
 | 
			
		||||
    _builder.newLineIfNotEmpty();
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("    ");
 | 
			
		||||
    _builder.append("template<unsigned BUSWIDTH=32>");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("    ");
 | 
			
		||||
    _builder.append("void registerResources(scc::tlm_target<BUSWIDTH>& target, uint64_t offset=0);");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("};");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("} // namespace gen");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("} // namespace ");
 | 
			
		||||
    _builder.append(namespace);
 | 
			
		||||
    _builder.newLineIfNotEmpty();
 | 
			
		||||
    _builder.append("//////////////////////////////////////////////////////////////////////////////");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("// member functions");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("//////////////////////////////////////////////////////////////////////////////");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("inline ");
 | 
			
		||||
    _builder.append(namespace);
 | 
			
		||||
    _builder.append("::gen::");
 | 
			
		||||
    String _effectiveName_11 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
    _builder.append(_effectiveName_11);
 | 
			
		||||
    _builder.append("_regs::");
 | 
			
		||||
    String _effectiveName_12 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
    _builder.append(_effectiveName_12);
 | 
			
		||||
    _builder.append("_regs(sc_core::sc_module_name nm)");
 | 
			
		||||
    _builder.newLineIfNotEmpty();
 | 
			
		||||
    _builder.append(": sc_core::sc_module(nm)");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    {
 | 
			
		||||
      EList<Instantiation> _instantiations_3 = this.componentDefinition.getInstantiations();
 | 
			
		||||
      for(final Instantiation instantiation_3 : _instantiations_3) {
 | 
			
		||||
        {
 | 
			
		||||
          EList<ComponentInstance> _componentInstances_2 = instantiation_3.getComponentInstances();
 | 
			
		||||
          for(final ComponentInstance instance_2 : _componentInstances_2) {
 | 
			
		||||
            {
 | 
			
		||||
              ComponentDefinitionType _type_6 = RdlUtil.getComponentDefinition(instantiation_3).getType();
 | 
			
		||||
              boolean _equals_9 = Objects.equal(_type_6, ComponentDefinitionType.REGFILE);
 | 
			
		||||
              if (_equals_9) {
 | 
			
		||||
                _builder.append("// , NAMED(");
 | 
			
		||||
                String _name_12 = instance_2.getName();
 | 
			
		||||
                _builder.append(_name_12);
 | 
			
		||||
                _builder.append(", i_");
 | 
			
		||||
                String _name_13 = instance_2.getName();
 | 
			
		||||
                _builder.append(_name_13);
 | 
			
		||||
                _builder.append(", 0, *this)");
 | 
			
		||||
                _builder.newLineIfNotEmpty();
 | 
			
		||||
              } else {
 | 
			
		||||
                ComponentDefinitionType _type_7 = RdlUtil.getComponentDefinition(instantiation_3).getType();
 | 
			
		||||
                boolean _equals_10 = Objects.equal(_type_7, ComponentDefinitionType.REG);
 | 
			
		||||
                if (_equals_10) {
 | 
			
		||||
                  _builder.append(", NAMED(");
 | 
			
		||||
                  String _name_14 = instance_2.getName();
 | 
			
		||||
                  _builder.append(_name_14);
 | 
			
		||||
                  _builder.append(", r_");
 | 
			
		||||
                  String _name_15 = instance_2.getName();
 | 
			
		||||
                  _builder.append(_name_15);
 | 
			
		||||
                  _builder.append(", 0, *this)");
 | 
			
		||||
                  _builder.newLineIfNotEmpty();
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
@@ -453,26 +606,48 @@ public class RegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("template<unsigned BUSWIDTH>");
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("inline void sysc::");
 | 
			
		||||
    String _name_13 = this.componentDefinition.getName();
 | 
			
		||||
    _builder.append(_name_13);
 | 
			
		||||
    _builder.append("::registerResources(sysc::tlm_target<BUSWIDTH>& target) {");
 | 
			
		||||
    _builder.append("inline void ");
 | 
			
		||||
    _builder.append(namespace);
 | 
			
		||||
    _builder.append("::gen::");
 | 
			
		||||
    String _effectiveName_13 = RdlUtil.effectiveName(this.componentDefinition);
 | 
			
		||||
    _builder.append(_effectiveName_13);
 | 
			
		||||
    _builder.append("_regs::registerResources(scc::tlm_target<BUSWIDTH>& target, uint64_t offset) {");
 | 
			
		||||
    _builder.newLineIfNotEmpty();
 | 
			
		||||
    {
 | 
			
		||||
      EList<Instantiation> _instantiations_3 = this.componentDefinition.getInstantiations();
 | 
			
		||||
      for(final Instantiation instantiation_3 : _instantiations_3) {
 | 
			
		||||
      EList<Instantiation> _instantiations_4 = this.componentDefinition.getInstantiations();
 | 
			
		||||
      for(final Instantiation instantiation_4 : _instantiations_4) {
 | 
			
		||||
        {
 | 
			
		||||
          EList<ComponentInstance> _componentInstances_2 = instantiation_3.getComponentInstances();
 | 
			
		||||
          for(final ComponentInstance instance_2 : _componentInstances_2) {
 | 
			
		||||
            _builder.append("    ");
 | 
			
		||||
            _builder.append("target.addResource(");
 | 
			
		||||
            String _name_14 = instance_2.getName();
 | 
			
		||||
            _builder.append(_name_14, "    ");
 | 
			
		||||
            _builder.append(", ");
 | 
			
		||||
            IntegerWithRadix _addressValue = RdlUtil.addressValue(instance_2);
 | 
			
		||||
            _builder.append(_addressValue, "    ");
 | 
			
		||||
            _builder.append("UL);");
 | 
			
		||||
            _builder.newLineIfNotEmpty();
 | 
			
		||||
          EList<ComponentInstance> _componentInstances_3 = instantiation_4.getComponentInstances();
 | 
			
		||||
          for(final ComponentInstance instance_3 : _componentInstances_3) {
 | 
			
		||||
            {
 | 
			
		||||
              ComponentDefinitionType _type_8 = RdlUtil.getComponentDefinition(instantiation_4).getType();
 | 
			
		||||
              boolean _equals_11 = Objects.equal(_type_8, ComponentDefinitionType.REGFILE);
 | 
			
		||||
              if (_equals_11) {
 | 
			
		||||
                _builder.append("    ");
 | 
			
		||||
                _builder.append("i_");
 | 
			
		||||
                String _name_16 = instance_3.getName();
 | 
			
		||||
                _builder.append(_name_16, "    ");
 | 
			
		||||
                _builder.append(".registerResources(target, ");
 | 
			
		||||
                IntegerWithRadix _addressValue = RdlUtil.addressValue(instance_3);
 | 
			
		||||
                _builder.append(_addressValue, "    ");
 | 
			
		||||
                _builder.append("UL+offset);");
 | 
			
		||||
                _builder.newLineIfNotEmpty();
 | 
			
		||||
              } else {
 | 
			
		||||
                ComponentDefinitionType _type_9 = RdlUtil.getComponentDefinition(instantiation_4).getType();
 | 
			
		||||
                boolean _equals_12 = Objects.equal(_type_9, ComponentDefinitionType.REG);
 | 
			
		||||
                if (_equals_12) {
 | 
			
		||||
                  _builder.append("    ");
 | 
			
		||||
                  _builder.append("target.addResource(");
 | 
			
		||||
                  String _name_17 = instance_3.getName();
 | 
			
		||||
                  _builder.append(_name_17, "    ");
 | 
			
		||||
                  _builder.append(", ");
 | 
			
		||||
                  IntegerWithRadix _addressValue_1 = RdlUtil.addressValue(instance_3);
 | 
			
		||||
                  _builder.append(_addressValue_1, "    ");
 | 
			
		||||
                  _builder.append("UL);");
 | 
			
		||||
                  _builder.newLineIfNotEmpty();
 | 
			
		||||
                }
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
@@ -481,73 +656,18 @@ public class RegfileGenerator extends RdlBaseGenerator {
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.newLine();
 | 
			
		||||
    _builder.append("#endif // _");
 | 
			
		||||
    String _upperCase_2 = this.componentDefinition.getName().toUpperCase();
 | 
			
		||||
    _builder.append(_upperCase_2);
 | 
			
		||||
    String _upperCase_4 = namespace.toUpperCase();
 | 
			
		||||
    _builder.append(_upperCase_4);
 | 
			
		||||
    _builder.append("_GEN_");
 | 
			
		||||
    String _upperCase_5 = RdlUtil.effectiveName(this.componentDefinition).toUpperCase();
 | 
			
		||||
    _builder.append(_upperCase_5);
 | 
			
		||||
    _builder.append("_H_");
 | 
			
		||||
    _builder.newLineIfNotEmpty();
 | 
			
		||||
    return _builder.toString();
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  public long absSize(final Range range) {
 | 
			
		||||
    Object _size = range.getSize();
 | 
			
		||||
    boolean _tripleNotEquals = (_size != null);
 | 
			
		||||
    if (_tripleNotEquals) {
 | 
			
		||||
      Object _size_1 = range.getSize();
 | 
			
		||||
      return ((IntegerWithRadix) _size_1).value;
 | 
			
		||||
    } else {
 | 
			
		||||
      Object _left = range.getLeft();
 | 
			
		||||
      Object _right = range.getRight();
 | 
			
		||||
      long _abs = Math.abs((((IntegerWithRadix) _left).value - ((IntegerWithRadix) _right).value));
 | 
			
		||||
      return (_abs + 1);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  public boolean isFilledByField(final Instantiation instantiation) {
 | 
			
		||||
    final int fieldCount = this.instanceCountOfType(instantiation.getComponent(), ComponentDefinitionType.FIELD);
 | 
			
		||||
    if ((fieldCount == 1)) {
 | 
			
		||||
      final long instSize = RdlUtil.getSize(instantiation);
 | 
			
		||||
      final Instantiation field = ((Instantiation[])Conversions.unwrapArray(RdlUtil.instantiationsOfType(instantiation.getComponent(), ComponentDefinitionType.FIELD), Instantiation.class))[0];
 | 
			
		||||
      final ComponentInstance inst = field.getComponentInstances().get(0);
 | 
			
		||||
      final Range range = inst.getRange();
 | 
			
		||||
      if ((range == null)) {
 | 
			
		||||
        long _size = RdlUtil.getSize(field);
 | 
			
		||||
        return (instSize == _size);
 | 
			
		||||
      }
 | 
			
		||||
      Object _size_1 = range.getSize();
 | 
			
		||||
      boolean _tripleNotEquals = (_size_1 != null);
 | 
			
		||||
      if (_tripleNotEquals) {
 | 
			
		||||
        Object _size_2 = range.getSize();
 | 
			
		||||
        return (instSize == ((IntegerWithRadix) _size_2).value);
 | 
			
		||||
      } else {
 | 
			
		||||
        Object _left = range.getLeft();
 | 
			
		||||
        final long left = ((IntegerWithRadix) _left).value;
 | 
			
		||||
        Object _right = range.getRight();
 | 
			
		||||
        final long right = ((IntegerWithRadix) _right).value;
 | 
			
		||||
        long _xifexpression = (long) 0;
 | 
			
		||||
        if ((left > right)) {
 | 
			
		||||
          _xifexpression = ((left - right) + 1);
 | 
			
		||||
        } else {
 | 
			
		||||
          _xifexpression = ((right - left) + 1);
 | 
			
		||||
        }
 | 
			
		||||
        final long size = _xifexpression;
 | 
			
		||||
        return (instSize == size);
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  public int instanceCountOfType(final ComponentDefinition definition, final ComponentDefinitionType type) {
 | 
			
		||||
    final Function1<Instantiation, Integer> _function = (Instantiation it) -> {
 | 
			
		||||
      return Integer.valueOf(it.getComponentInstances().size());
 | 
			
		||||
    };
 | 
			
		||||
    final Function2<Integer, Integer, Integer> _function_1 = (Integer p1, Integer p2) -> {
 | 
			
		||||
      return Integer.valueOf(((p1).intValue() + (p1).intValue()));
 | 
			
		||||
    };
 | 
			
		||||
    return (int) IterableExtensions.<Integer>reduce(IterableExtensions.<Instantiation, Integer>map(RdlUtil.instantiationsOfType(definition, type), _function), _function_1);
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
  @Override
 | 
			
		||||
  public String generateSource() {
 | 
			
		||||
  public String generateSource(final String namespace) {
 | 
			
		||||
    return "";
 | 
			
		||||
  }
 | 
			
		||||
  
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,6 @@ import com.google.common.collect.Iterables;
 | 
			
		||||
import com.minres.rdl.rdl.ComponentDefinition;
 | 
			
		||||
import com.minres.rdl.rdl.Include;
 | 
			
		||||
import com.minres.rdl.rdl.Root;
 | 
			
		||||
import com.minres.rdl.scoping.AbstractRDLScopeProvider;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
import org.eclipse.emf.common.util.EList;
 | 
			
		||||
import org.eclipse.emf.ecore.EObject;
 | 
			
		||||
 
 | 
			
		||||
@@ -3,8 +3,6 @@
 | 
			
		||||
 */
 | 
			
		||||
package com.minres.rdl.validation;
 | 
			
		||||
 | 
			
		||||
import com.minres.rdl.validation.AbstractRDLValidator;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * This class contains custom validation rules.
 | 
			
		||||
 * 
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user