High Level Synthesis Using Esterel

665 views

Published on

Very little workshop on HLS:
Mention of Synthesizing hardware using high level language, in particular C-like languages. Analysis of existent old language since 1980 to 2000: Cones, HardwareC, Transmogrifier C, SystemC, C2Verilog, Handel-C. Open problems using C-like languages (taken from Stephen Edwards' "The challenges of synthesizing Hardware from C-like languages").

Hardware design and synthesis using Esterel, reactive and synchronous language, ideal to describe a *behavioural* structure of hardware concurrent real-time controller and to test formal correctness. Easiness in creation of VHDL, Verilog, SystemC, Finite State Automata, dataflow design, and implementation on ASIC or FPGA or RePIC (processor architecture supporting direct esterel execution).

Example of a Preudo-Random Bit Sequence using Esterel versus the implementation using OrCAD software

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
665
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

High Level Synthesis Using Esterel

  1. 1. High Level Synthesis using Esterel High Level Synthesis Linguaggi C-like per HLS Esterel Language Esterel random generator sabato 3 settembre 2011 Alberto Minetti1 Implementazione Linguaggi 2 @ DISI Università degli Studi di Genova
  2. 2. Definition: High Level Synthesis HLS generates register-transfer level design from behavioral specifications, in an automatic manner. E’ un processo automatico che interpreta una descrizione comportamentale di algoritmo e crea l’hardware che implementa tale comportamento Non è l’esecuzione sequenziale da un processore (fetch-decode-execute)2
  3. 3. HLS Input: • Specifiche comportamentali • Design constraint (costo, performance, consumo, pin-count, etc.) • Rappresentazione dei componenti RTL disponibili Output: • Implementazione della struttura RTL3
  4. 4. Vantaggi con HLS Vantaggi del software ad alto livello Velocità di sviluppo Testing a livello di algoritmo Simulazione dei risultati Vantaggi dell’hardware sintetizzato Performance di esecuzione Economia rispetto a processore Dimensione ridotta4
  5. 5. Bug e testing • Therac 25: lethal irradiations • Dharans Patriot - Ariane V • Mars explorers • High-end automobile problems • Pentium, SMP cpu networks • VHDL nasce come testing tool Partizionamento del tempo impiegato nelle fasi di sviluppo per progetti aerei Partizionamento del budget per le fasi di sviluppo per progetti5 aerei
  6. 6. High Level Synthesis Figura del soft-hardware codesigner Dove finisce il software e comincia l’hardware? Colli di bottiglia sw sviluppati in hw Interfaccia verso l’utente sviluppata in sw Riduzione della distanza tra sw e hw Software Hardware Programmatore Hw designer Specifica comportamentale Design strutturale Linguaggi ad alto livello Hardware description language Linguaggi C-like VHDL, Verilog6
  7. 7. The Altera® Nios® II C2H Compiler is a coprocessor generation tool that converts performance-critical ANSI C functions into hardware accelerator modules with direct memory access7
  8. 8. Linguaggi High Level Pos Language Ratings 1 Java 18% 2 C 16% 3 C++ 9% 4 C# 7,54% 5 PHP 6,51% 6 Objective-C 5,01% Python Classifica dei 7 4,58% (Visual) Basic linguaggi più 8 4,50% 9 Perl 2,23% popolari 10 Ruby 1,42% (Maggio 2011) 11 JavaScript 1,39% 12 Lua 1,10% 13 Delphi 1,07% 14 Assembly 1,04% Classifica dei 15 Lisp 0,95% linguaggi più 16 Ada 0,75% popolari 17 Pascal 0,71% (Maggio 2011) 18 Transact-SQL 0,70% 19 Scheme 0,58% 20 RPG (OS/400) 0,50%8
  9. 9. Descrizione hardware con C e derivati La semantica del C combacia con il set di istruzioni dei processori general-purpose Vantaggi: adatto a programmazione high-level, facilita i compilatori => Popolarità Svantaggi: Concorrenza limitata e impegnativa (thread) Comunicazione inadeguata (shared memory) Tipi lontani dall’hardware (pointer e array)9 Completa carenza di temporizzazione
  10. 10. C-like languages (1980-2000)10
  11. 11. Stroud’s Cones, 1980 Subset delle istruzioni del C Circuiti solo combinatori Una singola funzione diventa un circuito Loop unrolled Array come bitvector Esempio Cones: la funzione ritorna il numero di 1 nel vettore di 5 bit. La funzione verrà trasformata in un circuito combinatorio11
  12. 12. HardwareC Transmogrifier C Genera design sequenziale Xilinx XC4000 FPGA Alteras FPGA Flex 8000 gcc su Solaris 2.4 (1995) #pragma intbits 8 main() { int lights, count; outputport(lights, 60, 59, 58, 57, 66, 65, 62, 61); count = 0; while(1) { count = count + 1; lights = ~count; }} Esempio HardwareC: gli statement tra < e > sono eseguiti in parallelo (esplicito); gli statement tra { e } sono parallelizzabili se le12 dipendenze delle variabili lo permettono
  13. 13. SystemC, 2000 Dialetto del C++ Simulazione semplice Usa meccanismo gerarchico delle classi C++ Simile a Verilog e VHDL Esempio SystemC: decoder produce una logica combinatoria; counter13 produce una logica sequenziale
  14. 14. C2Verilog 2001 Handel-C Pieno supporto ANSI C: Esteso al parallelismo • Pointer Nuovi costrutti Occam-like • Ricorsione Astrazione temporale: • Allocazione dinamica Ogni statement durano un cicloEsempio Handel-C: gli operatori ? e !servono per ricever e trasmettere dai canali. Ispirato al Celoxica’s CSP14
  15. 15. C-like languages (1980-2000)15
  16. 16. Principali problemi con i linguaggi C-like  Concorrenza/Parallelismo  Distinzione del parallelismo  Approcci del compiler alla concorrenza  Timing  Types  Comunicazione  Problemi con i pointer  Costo della comunicazione  Approcci alla comunicazione16
  17. 17. Concorrenza Software: Modello di esecuzione sequenziale Memory-based derivato dalla Turing Machine Software concorrenti: Molti processori = costo elevato e overhead Standard? Shared memory o message passing Riconoscimento automatico delle parti parallele da parte del compilatore è limitato17
  18. 18. Parallelizzazione Instruction-level parallelism: Gruppi di istruzioni simultanei Limitato finché non si aggiunge hardware Pipelining: Overlap di alcune istruzioni Bene per signal-processing, non in generale Process-level parallelism: Thread multipli controllati dal SO (Posix) o dal ling. (Java) Necessario evitare dipendenze Automaticamente impossibile da trovare18 Grande responsabilità del programmatore
  19. 19. Approcci per la concorrenza Utilizzando due meccanismi: A. Fornire i costrutti espliciti al programmatore 1. SystemC fornisce parallelismo process-level 2. HardwareC e Handel-C invece statement-level Il programmatore deve cambiare il modo di pensare Thread POSIX ≠ parallelismo statement-level B. Il compilatore cerca la concorrenza implicita Compito difficile per un compilatore Esempio: Cones appiattisce (flat) un’intera funzione (loop compresi) e trasforma tutto in un circuito combinatorio19
  20. 20. Timing C non specifica la durata delle istruzioni: Semplifica la scrittura di codice Nessun vincolo da rispettare per il compiler Performance target dell’hardware essenziali: Nel software un processo lento annoia ma mancando un vincolo temporale il sistema fallisce Soprattutto nel caso di sistemi real-time o event-driven Modello best-effort del C è inadeguato20
  21. 21. Dove mettere i cicli di clock? for (i = 0 ; i < 8 ; i++) { a[i] = c[i]; C non specifica quanti b[i] = d[i] || f[i]; cicli impiega l’esecuzione } Cones fa tutto in uno: è combinatorio Transmogrifier-C ne fa 8: una per iterazione Handel-C ne fa 25: una per assegnamento Gli altri permettono all’utente di specificarne il numero esplicitamente nel linguaggio o attraverso un tool di supporto (HardwareC)21
  22. 22. Transmogrifier C :ogni loop in un ciclo di clock Handel-C: ogni assegnamento in un ciclo Transmogrifier C e Handel-C sono molto chiari ma raggiungere determinati vincoli è difficile22
  23. 23. Tipi standard Hardware bit versus software bytes A. C puro e dimensionare attraverso tool GUI di C2Verilog, preprocessore di Transmogrifier C B. Aggiungere tipi hardware al linguaggio Boolean (HardwareC), Integer con dimensioni specificate (Handel-C) C. C++ type system default bool e tipi custom grazie alle classi23
  24. 24. Pointer, shared memory e concorrenza Indirizzi di memoria calcolati solo a runtime Aritmetica dei puntatori: grande flessibilità sw Aliasing: valore accesso da multiple sorgenti Memorie globali condivise più lente delle locali Analisi del comportamento del programma Approssimazioni => memory split Difficile per il compiler24
  25. 25. Pointer: approcci A. Ignorano il modello di memoria del C HardwareC e Transmogrifier C Non supportano array e puntatori Cones: tutte le variabili e gli array sono fili B. Preservano il modella di memoria del C C2Verilog mette tutto in regioni di memoria Handel-C e SystemC usano speciali construtti25
  26. 26. Comunicazione Nel software ogni bit comunicato ha un costo Hw comunicare il primo bit costa (un filo in più) ma poi la comunicazione avviene senza fatica Placement & Routing: Difficile trovare automaticamente un posizionamento efficiente sul circuito26
  27. 27. Metadata Diverse implementazioni hw per un’istruzione C Esempio: Adder hardware: Ripple carry Carry look-ahead Carry save Non realistico fare decidere al compilatore - Rimpiazzare gli operatori C con gate logici - Overloading del C++ (solo basato sui tipi dei parametri) - Annotazioni per il compilatore27 - File ausiliari o inseriti tramite compilatore
  28. 28. “The next great hardware specification language won’t closely resemble C. Software languages work well only for software.” Stephen A. Edwards, Columbia University, 200628
  29. 29. Esterel  Ideato da G. Berry negli anni ’80  Compilabile in una macchina a stati finiti  Reattivo  Concorrente  Sincrono  Deterministico  Sicuro  Scalabile29
  30. 30. Esterel  Riscoperto nel 2000 per HLS  Adatto a sistemi di event-driven e real-time  Columbia Esterel Compiler source C, Verilog, BLIF, .sm file  Esterel Studio / SCADE Suite ANSI C, C++,ADA, SystemC, VHDL, Verilog, SM Dataflow design30 Eseguibile formale con vincoli e asserzioni
  31. 31. Utilizzo di Esterel Orologi da polso, eventi: clock e bottoni Componenti per processori, cache controller Controllers, protocolli di comunicazione Areonautica, controllo carburante, carrello…31
  32. 32. Automatic Light control Alarm detection Air Con toll Radio Panel Engine control Sleep detector GPS Gearbox Airbags Clutch Radar Direction ABS Supension32
  33. 33. Sincronia di Esterel Astrazione di sincronia: Nessun ritardo tout-tin=0 Una istruzione richiede zero o più istanti Reazioni istantanee atomiche Macchina infinitamente veloce Nella realtà… Clock maggiore del tempo necessario33 Inoltre per i tick del clock possono essere usati segnali
  34. 34. Vantaggi Esterel  Modello del tempo dà regole precise  Concorrenza + Atomicità = Determinismo  Linguaggio a stati finiti  Esecuzione predicibile  Facile verifica formale34
  35. 35. Segnali di Esterel o presente o assente (default) Tipi di segnali: - Pure: assente o presente (bit info) - Full: assente o presente e con valore - Value-only: solo valore Valued Signal: valore accessibile con operatore ? Input, output, in-out, locali Broadcast su tutto il programma allo stesso tempo logico e sono immediatamente visibili35
  36. 36. Coerenza dei segnali Un segnale è assente o presente in un istante present S then nothing else emit S end Impossibile Più comportamenti possibili present S then emit S else nothing end36 il compilatore vieta questi programmi
  37. 37. Statement primitivi nothing non fa niente, instantanea pause si ferma un istante p;q sequenza: terminato p si esegue q termina al termine di q p||q parallelo: p e q sono in parallelo termina quando entrambe terminano loop p end loop ciclo: non termina abort p when S do q end sospende p quando S ed esegue q37 p e q sono istruzioni S è un segnale
  38. 38. Statement primitivi: trap (appr.) trap T in p end trap dichiara l’eccezione T locale a p exit T solleva T trap T in p handle T do q end trap cattura un’eccezione o più eccezioni (case)38 p e q sono istruzioni T è un segnale
  39. 39. Statement primitivi per segnali signal S in p end signal dichiara un nuovo segnale S locale in p emit S emette S nell’istante e termina present S then p else q end present se S è presente esegue p altrimenti q39 p e q sono istruzioni S è un segnale
  40. 40. ABRO example Specifica: classico esempio di un controller che emette O dopo aver ricevuto entrambi A e B. Ricomincia da capo alla ricezione di R. module ABRO: input A, B, R; output O; loop [await A || await B]; emit O each R Box = Stati Frecce = Transizioni Nomi = Segnali Gerarchia = Preemption40
  41. 41. Esempio State Machine loop /X emit X ; await A ; A/ emit Y ; AB/XY present B then emit Z end end AB/XYZ41
  42. 42. Valued signal (appr.) output S := expr : TYPE; emit S(expr) emette S con valore di expr ?S valore di S che è sempre presente pre(S) valore di S prima di questo istante Si possono emettere più segnali nello stesso istante a patto di specificare una funzione di combinazione expr è un’espressione TYPE è un tipo42 p e q sono istruzioni S è un valued-signal
  43. 43. Valued signal (appr.) module COUNT: module COUNT: input I; input I; output Count: integer; output Count := 0 : integer; var Count := 0 : integer in every I do every I do emit Count(pre(?Count)+1); Count := Count + 1; end every emit Count(Count); end module end every end var end module Esempio di utilizzo dei segnali valued: a destra con pre43 (Esterel v5.92)
  44. 44. Esempio semplice emit A ; emit B ; pause ; emit C A B C IN: OUT:44 arranged from: Kishinevsky, Berry, Singh
  45. 45. Esempio loop loop emit A ; emit B ; pause ; emit C end loop A B C IN: OUT:45 arranged from: Kishinevsky, Berry, Singh
  46. 46. Esempio present emit A ; emit B ; pause ; loop present C then emit D else Q end if; present E then emit F end if; pause end loop C C E E A D Q D B F F Il compilatore controlla a compiletime la correttezza dei46 segnali arranged from: Kishinevsky, Berry, Singh
  47. 47. Statement derivati halt loop pause end loop sustain S loop emit S; pause end loop await S abort halt when S loop p each S end loop ciclo iterativo ad S every S do p end every iterazione ad ogni S await # S ripetizione abort p when # S ripetizione loop p each # S ripetizione # è un intero47 p e q sono istruzioni S è un segnale
  48. 48. Esempio parallelo [ await A ; emit C || await B ; emit D ] ; emit E A B C D E Il blocco parallelo B A termina quando i rami paralleli terminano D C E A B C D Le istruzioni parallele iniziano48 E nello stesso istante arranged from: Kishinevsky, Berry, Singh
  49. 49. Statement derivati (appr.) do p upto S p termina solo quando c’è S Quanti istanti durano le istruzioni? ZERO per emit, present Uno o Più per await, abort, ecc… immediate fa durare ZERO o Più49 p e q sono istruzioni S è un segnale
  50. 50. Esempio abort abort pause ; pause ; emit A when B ; emit C A C B C B C50 arranged from: Kishinevsky, Berry, Singh
  51. 51. Esempio await immediate await A ; emit B await immediate A ; emit B A A A B B A A A B B Default non immediato Meccanismo della macchina a stati con stato iniziale51 arranged from: Kishinevsky, Berry, Singh
  52. 52. Esempio weak abort abort weak abort pause; emit A ; pause; emit A ; pause; emit B pause; emit B when C; when C; emit D emit D C C A D D C C B A D A D52 arranged from: Kishinevsky, Berry, Singh
  53. 53. Reazione: quando? Quando reagire ad A? abort p when A weak abort p when A next abort p weak abort p when immediate A when immediate A now now next Quando terminare p?53 arranged from: Kishinevsky, Berry, Singh
  54. 54. Scalabilità Moduli Riutilizzo Definizione di tipi generici run GENERIC_SPEED [ type integer/T; constant 0/Initial, 1/Increment; function +/Add; signal Centimeter/A, Second/B; ]54
  55. 55. Altri statement  Declarazione di moduli/interfacce  Variabili e tipi custom  Chiamate procedure esterne  Funzioni matematiche55
  56. 56. Relazioni vincolari Esclusione tra due segnali (#) Implicazione di due segnali (=>) module SPEED: input Centimeter, Second; relation Centimeter # Second; ouput Speed: integer; loop var Distance := 0 : integer in abort every Centimeter do Distance := Distance + 1; end every when Second do emit Speed(Distance) end abort end var end loop end module56
  57. 57. Comunicazione concorrente every RESET do Riparti ogni RESET loop await A; Attendi A emit B; present C then emit D end; pause end || Concorrenza loop present B then emit C end; pause end Stesso ciclo: end comunicazione57 bidirezionale
  58. 58. Seat-belt Se il guidatore accende la macchina, e non allaccia la cintura in 5 secondi Allora l’allarme suona per 5 secondi, o finchè non allaccia la cintura, o finchè non spegne la macchina input KEY_ON , END_TIMER , KEY_OFF, BELT_ON , RESET; output START_TIMER , BEEP; loop abort present KEY_ON then emit START_TIMER(5); await END_TIMER; emit START_TIMER(5); abort sustain BEEP when END_TIMER; end when KEY_OFF or BELT_ON58 each RESET arranged from: Roberto Passerone
  59. 59. In conclusione: Esterel… Vantaggi: Modello sincrono => preciso controllo Concorrenza => utile per controller Determinismo: Test formali e simulazione software Potente IDE di sviluppo: Esterel Studio 100% Synthesizable C,C++,SystemC,VHDL,Verilog,StateMach. Equazioni Lustre style Svantaggi: Stati finiti limitano la flessibilità A volte difficile avere coerenza nei segnali59 A volte difficile da compilare
  60. 60. Progetto PRBG (appr.) Descrizione del progetto:  Generatore di bit pseudo-casuali  Algoritmo deterministico Pseudo-random bit sequence  Sequenza casuale ripetuta Schema logico:  Registro clocked a scorrimento destro  Feedback di una o più porte logiche XOR che60 hanno come input alcuni bit del registro
  61. 61. Pseudo Random Bit Generator Per ottenere lunghezza massima è necessario usare determinati bit da mette in ingresso allo XOR XOR di più bit vista anche come somma di bit modulo 2 Problema: seed con tutti i bit a zero61 Progetto di Minetti Alberto, corso ASI @ DISI 2007/2008
  62. 62. Circuito di controllo per seed a zero62
  63. 63. Shift register63 multiplexer
  64. 64. Logica XOR64
  65. 65. module PseudoRandomBitSequence: constant N : unsigned = 8; type Word : bool[N]; input GET_RANDOM; input SEED : Word; output RANDOM : Word; var REGISTER : Word, FIRST : bool in always %loop present SEED then if ?SEED <> 0b0000_0000 then REGISTER := ?SEED; else REGISTER := 0b1000_0000; end if end weak abort REGISTER >> 1; %right shift FIRST := REGISTER[7] xor REGISTER[5] xor REGISTER[4] xor REGISTER[3]; REGISTER := mcat(REGISTER[0..6],FIRST); when GET_RANDOM do emit RANDOM(REGISTER) end abort Pseudo Random end always %each tick end var Bit Generator in65 end module linguaggio Esterel
  66. 66. Non solo FPGA Reconfigurable computing: - Flessibilità - High performance - Modificare il datapath a runtime Elliptic Curve cryptography con chiave di 270 bits XC2V6000 FPGA 66MHz: 0.36ms sw dual-Xeon 2.6GHz: 196.71ms 540 volte più veloce con clock 40 volte più lento66
  67. 67. Bibliografia The Challenges of Synthesizing Hardware from C-Like Languages Stephen A. Edwards, Columbia University High-Level Synthesis: Past, Present, and Future Grant Martin & Gary Smith The Esterel synchronous programming language The Constructive Semantics of Pure Esterel The Esterel v5 Language Primer Gérard Berry http://www-sop.inria.fr/marelle/Laurent.Thery/lsp/esterel.html Programming the Lego Mindstorms using Lustre and Esterel M. Richard, C. Mauras - 1999, Hyères (France). http://www.esterel-technologies.com/products/scade-suite/ http://www.cs.columbia.edu/~sedwards/cec/ Esterel v7 Reference Manual Version v7 30 – initial IEEE standardization http://www-sop.inria.fr/meije/esterel/esterel-eng.html http://www-sop.inria.fr/esterel.org/files/Html/News/News.htm http://www-sop.inria.fr/meije/esterel/scdata.html67

×