Title: Reprsentation matrielle des oprateurs du langage C pour la synthse haut niveau
1Représentation matérielle des opérateurs du
langage C pour la synthèse haut niveau
- François Donnet, Ivan Augé
2Plan
- Contexte de la synthèse de haut niveau
- Présentation de loutil Ugh
- Exemple
- Interface de lentrée C
- Dimensionnement des opérateurs matériels
- Donner une taille minimale aux opérateurs
- Respecter les comportements du C
- Conclusion
3Loutil UGH
- User Guided High level synthesis
- UGH est un outil de synthèse de comportemental
haut niveau pour des coprocesseurs de type flôt
de contrôle. - Les entrées sont
- une description comportementale C avec des
primitives de communication blocantes - un chemin de données simplifié
- Les sorties sont
- un modèle VHDL synthétisable
- un modèle C de simulation cycle précis pour CASS
4Entrées de Ugh
data-path simplifié
Comportemental C
include ltughc.hgt ugh_inChannel32 PortA,
PortB ugh_outChannel32 PortC uint32 a,b int
ugh_main() while (1) ugh_read( PortA, a
) ugh_read( PortB, b ) while (a !
b) if (a lt b) b b - a else a a -
b ugh_write( PortC, a )
Exemple sur le Pgcd
5Sorties de Ugh
data-path complet
Machine détats
PortA
PortC
PortB
Exemple sur le Pgcd
6Interface du coprocesseur
7Accès aux ports
entity HCF is port ( CK in bit PortA
in bit_vector(31 downto 0) PortA_READ out
bit PortA_ROK in bit PortB in
bit_vector(31 downto 0) PortB_READ out
bit PortB_ROK in bit PortC out
bit_vector(31 downto 0) PortC_WRITE out
bit PortC_WOK int bit) end HCF
include ltughc.hgt ugh_inChannel32 PortA,
PortB ugh_outChannel32 PortC uint32 a,b int
ugh_main() while (1) ugh_read( PortA, a
) ugh_read( PortB, b ) while (a !
b) if (a lt b) b b - a else a a -
b ugh_write( PortC, a )
- include ltughc.hgt
- ugh_inChannel32 PortA, PortB
- ugh_outChannel32 PortC
- Type de port d entrée de taille xx
- ugh_inChannelxx
- Type de port de sortie de taille xx
- ugh_outChannelxx
- include ltughc.hgt
- ugh_inChannel32 PortA, PortB
- ugh_outChannel32 PortC
- uint32 a,b
- Types de variable signée et non-signée de taille
xx - intxx
- uintxx
Fonctions daccès bloquants aux ports ugh_read(
Port, dest ) ugh_write( Port, source ) int
ugh_main() while (1) ugh_read( PortA, a
) ugh_read( PortB, b ) while (a !
b) if (a lt b) b b - a else a a -
b ugh_write( PortC, a )
8Taille des opérateurs
9Minimisation de la taille
0 .. 0 a(15 downto 0) signé ou
non-signé
a(15) .. a(15) a(15 downto 0) signé
- Limitation aux bits informatifs
a(15 downto 0) signé
a(15 downto 0) non-signé
- Extension de lopérande si besoin
a(15) .. a(15) a(15 downto 0) signé
0 .. 0 a(15 downto 0) non-signé
10Importance du signe de lexpression
- Le signe dune expression dépend du signe de ses
opérandes et du type dopérateur - lopérateur bit à bit donne un résultat
non-signé si lune ou lautre des opérandes est
non signée. - lopérateur bit à bit donne un résultat
non-signé si et seulement si les deux opérandes
sont non-signées. - Si les opérandes ne sont pas du même type
- Conversion de lopérande non-signée en signée
- a( 15 downto 0 ) non-signé 0 a(15 downto
0 ) signé
0.0 b(15 downto 0 )
a(15) .. a(15) a(15 downto 0)
a(15 downto 0) b(15 downto 0 )
0.0
non-signé
a(15) .. a(15) a(15 downto 0)
0.0 b(15 downto 0 )
signe
a(15 downto 0) b(15 downto 0 )
signé
11Les opérateurs arithmétiques
ab a-b
-a
Opérandes non-signées
Opérandes signées
12Les comparateurs
altb i.e signe de a-b
altb i.e signe de !( b - a )
Opérandes non-signées
Opérandes signées
13Divergence du C sur certains opérateurs
Les normes de conversion du C influencent le
résultat
Mais...
14Conclusion
- UGH a été testé sur un décodeur MPEG2 VLD
- avec une description comportementale C et un
chemin de données - production dun module de simulaton CASS
- Passage de lentrée C en SystemC
- changement de linterface types des ports
- changement des fonctions daccés
- éventuellement, changement des types des
variables internes
15Environnement système du coprocesseur
R3000
Processor
ICache
DCache
Bus
PI-BUS
Controller
unit
M/S Interface
RAM
Coprocessor
16UGH Structure
Depend de loutil
de synthèse
Cell
Library
Draft
Behavioral
Data-Path
VHDL
Synthesis
Timing
Characterization
Annotations
CK
VHDL
Data-Path
UGH-FGS
UGH-CGS
VHDL
FSM/C
VCC
TSS
VHDL
Simulation
Whitebox C
FSM/F
Model
Model
17Exemple sur le Pgcd
Entrée C de Ugh
- entity HCF is
- port (
- CK in bit
- PortA in bit_vector(31 downto 0)
- PortA_READ out bit
- PortA_ROK in bit
- PortB in bit_vector(31 downto 0)
- PortB_READ out bit
- PortB_ROK in bit
- PortC out bit_vector(31 downto 0)
- PortC_WRITE out bit
- PortC_WOK int bit)
- end HCF
include ltughc.hgt ugh_inChannel32 PortA,
PortB ugh_outChannel32 PortC uint32 a,b int
ugh_main() while (1) ugh_read( PortA, a
) ugh_read( PortB, b ) while (a !
b) if (a lt b) b b - a else a a -
b ugh_write( PortC, a )
18Exemple sur le Pgcd
Entrée du chemin de données simplifié
model Hcf(sofifo PortC sififo PortA, PortB
) DFF a, b SUB subst subst.A a.Q,
b.Q subst.B a.Q, b.Q a.D subst.S,
PortA b.D subst.S, PortB PortC subst.S
19Variables internes
- Types de variable signée et non-signée de taille
xx - intxx
- uintxx
- Tableau RAM, ROM ou RF
- si plusieurs dimensions, agrégation en une seule
dimension - intxx yy définit yy mots de xx bits
20Effets de bord
- Dans une expression
- a i a i i i 1
- a ( i b ) i b a i
- Dans un test
- if ( a i )
- if ( a (i b) )
- Dans une expression conditionnelle
- a ( i b ) ?
- a ? i b
Interdits
Interdits
21Branchement cablé
- if ( test wired ) a b
- else a c
fsm
fsm
1
0
22Implémentation des opérateurs du C
- Opérateurs C directement transposables en
matériel
23Inégalités
a lt b
a - b lt 0 perte des flags de carry et
doverflow
- a - b
- a et b sont signés OV xor NG
- a et b sont non signés CY
- sinon règles de conversion du C
OV
NG
A
NG
CY
a
B
b
24Opérateurs booléens du C
- Ramener à des opérateurs bit-à-bit
- a b
- ( a ! 0 ) ( b ! 0 )
- Perte de la préemptivité pour les opérateurs
binaires - - Evaluation systématique de la deuxième
opérande - Simultanéité des évaluations des deux
opérandes
Opérandes du sur 32 bits
Opérandes du sur 1 bit
25Importance du signe
31
0
Résultat signé
a
(int20) ( (int16) a )
int16
a
0
15
15
0
31
0
Résultat non-signé
a
a
0x0000FFFF a
(int20) ( 0x0000FFFF a )
FFFF
int20
a
0000 a
15
0
0
15
19
26Sélections de bits
Le Cast
31
0
15
0
a
b
int16
( int20 ) b
int20
a
b(15) b
0
15
0
15
19
Le Mask
31
0
31
0
a
a
0x0000FFFF a
FFFF
FFFF
0000
a
a
0
16
31
0
15
27Les opérateurs logiques
a
n
n
a
28Les décaleurs
29Taille du résultat
30Contraintes de taille sur les entrées
31Dépassement de capacité en C