/// <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; } } }
/// <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; } } }