public IEnumerable<TAVerb> Add(ISignalSource<StdLogicVector> a, ISignalSource<StdLogicVector> b, ISignalSink<StdLogicVector> r) { IProcess action = _host.A.Dual.Drive(a).Par( _host.B.Dual.Drive(b)); if (_host.HasCE) action = action.Par(_host.CE.Dual.Stick<StdLogic>('1')); if (_host.HasSCLR) action = action.Par(_host.SCLR.Dual.Stick<StdLogic>('0')); if (_host.HasBypass) action = action.Par(_host.BYPASS.Dual.Stick<StdLogic>(_host.BypassSense == ESense.ActiveHigh ? StdLogic._0 : StdLogic._1)); if (_host.HasCarryIn) action = action.Par(_host.C_in.Dual.Stick<StdLogic>('0')); if (_host.AddMode == EAddMode.AddSubtract) action = action.Par(_host.ADD.Dual.Stick<StdLogic>('1')); if (_host.Latency == 0) { action = action.Par(r.Comb.Connect(_host.S.Dual.AsSignalSource())); yield return Verb(ETVMode.Locked, action); } else { yield return Verb(ETVMode.Locked, action); for (int i = 1; i < _host.Latency; i++) yield return Verb(ETVMode.Shared); yield return Verb(ETVMode.Shared, r.Comb.Connect(_host.S.Dual.AsSignalSource())); } }
public IEnumerable <TAVerb> LShift(ISignalSource <StdLogicVector> x, ISignalSource <StdLogicVector> s, ISignalSink <StdLogicVector> y) { if (_host.PipelineDepth == 0) { yield return(Verb(ETVMode.Locked, _host.X.Dual.Drive(x), _host.Shift.Dual.Drive(s), _host.Dir.Dual.Stick("0"), y.Comb.Connect(_host.Y.Dual.AsSignalSource()))); } else { yield return(Verb(ETVMode.Locked, _host.X.Dual.Drive(x), _host.Shift.Dual.Drive(s), _host.Dir.Dual.Stick("0"))); for (int i = 0; i < _host.PipelineDepth; i++) { yield return(Verb(ETVMode.Shared)); } yield return(Verb(ETVMode.Shared, y.Comb.Connect(_host.Y.Dual.AsSignalSource()))); } }
public IEnumerable <TAVerb> BranchIfNot(ISignalSource <StdLogicVector> cond, BranchLabel target) { yield return(Verb(ETVMode.Locked, _brAltFlagP.Drive(SignalSource.Create <StdLogicVector>("0")), _brAltFlagN.Drive(cond), GetStateDriver(target))); }
public IEnumerable <TAVerb> Multiply(ISignalSource <StdLogicVector> a, ISignalSource <StdLogicVector> b, ISignalSink <StdLogicVector> r) { IProcess action = _host.A.Dual.Drive(a).Par( _host.B.Dual.Drive(b)); if (_host.HasCE) { action = action.Par(_host.CE.Dual.Stick <StdLogic>('1')); } if (_host.HasSCLR) { action = action.Par(_host.SCLR.Dual.Stick <StdLogic>('0')); } if (_host.PipeStages == 0) { action = action.Par(r.Comb.Connect(_host.P.Dual.AsSignalSource())); yield return(Verb(ETVMode.Locked, action)); } else { yield return(Verb(ETVMode.Locked, action)); for (int i = 1; i < _host.PipeStages; i++) { yield return(Verb(ETVMode.Shared)); } yield return(Verb(ETVMode.Shared, r.Comb.Connect(_host.P.Dual.AsSignalSource()))); } }
public IEnumerable <TAVerb> Divide(ISignalSource <StdLogicVector> dividend, ISignalSource <StdLogicVector> divisor, ISignalSink <StdLogicVector> quotient, ISignalSink <StdLogicVector> fractional) { IProcess ctrl = _host.DIVIDEND.Dual.Drive(dividend).Par( _host.DIVISOR.Dual.Drive(divisor)); if (_host.HasCE) { ctrl = ctrl.Par(_host.CE.Dual.Stick('1')); } if (_host.HasSCLR) { ctrl = ctrl.Par(_host.SCLR.Dual.Stick('0')); } if (_host.HasND) { ctrl = ctrl.Par(_host.ND.Dual.Stick('1')); } for (int i = 0; i < _host.ClocksPerDivision; i++) { yield return(Verb(ETVMode.Locked, ctrl)); } for (int i = _host.ClocksPerDivision; i < _host.Latency; i++) { yield return(Verb(ETVMode.Shared)); } yield return(Verb(ETVMode.Shared, quotient.Comb.Connect(_host.QUOTIENT.Dual.AsSignalSource()), fractional.Comb.Connect(_host.FRACTIONAL.Dual.AsSignalSource()))); }
public override void Init(object[] argumentObjects) { Router router = argumentObjects[0] as Router; if (router == null) { CurrentValue = "?"; return; } output = router.GetOutput((int)argumentObjects[1]); if (output == null) { CurrentValue = "?"; return; } output.CurrentSourceChanged += currentSourceChangedHandler; labelset = argumentObjects[2] as Labelset; if (labelset == null) { CurrentValue = "?"; return; } labelset.LabelTextChanged += labelsetTextChangedHandler; currentSource = output.CurrentSource; if (currentSource == null) { CurrentValue = "?"; return; } CurrentValue = labelset.GetLabel(currentSource).Text ?? "?"; }
public DrivingProcess(ISignal drivenSignal, ISignalSource source) { DrivenSignal = drivenSignal; Source = source; Operation = () => DrivenSignal.NextObject = source.Operation(); DrivenSignals = new ISignal[] { drivenSignal }; }
public IEnumerable <TAVerb> Neg(ISignalSource <StdLogicVector> operand, ISignalSink <StdLogicVector> result) { if (_host.Operation != EOperation.Neg) { throw new NotSupportedException(); } return(Do(operand, result)); }
public IEnumerable<TAVerb> Concat(ISignalSource<StdLogicVector>[] ops, ISignalSink<StdLogicVector> r) { IProcess[] actions = new IProcess[_host.NumWords + 1]; for (int i = 0; i < _host.NumWords; i++) actions[i] = _host.Ops[i].Drive(ops[i]); actions[_host.NumWords] = r.Comb.Connect(_host.R.Dual.AsSignalSource()); yield return Verb(ETVMode.Locked, actions); }
private void sourcesRegisteredSourceSignalNameChanged(ISignalSource signal, string newName, List <object> recursionChain = null) { if (recursionChain?.Contains(this) == true) { return; } RegisteredSourceSignalNameChanged?.Invoke(this, newName, recursionChain.ExtendRecursionChain(this)); }
public IEnumerable <TAVerb> Select(ISignalSource <StdLogicVector> a, ISignalSource <StdLogicVector> b, ISignalSource <StdLogicVector> sel, ISignalSink <StdLogicVector> r) { yield return(Verb(ETVMode.Locked, _host.A.Dual.Drive(a), _host.B.Dual.Drive(b), _host.Sel.Dual.Drive(sel), r.Comb.Connect(_host.R.Dual.AsSignalSource()))); }
public BidirectionalPassthroughSignalTally(ISignalSource parentSignalSource) { ParentSignalSource = parentSignalSource; tallyState = new PassthroughSignalTallyState(ParentSignalSource); tallyReceiver = new PassthroughSignalTallyReceiver(); tallyState.StateChanged += tallyStateChanged; tallyReceiver.Got += (r, rc) => Got?.Invoke(r, rc); tallyReceiver.Revoked += (r, rc) => Revoked?.Invoke(r, rc); }
private void currentSourceChangedHandler(ISignalDestination signalDestination, ISignalSource newSource) { if (signalDestination != output) { return; } currentSource = newSource; CurrentValue = labelset.GetLabel(currentSource).Text ?? "?"; }
public IEnumerable <TAVerb> StelemFixAFixI(ISignalSource <StdLogicVector> data, long[] indices) { Contract.Requires(NeedWriteAccess); yield return(Verb(ETVMode.Locked, _wrEnI.Stick(StdLogic._1), _addrI.Stick(StdLogicVector.FromULong((ulong)indices[0], _addrBits)), _dataInI.Drive(data))); }
public IEnumerable<TAVerb> Select(ISignalSource<StdLogicVector> a, ISignalSource<StdLogicVector> b, ISignalSource<StdLogicVector> sel, ISignalSink<StdLogicVector> r) { yield return Verb(ETVMode.Locked, _host.A.Dual.Drive(a), _host.B.Dual.Drive(b), _host.Sel.Dual.Drive(sel), r.Comb.Connect(_host.R.Dual.AsSignalSource())); }
public IEnumerable <TAVerb> StelemFixA(ISignalSource <StdLogicVector> addr, ISignalSource <StdLogicVector> data) { Contract.Requires(NeedWriteAccess); yield return(Verb(ETVMode.Locked, _wrEnI.Stick(StdLogic._1), _addrI.Drive(addr), _dataInI.Drive(data))); }
private void OnTriggerEnter(Collider other) { ISignalSource source = other.GetComponent <ISignalSource>(); if (source != null && !signals.Contains(source)) { signals.Add(source); foreach (Activateable activateable in activateables) { activateable.Activate(source); } } }
private void OnTriggerExit(Collider other) { ISignalSource source = other.GetComponent <ISignalSource>(); if (source != null) { signals.Remove(source); foreach (Activateable activateable in activateables) { activateable.Deactivate(source); } } }
public IEnumerable<TAVerb> Slice(ISignalSource<StdLogicVector> data, ISignalSink<StdLogicVector> result) { if (result.Sync != null) { yield return Verb(ETVMode.Locked, _host.DIn.Dual.Drive(data)); yield return Verb(ETVMode.Locked, result.Comb.Connect(_host.DOut.Dual.AsSignalSource())); } else if (result.Comb != null) { yield return Verb(ETVMode.Locked, _host.DIn.Dual.Drive(data), result.Comb.Connect(_host.DOut.Dual.AsSignalSource())); } }
public IEnumerable <TAVerb> Slice(ISignalSource <StdLogicVector> data, ISignalSink <StdLogicVector> result) { if (result.Sync != null) { yield return(Verb(ETVMode.Locked, _host.DIn.Dual.Drive(data))); yield return(Verb(ETVMode.Locked, result.Comb.Connect(_host.DOut.Dual.AsSignalSource()))); } else if (result.Comb != null) { yield return(Verb(ETVMode.Locked, _host.DIn.Dual.Drive(data), result.Comb.Connect(_host.DOut.Dual.AsSignalSource()))); } }
public static IBidirectionalSignalTally GetTally(this ISignalSource signalSource, SignalTallyColor color) { switch (color) { case SignalTallyColor.Red: return(signalSource.RedTally); case SignalTallyColor.Yellow: return(signalSource.YellowTally); case SignalTallyColor.Green: return(signalSource.GreenTally); } return(null); }
public IEnumerable <TAVerb> BranchIfNot(ISignalSource <StdLogicVector> cond, BranchLabel target) { yield return(Verb(ETVMode.Locked, _host.BrP.Dual.Drive(SignalSource.Create <StdLogicVector>("0")), _host.BrN.Dual.Drive(cond), _host.AltAddr.Dual.Drive( SignalSource.Create( StdLogicVector.FromUInt( (uint)target.CStep, _host.AddrWidth))))); for (int i = 1; i < _host.Latency; i++) { yield return(NopVerb()); } }
private IEnumerable<TAVerb> Do(ISignalSource<StdLogicVector> operand, ISignalSink<StdLogicVector> result) { if (_host.PipelineDepth == 0) { yield return new TAVerb(this, ETVMode.Locked, () => { }, _host.DIn.Dual.Drive(operand).Par(result.Comb.Connect(_host.DOut.Dual.AsSignalSource()))); } else { yield return new TAVerb(this, ETVMode.Locked, () => { }, _host.DIn.Dual.Drive(operand)); for (int i = 1; i < _host.PipelineDepth; i++) yield return new TAVerb(this, ETVMode.Shared, () => { }); yield return new TAVerb(this, ETVMode.Shared, () => { }, result.Comb.Connect(_host.DOut.Dual.AsSignalSource())); } }
public IEnumerable <TAVerb> Write(ISignalSource <StdLogicVector> data) { var fref = _literal as FieldRef; if (fref != null) { if (!fref.FieldDesc.IsWrittenInCurrentContext(Host.Context)) { throw new InvalidOperationException("Field is marked as not being written"); } } yield return(Verb(ETVMode.Locked, _wrEnI.Stick(StdLogic._1), _dataInI.Drive(data))); }
///<inheritdoc/> public override void Activate(ISignalSource source) { if (TargetTeam != Teams.Both && TargetTeam != source.Team) { return; } if (!signals.Contains(source)) { signals.Add(source); } if (Active && once) { done = true; } }
public IEnumerable<TAVerb> Abs(ISignalSource<StdLogicVector> operand, ISignalSink<StdLogicVector> result) { if (_host.Latency == 0) { yield return Verb(ETVMode.Locked, _host.Operand.Dual.Drive(operand), result.Comb.Connect(_host.Result.Dual.AsSignalSource())); } else { yield return Verb(ETVMode.Locked, _host.Operand.Dual.Drive(operand)); for (int i = 1; i < _host.Latency; i++) yield return Verb(ETVMode.Shared); yield return Verb(ETVMode.Shared, result.Comb.Connect(_host.Result.Dual.AsSignalSource())); } }
private IEnumerable <TAVerb> Do(ISignalSource <StdLogicVector> operand, ISignalSink <StdLogicVector> result) { if (_host.PipelineDepth == 0) { yield return(new TAVerb(this, ETVMode.Locked, () => { }, _host.DIn.Dual.Drive(operand).Par(result.Comb.Connect(_host.DOut.Dual.AsSignalSource())))); } else { yield return(new TAVerb(this, ETVMode.Locked, () => { }, _host.DIn.Dual.Drive(operand))); for (int i = 1; i < _host.PipelineDepth; i++) { yield return(new TAVerb(this, ETVMode.Shared, () => { })); } yield return(new TAVerb(this, ETVMode.Shared, () => { }, result.Comb.Connect(_host.DOut.Dual.AsSignalSource()))); } }
public IEnumerable <TAVerb> Cos(ISignalSource <StdLogicVector> x, ISignalSink <StdLogicVector> y) { if (_host.Latency == 0) { yield return(new TAVerb(this, ETVMode.Locked, () => { }, _host.X.Dual.Drive(x).Par(y.Comb.Connect(_host.Cos.Dual.AsSignalSource())))); } else { for (int i = 0; i < _host.InitiationInterval; i++) { yield return(new TAVerb(this, ETVMode.Locked, () => { }, _host.X.Dual.Drive(x))); } for (int i = _host.InitiationInterval; i < _host.Latency; i++) { yield return(new TAVerb(this, ETVMode.Shared, () => { })); } yield return(new TAVerb(this, ETVMode.Shared, () => { }, y.Comb.Connect(_host.Cos.Dual.AsSignalSource()))); } }
public IEnumerable <TAVerb> Add(ISignalSource <StdLogicVector> a, ISignalSource <StdLogicVector> b, ISignalSink <StdLogicVector> r) { IProcess action = _host.A.Dual.Drive(a).Par( _host.B.Dual.Drive(b)); if (_host.HasCE) { action = action.Par(_host.CE.Dual.Stick <StdLogic>('1')); } if (_host.HasSCLR) { action = action.Par(_host.SCLR.Dual.Stick <StdLogic>('0')); } if (_host.HasBypass) { action = action.Par(_host.BYPASS.Dual.Stick <StdLogic>(_host.BypassSense == ESense.ActiveHigh ? StdLogic._0 : StdLogic._1)); } if (_host.HasCarryIn) { action = action.Par(_host.C_in.Dual.Stick <StdLogic>('0')); } if (_host.AddMode == EAddMode.AddSubtract) { action = action.Par(_host.ADD.Dual.Stick <StdLogic>('1')); } if (_host.Latency == 0) { action = action.Par(r.Comb.Connect(_host.S.Dual.AsSignalSource())); yield return(Verb(ETVMode.Locked, action)); } else { yield return(Verb(ETVMode.Locked, action)); for (int i = 1; i < _host.Latency; i++) { yield return(Verb(ETVMode.Shared)); } yield return(Verb(ETVMode.Shared, r.Comb.Connect(_host.S.Dual.AsSignalSource()))); } }
public IEnumerable <TAVerb> LdelemFixA(ISignalSource <StdLogicVector> addr, ISignalSink <StdLogicVector> data) { if (_wrEnI != null) { // Memory used as RAM yield return(Verb(ETVMode.Locked, _wrEnI.Stick(StdLogic._0), _addrI.Drive(addr), _dataInI.Stick(StdLogicVector._0s(_dataBits)))); } else { // Memory used as ROM yield return(Verb(ETVMode.Locked, _addrI.Drive(addr))); } yield return(Verb(ETVMode.Shared, data.Comb.Connect(_dataOutI.AsSignalSource <StdLogicVector>()))); }
public IEnumerable <TAVerb> Abs(ISignalSource <StdLogicVector> operand, ISignalSink <StdLogicVector> result) { if (_host.Latency == 0) { yield return(Verb(ETVMode.Locked, _host.Operand.Dual.Drive(operand), result.Comb.Connect(_host.Result.Dual.AsSignalSource()))); } else { yield return(Verb(ETVMode.Locked, _host.Operand.Dual.Drive(operand))); for (int i = 1; i < _host.Latency; i++) { yield return(Verb(ETVMode.Shared)); } yield return(Verb(ETVMode.Shared, result.Comb.Connect(_host.Result.Dual.AsSignalSource()))); } }
public virtual void AssignSource(ISignalSource source) { ISignalSource oldSource = currentSource; if (currentSource != null) { currentSource.RegisteredSourceSignalChanged -= sourcesRegisteredSourceSignalChanged; currentSource.RegisteredSourceSignalNameChanged -= sourcesRegisteredSourceSignalNameChanged; } currentSource = source; if (currentSource != null) { currentSource.RegisteredSourceSignalChanged += sourcesRegisteredSourceSignalChanged; currentSource.RegisteredSourceSignalNameChanged += sourcesRegisteredSourceSignalNameChanged; } CurrentSourceChanged?.Invoke(this, source); ISignalSourceRegistered currentRegisteredSourceSignal = currentSource?.RegisteredSourceSignal; ISignalSourceRegistered oldRegisteredSourceSignal = oldSource?.RegisteredSourceSignal; if (currentRegisteredSourceSignal != oldRegisteredSourceSignal) { RegisteredSourceSignalChanged?.Invoke(this, currentRegisteredSourceSignal, RecursionChainHelpers.CreateRecursionChain(this)); } string currentRegisteredSourceSignalName = currentRegisteredSourceSignal?.RegisteredSourceSignalName; string oldRegisteredSourceSignalName = oldRegisteredSourceSignal?.RegisteredSourceSignalName; if (!string.Equals(currentRegisteredSourceSignalName, oldRegisteredSourceSignalName)) { RegisteredSourceSignalNameChanged?.Invoke(this, currentRegisteredSourceSignalName, RecursionChainHelpers.CreateRecursionChain(this)); } ((BidirectionalPassthroughSignalTally)RedTally).PreviousElement = source?.RedTally; ((BidirectionalPassthroughSignalTally)YellowTally).PreviousElement = source?.YellowTally; ((BidirectionalPassthroughSignalTally)GreenTally).PreviousElement = source?.GreenTally; }
private void btnSigOpen_Click(object sender, RoutedEventArgs e) { SignalSourceType type = (SignalSourceType)(this.cmbSigType.SelectedIndex); string addr = this.tbSigAddr.Text; if (!isSignalSourceConnected) { signalSource = SignalSource.GetInstance(type); isSignalSourceConnected = signalSource.Connect(addr); if (isSignalSourceConnected) { this.btnSigOpen.Background = sucessColor; } else { this.btnSigOpen.Background = normalColor; } } else { this.btnSigOpen.Background = sucessColor; } }
public IEnumerable<TAVerb> LShift(ISignalSource<StdLogicVector> x, ISignalSource<StdLogicVector> s, ISignalSink<StdLogicVector> y) { if (_host.PipelineDepth == 0) { yield return Verb(ETVMode.Locked, _host.X.Dual.Drive(x), _host.Shift.Dual.Drive(s), _host.Dir.Dual.Stick("0"), y.Comb.Connect(_host.Y.Dual.AsSignalSource())); } else { yield return Verb(ETVMode.Locked, _host.X.Dual.Drive(x), _host.Shift.Dual.Drive(s), _host.Dir.Dual.Stick("0")); for (int i = 0; i < _host.PipelineDepth; i++) { yield return Verb(ETVMode.Shared); } yield return Verb(ETVMode.Shared, y.Comb.Connect(_host.Y.Dual.AsSignalSource())); } }
public IEnumerable<TAVerb> Do(ISignalSource<StdLogicVector> a, ISignalSink<StdLogicVector> r) { if (_host.PipelineDepth == 0) { yield return Verb(ETVMode.Locked, _host.A.Dual.Drive(a) .Par(r.Comb.Connect(_host.R.Dual.AsSignalSource()))); } else { yield return Verb(ETVMode.Locked, _host.A.Dual.Drive(a)); for (int i = 1; i < _host.PipelineDepth; i++) { yield return Verb(ETVMode.Shared); } yield return Verb(ETVMode.Shared, r.Comb.Connect(_host.R.Dual.AsSignalSource())); } }
public override IEnumerable<TAVerb> Realize(ISignalSource<StdLogicVector>[] operands, ISignalSink<StdLogicVector>[] results) { return _host.TASite.Concat(operands, results[0]); }
public IEnumerable<TAVerb> Mod1(ISignalSource<StdLogicVector> operand, ISignalSink<StdLogicVector> result) { yield return Verb(ETVMode.Locked, _host.X.Dual.Drive(operand), result.Comb.Connect(_host.R.Dual.AsSignalSource())); }
public IEnumerable<TAVerb> Write(ISignalSource<StdLogicVector> data) { var fref = _literal as FieldRef; if (fref != null) { if (!fref.FieldDesc.IsWrittenInCurrentContext(Host.Context)) throw new InvalidOperationException("Field is marked as not being written"); } yield return Verb(ETVMode.Locked, _wrEnI.Stick(StdLogic._1), _dataInI.Drive(data)); }
public IEnumerable <TAVerb> Sign(ISignalSource <StdLogicVector> operand, ISignalSink <StdLogicVector> result) { yield return(Verb(ETVMode.Locked, _host.DIn.Dual.Drive(operand), result.Comb.Connect(_host.DOut.Dual.AsSignalSource()))); }
public IEnumerable<TAVerb> IsGt(ISignalSource<StdLogicVector> a, ISignalSource<StdLogicVector> b, ISignalSink<StdLogicVector> r) { if (_host.FuncSel != EFunction.Compare) throw new InvalidOperationException(); return Do(a, b, _host.CmpGt.Dual, r); }
public IEnumerable<TAVerb> IsGt(ISignalSource<StdLogicVector> a, ISignalSource<StdLogicVector> b, ISignalSink<StdLogicVector> result) { if (_host.Function != EFunction.Compare) throw new InvalidOperationException(); if (_host.CompareSel == ECompareOp.Programmable) return DoBinOp1("100100", a, b, result); else if (_host.CompareSel == ECompareOp.GreaterThan) return DoBinOp1(a, b, result); else if (_host.CompareSel == ECompareOp.ConditionCode) throw new NotImplementedException(); else throw new NotSupportedException("Comparison mode not supported"); }
public override IEnumerable<TAVerb> Realize(ISignalSource<StdLogicVector>[] operands, ISignalSink<StdLogicVector>[] results) { return _site.Id(operands[0], results[0]); }
public IEnumerable<TAVerb> Div(ISignalSource<StdLogicVector> a, ISignalSource<StdLogicVector> b, ISignalSink<StdLogicVector> result) { if (_host.Function != EFunction.Divide) throw new InvalidOperationException(); return DoBinOp(a, b, result); }
public IEnumerable<TAVerb> Id(ISignalSource<StdLogicVector> operand, ISignalSink<StdLogicVector> result) { yield return Verb(ETVMode.Shared, result.Comb.Connect(operand)); }
public IEnumerable<TAVerb> Realize(ISignalSource<StdLogicVector>[] operands, ISignalSink<StdLogicVector>[] results) { return _fu.TASite.Abs(operands[0], results[0]); }
public IEnumerable<TAVerb> DoBinOp1(ISignalSource<StdLogicVector> a, ISignalSource<StdLogicVector> b, ISignalSink<StdLogicVector> result) { return DoBinOp1("000000", a, b, result); }
public IEnumerable<TAVerb> Realize(ISignalSource<StdLogicVector>[] operands, ISignalSink<StdLogicVector>[] results) { int i0 = _swap ? 1 : 0; int i1 = _swap ? 0 : 1; if (_isAdd) return _host.TASite.Add(operands[i0], operands[i1], results[0]); else return _host.TASite.Subtract(operands[i0], operands[i1], results[0]); }
public IEnumerable<TAVerb> Realize(ISignalSource<StdLogicVector>[] operands, ISignalSink<StdLogicVector>[] results) { return _taSite.Write(operands[0]); }
public PassthroughSignalTallyState(ISignalSource parentSignalSource) => ParentSignalSource = parentSignalSource;
/// <summary> /// Realizes the mapping for given operand sources and result sinks. You must override this method in derived classes. /// </summary> /// <param name="operands">operand sources</param> /// <param name="results">result sinks</param> /// <returns>a sequence of transaction verbs which represent the dataflows necessary to perform the mapping</returns> public abstract IEnumerable<TAVerb> Realize(ISignalSource<StdLogicVector>[] operands, ISignalSink<StdLogicVector>[] results);
///<inheritdoc/> public abstract void Deactivate(ISignalSource source);
public IEnumerable<TAVerb> Realize(ISignalSource<StdLogicVector>[] operands, ISignalSink<StdLogicVector>[] results) { return _site.Select(operands[1], operands[0], operands[2], results[0]); }
public IEnumerable<TAVerb> Float2Float(ISignalSource<StdLogicVector> x, ISignalSink<StdLogicVector> result) { if (_host.Function != EFunction.FloatToFloat) throw new InvalidOperationException(); return DoUnOp(x, result); }
public IEnumerable<TAVerb> DoUnOp(ISignalSource<StdLogicVector> operand, ISignalSink<StdLogicVector> result) { if (_host.Arity != 1) throw new InvalidOperationException(); IProcess pr = _host.A.Dual.Drive(operand); if (_host.HasOperationND) pr = pr.Par(_host.OperationND.Dual.Drive(SignalSource.Create(StdLogic._1))); if (_host.HasSCLR) pr = pr.Par(_host.OperationND.Dual.Drive(SignalSource.Create(StdLogic._0))); if (_host.HasCE) pr = pr.Par(_host.OperationND.Dual.Drive(SignalSource.Create(StdLogic._1))); var rpr = result.Comb.Connect(_host.Result.Dual.AsSignalSource()); if (_host.Latency == 0) { pr = pr.Par(rpr); yield return Verb(ETVMode.Locked, pr); } else { for (int i = 0; i < _host.CyclesPerOperation; i++) yield return Verb(ETVMode.Locked, pr); for (int i = _host.CyclesPerOperation; i < _host.Latency; i++) yield return Verb(ETVMode.Shared); yield return Verb(ETVMode.Shared, rpr); } }
public IEnumerable<TAVerb> Realize(ISignalSource<StdLogicVector>[] operands, ISignalSink<StdLogicVector>[] results) { if (results.Length == 1) return _host.TASite.Divide(operands[0], operands[1], results[0]); else return _host.TASite.Divide(operands[0], operands[1], results[0], results[1]); }
public IEnumerable<TAVerb> Realize(ISignalSource<StdLogicVector>[] operands, ISignalSink<StdLogicVector>[] results) { return _site.Nop(_latency); }
public IEnumerable<TAVerb> Divide(ISignalSource<StdLogicVector> dividend, ISignalSource<StdLogicVector> divisor, ISignalSink<StdLogicVector> quotient) { IProcess ctrl = _host.DIVIDEND.Dual.Drive(dividend).Par( _host.DIVISOR.Dual.Drive(divisor)); if (_host.HasCE) ctrl = ctrl.Par(_host.CE.Dual.Stick('1')); if (_host.HasSCLR) ctrl = ctrl.Par(_host.SCLR.Dual.Stick('0')); if (_host.HasND) ctrl = ctrl.Par(_host.ND.Dual.Stick('1')); for (int i = 0; i < _host.ClocksPerDivision; i++) yield return Verb(ETVMode.Locked, ctrl); for (int i = _host.ClocksPerDivision; i < _host.Latency; i++) yield return Verb(ETVMode.Shared); yield return Verb(ETVMode.Shared, quotient.Comb.Connect(_host.QUOTIENT.Dual.AsSignalSource())); }
private IEnumerable<TAVerb> DoBinOp1(StdLogicVector op, ISignalSource<StdLogicVector> a, ISignalSource<StdLogicVector> b, ISignalSink<StdLogicVector> result) { if (_host.Arity != 2) throw new InvalidOperationException(); IProcess pr = _host.A.Dual.Drive(a) .Par(_host.B.Dual.Drive(b)); if ((_host.Function == EFunction.AddSubtract && _host.AddSubSel == EAddSub.Both) || (_host.Function == EFunction.Compare && _host.CompareSel == ECompareOp.Programmable)) pr = pr.Par(_host.Operation.Dual.Drive(SignalSource.Create(op))); if (_host.HasOperationND) pr = pr.Par(_host.OperationND.Dual.Drive(SignalSource.Create(StdLogic._1))); if (_host.HasSCLR) pr = pr.Par(_host.OperationND.Dual.Drive(SignalSource.Create(StdLogic._0))); if (_host.HasCE) pr = pr.Par(_host.OperationND.Dual.Drive(SignalSource.Create(StdLogic._1))); var rpr = result.Comb.Connect(((SLVSignal)_host.Result)[0, 0].AsSignalSource()); if (_host.Latency == 0) { pr = pr.Par(rpr); yield return Verb(ETVMode.Locked, pr); } else { for (int i = 0; i < _host.CyclesPerOperation; i++) yield return Verb(ETVMode.Locked, pr); for (int i = _host.CyclesPerOperation; i < _host.Latency; i++) yield return Verb(ETVMode.Shared); yield return Verb(ETVMode.Shared, rpr); } }
public IEnumerable<TAVerb> Realize(ISignalSource<StdLogicVector>[] operands, ISignalSink<StdLogicVector>[] results) { if (_swap) return _realize(new ISignalSource<StdLogicVector>[] { operands[1], operands[0] }, results); else return _realize(operands, results); }
public IEnumerable<TAVerb> Sub(ISignalSource<StdLogicVector> a, ISignalSource<StdLogicVector> b, ISignalSink<StdLogicVector> result) { if (_host.Function != EFunction.AddSubtract) throw new InvalidOperationException(); switch (_host.AddSubSel) { case EAddSub.Subtract: return DoBinOp(a, b, result); case EAddSub.Both: return DoBinOp("000001", a, b, result); case EAddSub.Add: throw new NotSupportedException("Xilinx floating-point core is configured for addition. Subtraction not supported"); default: throw new NotImplementedException(); } }