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
1. High Level Synthesis
using Esterel
High Level Synthesis
Linguaggi C-like per HLS
Esterel Language
Esterel random generator
sabato 3 settembre 2011
Alberto Minetti
1
Implementazione Linguaggi 2 @ DISI
Università degli Studi di Genova
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. HLS
Input:
• Specifiche comportamentali
• Design constraint
(costo, performance, consumo, pin-count, etc.)
• Rappresentazione dei componenti RTL disponibili
Output:
• Implementazione della struttura RTL
3
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 ridotta
4
5. Bug e testing
• Therac 25: lethal irradiations
• Dharan's 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 progetti
5 aerei
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, Verilog
6
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 access
7
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. 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
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 combinatorio
11
12. HardwareC Transmogrifier C
Genera design sequenziale
Xilinx XC4000 FPGA
Altera's 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 le
12
dipendenze delle variabili lo permettono
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; counter
13
produce una logica sequenziale
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 ciclo
Esempio Handel-C:
gli operatori ? e !
servono per ricever
e trasmettere dai
canali. Ispirato al
Celoxica’s CSP
14
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 comunicazione
16
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 è limitato
17
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 trovare
18
Grande responsabilità del programmatore
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 combinatorio
19
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 è inadeguato
20
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. 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 è difficile
22
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 classi
23
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 compiler
24
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 construtti
25
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 circuito
26
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 compilatore
27 - File ausiliari o inseriti tramite compilatore
28. “The next great hardware specification language
won’t closely resemble C.
Software languages work well only for software.”
Stephen A. Edwards, Columbia University, 2006
28
29. Esterel
Ideato da G. Berry negli anni ’80
Compilabile in una macchina a stati finiti
Reattivo
Concorrente
Sincrono
Deterministico
Sicuro
Scalabile
29
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 design
30
Eseguibile formale con vincoli e asserzioni
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. Automatic Light control Alarm detection
Air Con
toll
Radio
Panel
Engine control Sleep
detector
GPS
Gearbox
Airbags
Clutch
Radar
Direction ABS
Supension
32
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 necessario
33 Inoltre per i tick del clock possono essere usati segnali
34. Vantaggi Esterel
Modello del tempo dà regole precise
Concorrenza + Atomicità = Determinismo
Linguaggio a stati finiti
Esecuzione predicibile
Facile verifica formale
34
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 visibili
35
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 end
36 il compilatore vieta questi programmi
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 q
37 p e q sono istruzioni S è un segnale
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. 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 q
39 p e q sono istruzioni S è un segnale
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 = Preemption
40
41. Esempio State Machine
loop
/X
emit X ;
await A ;
A/
emit Y ;
AB/XY
present B then emit Z end
end
AB/XYZ
41
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 tipo
42
p e q sono istruzioni S è un valued-signal
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 pre
43 (Esterel v5.92)
44. Esempio semplice
emit A ; emit B ; pause ; emit C
A B C
IN:
OUT:
44
arranged from: Kishinevsky, Berry, Singh
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. 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 dei
46
segnali arranged from: Kishinevsky, Berry, Singh
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 intero
47 p e q sono istruzioni S è un segnale
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 iniziano
48 E nello stesso istante
arranged from: Kishinevsky, Berry, Singh
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. Esempio abort
abort
pause ; pause ; emit A
when B ;
emit C
A
C
B
C
B
C
50
arranged from: Kishinevsky, Berry, Singh
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 iniziale
51
arranged from: Kishinevsky, Berry, Singh
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
D
52
arranged from: Kishinevsky, Berry, Singh
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. 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. Altri statement
Declarazione di moduli/interfacce
Variabili e tipi custom
Chiamate procedure esterne
Funzioni matematiche
55
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 module
56
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 comunicazione
57
bidirezionale
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_ON
58 each RESET
arranged from: Roberto Passerone
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 segnali
59 A volte difficile da compilare
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 che
60 hanno come input alcuni bit del registro
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 zero
61
Progetto di Minetti Alberto, corso ASI @ DISI 2007/2008
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 in
65
end module linguaggio Esterel
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ù lento
66
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.html
67