/// <summary> /// Returns the right-hand-side expression being assigned to <c>Target</c>. /// </summary> public Expression GetRHS() { var builder = new DefaultAlgorithmBuilder(); ToProcess().Implement(builder); var stmt = builder.Complete().Body.AsStatementList().First(); var sstmt = stmt as StoreStatement; return(sstmt.Value); }
public void CreateStagedDecoder(IAutoBinder binder, SLVSignal cwSignal, SLSignal clkSignal, bool registered) { var valWordInit = StdLogicVector._0s(_vcf.ValueWordWidth); var rcwSignal = (SLVSignal)binder.GetSignal(EPortUsage.Default, "D1_CW", null, valWordInit); var rcwSignalDesc = rcwSignal.Descriptor; SLVSignal rrcwSignal = null; if (registered) { rrcwSignal = (SLVSignal)binder.GetSignal(EPortUsage.Default, "D2_CW", null, valWordInit); } var syncBuilder = new DefaultAlgorithmBuilder(); syncBuilder.If(clkSignal.ToSignalRef(SignalRef.EReferencedProperty.RisingEdge)); syncBuilder.Store(rcwSignal.ToSignalRef(SignalRef.EReferencedProperty.Next), ((ISignal)cwSignal[_vcf.ValueWordWidth - 1, 0]).ToSignalRef(SignalRef.EReferencedProperty.Cur)); if (registered) { syncBuilder.Store(rrcwSignal.ToSignalRef(SignalRef.EReferencedProperty.Next), rcwSignal.ToSignalRef(SignalRef.EReferencedProperty.Cur)); } foreach (var ms in _strings) { ms.AssembleStagedDecoderSync(binder, syncBuilder, cwSignal, registered); } syncBuilder.EndIf(); var syncFunc = syncBuilder.Complete(); syncFunc.Name = "cwdecode_sync"; binder.CreateProcess(SystemSharp.Components.Process.EProcessKind.Triggered, syncFunc, clkSignal.Descriptor); var combBuilder = new DefaultAlgorithmBuilder(); var sensitivity = new HashSet <ISignalOrPortDescriptor>(); sensitivity.Add(cwSignal.Descriptor); sensitivity.Add(rcwSignalDesc); if (registered) { sensitivity.Add(rrcwSignal.Descriptor); } foreach (var ms in _strings) { ms.AssembleStagedDecoderComb(combBuilder, registered ? rrcwSignal : rcwSignal, sensitivity, registered); } var combFunc = combBuilder.Complete(); combFunc.Name = "cwdecode_comb"; binder.CreateProcess(SystemSharp.Components.Process.EProcessKind.Triggered, combFunc, sensitivity.ToArray()); }
public void CreateDecoder(IAutoBinder binder, SLVSignal cwSignal) { var pbuilder = new DefaultAlgorithmBuilder(); var sensitivity = new HashSet <ISignalOrPortDescriptor>(); sensitivity.Add(cwSignal.Descriptor); foreach (var ms in _strings) { ms.AssembleDecoder(pbuilder, cwSignal, sensitivity); } var decFunc = pbuilder.Complete(); decFunc.Name = "cwdecode"; binder.CreateProcess(SystemSharp.Components.Process.EProcessKind.Triggered, decFunc, sensitivity.ToArray()); }