• Aucun résultat trouvé

LIBRAIRIE D’OP ´ ERATEURS 61 `a optimisation de la part des outils de synth`ese de Xilinx, qui respectent

Dans le document Compilation automatique pour les FPGAs (Page 64-68)

Synth`ese de DSL

3.3. LIBRAIRIE D’OP ´ ERATEURS 61 `a optimisation de la part des outils de synth`ese de Xilinx, qui respectent

scru-puleusement les directives du concepteur.

3.3.2.1 Constante

Const(hai, a)

La primitive Const g´en`ere un circuit d’arit´e nulle, un simple tableau de bits qui repr´esente la valeur constante a suivant la convention de la section3.2, sur |hai| bits sign´es si hai < 0, non-sign´es si hai > 0, en compl´ement `a deux.

Cette primitive a un coˆut nul en termes de logique – les constantes sont propag´ees et int´egr´ees au sein desLUTqui les utilisent.

3.3.2.2 Additionneur

Add(hoi, hai, hbi)(a, b)

La primitive Add g´en`ere un additionneur qui calcule la somme des op´erandes a et b bitsiz´es sur respectivement hai et hbi bits. Le r´esultat o est bitsiz´e sur hoi bits en sortie.

Unit´e de calcul Le calcul d’un bit de sortie se fait grˆace `a l’utilisation d’un additionneur complet qui additionne ses trois bits d’entr´ee a, b et c pour produire un bit de somme s et un bit de retenue r en sortie.

L’´equation qui le gouverne est bien connue : a + b + c = 2.s + r

Logique d´edi´ee La tranche Xilinx comporte des portes logiques sp´ecialis´ees dont l’utilisation permet d’´epauler uneLUTpour r´ealiser un additionneur com-plet. La logique additionnelle est constitu´ee d’un multiplexeur et d’une porte xor dispos´es aux cˆot´es de laLUT. La figure3.7illustre ce mode de configuration de la tranche, qui r´ealise ainsi le calcul du bit de sortie o[i] :

F1 = a[i] F2 = b[i] Fout = F1⊕ F2

Y = XORCY(Fout, CIN) COUT = MUXCY(Fout, CIN, F2)

o[i] = Y

Cette logique additionnelle permet d’impl´ementer des additionneurs tr`es compacts – une seule LUT est consomm´ee par bit de sortie, quand une im-pl´ementation na¨ıve en demanderait deux.

0 1 0 1 XORCY

G

in

p

u

ts

G

D Q YQ Y CIN COUT MUXCY D Q X DX

F

F

in

p

u

ts

XORCY MUXCY

LUT

LUT

Fig.3.7 – Logique d’additionneur sp´ecialis´ee pour le Virtex II

Routage d´edi´e Par ailleurs, le chemin qui propage la retenue sortante COUT vers le signal CIN de l’additionneur complet suivant est un “chemin de retenue rapide” selon la terminologie Xilinx. Il s’agit d’une ressource de routage d´edi´ee qui n’est coup´ee par aucun pips, et qui permet par cons´equent des d´elais de propagation tr`es courts.

Le chemin de retenue d´edi´e permet de r´ealiser des additionneurs extrˆeme-ment rapides – en d´epit d’une impl´eextrˆeme-mentation na¨ıve avec chemin critique li-n´eaire en fonction du nombre de bits de sortie |hoi|. Il n’a jamais, dans aucun des circuits pr´esent´es au chapitre 5, ´et´e n´ecessaire d’utiliser des impl´ementa-tions plus complexes des additionneurs, dont le chemin critique serait th´eo-riquement meilleur, mais qui ne sont pertinentes que pour l’addition de tr`es grands nombres.

3.3.2.3 Moins unaire

M inus(hoi, hai)(a)

La primitive M inus g´en`ere un moins unaire qui calcule l’oppos´e de son op´erande a bitsiz´e sur hai bits. Le r´esultat o est bitsiz´e sur hoi bits en sortie.

Le circuit de n´egation utilise la relation suivante en arithm´etique de compl´e-ment `a deux :

3.3. LIBRAIRIE D’OP ´ERATEURS 63 et s’appuie sur l’additionneur complet pour r´ealiser la fonction, grˆace `a une configuration un peu diff´erente de laLUT:

F1 = b[i] Fout = ¬ F1

Y = XORCY(Fout, CIN) COUT = MUXCY(Fout, CIN, F2)

o[i] = Y

L’incr´ement de 1 est r´ealis´e par exemple en injectant une retenue entrante initiale dans le circuit.

3.3.2.4 Soustracteur

Sub(hoi, hai, hbi)(a, b)

La primitive Sub g´en`ere un soustracteur qui calcule la diff´erence des op´e-randes a et b bitsiz´es sur respectivement hai et hbi bits. Le r´esultat o est bitsiz´e sur hoi bits en sortie.

Sa r´ealisation s’appuie sur la formule : a − b = a + ¬b + 1

L’additionneur complet est l´eg`erement modifi´e – le second op´erande est ni´e – et une retenue entrante initiale est inject´ee sur le chemin de retenue rapide pour r´ealiser l’incr´ement.

F1 = a[i] F2 = b[i] Fout = F1⊕¬ F2

Y = XORCY(Fout, CIN) COUT = MUXCY(Fout, CIN, F1)

o[i] = Y 3.3.2.5 Additionneur-soustracteur

AddSub(hoi, hai, hbi)(s, a, b)

La primitive AddSub g´en`ere un additionneur/soustracteur qui calcule la dif-f´erence ou la somme des deux op´erandes a et b bitsiz´es sur respectivement hai et hbi bits, en fonction du bit de d´ecision s : si s est nul, la somme est calcul´ee, si s vaut 1, la diff´erence est calcul´ee. Le r´esultat o est bitsiz´e sur hoi bits en sortie. Les paragraphes pr´ec´edents ont mis en ´evidence comment calculer une somme ou une diff´erence. Il est ais´e de rendre le circuit plus souple en ajoutant dans l’additionneur complet le bit de d´ecision s :

F1 = a[i] F2 = b[i] F3 = s

Fout = (F3 ∧ (F1⊕¬ F2)) ∨ (¬ F3 ∧ (F1⊕ F2)) Y = XORCY(Fout, CIN)

COUT = MUXCY(Fout, CIN, F1) o[i] = Y

Par ailleurs la retenue entrante initiale n’est autre que s : ainsi le circuit r´ealise au choix la fonction d’addition (s = 0) ou de soustraction (s = 1). 3.3.2.6 Comparateur

CompareLt(hai, hbi)(a, b)

La primitive AddSub g´en`ere un comparateur qui calcule un bit r´esultat de la comparaison a < b : si l’assertion est v´erifi´ee, alors le bit de sortie o est positionn´e `a un ; si au contraire b ≤ a alors o = 0.

Le comparateur s’appuie simplement sur la relation : a < b ⇐⇒ a − b < 0

et calcule le signe de la diff´erence de ses deux op´erandes grˆace `a un circuit de soustraction. Il b´en´eficie ainsi de la compacit´e et de la performance li´ees `a l’utilisation du chemin de retenue rapide.

3.3.2.7 Egalit´´ e 0 1

F

in

p

u

ts

0 MUXCY COUT CIN

F

LUT

Fig.3.8 – Conjonction rapide par le chemin de retenue du Virtex II

3.3. LIBRAIRIE D’OP ´ERATEURS 65

Dans le document Compilation automatique pour les FPGAs (Page 64-68)