Explore the evolution of high-level synthesis in design methodologies, from assembly languages to modern HLS tools. Covering historical milestones, software and hardware domains, design automation, and HLS concepts.
01 / 62High-Level Synthesis: A Key Evolution in Design Automation
1 / 17
Télécharger la présentation
High-Level Synthesis: A Key Evolution in Design Automation
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation
Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement.Téléchargez la présentation en cliquant sur ce lien.Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.
F I N
Plus de contenu associé
Transcription de la présentation
High-Level Synthesis Université de Bretagne-SudLab-STICC Philippe COUSSYphilippe.coussy@univ-ubs.fr
A bit of History Design methodologies Synthesis and verification automation has always been key factors in the evolution of the design process allow to explore the design space efficiently and rapidly deliver correct by construction design High-level language Platform independent Provide flexibility and portability by hiding details of the computer architecture Follow the rules of human language with a grammar, a syntax and a semantic 3
Software domain Machine code (binary sequence) 50’s: concept of assembly language (and assembler) based on mnemonics Maurice V. Wilkes, Cambridge University Later: High-level languages and compilers 1951: First compiler (A-0 system) par Grace Hopper 1954-1957 Fortran: First high-level language FORmula TRANslator 1959 Cobol, 1964 Basic, 1972 C, 1983 C++…
Hardware domain 60’s: IC were done by hand designed, optimized and laid out 70’s: Gate-level simulation End of 70’s: Cycle-based simulation 80’s: Wide automation Place & route, schematic circuit capture, formal verification and static timing analysis Mid 80’s: Hardware description language 1986 Verilog, 1987 VHDL
Hardware domain 90’s: logic synthesis VHDL and Verilog synthesizable subsets Mid 90’s: High-level synthesis (First gen), Co-design, IP-core reuse… 2000 : Electronic System Level ESL System level language SystemC, SystemVerilog … Virtual prototyping, Transaction Level Modelling TLM ...
System-Level Design Language & virtual prototyping IP- & Plateform- based design Design automation Abstraction Co-design & HLS RTL Electronic System Level Design Transistors Circuit complexity Designer productivity Year 95 00 05 10
Typical HW design flow • Starting from a Register Transfer Level description, generate an IC layout RTL Logic synthesis Gate level netlist Layout GDSII
Typical HW design flow • Starting from a functional description, automatically generate an RTL architecture #define N 2 typedef int matrix[N][N]; int main(const matrix A, matrix C) { const matrice B ={{1, 2},{ 3, 4}}; int tmp; int i,j,k; for (i=0;i<N;i++) for (j=0;j<N;j++){ tmp = A[i][0]*B[0][j]; for (k=1;k<N - 1;k++) tmp = tmp + A[i][k] * B[k][j]; C[i][j] = tmp + A[i][N-1] * B[N-1][j]; } return 0; } Algorithm High-Level synthesis SystemC simulation models (CABA/TLM) RTL Logic synthesis Virtual prototyping Gate level netlist Layout GDSII
HLS chronology 80’s - early 90’s 1st generation Mainly from academia mid 90’s - early 00’s 2nd generation First commercial tools Not really a success… early 00’s – today 3rd generation The most mature More and more used
Commercial Progress • 2nd generation • 3rd generation Source: Gary Smith EDA statistics, 2008
High-level synthesis • Starting from a functional description, automatically generate an RTL architecture • Algorithmic description • No timing notion in the source code • Mainly oriented toward data dominated application • Highly processing algorithm like filters… • Initial description can be • “RTL oriented” • “Function oriented”
Synthesizable models • C for the synthesis: • No pointer • Statically unresolved • Arrays are allowed! • No standard function call • printf, scanf, fopen, malloc… • Function calls are allowed • Can be in-lined or not • Finite precision • Bit accurate integers, fixed point, signed, unsigned… • Based on SystemC or Mentor Graphics data types
Purely functional Example #1: a simple C code #define N 16 int main(int data_in, int *data_out) { static const int Coeffs [N] = {98,-39,-327,439,950,-2097,-1674,9883,9883,-1674,-2097,950,439,-327,-39,98}; int Values[N]; int temp; int sample,i,j; sample = data_in; temp = sample * Coeffs[N-1]; for(i = 1; i<=(N-1); i++){ temp += Values[i] * Coeffs[N-i-1]; } for(j=(N-1); j>=2; j-=1 ){ Values[j] = Values[j-1]; } Values[1] = sample; *data_out=temp; return 0; }
Purely functional example #2: bit accurate C++ code #include "ac_fixed.h" // From Mentor Graphics #define PORT_SIZE ac_fixed<16, 12, true, AC_RND,AC_SAT> // 16 bits, 12 bits after the point, quantization = rounding, overflow = saturation #define N 16 int main(PORT_SIZE data_in, PORT_SIZE &data_out) { static const PORT_SIZE Coeffs [N]={1.1, 1.5, 1.0, 1.0, 1.7, 1.8, 1.2, 1.0, 1.6, 1.0, 1.5, 1.1, 1.9, 1.3, 1.4, 1.7}; PORT_SIZE Values[N]; PORT_SIZE temp; PORT_SIZE sample; sample= data_in; temp = sample * Coeffs[N-1]; for(int i = 1; i<=(N-1); i++){ temp = Values [i] * Coeffs[N-i-1] + temp; } for(int j=(N-1); j>=2; j-=1 ){ Values[j] = Values [j-1]; } Values[1] = sample; *data_out=temp; return 0; }
High-level synthesis Starting from a functional description, automatically generate an RTL architecture Algorithmic description Behavioral description Notion of step / local timing constraints in the source code by using the wait statements of SystemC for example Can be used for both data and control dominated application Interface controller, DMA… Filters…
Behavioral description • Behavioral description • Notion of step / local timing constraints in the source code • by using the wait statements of SystemC for example ... void addmul() { sc_signal<sc_uint<32> > tmp1; tmp1 = 0; result = 0; wait(); while (1) { tmp1 = b * c; wait(); result = a + tmp1; wait(); } } ... Reset state First state Second state Cycle-by-cycle FSMD with reset state
High-level transformations • Loops • Loop pipelining, • loop unrolling • None, partially, completely • Loop merging • Loop tiling • … • Arrays • Arrays can be mapped on memory banks • Arrays can be synthesized as registers • Constant arrays can be synthesized as logic • … • Functions • Function calls can be in-lined • Function is synthesized as an operator • Sequential, pipelined, functional unit… • Single function instantiation • …
High-level synthesis • Constraints • Timing constraints: latency and/or throughput • Resource constraints: #Operators and/or #Registers and/or #Memory, #Slices... • Objectives • Minimization: area i.e. resources, latency, power consumption… • Maximization: throughput • Library of characterized operators
Synthesis steps • Compilation • Generates a formal modeling of the specification • Selection • Chooses the architecture of the operators • Allocation • Defines the number of operators for each selected type • Scheduling • Defines the execution date of each operation • Binding (or Assignment) • Defines which operator will execute a given operation • Defines which memory element will store a data • Architecture generation
Synthesis steps Compilation Generates a formal modeling of the specification Selection Chooses the architecture of the operators Allocation Defines the number of operators for each selected type Scheduling Defines the execution date of each operation Binding (or Assignment) Defines which operator will execute a given operation Defines which memory element will store a data
Synthesis steps Compilation Generates a formal modeling of the specification Selection Chooses the architecture of the operators Allocation Defines the number of operators for each selected type Scheduling Defines the execution date of each operation Binding (or Assignment) Defines which operator will execute a given operation Defines which memory element will store a data
Synthesis steps Compilation Generates a formal modeling of the specification Selection Chooses the architecture of the operators Allocation Defines the number of operators for each selected type Scheduling Defines the execution date of each operation Binding (or Assignment) Defines which operator will execute a given operation Defines which memory element will store a data
Synthesis steps Compilation Generates a formal modeling of the specification Selection Chooses the architecture of the operators Allocation Defines the number of operators for each selected type Scheduling Defines the execution date of each operation Binding (or Assignment) Defines which operator will execute a given operation Defines which memory element will store a data
Synthesis steps Compilation Selection Allocation Scheduling Binding (or Assignment) Architecture generation Writes out the RTL source code in the target language e.g. VHDL or SystemC
And a lot of additionalproblems to solve... Connection merging Bus sharing Register merging Register file... Chaining Several sequential operations in a cycle Multi-cycling One operation takes more than one clock cycle to execute Pipelining Pipelined Datapath, pipelined operator, pipelined controller ...
GAUT • An academic, free and open source HLS tool • Dedicated to DSP applications • Data-dominated algorithm • 1D, 2D Filters • Transforms (Fourrier, Hadamar, DCT…) • Channel Coding, source coding algorithms • Input: bit-accurate C/C++ algorithm • bit-accurate integer and fixed-point from Mentor Graphics
GAUT • Output: RTL Architecture • VHDL • SystemC • CABA: Cycle accurate and Bit accurate • TLM: Transaction level model • Compatible with both SocLib and MPARM virtual prototyping platforms • Automated Test-bench generation • Automated operators characterization
Controller Data Path GAUT: Constraints Synthesis constraints - Initiation Interval (Data average throughput ) - Clock frequency - FPGA/ASIC target technology - Memory architecture and mapping - I/O Timing diagram (scheduling + ports) - GALS/LIS Interface (FIFO protocol) Bit accurate Algorithm in bit-accurate C/C++ GAUT Clock enable GALS/LIS interface Memory Unit Req(i) Bus controller Data(i) Ack(i) Specific links & protocols Internal buses
GAUT: Operators characterization Script and logic Area : operator only (nb slice) O R R Propagation time : reg+tri+ope+reg O Mux R Mux R Database, interpolation…
GAUT: Synthesis steps Inititation Interval II Clock period I/O timing & memory constraints • Data Assginment (Left Edge,MWBM…) HDL coding style: FSMD, FSM+reg, FSM_ROM+reg…
GAUT: Interface synthesis • Performances of interfaces depend on data locality (data fetch penality, cache miss) • Interface can be: • Ping pong buffer (scratch-pad on Local Memory Bus) • FIFO (i.e. FSL Fast Simplex Link from Xilinx)