コード例 #1
0
ファイル: ConstLoader.cs プロジェクト: cephdon/systemsharp
        private bool TryGetConstSLV(XILInstr instr, TypeDescriptor rtype, out StdLogicVector constSLV)
        {
            switch (instr.Name)
            {
            case InstructionCodes.LdConst:
            {
                object constValue = instr.Operand;
                constSLV = StdLogicVector.Serialize(constValue);
            }
            break;

            case InstructionCodes.Ld0:
            {
                object         sample = rtype.GetSampleInstance();
                StdLogicVector slv    = StdLogicVector.Serialize(sample);
                constSLV = StdLogicVector._0s(slv.Size);
            }
            break;

            default:
            {
                constSLV = "";
                return(false);
            }
            }
            return(true);
        }
コード例 #2
0
        private object Create0(TypeDescriptor type)
        {
            var slv = StdLogicVector.Serialize(type.GetSampleInstance());

            slv = StdLogicVector._0s(slv.Size);
            return(StdLogicVector.Deserialize(slv, type.CILType));
        }
コード例 #3
0
ファイル: MemoryMapping.cs プロジェクト: cephdon/systemsharp
        public override StdLogicVector[] SerializeInstance(object instance)
        {
            StdLogicVector plain = StdLogicVector.Serialize(instance);

            StdLogicVector[] result = new StdLogicVector[Size];
            for (int i = 0; i < (int)Size; i++)
            {
                int upper = (i + 1) * WordSize - 1;
                if (upper >= plain.Size)
                {
                    result[i] = StdLogicVector._0s(upper - plain.Size + 1).Concat(plain[plain.Size - 1, i * WordSize]);
                }
                else
                {
                    result[i] = plain[(i + 1) * WordSize - 1, i *WordSize];
                }
            }

            return(result);
        }
コード例 #4
0
        private void ImplementLdConst(object value)
        {
            var      mms         = GetDataLayout(value);
            Unsigned addr        = mms.BaseAddress;
            var      addrType    = TypeDescriptor.GetTypeOf(addr);
            int      addrSize    = addr.Size;
            var      rawWordType = Mapper.MarshalInfo.GetRawWordType();
            var      stackTypes  = new TypeDescriptor[mms.Size + 1];

            for (ulong k = 0; k < mms.Size; k++)
            {
                Emit(_iset.RdMemFix(Mapper.DefaultRegion, addr).CreateStk(0, rawWordType));
                addr          = (addr + Unsigned.FromULong(1, 1)).Resize(addrSize);
                stackTypes[k] = rawWordType;
            }
            uint concatSize = (uint)(mms.Size * Mapper.MarshalInfo.WordSize);
            var  concatType = TypeDescriptor.GetTypeOf(StdLogicVector._0s(concatSize));

            if (mms.Size > 1)
            {
                stackTypes[mms.Size] = concatType;
                Emit(_iset.Concat().CreateStk(stackTypes.Length, stackTypes));
            }
            var valueType    = TypeDescriptor.GetTypeOf(value);
            var slvValue     = StdLogicVector.Serialize(value);
            var rawValueType = TypeDescriptor.GetTypeOf(slvValue);

            if (!rawValueType.Equals(concatType))
            {
                Emit(_iset.Convert().CreateStk(1, concatType, rawValueType));
            }
            if (!rawValueType.Equals(valueType))
            {
                Emit(_iset.Convert().CreateStk(1, rawValueType, valueType));
            }
        }
コード例 #5
0
ファイル: TypeLowering.cs プロジェクト: cephdon/systemsharp
 public override StdLogicVector ConvertValueToWireType(object value)
 {
     return(StdLogicVector.Serialize(value));
 }