public static IAutoFaker Create(IAutoBinder binder) { return(Create(builder => { builder.WithBinder(binder); })); }
public override void Establish(IAutoBinder binder) { if (_realized) { return; } _addrBits = MathExt.CeilLog2(_array.ArrayObj.Length); _dataBits = Marshal.SerializeForHW(_array.ElementType.GetSampleInstance()).Size; _clkI = (SLSignal)binder.GetSignal(EPortUsage.Clock, "Clk", null, null); _dataOutI = (SLVSignal)binder.GetSignal(EPortUsage.Default, "memIf_dataOut", null, StdLogicVector._0s(_dataBits)); _addrI = (SLVSignal)binder.GetSignal(EPortUsage.Default, "memIf_addr", null, StdLogicVector._0s(_addrBits)); _clk = _clkI.Descriptor; _addr = _addrI.Descriptor; _dataOut = _dataOutI.Descriptor; if (NeedWriteAccess) { _wrEnI = (SLSignal)binder.GetSignal(EPortUsage.Default, "memIf_wrEn", null, StdLogic._0); _dataInI = (SLVSignal)binder.GetSignal(EPortUsage.Default, "memIf_dataIn", null, StdLogicVector._0s(_dataBits)); _wrEn = _wrEnI.Descriptor; _dataIn = _dataInI.Descriptor; } var memIfBuilder = new MemIfBuilder(this); var memIfAlg = memIfBuilder.GetAlgorithm(); memIfAlg.Name = "MemIf"; binder.CreateProcess(Process.EProcessKind.Triggered, memIfAlg, _clk); _realized = true; }
protected ServiceFixture(ITestOutputHelper output, IAutoBinder binder) { _faker = AutoFaker.Create(builder => { builder.WithOverride(new ProductGeneratorOverride()); if (binder != null) { builder.WithBinder(binder); } }); // Setup var id = _faker.Generate <Guid>(); var generator = new AutoFaker <Item>(binder) .RuleFor(item => item.Id, () => id) .RuleFor(item => item.Name, faker => faker.Person.FullName) .RuleFor(item => item.Amendments, faker => new HashSet <string> { "1", "2", "3" }); _item = generator; _items = generator.Generate(5); _repository = Substitute.For <IRepository>(); _repository.Get(id).Returns(_item); _repository.GetAll().Returns(_items); _service = new Service(_repository); _output = output; }
private void CreateSelSymbol(IAutoBinder binder, bool registered) { int count = NumSymbols; if (count < 2) { return; } // This code will create a one-hot decoding var selSymbols = new StdLogicVector[NumSymbols]; _selSymbols = selSymbols; for (int i = 0; i < NumSymbols; i++) { StdLogicVector sym = StdLogicVector._0s(NumSymbols); sym[i] = '1'; selSymbols[i] = sym; } var signal = binder.GetSignal(EPortUsage.Default, "MUXSymbol" + Order, null, selSymbols[0]); _symbol = signal.Descriptor; if (registered) { var dsignal = binder.GetSignal(EPortUsage.Default, "MUXReg" + Order, null, selSymbols[0]); _symbold = dsignal.Descriptor; } }
public override void Establish(IAutoBinder binder) { if (_allocated) { return; } _brAltFlagP = (SLVSignal)binder.GetSignal(EPortUsage.Default, "BCU_BrP", null, StdLogicVector._0s(1)); _brAltFlagN = (SLVSignal)binder.GetSignal(EPortUsage.Default, "BCU_BrN", null, StdLogicVector._1s(1)); _curState = binder.GetSignal(EPortUsage.State, "BCU_CurState", null, null).Descriptor; _tState = _curState.ElementType.CILType; Array enumValues = _tState.GetEnumValues(); int numStates = enumValues.Length; object defaultState = Activator.CreateInstance(_tState); _incState = binder.GetSignal(EPortUsage.Default, "BCU_IncState", null, defaultState).Descriptor; _altState = binder.GetSignal(EPortUsage.Default, "BCU_AltState", null, defaultState).Descriptor; _nextState = binder.GetSignal(EPortUsage.Default, "BCU_NextState", null, defaultState).Descriptor; IncStateProcessBuilder ispb = new IncStateProcessBuilder(this); Function incStateFn = ispb.GetAlgorithm(); incStateFn.Name = "BCU_IncState"; binder.CreateProcess(Process.EProcessKind.Triggered, incStateFn, _curState); SyncProcessBuilder spb = new SyncProcessBuilder(this, binder); Function syncStateFn = spb.GetAlgorithm(); syncStateFn.Name = "BCU_FSM"; ISignalOrPortDescriptor sdClock = binder.GetSignal <StdLogic>(EPortUsage.Clock, "Clk", null, '0').Descriptor; binder.CreateProcess(Process.EProcessKind.Triggered, syncStateFn, sdClock); _allocated = true; }
public override void Establish(IAutoBinder binder) { if (_host.Latency > 0) { _host.CLK = binder.GetSignal <StdLogic>(EPortUsage.Clock, "Clk", null, '0'); } _host.A = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, "A", null, StdLogicVector._0s(_host.Awidth)); _host.B = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, "B", null, StdLogicVector._0s(_host.Bwidth)); _host.S = binder.GetSignal <StdLogicVector>(EPortUsage.Result, "S", null, StdLogicVector._0s(_host.OutWidth)); if (_host.HasBypass) { _host.BYPASS = binder.GetSignal <StdLogic>(EPortUsage.Default, "bypass", null, '0'); } if (_host.HasCarryIn) { _host.C_in = binder.GetSignal <StdLogic>(EPortUsage.Default, "c_in", null, '0'); } if (_host.HasCarryOut) { _host.C_out = binder.GetSignal <StdLogic>(EPortUsage.Default, "c_out", null, '0'); } if (_host.HasCE) { _host.CE = binder.GetSignal <StdLogic>(EPortUsage.Default, "ce", null, '0'); } if (_host.HasSCLR) { _host.SCLR = binder.GetSignal <StdLogic>(EPortUsage.Default, "sclr", null, '0'); } if (_host.HasSSET) { _host.SSET = binder.GetSignal <StdLogic>(EPortUsage.Default, "sset", null, '0'); } //FIXME: What about SINIT? }
public static void SetBinder(IAutoBinder binder) { Configure(builder => { builder.WithBinder(binder); }); }
public override void Establish(IAutoBinder binder) { var mux2 = _host; mux2.A = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "A", null, StdLogicVector._0s(mux2.Width)); mux2.B = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "B", null, StdLogicVector._0s(mux2.Width)); mux2.Sel = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "Sel", null, StdLogicVector._0s(1)); mux2.R = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "R", null, StdLogicVector._0s(mux2.Width)); }
public override void AssembleStagedDecoderSync(int[] syms, int selWidth, LiteralReference lrCWSelSlice, IAutoBinder binder, IAlgorithmBuilder pbuilder, bool registered) { int[] syms0 = syms.Select(i => _encMap0[i - 1]).ToArray(); int[] syms1 = syms.Select(i => _encMap1[i - 1]).ToArray(); _encFlow0.AssembleStagedDecoderSync(syms0, selWidth, lrCWSelSlice, binder, pbuilder, registered); _encFlow1.AssembleStagedDecoderSync(syms1, selWidth, lrCWSelSlice, binder, pbuilder, registered); }
internal AutoGenerateContext(Faker faker, IEnumerable <string> ruleSets, IAutoBinder binder) { Faker = faker; RuleSets = ruleSets; Binder = binder; Types = new Stack <Type>(); }
public override void Establish(IAutoBinder binder) { var lsu = _host; lsu.Clk = binder.GetSignal <StdLogic>(EPortUsage.Clock, "Clk", null, '0'); lsu.EnIn = binder.GetSignal <StdLogic>(EPortUsage.Default, _host.MappedVariableName + "_StEn", null, '0'); lsu.DIn = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, _host.MappedVariableName + "_In", null, StdLogicVector._0s(lsu.DataWidth)); lsu.DOut = binder.GetSignal <StdLogicVector>(EPortUsage.Result, _host.MappedVariableName + "_Out", null, StdLogicVector._0s(lsu.DataWidth)); }
public static IAutoFaker Create(string locale, IAutoBinder binder) { return(Create(builder => { builder .WithLocale(locale) .WithBinder(binder); })); }
public override void Establish(IAutoBinder binder) { var mux2 = _host; mux2.A = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, "A", null, StdLogicVector._0s(mux2.Width)); mux2.B = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, "B", null, StdLogicVector._0s(mux2.Width)); mux2.Sel = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, "Sel", null, StdLogicVector._0s(1)); mux2.R = binder.GetSignal <StdLogicVector>(EPortUsage.Result, "R", null, StdLogicVector._0s(mux2.Width)); }
/// <summary> /// Instantiates an instance of the <see cref="AutoFaker{TType}"/> class. /// </summary> /// <param name="locale">The locale to use for value generation.</param> /// <param name="binder">The <see cref="IAutoBinder"/> instance to use for the generation request.</param> public AutoFaker(string locale = null, IAutoBinder binder = null) : base(locale ?? AutoConfig.DefaultLocale, binder) { Binder = binder; // Ensure the default create action is cleared // This is so we can check whether it has been set externally DefaultCreateAction = CreateActions[currentRuleSet]; CreateActions[currentRuleSet] = null; }
public override void Establish(IAutoBinder binder) { if (_established) return; _host.X = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "X", null, StdLogicVector._0s(_host.InIntWidth + _host.FracWidth)); _host.R = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "R", null, StdLogicVector._0s(_host.OutIntWidth + _host.FracWidth)); _established = true; }
public override void Establish(IAutoBinder binder) { if (_established) return; _host.DIn = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "DIn", null, StdLogicVector._0s(_host.FloatWidth)); _host.DOut = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "DOut", null, StdLogicVector._0s(_host.OutFormat.TotalWidth)); _established = true; }
public override void Establish(IAutoBinder binder) { var shifter = _host; shifter.Clk = binder.GetSignal <StdLogic>(EPortUsage.Clock, "Clk", null, '0'); shifter.X = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, "X", null, StdLogicVector._0s(shifter.DataWidth)); shifter.Shift = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, "S", null, StdLogicVector._0s(shifter.ShiftWidth)); shifter.Dir = binder.GetSignal <StdLogicVector>(EPortUsage.Default, "Dir", null, StdLogicVector._0s(1)); shifter.Y = binder.GetSignal <StdLogicVector>(EPortUsage.Result, "Y", null, StdLogicVector._0s(shifter.DataWidth)); }
private MicrocodeControlpathBuilder(Component host, IAutoBinder binder, int romLatency, int maxSelWidth, bool staged, bool registered) { _host = host; _binder = binder; _mcd = new MicrocodeDesigner(); _romLatency = romLatency; _maxSelWidth = maxSelWidth; _staged = staged; _registered = registered; }
public override void Establish(IAutoBinder binder) { if (_established) { return; } _host.X = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, "X", null, StdLogicVector._0s(_host.InIntWidth + _host.FracWidth)); _host.R = binder.GetSignal <StdLogicVector>(EPortUsage.Result, "R", null, StdLogicVector._0s(_host.OutIntWidth + _host.FracWidth)); _established = true; }
public override void Establish(IAutoBinder binder) { if (_established) { return; } _host.DIn = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, "DIn", null, StdLogicVector._0s(_host.FloatWidth)); _host.DOut = binder.GetSignal <StdLogicVector>(EPortUsage.Result, "DOut", null, StdLogicVector._0s(_host.OutFormat.TotalWidth)); _established = true; }
public override void Establish(IAutoBinder binder) { var mul = _host; if (mul.PipeStages > 0) { mul.CLK = binder.GetSignal <StdLogic>(EPortUsage.Clock, "Clk", null, '0'); } mul.A = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, "A", null, StdLogicVector._0s(mul.PortAWidth)); mul.B = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, "B", null, StdLogicVector._0s(mul.PortBWidth)); mul.P = binder.GetSignal <StdLogicVector>(EPortUsage.Result, "P", null, StdLogicVector._0s(mul.OutputWidthHigh - mul.OutputWidthLow + 1)); }
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()); }
internal void AssembleStagedDecoderSync(IAutoBinder binder, IAlgorithmBuilder pbuilder, SLVSignal cwSignal, bool registered) { LiteralReference lrCWSelSlice = null; if (SelWidth != 0) { lrCWSelSlice = new LiteralReference( ((ISignal)cwSignal[SelOffset + SelWidth - 1, SelOffset]) .ToSignalRef(SignalRef.EReferencedProperty.Cur)); } _encFlow.AssembleStagedDecoderSync(Enumerable.Range(1, _encFlow.NumSymbols).ToArray(), SelWidth, lrCWSelSlice, binder, pbuilder, registered); }
public SlimMuxInterconnectHelper(IAutoBinder binder) { _binder = binder; _signal2Idx = new CacheDictionary <SignalRef, int>(CreateFUSignalIndex); _dep = new DelegatePropMap <TimedSignalFlow, int>(tf => _signal2Idx[tf.Source]); _dst = new DelegatePropMap <TimedSignalFlow, int>(tf => _signal2Idx[tf.Target]); _pipeSource = new DelegatePropMap <int, int>(GetPipeSource); _pipeSink = new DelegatePropMap <int, int>(GetPipeSink); _pipeDelay = new DelegatePropMap <int, long>(GetPipeDelay); _pmPreds = new DelegatePropMap <int, IEnumerable <int> >(GetPreds); _pmSuccs = new DelegatePropMap <int, IEnumerable <int> >(GetSuccs); _isFixed = new DelegatePropMap <int, bool>(GetIsFixed); }
public void Establish(IAutoBinder binder) { if (_established) { return; } var fna = _host; fna.Clk = binder.GetSignal <StdLogic>(EPortUsage.Clock, "Clk", null, StdLogic._0); fna.DIn = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, "DIn", null, StdLogicVector._0s(fna.TotalWidth)); fna.DOut = binder.GetSignal <StdLogicVector>(EPortUsage.Result, "DOut", null, StdLogicVector._0s(fna.TotalWidth)); _established = true; }
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()); }
public override void Establish(IAutoBinder binder) { if (_established) { return; } if (_host.Latency > 0) { _host.Clk = (SLSignal)binder.GetSignal(EPortUsage.Clock, null, null, null); } _host.Operand = (SLVSignal)binder.GetSignal(EPortUsage.Operand, "Operand", null, StdLogicVector._0s(_host.InputWidth)); _host.Result = (SLVSignal)binder.GetSignal(EPortUsage.Result, "Result", null, StdLogicVector._0s(_host.OutputWidth)); _established = true; }
public override void Establish(IAutoBinder binder) { if (_established) { return; } var cc = _host; cc.Ops = (XIn <StdLogicVector[], InOut <StdLogicVector> >)binder.GetSignal(EPortUsage.Operand, "Ops", null, Enumerable.Repeat(StdLogicVector._0s(cc.WordWidth), cc.NumWords).ToArray()); cc.R = binder.GetSignal <StdLogicVector>(EPortUsage.Result, "R", null, StdLogicVector._0s(cc.OutputWidth)); _established = true; }
public override void Establish(IAutoBinder binder) { var divider = _host; divider.CLK = binder.GetSignal <StdLogic>(EPortUsage.Clock, "Clk", null, '0'); divider.DIVIDEND = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, "dividend", null, StdLogicVector._0s(divider.DividendAndQuotientWidth)); divider.DIVISOR = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, "divisor", null, StdLogicVector._0s(divider.DivisorWidth)); divider.QUOTIENT = binder.GetSignal <StdLogicVector>(EPortUsage.Result, "quotient", null, StdLogicVector._0s(divider.DividendAndQuotientWidth)); if (divider.FractionWidth != 0) { divider.FRACTIONAL = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, "fractional", null, StdLogicVector._0s(divider.FractionWidth)); } divider.RDY = binder.GetSignal <StdLogic>(EPortUsage.Default, "rdy", null, '0'); divider.RFD = binder.GetSignal <StdLogic>(EPortUsage.Default, "rfd", null, '0'); divider.ND = binder.GetSignal <StdLogic>(EPortUsage.Default, "nd", null, '0'); }
public void Establish(IAutoBinder binder) { if (_established) { return; } var unit = _host; unit.Clk = binder.GetSignal <StdLogic>(EPortUsage.Clock, "Clk", null, StdLogic._0); unit.X = binder.GetSignal <StdLogicVector>(EPortUsage.Operand, "X", null, StdLogicVector._0s(unit.XIntWidth + unit.XFracWidth)); unit.Sin = binder.GetSignal <StdLogicVector>(EPortUsage.Result, "SinOut", null, StdLogicVector._0s(unit.YIntWidth + unit.YFracWidth)); unit.Cos = binder.GetSignal <StdLogicVector>(EPortUsage.Result, "CosOut", null, StdLogicVector._0s(unit.YIntWidth + unit.YFracWidth)); _established = true; }
public override void Establish(IAutoBinder binder) { if (_createSignal) { _constSignal = Host.Descriptor .GetSignals() .Where(s => s.HasAttribute<ConstLoadingTransactionSite>() && s.InitialValue.Equals(_constValue)) .Select(s => s.Instance) .Cast<SLVSignal>() .SingleOrDefault(); if (_constSignal == null) { _constSignal = (SLVSignal)binder.GetSignal(EPortUsage.Default, "const_" + _constValue.ToString(), null, _constValue); _constSignal.Descriptor.AddAttribute(this); } } }
public override void Establish(IAutoBinder binder) { if (_createSignal) { _constSignal = Host.Descriptor .GetSignals() .Where(s => s.HasAttribute <ConstLoadingTransactionSite>() && s.InitialValue.Equals(_constValue)) .Select(s => s.Instance) .Cast <SLVSignal>() .SingleOrDefault(); if (_constSignal == null) { _constSignal = (SLVSignal)binder.GetSignal(EPortUsage.Default, "const_" + _constValue.ToString(), null, _constValue); _constSignal.Descriptor.AddAttribute(this); } } }
public virtual void AssembleStagedDecoderSync(int[] syms, int selWidth, LiteralReference lrCWSelSlice, IAutoBinder binder, IAlgorithmBuilder pbuilder, bool registered) { if (NumSymbols < 2) { return; } CreateSelSymbol(binder, registered); pbuilder.Switch(lrCWSelSlice); for (int i = 0; i < syms.Length; i++) { var selValue = StdLogicVector.FromUInt((uint)i, selWidth); pbuilder.Case(LiteralReference.CreateConstant(selValue)); int sym = syms[i]; var symbol = _selSymbols.GetValue(sym - 1); pbuilder.Store( _symbol.SignalInstance.ToSignalRef(SignalRef.EReferencedProperty.Next), LiteralReference.CreateConstant(symbol)); pbuilder.EndCase(); } pbuilder.DefaultCase(); { pbuilder.Store( _symbol.SignalInstance.ToSignalRef(SignalRef.EReferencedProperty.Next), LiteralReference.CreateConstant(StdLogicVector.Xs(NumSymbols))); } pbuilder.EndCase(); if (registered) { pbuilder.Store( _symbold.SignalInstance.ToSignalRef(SignalRef.EReferencedProperty.Next), _symbol.SignalInstance.ToSignalRef(SignalRef.EReferencedProperty.Cur)); } pbuilder.EndSwitch(); }
public override void Establish(IAutoBinder binder) { if (_established) { return; } _clk = binder.GetSignal(EPortUsage.Clock, null, null, null).Descriptor; _enI = (SLSignal)binder.GetSignal(EPortUsage.Default, _port.Name + "_en", null, StdLogic._1); _en = _enI.Descriptor; _slvSignalI = (SLVSignal)binder.GetSignal(EPortUsage.Default, _port.Name + "_in", null, StdLogicVector._0s(_dataWidth)); _slvSignal = _slvSignalI.Descriptor; var templ = new ConvProcessBuilder(this); var alg = templ.GetAlgorithm(); binder.CreateProcess(Process.EProcessKind.Triggered, alg, _clk, _en); _established = true; }
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()); }
public override void Establish(IAutoBinder binder) { var shifter = _host; shifter.Clk = binder.GetSignal<StdLogic>(EPortUsage.Clock, "Clk", null, '0'); shifter.X = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "X", null, StdLogicVector._0s(shifter.DataWidth)); shifter.Shift = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "S", null, StdLogicVector._0s(shifter.ShiftWidth)); shifter.Dir = binder.GetSignal<StdLogicVector>(EPortUsage.Default, "Dir", null, StdLogicVector._0s(1)); shifter.Y = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "Y", null, StdLogicVector._0s(shifter.DataWidth)); }
/// <summary> /// Connects the underlying hardware to its environment by binding its ports to signals /// created by a binder service. The default implementation does nothing. /// </summary> /// <param name="binder">binder service</param> public virtual void Establish(IAutoBinder binder) { }
public void Establish(IAutoBinder binder) { if (_established) return; var fna = _host; fna.Clk = binder.GetSignal<StdLogic>(EPortUsage.Clock, "Clk", null, StdLogic._0); fna.DIn = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "DIn", null, StdLogicVector._0s(fna.TotalWidth)); fna.DOut = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "DOut", null, StdLogicVector._0s(fna.TotalWidth)); _established = true; }
public override void Establish(IAutoBinder binder) { var divider = _host; divider.CLK = binder.GetSignal<StdLogic>(EPortUsage.Clock, "Clk", null, '0'); divider.DIVIDEND = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "dividend", null, StdLogicVector._0s(divider.DividendAndQuotientWidth)); divider.DIVISOR = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "divisor", null, StdLogicVector._0s(divider.DivisorWidth)); divider.QUOTIENT = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "quotient", null, StdLogicVector._0s(divider.DividendAndQuotientWidth)); if (divider.FractionWidth != 0) divider.FRACTIONAL = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "fractional", null, StdLogicVector._0s(divider.FractionWidth)); divider.RDY = binder.GetSignal<StdLogic>(EPortUsage.Default, "rdy", null, '0'); divider.RFD = binder.GetSignal<StdLogic>(EPortUsage.Default, "rfd", null, '0'); divider.ND = binder.GetSignal<StdLogic>(EPortUsage.Default, "nd", null, '0'); }
public IControlpathBuilder Create(Component host, IAutoBinder binder) { return new TristateBusFSMControlpathBuilder(host, binder); }
public void Establish(IAutoBinder binder) { if (_established) return; var unit = _host; unit.Clk = binder.GetSignal<StdLogic>(EPortUsage.Clock, "Clk", null, StdLogic._0); unit.X = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "X", null, StdLogicVector._0s(unit.XIntWidth + unit.XFracWidth)); unit.Sin = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "SinOut", null, StdLogicVector._0s(unit.YIntWidth + unit.YFracWidth)); unit.Cos = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "CosOut", null, StdLogicVector._0s(unit.YIntWidth + unit.YFracWidth)); _established = true; }
public IInterconnectBuilder Create(Component host, IAutoBinder binder) { return new StagePlexInterconnectBuilder(host, binder); }
public SyncProcessBuilder(InlineBCUTransactionSite taSite, IAutoBinder binder) { _taSite = taSite; _binder = binder; }
public override void Establish(IAutoBinder binder) { if (_established) return; var alu = _host; alu.Clk = binder.GetSignal<StdLogic>(EPortUsage.Clock, "Clk", null, '0'); alu.A = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "A", null, StdLogicVector._0s(alu.AWidth)); if (alu.Arity > 1) alu.B = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "B", null, StdLogicVector._0s(alu.BWidth)); if (alu.FuncSel == ALU.EFunction.Compare) { alu.CmpLt = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "IsLt", null, StdLogicVector._0s(1)); alu.CmpLte = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "IsLte", null, StdLogicVector._0s(1)); alu.CmpEq = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "IsEq", null, StdLogicVector._0s(1)); alu.CmpNeq = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "IsNEq", null, StdLogicVector._0s(1)); alu.CmpGte = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "IsGte", null, StdLogicVector._0s(1)); alu.CmpGt = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "IsGt", null, StdLogicVector._0s(1)); } else { alu.R = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "R", null, StdLogicVector._0s(alu.RWidth)); } _established = true; }
/// <summary> /// Classifies a given XIL instruction, such that all instructions which may be mapped to the same type of hardware functional unit /// belong to the same group. /// </summary> /// <param name="instr">XIL instruction</param> /// <param name="operandTypes">types of instruction operands</param> /// <param name="resultTypes">types of instruction results</param> /// <param name="binder">binder service</param> /// <returns>Opaque group identifier. Do not make any assumptions on the content or type of the returned object. /// The important thing is that any instructions belonging to the same group will see the same object.</returns> public object Classify(XILInstr instr, TypeDescriptor[] operandTypes, TypeDescriptor[] resultTypes, IAutoBinder binder) { var mapping = TryMap(instr, operandTypes, resultTypes, binder); if (mapping == null) return null; if (mapping.ResourceKind == EMappingKind.ExclusiveResource || mapping.ResourceKind == EMappingKind.LightweightResource) { return new ClassifyCookie(instr); } else { return mapping.TASite; } }
public override void Establish(IAutoBinder binder) { var fpu = _host; bool haveClk = fpu.Latency > 0; if (fpu.Function == EFunction.Multiply) haveClk = true; if (fpu.Latency > 0) { fpu.Clk = binder.GetSignal<StdLogic>(EPortUsage.Clock, "Clk", null, '0'); } if ((fpu.Function == FloatingPointCore.EFunction.AddSubtract && fpu.AddSubSel == FloatingPointCore.EAddSub.Both) || (fpu.Function == FloatingPointCore.EFunction.Compare && fpu.CompareSel == FloatingPointCore.ECompareOp.Programmable)) fpu.Operation = binder.GetSignal<StdLogicVector>(EPortUsage.Default, "Operation", null, StdLogicVector._0s(6)); fpu.A = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "A", null, StdLogicVector._0s(fpu.OperandWidth)); if (fpu.Arity > 1) fpu.B = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "B", null, StdLogicVector._0s(fpu.OperandWidth)); fpu.Result = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "R", null, StdLogicVector._0s(fpu.ResultWidth)); if (fpu.HasCE) fpu.CE = binder.GetSignal<StdLogic>(EPortUsage.Default, "CE", null, '0'); if (fpu.HasDivideByZero) fpu.DivideByZero = binder.GetSignal<StdLogic>(EPortUsage.Result, "DivideByZero", null, '0'); if (fpu.HasInvalidOp) fpu.InvalidOp = binder.GetSignal<StdLogic>(EPortUsage.Result, "InvalidOp", null, '0'); if (fpu.HasOperationND) fpu.OperationND = binder.GetSignal<StdLogic>(EPortUsage.Default, "OperationND", null, '0'); if (fpu.HasOperationRFD) fpu.OperationRFD = binder.GetSignal<StdLogic>(EPortUsage.Default, "OperationRFD", null, '0'); if (fpu.HasOverflow) fpu.Overflow = binder.GetSignal<StdLogic>(EPortUsage.Result, "Overflow", null, '0'); if (fpu.HasRdy) fpu.Rdy = binder.GetSignal<StdLogic>(EPortUsage.Default, "Rdy", null, '0'); if (fpu.HasSCLR) fpu.SCLR = binder.GetSignal<StdLogic>(EPortUsage.Reset, "SCLR", null, '0'); }
public override void Establish(IAutoBinder binder) { if (_realized) return; _addrBits = MathExt.CeilLog2(_array.ArrayObj.Length); _dataBits = Marshal.SerializeForHW(_array.ElementType.GetSampleInstance()).Size; _clkI = (SLSignal)binder.GetSignal(EPortUsage.Clock, "Clk", null, null); _dataOutI = (SLVSignal)binder.GetSignal(EPortUsage.Default, "memIf_dataOut", null, StdLogicVector._0s(_dataBits)); _addrI = (SLVSignal)binder.GetSignal(EPortUsage.Default, "memIf_addr", null, StdLogicVector._0s(_addrBits)); _clk = _clkI.Descriptor; _addr = _addrI.Descriptor; _dataOut = _dataOutI.Descriptor; if (NeedWriteAccess) { _wrEnI = (SLSignal)binder.GetSignal(EPortUsage.Default, "memIf_wrEn", null, StdLogic._0); _dataInI = (SLVSignal)binder.GetSignal(EPortUsage.Default, "memIf_dataIn", null, StdLogicVector._0s(_dataBits)); _wrEn = _wrEnI.Descriptor; _dataIn = _dataInI.Descriptor; } var memIfBuilder = new MemIfBuilder(this); var memIfAlg = memIfBuilder.GetAlgorithm(); memIfAlg.Name = "MemIf"; binder.CreateProcess(Process.EProcessKind.Triggered, memIfAlg, _clk); _realized = true; }
public override void Establish(IAutoBinder binder) { if (_established) return; if (_host.Latency > 0) _host.Clk = (SLSignal)binder.GetSignal(EPortUsage.Clock, null, null, null); _host.Operand = (SLVSignal)binder.GetSignal(EPortUsage.Operand, "Operand", null, StdLogicVector._0s(_host.InputWidth)); _host.Result = (SLVSignal)binder.GetSignal(EPortUsage.Result, "Result", null, StdLogicVector._0s(_host.OutputWidth)); _established = true; }
public override void Establish(IAutoBinder binder) { _host.DIn = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "DIn", null, StdLogicVector._0s(_host.InputWidth)); _host.DOut = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "DOut", null, StdLogicVector._0s(_host.HiOffset - _host.LoOffset + 1)); }
public override void AssembleStagedDecoderSync(int[] syms, int selWidth, LiteralReference lrCWSelSlice, IAutoBinder binder, IAlgorithmBuilder pbuilder, bool registered) { int[] syms0 = syms.Select(i => _encMap0[i - 1]).ToArray(); int[] syms1 = syms.Select(i => _encMap1[i - 1]).ToArray(); _encFlow0.AssembleStagedDecoderSync(syms0, selWidth, lrCWSelSlice, binder, pbuilder, registered); _encFlow1.AssembleStagedDecoderSync(syms1, selWidth, lrCWSelSlice, binder, pbuilder, registered); }
public override void Establish(IAutoBinder binder) { if (_allocated) return; _brAltFlagP = (SLVSignal)binder.GetSignal(EPortUsage.Default, "BCU_BrP", null, StdLogicVector._0s(1)); _brAltFlagN = (SLVSignal)binder.GetSignal(EPortUsage.Default, "BCU_BrN", null, StdLogicVector._1s(1)); _curState = binder.GetSignal(EPortUsage.State, "BCU_CurState", null, null).Descriptor; _tState = _curState.ElementType.CILType; Array enumValues = _tState.GetEnumValues(); int numStates = enumValues.Length; object defaultState = Activator.CreateInstance(_tState); _incState = binder.GetSignal(EPortUsage.Default, "BCU_IncState", null, defaultState).Descriptor; _altState = binder.GetSignal(EPortUsage.Default, "BCU_AltState", null, defaultState).Descriptor; _nextState = binder.GetSignal(EPortUsage.Default, "BCU_NextState", null, defaultState).Descriptor; IncStateProcessBuilder ispb = new IncStateProcessBuilder(this); Function incStateFn = ispb.GetAlgorithm(); incStateFn.Name = "BCU_IncState"; binder.CreateProcess(Process.EProcessKind.Triggered, incStateFn, _curState); SyncProcessBuilder spb = new SyncProcessBuilder(this, binder); Function syncStateFn = spb.GetAlgorithm(); syncStateFn.Name = "BCU_FSM"; ISignalOrPortDescriptor sdClock = binder.GetSignal<StdLogic>(EPortUsage.Clock, "Clk", null, '0').Descriptor; binder.CreateProcess(Process.EProcessKind.Triggered, syncStateFn, sdClock); _allocated = true; }
private TristateBusFSMControlpathBuilder(Component host, IAutoBinder binder) { _host = host; _binder = binder; }
/// <summary> /// Tries to map the given XIL instruction to any suitable functional unit. This call will not create any actual hardware. It is used by the /// scheduler to query basic instruction metrics, namely initiation interval and latency. /// </summary> /// <param name="instr">XIL instruction</param> /// <param name="operandTypes">operand types of XIL instruction</param> /// <param name="resultTypes">result types of XIL instruction</param> /// <param name="binder">binder service</param> /// <returns>a hardware mapping for the supplied instruction or null if no such exists</returns> public IXILMapping TryMap(XILInstr instr, TypeDescriptor[] operandTypes, TypeDescriptor[] resultTypes, IAutoBinder binder) { var xilsi = instr.CreateStk(new InstructionDependency[0], operandTypes, resultTypes); IXILMapping mapping; if (_xilMappings.TryGetValue(xilsi, out mapping)) { return mapping; } IEnumerable<IXILMapper> mappers = _xmm.LookupMappers(instr); foreach (IXILMapper mapper in mappers) { var tas = _taMapLookup.Get(mapper); foreach (var ta in tas) { var mappings = mapper.TryMap(ta, instr, operandTypes, resultTypes); if (mappings.Any()) { mapping = mappings.First(); _xilMappings[xilsi] = mapping; return mapping; } } } foreach (IXILMapper mapper in mappers) { mapping = mapper.TryAllocate(_host, instr, operandTypes, resultTypes, _targetProject); if (mapping != null) { _taMapLookup.Add(mapper, mapping.TASite); _xilMappings[xilsi] = mapping; return mapping; } } return null; }
public override void Establish(IAutoBinder binder) { if (_realized) return; object constValue; var literal = (Literal)_literal; if (literal.IsConst(out constValue)) { var slv = Marshal.SerializeForHW(constValue); _dataOutI = (SLVSignal)binder.GetSignal(EPortUsage.Default, "constSignal_" + constValue.ToString(), null, slv); _dataOut = _dataOutI.Descriptor; } else { bool needRead = true, needWrite = true; var fref = _literal as FieldRef; if (fref != null) { needRead = fref.FieldDesc.IsReadInCurrentContext(Host.Context); needWrite = fref.FieldDesc.IsWrittenInCurrentContext(Host.Context); } var stlit = (IStorableLiteral)_literal; string name = stlit.Name; var valueSample = _literal.Type.GetSampleInstance(); _dataBits = Marshal.SerializeForHW(valueSample).Size; _clkI = (SLSignal)binder.GetSignal(EPortUsage.Clock, null, null, null); _clk = _clkI.Descriptor; if (needWrite) { _wrEnI = (SLSignal)binder.GetSignal(EPortUsage.Default, name + "_wrEn", null, StdLogic._0); _wrEn = _wrEnI.Descriptor; _dataInI = (SLVSignal)binder.GetSignal(EPortUsage.Default, name + "_dataIn", null, StdLogicVector._0s(_dataBits)); _dataIn = _dataInI.Descriptor; } if (needRead) { _dataOutI = (SLVSignal)binder.GetSignal(EPortUsage.Default, name + "_dataOut", null, StdLogicVector._0s(_dataBits)); _dataOut = _dataOutI.Descriptor; } //var apb = new AccessProcessBuilder(this, needRead, needWrite); //var alg = apb.GetAlgorithm(); //alg.Name = name + "_process"; //binder.CreateProcess(Process.EProcessKind.Triggered, alg, _clk); CommonClockProcess ccp = null; string algName = name + "_process"; if (Host.Descriptor.HasAttribute<CommonClockProcess>()) { ccp = Host.Descriptor.QueryAttribute<CommonClockProcess>(); Host.Descriptor.RemoveChild(ccp.CCProc); } else { ccp = new CommonClockProcess(_clk); Host.Descriptor.AddAttribute(ccp); } ccp.AddAccessor(this, needRead, needWrite); var alg = ccp.FrameBuilder.Complete(); alg.Name = algName; ccp.CCProc = binder.CreateProcess(Process.EProcessKind.Triggered, alg, _clk); } _realized = true; }
private StagePlexInterconnectBuilder(Component host, IAutoBinder binder) { _host = host; _binder = binder; _hcib = (HClustInterconnectBuilder)HClustInterconnectBuilder.Factory.Create(host, binder); }
public override void Establish(IAutoBinder binder) { if (_host.Latency > 0) _host.CLK = binder.GetSignal<StdLogic>(EPortUsage.Clock, "Clk", null, '0'); _host.A = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "A", null, StdLogicVector._0s(_host.Awidth)); _host.B = binder.GetSignal<StdLogicVector>(EPortUsage.Operand, "B", null, StdLogicVector._0s(_host.Bwidth)); _host.S = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "S", null, StdLogicVector._0s(_host.OutWidth)); if (_host.HasBypass) _host.BYPASS = binder.GetSignal<StdLogic>(EPortUsage.Default, "bypass", null, '0'); if (_host.HasCarryIn) _host.C_in = binder.GetSignal<StdLogic>(EPortUsage.Default, "c_in", null, '0'); if (_host.HasCarryOut) _host.C_out = binder.GetSignal<StdLogic>(EPortUsage.Default, "c_out", null, '0'); if (_host.HasCE) _host.CE = binder.GetSignal<StdLogic>(EPortUsage.Default, "ce", null, '0'); if (_host.HasSCLR) _host.SCLR = binder.GetSignal<StdLogic>(EPortUsage.Default, "sclr", null, '0'); if (_host.HasSSET) _host.SSET = binder.GetSignal<StdLogic>(EPortUsage.Default, "sset", null, '0'); //FIXME: What about SINIT? }
public ICRBinderProxy(DefaultDatapathBuilder dpb, IAutoBinder orgBinder) { _dpb = dpb; _orgBinder = orgBinder; }
internal void AssembleStagedDecoderSync(IAutoBinder binder, IAlgorithmBuilder pbuilder, SLVSignal cwSignal, bool registered) { LiteralReference lrCWSelSlice = null; if (SelWidth != 0) { lrCWSelSlice = new LiteralReference( ((ISignal)cwSignal[SelOffset + SelWidth - 1, SelOffset]) .ToSignalRef(SignalRef.EReferencedProperty.Cur)); } _encFlow.AssembleStagedDecoderSync(Enumerable.Range(1, _encFlow.NumSymbols).ToArray(), SelWidth, lrCWSelSlice, binder, pbuilder, registered); }
public override void Establish(IAutoBinder binder) { if (_established) return; var cc = _host; cc.Ops = (XIn<StdLogicVector[], InOut<StdLogicVector>>)binder.GetSignal(EPortUsage.Operand, "Ops", null, Enumerable.Repeat(StdLogicVector._0s(cc.WordWidth), cc.NumWords).ToArray()); cc.R = binder.GetSignal<StdLogicVector>(EPortUsage.Result, "R", null, StdLogicVector._0s(cc.OutputWidth)); _established = true; }
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()); }