/// <summary> /// Clones a given synthesis plan. /// </summary> /// <param name="other">a synthesis plan</param> /// <returns>a clone of that plan</returns> public static HLSPlan CopyPlan(HLSPlan other) { var plan = new HLSPlan(); other.CopyTo(plan); return(plan); }
public void Refine(DesignContext context, IProject targetProject) { ComponentDescriptor cd = (ComponentDescriptor)_pd.Owner; Component rtl = cd.Instance; // Remove synthesizing process cd.RemoveChild(_pd); if (_planProp != null) { var owner = (ComponentDescriptor)_pd.Owner; _plan = _planProp.GetValue(owner.Instance, new object[0]) as HLSPlan; if (_plan == null) { StringBuilder sb = new StringBuilder(); sb.AppendFormat("HLS error: declaring type {0} with property {1} does not return an appropriate HLS plan", _pd.Method.DeclaringType.Name, _planProp); throw new InvalidOperationException(sb.ToString()); } } else { _plan = HLSPlan.CopyPlan(_pd.GetDesign().GetHLSPlan()); } _plan.Execute(context, rtl, _pd, targetProject); }
public HLSState(HLSPlan plan, DesignContext design, Component host, ProcessDescriptor proc, IProject proj) { _plan = plan; _design = design; _host = host; _proc = proc; _proj = proj; }
/// <summary> /// Creates a default synthesis plan. /// </summary> /// <returns>A default synthesis plan</returns> public static HLSPlan CreateDefaultPlan() { HLSPlan plan = new HLSPlan(); plan.XILSTransformations.Add(new FixPointImplementor()); XILMemoryMapper xmm = new XILMemoryMapper() { MapConstantsToNemory = false, MapVariablesToMemory = false }; //plan.XILSTransformations.Add(xmm); plan.MemMapper = xmm.Mapper; plan.XILSTransformations.Add(new ReduceTypes()); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Abs_int)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Neg_int)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Abs_double)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Neg_double)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Neg_float)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Cos_ScSinCos_double)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Sin_ScSinCos_double)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Cos_ScSinCos_single)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Sin_ScSinCos_single)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Cos_ScSinCos_fixpt)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Sin_ScSinCos_fixpt)); plan.XILSTransformations.Add(new TransitiveGotoEliminator()); plan.XILSTransformations.Add(new UnreachableInstructionEliminator()); plan.XILSTransformations.Add(new ConditionalBranchOptimizer()); plan.XILSTransformations.Add(new UnreachableInstructionEliminator()); plan.XILSTransformations.Add(new ImplTypeRewriter()); plan.XILSTransformations.Add(new ReadWriteDependencyInjector()); plan.XIL3Transformations.Add(new EliminateCommonSubexpressions()); plan.AddXILMapper(typeof(ALU)); plan.AddXILMapper(typeof(PortReaderXILMapper)); plan.AddXILMapper(typeof(PortWriterXILMapper)); plan.AddXILMapper(typeof(LocalStorageUnit)); plan.AddXILMapper(typeof(ConstLoadingXILMapper)); plan.AddXILMapper(typeof(NopMapper)); plan.AddXILMapper(typeof(MUX2)); plan.AddXILMapper(typeof(Slicer)); plan.AddXILMapper(typeof(FixFPMod1)); plan.AddXILMapper(typeof(Shifter)); //plan.AddXILMapper(typeof(ConcatenizerXILMapper)); plan.AddXILMapper(typeof(InlineConcatMapper)); plan.AddXILMapper(typeof(FixedAbs)); plan.AddXILMapper(typeof(FloatNegAbs)); plan.AddXILMapper(typeof(FloatSignAsSigned)); plan.AddXILMapper(typeof(InlineFieldMapper)); plan.AddXILMapper(typeof(InlineMemoryMapper)); //plan.AddXILMapper(typeof(SinCosLUTCore)); plan.Scheduler = ForceDirectedScheduler.Instance.ToFunctionScheduler(); plan.InterconnectBuilder = MinRegInterconnectBuilder.Factory; plan.ControlPathBuilder = FSMControlpathBuilder.Factory; return(plan); }
/// <summary> /// Copies the current plan to another instance. /// </summary> /// <param name="other">The instance to receive the plan.</param> public void CopyTo(HLSPlan other) { other.Scheduler = Scheduler; other.InterconnectBuilder = InterconnectBuilder; other.ControlPathBuilder = ControlPathBuilder; other.MemMapper = MemMapper; other.ProgramROMFactory = ProgramROMFactory; other.XILSTransformations.AddRange(XILSTransformations); other.XIL3Transformations.AddRange(XIL3Transformations); other.XILMappers.AddRange(XILMappers); }
/// <summary> /// Returns synthesis plan of a given design descriptor. If none exists, a new one gets created. /// </summary> /// <param name="dd">a design descriptor</param> /// <returns>the synthesis plan</returns> /// <remarks>The synthesis plan is attached as an attribute to the descriptor.</remarks> public static HLSPlan GetHLSPlan(this DesignDescriptor dd) { Contract.Requires <ArgumentNullException>(dd != null); var plan = dd.QueryAttribute <HLSPlan>(); if (plan == null) { plan = HLSPlan.CreateDefaultPlan(); dd.AddAttribute(plan); } return(plan); }
/// <summary> /// Clones a given synthesis plan. /// </summary> /// <param name="other">a synthesis plan</param> /// <returns>a clone of that plan</returns> public static HLSPlan CopyPlan(HLSPlan other) { var plan = new HLSPlan(); other.CopyTo(plan); return plan; }
/// <summary> /// Creates a default synthesis plan. /// </summary> /// <returns>A default synthesis plan</returns> public static HLSPlan CreateDefaultPlan() { HLSPlan plan = new HLSPlan(); plan.XILSTransformations.Add(new FixPointImplementor()); XILMemoryMapper xmm = new XILMemoryMapper() { MapConstantsToNemory = false, MapVariablesToMemory = false }; //plan.XILSTransformations.Add(xmm); plan.MemMapper = xmm.Mapper; plan.XILSTransformations.Add(new ReduceTypes()); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Abs_int)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Neg_int)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Abs_double)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Neg_double)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Neg_float)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Cos_ScSinCos_double)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Sin_ScSinCos_double)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Cos_ScSinCos_single)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Sin_ScSinCos_single)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Cos_ScSinCos_fixpt)); plan.XILSTransformations.Add(new ExpandXILS(EXILSExpansion.Expand_Sin_ScSinCos_fixpt)); plan.XILSTransformations.Add(new TransitiveGotoEliminator()); plan.XILSTransformations.Add(new UnreachableInstructionEliminator()); plan.XILSTransformations.Add(new ConditionalBranchOptimizer()); plan.XILSTransformations.Add(new UnreachableInstructionEliminator()); plan.XILSTransformations.Add(new ImplTypeRewriter()); plan.XILSTransformations.Add(new ReadWriteDependencyInjector()); plan.XIL3Transformations.Add(new EliminateCommonSubexpressions()); plan.AddXILMapper(typeof(ALU)); plan.AddXILMapper(typeof(PortReaderXILMapper)); plan.AddXILMapper(typeof(PortWriterXILMapper)); plan.AddXILMapper(typeof(LocalStorageUnit)); plan.AddXILMapper(typeof(ConstLoadingXILMapper)); plan.AddXILMapper(typeof(NopMapper)); plan.AddXILMapper(typeof(MUX2)); plan.AddXILMapper(typeof(Slicer)); plan.AddXILMapper(typeof(FixFPMod1)); plan.AddXILMapper(typeof(Shifter)); //plan.AddXILMapper(typeof(ConcatenizerXILMapper)); plan.AddXILMapper(typeof(InlineConcatMapper)); plan.AddXILMapper(typeof(FixedAbs)); plan.AddXILMapper(typeof(FloatNegAbs)); plan.AddXILMapper(typeof(FloatSignAsSigned)); plan.AddXILMapper(typeof(InlineFieldMapper)); plan.AddXILMapper(typeof(InlineMemoryMapper)); //plan.AddXILMapper(typeof(SinCosLUTCore)); plan.Scheduler = ForceDirectedScheduler.Instance.ToFunctionScheduler(); plan.InterconnectBuilder = MinRegInterconnectBuilder.Factory; plan.ControlPathBuilder = FSMControlpathBuilder.Factory; return plan; }
public void PersonalizePlan(HLSPlan plan) { _bcuMapper = new InlineBCUMapper(); plan.AddXILMapper(_bcuMapper); }
/// <summary> /// Configures the latency computation heuristic for a given synthesis plan. /// </summary> /// <param name="plan">synthesis plan</param> /// <param name="ratio">scaling factor for operator latencies</param> public static void SetLatencyProfile(HLSPlan plan, float ratio) { var axms = plan.XILMappers .Where(m => m is ALUXILMapper) .Cast<ALUXILMapper>(); foreach (var axm in axms) { var calc = new PipelineDepthCalculator(ratio); axm.CalcPipelineDepth = calc.CalcALUPipelineDepth; } var xaxms = plan.XILMappers .Where(m => m is XilinxAdderSubtracterXILMapper) .Cast<XilinxAdderSubtracterXILMapper>(); foreach (var xaxm in xaxms) { xaxm.Config.PipeStageScaling = ratio; } var mxms = plan.XILMappers .Where(m => m is XilinxMultiplierXILMapper) .Cast <XilinxMultiplierXILMapper>(); foreach (var mxm in mxms) { mxm.Config.PipeStageScaling = ratio; } var dxms = plan.XILMappers .Where(m => m is XilinxDividerXILMapper) .Cast<XilinxDividerXILMapper>(); foreach (var dxm in dxms) { dxm.Config.PipeStageScaling = ratio; } var fpxms = plan.XILMappers .Where(m => m is FloatingPointXILMapper) .Cast<FloatingPointXILMapper>(); foreach (var fpxm in fpxms) { fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.AddSubtract].UseMaximumLatency = false; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.AddSubtract].SpecifyLatencyRatio = true; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.AddSubtract].LatencyRatio = ratio; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.Compare].UseMaximumLatency = false; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.Compare].SpecifyLatencyRatio = true; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.Compare].LatencyRatio = ratio; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.Divide].UseMaximumLatency = false; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.Divide].SpecifyLatencyRatio = true; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.Divide].LatencyRatio = ratio; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.FixedToFloat].UseMaximumLatency = false; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.FixedToFloat].SpecifyLatencyRatio = true; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.FixedToFloat].LatencyRatio = ratio; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.FloatToFixed].UseMaximumLatency = false; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.FloatToFixed].SpecifyLatencyRatio = true; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.FloatToFixed].LatencyRatio = ratio; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.FloatToFloat].UseMaximumLatency = false; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.FloatToFloat].SpecifyLatencyRatio = true; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.FloatToFloat].LatencyRatio = ratio; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.Multiply].UseMaximumLatency = false; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.Multiply].SpecifyLatencyRatio = true; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.Multiply].LatencyRatio = ratio; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.SquareRoot].UseMaximumLatency = false; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.SquareRoot].SpecifyLatencyRatio = true; fpxm.Config[FloatingPointCore.EPrecision.Single, FloatingPointCore.EFunction.SquareRoot].LatencyRatio = ratio; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.AddSubtract].UseMaximumLatency = false; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.AddSubtract].SpecifyLatencyRatio = true; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.AddSubtract].LatencyRatio = ratio; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.Compare].UseMaximumLatency = false; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.Compare].SpecifyLatencyRatio = true; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.Compare].LatencyRatio = ratio; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.Divide].UseMaximumLatency = false; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.Divide].SpecifyLatencyRatio = true; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.Divide].LatencyRatio = ratio; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.FixedToFloat].UseMaximumLatency = false; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.FixedToFloat].SpecifyLatencyRatio = true; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.FixedToFloat].LatencyRatio = ratio; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.FloatToFixed].UseMaximumLatency = false; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.FloatToFixed].SpecifyLatencyRatio = true; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.FloatToFixed].LatencyRatio = ratio; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.FloatToFloat].UseMaximumLatency = false; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.FloatToFloat].SpecifyLatencyRatio = true; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.FloatToFloat].LatencyRatio = ratio; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.Multiply].UseMaximumLatency = false; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.Multiply].SpecifyLatencyRatio = true; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.Multiply].LatencyRatio = ratio; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.SquareRoot].UseMaximumLatency = false; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.SquareRoot].SpecifyLatencyRatio = true; fpxm.Config[FloatingPointCore.EPrecision.Double, FloatingPointCore.EFunction.SquareRoot].LatencyRatio = ratio; } var cordics = plan.XILMappers .Where(m => m is CordicXILMapper) .Cast<CordicXILMapper>(); foreach (var cordic in cordics) { if (ratio < 0.1f) { cordic.Config[XilinxCordic.EFunctionalSelection.Arctan].PipeliningMode = XilinxCordic.EPipeliningMode.No_Pipelining; cordic.Config[XilinxCordic.EFunctionalSelection.Arctanh].PipeliningMode = XilinxCordic.EPipeliningMode.No_Pipelining; cordic.Config[XilinxCordic.EFunctionalSelection.Rotate].PipeliningMode = XilinxCordic.EPipeliningMode.No_Pipelining; cordic.Config[XilinxCordic.EFunctionalSelection.SinAndCos].PipeliningMode = XilinxCordic.EPipeliningMode.No_Pipelining; cordic.Config[XilinxCordic.EFunctionalSelection.SinhAndCosh].PipeliningMode = XilinxCordic.EPipeliningMode.No_Pipelining; cordic.Config[XilinxCordic.EFunctionalSelection.Sqrt].PipeliningMode = XilinxCordic.EPipeliningMode.No_Pipelining; cordic.Config[XilinxCordic.EFunctionalSelection.Translate].PipeliningMode = XilinxCordic.EPipeliningMode.No_Pipelining; cordic.Config[XilinxCordic.EFunctionalSelection.Arctan].RegisterInputs = false; cordic.Config[XilinxCordic.EFunctionalSelection.Arctanh].RegisterInputs = false; cordic.Config[XilinxCordic.EFunctionalSelection.Rotate].RegisterInputs = false; cordic.Config[XilinxCordic.EFunctionalSelection.SinAndCos].RegisterInputs = false; cordic.Config[XilinxCordic.EFunctionalSelection.SinhAndCosh].RegisterInputs = false; cordic.Config[XilinxCordic.EFunctionalSelection.Sqrt].RegisterInputs = false; cordic.Config[XilinxCordic.EFunctionalSelection.Translate].RegisterInputs = false; } else if (ratio < 0.5f) { cordic.Config[XilinxCordic.EFunctionalSelection.Arctan].PipeliningMode = XilinxCordic.EPipeliningMode.Optimal; cordic.Config[XilinxCordic.EFunctionalSelection.Arctanh].PipeliningMode = XilinxCordic.EPipeliningMode.Optimal; cordic.Config[XilinxCordic.EFunctionalSelection.Rotate].PipeliningMode = XilinxCordic.EPipeliningMode.Optimal; cordic.Config[XilinxCordic.EFunctionalSelection.SinAndCos].PipeliningMode = XilinxCordic.EPipeliningMode.Optimal; cordic.Config[XilinxCordic.EFunctionalSelection.SinhAndCosh].PipeliningMode = XilinxCordic.EPipeliningMode.Optimal; cordic.Config[XilinxCordic.EFunctionalSelection.Sqrt].PipeliningMode = XilinxCordic.EPipeliningMode.Optimal; cordic.Config[XilinxCordic.EFunctionalSelection.Translate].PipeliningMode = XilinxCordic.EPipeliningMode.Optimal; cordic.Config[XilinxCordic.EFunctionalSelection.Arctan].RegisterInputs = false; cordic.Config[XilinxCordic.EFunctionalSelection.Arctanh].RegisterInputs = false; cordic.Config[XilinxCordic.EFunctionalSelection.Rotate].RegisterInputs = false; cordic.Config[XilinxCordic.EFunctionalSelection.SinAndCos].RegisterInputs = false; cordic.Config[XilinxCordic.EFunctionalSelection.SinhAndCosh].RegisterInputs = false; cordic.Config[XilinxCordic.EFunctionalSelection.Sqrt].RegisterInputs = false; cordic.Config[XilinxCordic.EFunctionalSelection.Translate].RegisterInputs = false; } else if (ratio < 1.0f) { cordic.Config[XilinxCordic.EFunctionalSelection.Arctan].PipeliningMode = XilinxCordic.EPipeliningMode.Optimal; cordic.Config[XilinxCordic.EFunctionalSelection.Arctanh].PipeliningMode = XilinxCordic.EPipeliningMode.Optimal; cordic.Config[XilinxCordic.EFunctionalSelection.Rotate].PipeliningMode = XilinxCordic.EPipeliningMode.Optimal; cordic.Config[XilinxCordic.EFunctionalSelection.SinAndCos].PipeliningMode = XilinxCordic.EPipeliningMode.Optimal; cordic.Config[XilinxCordic.EFunctionalSelection.SinhAndCosh].PipeliningMode = XilinxCordic.EPipeliningMode.Optimal; cordic.Config[XilinxCordic.EFunctionalSelection.Sqrt].PipeliningMode = XilinxCordic.EPipeliningMode.Optimal; cordic.Config[XilinxCordic.EFunctionalSelection.Translate].PipeliningMode = XilinxCordic.EPipeliningMode.Optimal; cordic.Config[XilinxCordic.EFunctionalSelection.Arctan].RegisterInputs = true; cordic.Config[XilinxCordic.EFunctionalSelection.Arctanh].RegisterInputs = true; cordic.Config[XilinxCordic.EFunctionalSelection.Rotate].RegisterInputs = true; cordic.Config[XilinxCordic.EFunctionalSelection.SinAndCos].RegisterInputs = true; cordic.Config[XilinxCordic.EFunctionalSelection.SinhAndCosh].RegisterInputs = true; cordic.Config[XilinxCordic.EFunctionalSelection.Sqrt].RegisterInputs = true; cordic.Config[XilinxCordic.EFunctionalSelection.Translate].RegisterInputs = true; } else { cordic.Config[XilinxCordic.EFunctionalSelection.Arctan].PipeliningMode = XilinxCordic.EPipeliningMode.Maximum; cordic.Config[XilinxCordic.EFunctionalSelection.Arctanh].PipeliningMode = XilinxCordic.EPipeliningMode.Maximum; cordic.Config[XilinxCordic.EFunctionalSelection.Rotate].PipeliningMode = XilinxCordic.EPipeliningMode.Maximum; cordic.Config[XilinxCordic.EFunctionalSelection.SinAndCos].PipeliningMode = XilinxCordic.EPipeliningMode.Maximum; cordic.Config[XilinxCordic.EFunctionalSelection.SinhAndCosh].PipeliningMode = XilinxCordic.EPipeliningMode.Maximum; cordic.Config[XilinxCordic.EFunctionalSelection.Sqrt].PipeliningMode = XilinxCordic.EPipeliningMode.Maximum; cordic.Config[XilinxCordic.EFunctionalSelection.Translate].PipeliningMode = XilinxCordic.EPipeliningMode.Maximum; cordic.Config[XilinxCordic.EFunctionalSelection.Arctan].RegisterInputs = true; cordic.Config[XilinxCordic.EFunctionalSelection.Arctanh].RegisterInputs = true; cordic.Config[XilinxCordic.EFunctionalSelection.Rotate].RegisterInputs = true; cordic.Config[XilinxCordic.EFunctionalSelection.SinAndCos].RegisterInputs = true; cordic.Config[XilinxCordic.EFunctionalSelection.SinhAndCosh].RegisterInputs = true; cordic.Config[XilinxCordic.EFunctionalSelection.Sqrt].RegisterInputs = true; cordic.Config[XilinxCordic.EFunctionalSelection.Translate].RegisterInputs = true; } } }