PowerPoint PresentationOverviewHigh Level SynthesisScheduling with Given Resource AllocationThe Spark High-Level Synthesis FrameworkLimitations of high-level synthesis targeted by SparkGeneralized Code MotionsCharacteristics of ASIC DesignCharacteristics of Microprocessor BlocksSimplified Instruction Length DecoderSlide 11Behavioral Description in CSpeculate MaximallyInlining (Done Earlier)Unroll Loop CompletelyPropagate Constant: Loop IndexMaximally Parallelize/CompactFinal Design ArchitectureILD Tasks Achieved This SummerOther Interaction within SCLFuture PlansSlide 22Spark’s MethodologySlide 24Slide 25Scheduling Results on MPEG Prediction BlockScheduling Results on ADPCM EncoderScheduling ResultsInterconnect minimization by resource bindingResults after BindingResults after Binding: ADPCMSlide 32The Intermediate RepresentationIR ExamplesSlide 35Slide 36The Scheduler FrameworkSlide 38Extracting Parallelism with SpeculationReverse SpeculationEarly Condition ExecutionConditional SpeculationRDLP Example08/31/2001Copyright CECS & The Spark ProjectCenter for Embedded Computer SystemsUniversity of California, Irvinehttp://www.cecs.uci.edu/~sparkHigh-Level Synthesis of High Performance Microprocessor BlocksNick Savoiu Nikil DuttRajesh Gupta Alex NicolauSPARK High Level Synthesis SystemSupported by Semiconductor Research Corporation and IntelTimothy Kam Michael Kishinevsky Steve Haynal Abdallah TabbaraSumit GuptaStrategic CAD LabsDesign TechnologiesIntel Inc, Hillsborohttp://www.intel.com/research/scl2Copyright CECS & The Spark ProjectOverviewBrief backgroundSpark High-Level Synthesis FrameworkPrevious work in Spark frameworkHigh-level synthesis for Microprocessor blocksInstruction Length DecoderDesign BehaviorSteps involved in synthesisWork done this summer at SCLFuture Plans3Copyright CECS & The Spark ProjectHigh Level SynthesisFrom C to CDFG to Architecture4Copyright CECS & The Spark ProjectScheduling with Given Resource AllocationResource Constraints+ <5Copyright CECS & The Spark ProjectThe Spark High-Level Synthesis Framework6Copyright CECS & The Spark ProjectLimitations of high-level synthesis targeted by SparkQuality of synthesis results severely effected by complex control flowControl flow style effects the effectiveness of optimizationsNested ifs and loops not handled or handled poorlyPoor understanding (much less integration) of the interaction between source-level and fine grain “compiler” transformationsNo comprehensive synthesis frameworkFew and scattered optimizationsResults presented for schedulingEffects on logic synthesis not understoodSmall, synthetic benchmarks7Copyright CECS & The Spark ProjectGeneralized Code Motions+++If NodeT FConditional SpeculationReverse SpeculationSpeculationAcross HierarchicalBlocks8Copyright CECS & The Spark ProjectCharacteristics of ASIC DesignLarge designs such as MPEGMulti-cycle implementationResource constrainedImplications on transformations appliedExtraction of parallelism constrained by area limitationsSpeculation may lead to additional registersMore conservative with transformations such as loop unrolling9Copyright CECS & The Spark ProjectCharacteristics of Microprocessor BlocksSmaller DesignsSingle or Dual Cycle implementationHigh performanceExtract maximal parallelismArea constraints are more laxImplications on transformations appliedOperations within behavior are chained together with no latching All loops can be unrolled10Copyright CECS & The Spark ProjectSimplified Instruction Length DecoderByte 0Byte 1Byte 2Byte 3Length ContributionLength ContributionLength ContributionLength ContributionNeedNextByteNeedNextByteNeedNextByte11Copyright CECS & The Spark ProjectSimplified Instruction Length DecoderByte 0Byte 1Byte 2Byte 3Length ContributionLength ContributionLength ContributionLength ContributionNeedNextByteNeedNextByteNeedNextByteFirst Instruction12Copyright CECS & The Spark ProjectBehavioral Description in CNextStartByte = 0; for (i=0; i < n; i++) { len[i] = CalculateLength(i); if (i == NextStartByte) { NextStartByte = len[i]; Mark[i] = 1; } } /* for (i=0; i < n; i++) */int CalculateLength(i) { lc1 = LengthContribution(i); need1 = need_next_byte(i); if (need1) { lc2 = LengthContribution(i+1); need2 = need_next_byte(i+1); if (need2) { lc3 = LengthContribution(i+2); need3 = need_next_byte(i+2); if (need3) { lc4 = LengthContribution(i+3); Length = lc1 + lc2 + lc3 + lc4; } else Length = lc1 + lc2 + lc3; } else Length = lc1 + lc2; } else Length = lc1; return Length; }13Copyright CECS & The Spark ProjectControl LogicData CalculationSpeculate MaximallyNextStartByte = 0; for (i=0; i < n; i++) { len[i] = CalculateLength(i); if (i == NextStartByte) { NextStartByte = len[i]; Mark[i] = 1; } } /* for (i=0; i < n; i++) */int CalculateLength(i) { lc1 = LengthContribution(i); need1 = need_next_byte(i); lc2 = LengthContribution(i+1); need2 = need_next_byte(i+1); lc3 = LengthContribution(i+2); need3 = need_next_byte(i+2); lc4 = LengthContribution(i+3); TempLength1 = lc1 + lc2 + lc3 + lc4; TempLength2 = lc1 + lc2 + lc3; TempLength3 = lc1 + lc2; if (need1) { if (need2) { if (need3) { Length = TempLength1; } else Length = TempLength2; } else Length = TempLength3; } else Length = lc1; return Length; }14Copyright CECS & The Spark ProjectInlining (Done Earlier)Control LogicData CalculationNextStartByte = 0; for (i=0; i < n; i++) { Results(i) = DataCalulation(i, i+1, i+2, i+3); Length(i) = ControlLogic(Results(i)); len[i] = Length(i); if (i == NextStartByte) { NextStartByte = len[i]; Mark[i] = 1; } } /* for (i=0; i < n; i++) */int CalculateLength(i) { lc1 = LengthContribution(i); need1 = need_next_byte(i); lc2 = LengthContribution(i+1); need2 = need_next_byte(i+1); lc3 = LengthContribution(i+2); need3 = need_next_byte(i+2); lc4 = LengthContribution(i+3); TempLength1 = lc1 + lc2 + lc3 + lc4; TempLength2 = lc1 + lc2 + lc3; TempLength3 = lc1 + lc2; if (need1) { if (need2) { if (need3) { Length = TempLength1; } else Length = TempLength2; } else Length = TempLength3; } else Length = lc1; return Length; }15Copyright CECS & The Spark ProjectUnroll Loop CompletelyNextStartByte = 0; i=0; Results(i) = DataCalculation(i, i+1, i+2,
or
We will never post anything without your permission.
Don't have an account? Sign up