public void Encode(int cstep, ParFlow pflow, ref StdLogicVector cw) { foreach (var flow in pflow.Flows) { if (FlowMatrix.IsDontCareFlow(flow)) { continue; } var vflow = flow as ValueFlow; if (vflow != null) { int offs = _vfc.GetValueWordOffset(flow.Target); var ser = Marshal.SerializeForHW(vflow.Value); cw[offs + ser.Size - 1, offs] = ser; } } if (SelWidth <= 0) { return; } int symbol = _encFlow.EncodedSymbols[cstep]; if (symbol == 0) { symbol = 1; } uint index = (uint)(symbol - 1); cw[SelOffset + SelWidth - 1, SelOffset] = StdLogicVector.FromUInt(index, SelWidth); }
private void ImplementFlow(ValueFlowCoder vfc, Flow flow, IAlgorithmBuilder pbuilder, SLVSignal cwSignal, HashSet <ISignalOrPortDescriptor> sensitivity) { if (FlowMatrix.IsDontCareFlow(flow)) { int valOffset = vfc.GetValueWordOffset(flow.Target); int valWidth = vfc.GetValueWordWidth(flow.Target); LiteralReference lrCWValSlice; if (flow.Target.Desc.ElementType.CILType.Equals(typeof(StdLogic))) { lrCWValSlice = new LiteralReference( ((ISignal)cwSignal[valOffset]) .ToSignalRef(SignalRef.EReferencedProperty.Cur)); } else { lrCWValSlice = new LiteralReference( ((ISignal)cwSignal[valOffset + valWidth - 1, valOffset]) .ToSignalRef(SignalRef.EReferencedProperty.Cur)); } pbuilder.Store(flow.Target, lrCWValSlice); } else if (flow is SignalFlow) { var sflow = flow as SignalFlow; pbuilder.Store(flow.Target, sflow.Source); sensitivity.Add(sflow.Source.Desc); } else { var vflow = flow as ValueFlow; pbuilder.Store(vflow.Target, LiteralReference.CreateConstant(vflow.Value)); } }
private void ImplementFlow(ValueFlowCoder vfc, Flow flow, IAlgorithmBuilder pbuilder, SLVSignal cwSignal, HashSet<ISignalOrPortDescriptor> sensitivity) { if (FlowMatrix.IsDontCareFlow(flow)) { int valOffset = vfc.GetValueWordOffset(flow.Target); int valWidth = vfc.GetValueWordWidth(flow.Target); LiteralReference lrCWValSlice; if (flow.Target.Desc.ElementType.CILType.Equals(typeof(StdLogic))) { lrCWValSlice = new LiteralReference( ((ISignal)cwSignal[valOffset]) .ToSignalRef(SignalRef.EReferencedProperty.Cur)); } else { lrCWValSlice = new LiteralReference( ((ISignal)cwSignal[valOffset + valWidth - 1, valOffset]) .ToSignalRef(SignalRef.EReferencedProperty.Cur)); } pbuilder.Store(flow.Target, lrCWValSlice); } else if (flow is SignalFlow) { var sflow = flow as SignalFlow; pbuilder.Store(flow.Target, sflow.Source); sensitivity.Add(sflow.Source.Desc); } else { var vflow = flow as ValueFlow; pbuilder.Store(vflow.Target, LiteralReference.CreateConstant(vflow.Value)); } }