INTRODUCTION A L ARCHITECTURE DES...

Post on 12-Jul-2020

0 views 0 download

Transcript of INTRODUCTION A L ARCHITECTURE DES...

INTRODUCTIONAL’ARCHITECTUREDESORDINATEURS

Jean-ChristopheBUISSON

septembre2017

2

3

ChapitreI. PrincipesgénérauxI.1. Organisationgénéraled’unordinateur

I.1.1. LemodèledeVonNeumannLaplupartdesordinateursontl’organisationgénéraledelaFigureI-1.

FigureI-1.Organisationgénéraled’unordinateur;lesflèchessontdescheminsdedonnées.

Cetteorganisationestditede’Von-Neumann’,carelleressemblebeaucoupàlamachineconçueparJohnVonNeumannsurlamachineIASpeuaprèsladeuxièmeguerremondiale.Ellesupposeetimpliqueuncertainnombredepropriétéscaractéristiquesdesordinateursactuels:

Lamémoireestuncomposantcentral;c’estuntableaudemotsdetaillefixeOnvoitsurleschémaquelamémoirecentraleestaudépartetàl’arrivéedel’exécutiond’unprogramme.C’estellequicontientleprogrammeàexécuteretlesdonnéesinitiales;c’estdansellequeserontstockéslesrésultatsintermédiairesoufinaux.

C’estuntableaudemotsbinairesdetaillefixe.Chaquemotestrepéréparunnombreappeléadresse,etlesprogrammesferontréférenceauxdonnéesetauxinstructionsenmémoireparleursadresses.

LeprogrammeexécutéestdanslamémoirecentraleMêmesileprogrammequ’exécuteunordinateureststockéinitialementsurundisquedur,cen’estpasavantd’avoirétécopiéenmémoirecentrale,quesonexécutionpeutcommencer.

Unprogrammequ’exécuteunordinateurestcomposéd’instructionssousformedemotsmémoire.Lelangageutilisépourcoderlesinstructionsenmotsbinairesestappelélangagemachine,c’estleseulquecomprenneleprocesseur.Latailledesinstructionsvariebeaucoupselonletypedesprocesseurs.Parfoistouteslesinstructionsontlamêmetaille,égaleàunouplusieursmotsmémoire;parfoisellesontdestaillesvariablesselonlacomplexitédel’instruction.

4

Leprocesseurestlecoordonnateurdel’exécutionLeprocesseurcontrôlel’exécutiondesprogrammes,enorganisantlechargementdesinstructionsetledétaildeleurexécution;c’estaussiluiquieffectuetouslescalculs,notammentsurlesnombresentiers.Cesdeuxfonctionssontassociéesdanslamêmeunitécarlecontrôledel’exécutionnécessitesouventdescalculsentiers,lorsqueparexempleilfautfaireunesommepourdéterminerl’adressedel’instructionsuivante.

Leprocesseurabesoindegarderlatraced’uncertainnombred’informationspendantl’exécutiondesinstructions:l’adressedel’instructionencoursparexemple,oulerésultatdeladernièreopérationarithmétique.Ilutilisepourceladesregistres,quisontdesmotsmémoirefixes,àaccèstrèsrapide.

LeprocesseurnedialoguepasdirectementaveclespériphériquesOnvoitsurlafigurequeleprocesseurdialogueavecdescontrôleursdepériphériquesetnonaveclespériphériqueseux-mêmes.Parexempleunprocesseurn’aaucuneconsciencedel’existenced’undisquedur;ildialogueavecuncontrôleurdedisque,àl’aided’instructionsgénériquesd’entrées/sorties.

I.1.2. OrganisationenbusLesflèchesentrelescomposantsdelaFigureI-1étaientàprendredansunsensfonctionnel;siellesdevaientreprésentereffectivementlescheminsparlesquelstransitentlesdonnées,lefonctionnementseraittrèsinefficace.Enpratique,lesdonnéescirculententrelesdifférentssous-systèmesd’unordinateursurdesbus,sortesd’autoroutes,etdescircuitsspécialisésjouentlerôled’échangeursauxcarrefoursdecesbus,defaçonàpermettredestransfertssimultanésdanscertainescirconstances.LaFigureI-2montreuneorganisationtypiqued’unsystèmedetypecompatiblePC.

FigureI-2.Architecturegénéraledesbusd’unordinateurcompatiblePC.

Uncircuitappelénorth-bridgerègleleséchangesàtrèsgrandevitesse,notammententreleprocesseuretlamémoirecentrale.IlexploitedefaçonsynchronelebusFSB(frontsidebus),encoreappelébussystème,dontlavitesseesttrèscorréléeàlapuissancegénéraledel’ensemble.Un

5

secondcircuitappelésouth-bridgeeffectuequantàluideséchangesmoinsrapidesavecdespériphériquesSATA,réseau,etc.

LaFigureI-3montreunephotodecartemèretypique,avecl’emplacementphysiquedesdifférentsbus.Lamémoireetlenorthbridgesontplacéstrèsprèsduprocesseur,carilssontsurlesbuslesplusrapides.Lenorth-bridgeestéquipéd’unradiateuràcausedel’intensitédutravaildetransfertqu’ilréalise.

FigureI-3.Cartemèretypique.Lesbusrouges(FSBetmémoire),trèsrapides,sontgérésparlenorthbridge;lesbusverts(PCI,SATA,etc.),pluslents,sontgérésparlesouthbridge.

I.2. BitsetsignauxélectriquesL’informationeststockéeetvéhiculéedansunordinateur,logiquementsousformedechiffresbinairesoubits(binarydigit),etphysiquementsousformedesignauxélectriques.

Lalogiquebinaireestutiliséeparcequ’ilestplusfaciledeconstruiredessystèmesélectriquespossédantdeuxétatsstables,etparcequ’onamaintenantbeaucoupderésultatsmathématiquesenalgèbredeBoole,maisdesimplémentationssurdessystèmespossédantplusdedeuxétatsstablessontenvisageables.

Cesdeuxétatssontnotés’0’et’1’;ilscorrespondentleplussouventauxdeuxtensionsélectriques0vet+Vccrespectivement,Vccvalantexactement+5vpourdescircuitsutilisantlatechnologieTTL,etunevaleurcompriseentre2vet15venvironentechnologieCMOS(desvaleursdeVcc=3.3v,2.5vet1.8vétantutiliséedeplusenplussouvent).Pourtenircomptedufaitquecessignauxélectriquesvontêtredéforméslorsdestransmissions,desplagesdevaleurspluslargesontétéaffectéesàcesétats.Parexemple,entechnologieTTL,ellessontreprésentéesFigureI-4.Ilfautnoterquecesassignationssontlégèrementdifférentesselonqu’unetensionestconsidéréeenentréeouensortied’uncircuit.

6

FigureI-4.Assignationdestensionsélectriquesauxvaleurslogiques(a)enentréedecircuit,(b)ensortiedecircuit(technologieTTL).

Lescircuitslogiquesquisontutiliséspourcombinerettransmettrelessignauxélectriqueslogiquesontdescaractéristiquesnonlinéairesquiontentreautrespourfonctionderemettreenformeunsignaldéforméparlebruit.OnvoitFigureI-5uneporte’non’quiinverselebitd’entrée,toutenproduisantunsignaldesortiedemeilleurequalitéquelesignald’entrée.

FigureI-5.Remiseenformed’unsignalaprèstraverséed’uneporte’non’.

Lessignauxpourrontdonctraverserunnombrequelconqued’étagesdecircuitslogiquessansquelesdéformationsinitialesnesoientamplifiées.

OnnoterasurlaFigureI-5laprésenced’untempsdepropagationtpHL(HLindiquant:dehautversbas)quicorrespondàladuréequemetlecircuitpourcalculersasortieaprèsquesesentréessesoientmodifiées.Cestempsdepropagationsecumulentlorsdelatraverséedeplusieursétages,etc’estfinalementeuxquilimiterontlavitessedefonctionnementmaximaled’uncircuit.

I.3. TechnologiesdefabricationdescircuitsintégrésLespremiersordinateursontétéconstruitsdurantladeuxièmeguerremondialeavecdestubescathodiques(des’lampes’)commedispositifdecommutation.En1947,leslaboratoiresBellinvententlepremiertransistor,quivatrèsvitesupplanterlalampeetapporterunfacteurde

7

réductiondetailleimportant.Maislavéritablerévolutionn’interviendraqu’avecl’inventiondescircuitsintégrésVLSIdanslesannées1970,quiamènerontàlaréalisationdespremiersmicroprocesseurs.Ungrandnombredetechnologiesdefabricationdecircuitsintégrésexistent,quisedistinguentpardesqualitésdifférentesentermesdevitessedepropagation,densitéd’intégration,consommationetdissipationthermique.Onvaébaucherrapidementdanscettesectionlestroisfamilleslesplusconnues,enterminantparcellequiestactuellementlaplusrépandueetlaplussignificative,lafamilleCMOS.

TechnologieTTLLatechnologieTTLétaitlatechnologiestandardutiliséeàpartirdesannées1960pourlaréalisationdetouslestypesd’ordinateurs.Elles’alimentetypiquementen+5V,auneconsommationmodérée,estrobusteetadesrèglesd’interfacesimples.Unetrèsgrandefamilledecircuitsspécialisés,lafamille7400,estdisponiblesousformedecircuitsenboîtierDIL,etfournitdesmodulestoutprêts:portes,bascules,compteurs,etc.Lescapacitésd’intégrationdecircuitsTTLsontfaibles,etonnepeutguèremettreplusdequelquesmilliersdeportesTTLsurunepucedecircuitintégré.Onl’utiliseencoreaujourd’huipourdespetitesréalisations,notammentdansl’interfaçageavecd’autrescircuits.

TechnologieECLLatechnologieECLestcaractériséeparsatrèsgranderapidité,maisaussiparuneconsommationdecourantélevée.Elleestdeplusassezdifficileàutiliser,notammentenraisondel’emploidetensionsd’alimentationnégatives.Elleestutiliséedansdespetitesréalisationsoùlavitesseestcritique,maiscertainsexpertsprévoientundéveloppementdelatechnologieECLavecl’utilisationdenouveauxtypesdesemi-conducteurs.

TechnologieCMOSC’estlatechnologiereineactuelle.LatechnologieCMOSad’abordétédéveloppéeetvenduecommeunealternativeauTTL,pluslentemaisavecuneconsommationréduite.Commeparailleursellepeututiliserdestensionsd’alimentationfaibles(jusqu’à1V),elleaimmédiatementététrèsutiliséeparlesfabricantsdemontresdigitales,pourquilavitessedetraitementimportaitpeuparrapportàlaconsommation.Maisonaprogressivementréaliséquesaplusgrandequalitéétaitsontauxd’intégrationtrèsélevé;deplus,destaillesdetransistorsdeplusenpluspetitesontamenéesavecellesdestempsdecommutationdeplusenplusfaibles.C’estlatechnologieCMOSquiestutiliséeactuellementpourlafabricationdetouslesprocesseursetmicrocontrôleursdumarché,ainsiquepourtouteslesmémoiresstatiquesetlesmémoiresflash.Parailleurs,uncircuitCMOSneconsommesignificativementducourantquelorsdescommutationsdestransistors.Cettepropriétéaétéàl’originedecircuitsquiconsommentmoinsdecourantqueleuréquivalentTTL,quieuxenconsommentaureposetlorsdescommutations.Néanmoins,aufuretàmesurequ’ondiminueleurtensiond’alimentation,lescourantsdefuitedestransistorsCMOSdeviennentdeplusenplusprochesdescourantsdecommutation,etparconséquentlaconsommationdecescircuitsaureposn’estplusaussinégligeablequ’auparavant.

8

9

ChapitreII. ÉlémentsdelogiquecombinatoireII.1. Circuitscombinatoires

En1854,GeorgesBoolepubliasonouvrageséminalsurunealgèbremanipulantdesinformationsfactuellesvraiesoufausses.SontravailaétéredécouvertetdéveloppésouslaformequenousconnaissonsmaintenantparShannon.LenomdeBooleestentrédanslevocabulairecourant,avecl’adjectifbooléenquidésignecequinepeutprendrequedeuxvaleursdistinctes’vrai’ou’faux’.

Circuitscombinatoires:définitionUncircuitcombinatoireestunmoduletelquel’étatdessortiesnedépendquedel’étatdesentrées.L’étatdessortiesdoitêtreévaluéunefoisquelesentréessontstables,etaprèsavoirattenduuntempssuffisantàlapropagationdessignaux.Oncomprendintuitivementquelescircuitscombinatoirescorrespondentàdescircuitssansétatinterne:faceàlamêmesituation(lesmêmesentrées),ilsproduisenttoujourslesmêmesrésultats(lesmêmessorties).Unmoduled’additionenestunbonexemple:ilaenentréeslessignauxAetBàadditionner,ainsiqu’uneretenueCINd’unétageprécédent;ilfournitensortielasommeSetuneretenueCOUTpourunétagesuivant:

FigureII-1.Unadditionneurestuncircuitcombinatoire

Siuncircuitcombinatoireestcomposélui-mêmedesous-circuitscombinatoires,ondémontrequeladéfinitiondebaseestéquivalenteaufaitquecessous-circuitssontconnectésentreeuxsansrebouclages.Plusprécisément,sionrangelessignauxdegaucheàdroite,enmettanttoutafaitàgauchelesentrées,puisdanschaquecolonnelessous-circuitsquiontdesentréesparmilessignauxproduitsdanslacolonnedegauche,oudecolonnesplusàgauche,alorslecircuitestcombinatoiresietseulements’iln’yaaucuneliaisonquireboucle’enarrière’,enallantd’unétageàunétageplusàgauche(FigureII-2).L’implicationdanslesens’sansrebouclage’à’combinatoire’estfacileàdémontrer:silesentréesàgauchesontstables,alorsparconstructiontouteslessortiesdessous-circuitsdelapremièrecolonnesontstables,etnedépendentquedecesentrées.Donclessortiesdessous-circuitsdelacolonne2sontstables,etnedépendentquedesentrées.Ondémontreainsiparrécurrencequelessortiesdescircuitsdechaquecolonnesontstablesetnedépendentquedesvaleursdesentrées,jusqu’auxsortiesfinales.Lecircuitestdonccombinatoire.

10

FigureII-2.Circuitcombinatoire:lessignauxinternesetlessortiesnerebouclentpasenarrière.

LesfiguresII.3etII.4montrentdesexemplesdecircuitscombinatoiresetnoncombinatoiresformésàpartirdeporteslogiques,dontonverradanslessous-sectionssuivantesqu’ellessontelles-mêmescombinatoires.

FigureII-3.Exemplesdecircuitscombinatoires:lesélémentsinternessonteux-mêmescombinatoires,etiln’yapasde

rebouclageinterne.

FigureII-4.Exemplesdecircuitsnoncombinatoires:ilyadesrebouclagesinternes.

II.2. TablesdevéritéUnedescontributionsessentiellesdeBooleestlatabledevérité,quipermetdecapturerlesrelationslogiquesentrelesentréesetlessortiesd’uncircuitcombinatoiresousuneformetabulaire.Considéronsparexempleuncircuitinconnupossédant2entréesAetBetunesortieS.Nouspouvonsanalyserexhaustivementcecircuitenluiprésentantles22=4jeuxd’entréesdifférents,etenmesurantàchaquefoisl’étatdelasortie.Letoutestconsignédansuntableauqu’onappelletabledevéritéducircuit(figureII.5).

11

A B S0 0 00 1 01 0 01 1 1

FigureII-5.Uncircuitàdeuxentréesetunesortie,etsatabledevérité.

Ici,onreconnaîtl’opérationlogiqueET:Svaut1sietseulementsiAetBvalent1.Laconstructiond’unetabledevéritéestbiensûrgénéralisableàunnombrequelconquend’entréesetunnombremdesorties.Elleposséderaalors2nlignes,cequin’estpraticablequepourunevaleurdenassezpetite.

II.3. AlgèbreetopérateursdebasePlutôtquededécrireenextensionlarelationentrelesentréesetunesortie,onpeutladécrireenintentionàl’aided’uneformuledecalculutilisantseulementtroisopérateursbooléens:NON,ET,OU.

NONNON(NOTenanglais)estunopérateurunaire,quiinversesonargument.Onnoteragénéralement𝑁𝑂𝑇(𝐴) = 𝐴;etsatabledevéritéest:

𝐴 𝐴0 1

1 0

FigureII-6.TabledevéritéduNON,etdessindelaportecorrespondante.

Onabiensûr:𝐴 = 𝐴.

ETET(ANDenanglais)estunopérateurà2entréesouplus,dontlasortievaut1sietseulementsitoutessesentréesvalent1.Onlenotealgébriquementcommeunproduit,c’estàdireS=A×BouS=AB.Latabledevéritéd’unETàdeuxentrées,etledessinusueldelaportecorrespondantesontreprésentésfigureII.7.

𝐴 𝐵 𝐴. 𝐵0 0 00 1 01 0 01 1 1

FigureII-7.TabledevéritéduET,etsymboledelaportecorrespondante.

Deparsadéfinition,leETestassociatif:𝐴. 𝐵. 𝐶 = (𝐴. 𝐵). 𝐶 = 𝐴. (𝐵. 𝐶).Ilestégalementidempotent:𝐴. 𝐴 = 𝐴.

OUOU(ORenanglais)estunopérateurà2entréesouplus,dontlasortievaut1sietseulementsiunedesesentréesvaut1.Onlenotealgébriquementcommeunesomme,c’estàdireS=A+B.Latable

12

devéritéd’unOUàdeuxentrées,etledessinusueldelaportecorrespondantesontreprésentésfigureII.8.

𝐴 𝐵 𝐴 + 𝐵0 0 00 1 11 0 11 1 1

FigureII-8.TabledevéritéduOU,etsymboledelaportecorrespondante.

Deparsadéfinition,leOUestassociatif:𝐴 + 𝐵 + 𝐶 = (𝐴 + 𝐵) + 𝐶 = 𝐴 + (𝐵 + 𝐶).Ilestégalementidempotent:𝐴 + 𝐴 = 𝐴.

DelatabledevéritéàlaformulealgébriqueOnpeutautomatiquementécrirelaformulealgébriqued’unefonctionbooléennecombinatoiredèslorsqu’onasatabledevérité.Ilsuffitdeconsidérerseulementleslignesquidonnentunesortieégaleà1,d’écrirelemintermcorrespondant,quicodesousformed’unETlacombinaisondecesentrées.Parexemple,lemintermassociéauvecteur(A,B,C)=(1,0,1)est:𝐴𝐵𝐶.LaformulealgébriquequidécrittoutelafonctionestleOUdetouscesminterms.Considéronsparexemplelatabledevéritédelafonctionmajoritéà3entrées,quivaut1lorsqu’unemajoritédesesentrées(2ou3)vaut1(figureII.9).

A B C S0 0 0 00 0 1 00 1 0 00 1 1 11 0 0 01 0 1 11 1 0 11 1 1 1

FigureII-9.Tabledevéritédelafonctionmajoritéà3entrées.

Latabledevéritécontient4lignesavecunesortieSà1,cequidonne:𝑆 = 𝐴𝐵𝐶 + 𝐴𝐵𝐶 + 𝐴𝐵𝐶 + 𝐴𝐵𝐶Cetteformuleestsimplifiable,commeonleverradansunesectionultérieure.Est-onsûrquelaformuleobtenueparcetteméthodeestcorrecte?Pourunecombinaisondesentréesquidoitdonnerunesortieà1,laformulepossèdelemintermcorrespondant,etdonneaussiunevaleurde1.Pourtouteslesautrescombinaisonsd’entrées,latabledonneunesortieà0,etlaformuleaussi,puisqu’aucunmintermn’estprésentquicorrespondeàcescombinaisons.Laformuledonnedonctoujourslemêmerésultatquelatable.Corollairement,celadémontrelerésultatfondamentalsuivant:

N’importequellefonctioncombinatoires’exprimesousformed’unesommedeminterms.

13

Théorèmesdel’algèbredeBooleLetableaudelafigureII.10résumelesprincipauxthéorèmesetpropriétésdel’algèbredeBoole.Onpeutlesdémontrerdefaçonalgébrique,ouenutilisantdestablesdevérité.LesthéorèmesdeDeMorganpermettentdetransformerlesETenOUetvice-versa.Lecouple(ET,NON)oulecouple(OU,NON)suffisentdoncàexprimern’importequelleformulealgébriquecombinatoire.Lethéorèmed’absorption𝐴 + 𝐴𝐵 = 𝐴montrequ’untermeplusspécifiquedisparaîtauprofitd’untermemoinsspécifique.Parexempledansl’équation…+ 𝐴𝐵 + 𝐴𝐵𝐶 + …,leterme𝐴𝐵𝐶s’effaceauprofitde𝐴𝐵,moinsspécifiqueetquidoncl’inclut.

relation relation duale Propriété𝐴𝐵 = 𝐵𝐴 𝐴 + 𝐵 = 𝐵 + 𝐴 Commutativité

𝐴. 𝐵 + 𝐶 = 𝐴. 𝐵 + 𝐴. 𝐶 𝐴 + 𝐵. 𝐶 = 𝐴 + 𝐵 . (𝐴 + 𝐶) Distributivité

1. 𝐴 = 𝐴 0 + 𝐴 = 𝐴 Identité

𝐴. 𝐴 = 0 𝐴 + 𝐴 = 1 Complément

0. 𝐴 = 0 1 + 𝐴 = 1 Zéroetun

𝐴. 𝐴 = 𝐴 𝐴 + 𝐴 = 𝐴 Idempotence

𝐴. 𝐵. 𝐶 = 𝐴. 𝐵 . 𝐶 𝐴 + (𝐵 + 𝐶) = (𝐴 + 𝐵) + 𝐶 Associativité

𝐴 = 𝐴 Involution

𝐴𝐵 = 𝐴 + 𝐵 𝐴 + 𝐵 = 𝐴. 𝐵 ThéorèmesdeDeMorgan

𝐴. (𝐴 + 𝐵) = 𝐴 𝐴 + 𝐴. 𝐵 = 𝐴 Théorèmesd’absorption

𝐴 + 𝐴. 𝐵 = 𝐴 + 𝐵 𝐴. 𝐴 + 𝐵 = 𝐴. 𝐵 Théorèmesd’absorption

FigureII-10.Propriétésetthéorèmesdel’algèbredeBoole.

II.4. Autresporteslogiques

NANDNAND(=NOTAND)estunopérateurà2entréesouplus,dontlasortievaut0sietseulementsitoutessesentréesvalent1.Onlenote↑,etonadoncàdeuxentrées:𝐴�𝐵 = 𝐴. 𝐵Latabledevéritéd’unNANDàdeuxentrées,etledessinusueldelaportecorrespondantesontreprésentésfigureII.11.

𝐴 𝐵 𝐴�𝐵0 0 10 1 11 0 11 1 0

FigureII-11.TabledevéritéduNAND,etsymboledelaportecorrespondante.

LeNANDestunopérateurditcomplet,c’estàdirequ’ilpermetàluiseuld’exprimern’importequellefonctioncombinatoire.IlpermeteneffetdeformerunNOT,enreliantsesdeuxentrées:𝐴 = 𝐴�𝐵LesthéorèmesdeDeMorganassurentdoncqu’ilpeutexprimerunETetunOU,etdoncn’importequelleexpressioncombinatoire.

14

NORNOR(=NOTOR)estunopérateurà2entréesouplus,dontlasortievaut0sietseulementaumoinsunedesesentrées1.Onlenote↓,etonadoncàdeuxentrées:𝐴�𝐵 = A + B.Latabledevéritéd’unNORàdeuxentrées,etledessinusueldelaportecorrespondantesontreprésentésfigureII.12.

𝐴 𝐵 𝐴�𝐵0 0 10 1 01 0 01 1 0

FigureII-12.TabledevéritéduNOR,etsymboledelaportecorrespondante.

CommeleNAND,leNORestégalementunopérateurcomplet.IlpermeteneffetdeformerunNOT,enreliantsesdeuxentrées::𝐴 = 𝐴�𝐵.LesthéorèmesdeDeMorganassurentdoncqu’ilpeutexprimerunETetunOU,etdoncn’importequelleexpressioncombinatoire.

XORXOR(=EXCLUSIVEOR)estunopérateurà2entréesouplus.Onpeutledéfinirdeplusieursfaçons;ladéfinitionquipermetleplusdirectementdedémontrersespropriétésestcellequiconsisteàenfaireundétecteurd’imparité:sasortievaut1sietseulementsiunnombreimpairdesesentréesestà1.Onlenote⊕;latabledevéritéd’unXORàdeuxentrées,etledessinusueldelaportecorrespondantesontreprésentésfigureII.13.

𝐴 𝐵 𝐴�𝐵0 0 00 1 11 0 11 1 0

FigureII-13.TabledevéritéduXOR,etsymboledelaportecorrespondante.

Onvoitàpartirdelatableque𝐴�𝐵 = 𝐴𝐵 + 𝐴𝐵.Lorsqu’iladeuxentrées,ilméritesonnomdeOUexclusifpuisquesasortienevaut1quesil’unedesesentréesvaut1,maisseulementune.Ilpossèdeplusieursautrespropriétésintéressantes:

• lorsqu’oninverseuneentréequelconqued’unXOR,sasorties’inverse.C’estévidentpuisquecelaincrémenteoudécrémentelenombred’entréesà1,etdoncinverselaparité.

• leXORàdeuxentréesestuninverseurcommandé.Eneffet,enexaminantlatabledevéritéduXOR(figureII.13),onconstatequelorsqueAvaut0,lasortieSreproduitl’entréeB,etlorsqueAvaut1,lasortieSreproduitl’inversedel’entréeB.L’entréeApeutêtrealorsvuecommeunecommanded’inversiondanslepassagedeBversS.Cettefonctionseratrèsutilelorsqu’onsouhaiteracorrigeruneerreurdétectéesuruneligne,parexemple.

• leXORestunopérateurd’additionarithmétique.Cettepropriétéestvalablequelquesoitlenombred’entréesduXOR.Biensûr,iln’estquestioniciquedubitdepoidsfaibledurésultat(ajouterntermesde1bitproduitunrésultatsurlog2(n)bits).Eteneffet,sionregardelatabledevéritéduXORàdeuxentrées,onconstatequelasortieestbienlasommearithmétiquedesdeuxentrées.Biensûràladernièreligne,lerésultatàuneretenuequeleXORàluiseulnepeutpasproduire.

Onpeutdémontrerquecerésultatestgénéralparunesimplerécurrence.Sieneffetonsupposeque𝑋𝑂𝑅(𝑒6, 𝑒8, … , 𝑒9)fournitlebitdepoidsfaibledelasomme𝑠9 = 𝑒6 + 𝑒8 + ⋯+𝑒9alors:𝑋𝑂𝑅 𝑒6, 𝑒8, … , 𝑒9, 𝑒9<6 = 𝑠9si𝑒9<6 = 0;𝑠9si𝑒9<6 = 1

= 𝑠9avecinversioncommandéepar𝑒9<6= 𝑠9�𝑒9<6

15

• XORestunopérateurassociatif.Sadéfinitionmême,entantqu’indicateurd’imparité,assurecettepropriété.Quellequesoitlafaçondegrouperlestermes,lecalculdonneralemêmerésultat.CerésultatpermetdeconstruireavecunminimumdecircuitsdesXORsà3entréesouplus,encascadantdesXORsà2entrées.

Formulealgébriqued’unXORàplusde2entréesConsidéronslecalculduXORdetroisvariablesA,BetC.Onsaitquesonexpressionalgébriquepeutsemettresousformed’unesommedeminterms;onvadoncchercherparmitouslesmintermspossiblesceuxqu’ilfautincluredanslaformule,etceuxqu’ilfautrejeter.AveccestroisvariablesA,BetC,ilya8mintermspossibles:𝐴𝐵𝐶,𝐴𝐵𝐶,𝐴𝐵𝐶,…,𝐴𝐵𝐶nedoitpasêtreinclusdanslerésultat,puisqu’ildonne1pourlevecteur(0,0,0)quinecomportepasunnombreimpairde1.𝐴𝐵𝐶doitl’être,carildonne1pourlevecteur(0,0,1)quipossèdeunnombreimpair(1)de1.Larègleestsimple:ondoitinclureseulementlesmintermsquiontunnombreimpairdevariablesnonbarrées.PourleXORàtroisentrées,onpeutlefairedefaçonorganiséeenmettantd’abordles3mintermsayantunevariablenonbarrée,puislemintermayantles3variablesnonbarrées:

𝑋𝑂𝑅 𝐴, 𝐵, 𝐶 = 𝐴𝐵𝐶 + 𝐴𝐵𝐶 + 𝐴𝐵𝐶 + 𝐴𝐵𝐶Onpeutmontrerquecetteformulen’estpassimplifiableentantquesommedetermes.PourunXORà4entrées,oninclutles4mintermsayant1variablenonbarrée,puisles4mintermsayant3variablesnonbarrées:𝑋𝑂𝑅(𝐴, 𝐵, 𝐶, 𝐷) = 𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐶𝐷Pourunnombrequelconqued’entrées,onpeutmontrerquelerésultatcomportetoujourslamoitiédetouslesmintermspossibles,etquecettesommen’estjamaissimplifiableentantquesommedetermes.

LemultiplexeurLemultiplexeurestuneporteàtroisentrées,quijoueunrôled’aiguillage.Sondessinindiquebiencettefonction(figureII.14).

𝑆𝐸𝐿 𝑆0 𝐴1 𝐵

FigureII-14.Tabledevéritécondenséedumultiplexeur,etdessindelaportecorrespondante.

Lorsquelacommandedesélectionvaut0,l’aiguillageestducôtédeA,etSprendlavaleurdeA;lorsqu’ellevaut1,SprendlavaleurdeB.Algébriquement,onadonc:

𝑆 = 𝑆𝐸𝐿 · 𝐴 + 𝑆𝐸𝐿 · 𝐵Àpartirdelacompréhensiondurôled’aiguillagedumultiplexeur,ilestclairquesioninverselesdeuxentrées,lasortieserainverséeégalement:

𝑆 = 𝑆𝐸𝐿 · 𝐴 + 𝑆𝐸𝐿 · 𝐵Orcen’estpassifacileàétabliralgébriquement: 𝑆 = 𝑆𝐸𝐿 · 𝐴 + 𝑆𝐸𝐿 · 𝐵 = 𝑆𝐸𝐿 · 𝐴 · 𝑆𝐸𝐿 · 𝐵 𝑆 = (𝑆𝐸𝐿 + 𝐴) · (𝑆𝐸𝐿 + 𝐵) = 𝐴 · 𝑆𝐸𝐿 + 𝑆𝐸𝐿 · 𝐵 + 𝐴 · 𝐵Onauntermeentrop,𝐴 · 𝐵!Enfait,onpeutlefairedisparaîtreenécrivant𝐴 · 𝐵 = 𝐴 · 𝐵 ·𝑆𝐸𝐿 + 𝐴 · 𝐵 · 𝑆𝐸𝐿: 𝑆 = 𝐴 · 𝑆𝐸𝐿 + 𝑆𝐸𝐿 · 𝐵 + 𝐴 · 𝐵 · 𝑆𝐸𝐿 + 𝐴 · 𝐵 · 𝑆𝐸𝐿 𝑆 = 𝐴 · 𝑆𝐸𝐿(1 + 𝐵) + 𝑆𝐸𝐿 · 𝐵(1 + 𝐴) = 𝑆𝐸𝐿 · 𝐴 + 𝑆𝐸𝐿 · 𝐵Onaiciunexempleoùlacompréhensiond’unefonctionapermisdesedispenserdecalculsalgébriquesoudeméthodesdesimplification.

16

II.5. Méthodesdesimplificationdesfonctionscombinatoires

II.5.1. TablesdeKarnaughUnetabledeKarnaughestutiliséepourtrouvervisuellementlessimplificationsàfairesurunesommedetermes.Elleesttrèsfacileàutiliser,pourpeuqu’iln’yaitpasplusde4variablesenjeu.Audelà,ilvautmieuxemployerlaméthodedeQuine-McCluskeydécriteplusbas.ConsidéronsparexemplelafonctionayantlatabledevéritédelafigureII.17.

A B C D S0 0 0 0 00 0 0 1 10 0 1 0 10 0 1 1 10 1 0 0 00 1 0 1 10 1 1 0 00 1 1 1 11 0 0 0 01 0 0 1 11 0 1 0 01 0 1 1 11 1 0 0 11 1 0 1 11 1 1 0 11 1 1 1 1

FigureII-15.Tabledevéritéd’unefonctionàsimplifier

OnvareprésenterlesvaleursdeSdansuntableau4x4,chaquecasecorrespondantàundes16mintermspossiblesavec4variablesA,B,CetD(figureII.18).Onremarquerad’abordleslibellésdeslignesetdescolonnes,quiformentuncodedeGray:d’uneligneàl’autreoud’unecolonneàl’autre,iln’yaqu’unbitd’entréequichange.Latableauneformedecylindredanslesdeuxdirections,c’estàdirequelescolonnes’00’et’10’doiventêtreconsidéréescommecôteàcôte,toutcommeleslignes’00’et’10’.

FigureII-16.TabledeKarnaughreprésentantlatabledevérité.

Les11sorties’1’delatabledevéritéontétéreportéesdanslatabledeKarnaugh.Eneffectuantdesgroupesde’1’connexesde2,4ou8,onréaliseunesimplification(figureII-17).

17

FigureII-17.TabledeKarnaughaveclesregroupements.

Parexempleleregroupement𝐴𝐵𝐶correspondàlasimplification𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐶𝐷 = 𝐴𝐵𝐶(𝐷 +𝐷) = 𝐴𝐵𝐶.Demême,leregroupement𝐴𝐵correspondàlasimplificationdes4termes:𝐴𝐵𝐶𝐷 +𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐶𝐷 = 𝐴𝐵(𝐶𝐷 + 𝐶𝐷 + 𝐶𝐷 + 𝐶𝐷) = 𝐴𝐵.Onrepèrefacilementlerésultatenregardantleslibellésdeslignesetdescolonnesimpliquésdanslasimplification.Pourletermesimplifié𝐷parexemple,ilconcerneleslignes𝐶𝐷=01;11etlescolonnes𝐴𝐵=**;seul𝐷=1estconstant,ettouteslesautresvariablesdisparaissent.Finalementona:

𝑆 = 𝐷 + 𝐴𝐵 + 𝐴𝐵𝐶

UtilisationdescombinaisonsnonspécifiéesIlyadessituationsdanslesquellescertainescombinaisonsdesentréesneseproduisentjamais,qu’onpeutappelercombinaisonsinterditesoucombinaisonsnonspécifiées.Considéronsparexempleundécodeur7segments,quiconvertitunnombrebinairesur4bitsenunvecteurde7bitsquicommandeunafficheuràLedsdetype’calculette’(FigureII-18).

FigureII-18.Convertisseur7segmentspourafficheurdecalculette.

Laspécificationdececonvertisseurnousprécisequ’ilnefautconvertirqueleschiffresde0à9,c’estàdirelesvaleursduvecteur(𝐴, 𝐵, 𝐶, 𝐷)de(0,0,0,0)à(1,0,0,1).Ainsilefonctionnementducircuitn’estpasspécifiépourlesvaleursde(1,0,1,0)à(1,1,1,1),etonvaexploitercettelatitudepoursimplifierleséquations.Sionconsidèreparexemplelatabledevéritédusegmenta,ellecomporteainsi6lignespourlesquelleslavaleurdelasortien’estpasspécifiée,qu’onnote’*’(FigureII-19).

A B C D a0 0 0 0 10 0 0 1 00 0 1 0 10 0 1 1 10 1 0 0 00 1 0 1 10 1 1 0 10 1 1 1 11 0 0 0 11 0 0 1 1

18

1 0 1 0 *1 0 1 1 *1 1 0 0 *1 1 0 1 *1 1 1 0 *1 1 1 1 *

FigureII-19.Tabledevéritédusegmenta.

DanslatabledeKarnaughcorrespondante,les’*’peuventêtreinclusesdanslesregroupements(FigureII-20)cequiconduitàleurdonnerlavaleur’1’.Biensûronnedoitpaschercheràincluretoutesles’*’danslesregroupements:onchercheàincluretousles’1’,maisles’*’permettentdetrouverdesregroupementsplusgrands.Iciparexemple,ontrouvelerésultattrèssimple:

𝑎 = 𝐶 + 𝐴 + 𝐵𝐷 + 𝐵𝐷

FigureII-20.TabledeKarnaughdusegmenta,aveclescombinaisonsnonspécifiéesmarquéespardes’*’.Onpeutinclure

les’*’pourformerdesregroupementsplusgrands.

DétectionetcorrectiondesglitchesUnautreusagedestablesdeKarnaughestladétectiondesglitchs,c'est-à-diredeschangementstrèsbrefsdessignauxdesortied’unefonctioncombinatoirelorsdechangementsdesentrées.Considéronsparexemplelafonctionsuivante:

𝑆 = 𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐶𝐷OnconstruitdirectementlatabledeKarnaughassociéeàcettefonction,etontrouveimmédiatementdeuxregroupements(FigureII-21).

FigureII-21.TabledeKarnaughaveclesregroupements.Unglitchestpossibledanslepassagedeaàb,carlesdeux

regroupementssonttangentsàcetendroit.

L’équationsimplifiéeestalors:𝑆 = 𝐴𝐵 + 𝐴𝐶𝐷

Cetteéquationestplussimplequelapremière,maisellevasecomporterlégèrementdifféremmentlorsdecertainschangementsdevaleursdesentrées.Considéronsparexemplelechangementduvecteurd’entrées 𝐴, 𝐵, 𝐶, 𝐷 de 0,1,0,0 à 1,1,0,0 ,quicorrespondaupassagedeaàbsurlaFigureII-21.Danscecas,seul𝐴achangé,etlasortie𝑆devraitresterà1,aussibienpourl’équationinitialequepourl’équationsimplifiée.Orpourl’équationsimplifiée,leterme𝐴𝐵vapasserde0à1

19

tandisqueleterme𝐴𝐶𝐷vapasserde1à0;sicechangementsefaitexactementenmêmetemps,𝑆resteraà1,maissilepremiertermepasseà0légèrementavantqueledeuxièmenepasseà1,unlégerglitchsur𝑆apparaîtra(FigureII-22).

FigureII-22.Glitchsurl’équation𝑺 = 𝑨𝑩 +𝑨𝑪𝑫,lorsdupassagede(𝑨, 𝑩, 𝑪, 𝑫)de(𝟎, 𝟏, 𝟎, 𝟎)à(𝟏, 𝟏, 𝟎, 𝟎).

CeglitchétaitprévisiblevisuellementsurlatabledeKarnaugh,parlefaitdesdeuxregroupementsquisontadjacentssansserecouvrir.Onconstateégalementquec’estleseulchangementd’uneseulevariablequipeutconduireàuntelproblème.Lasolutionestderajouterunregroupementquivafairelaliaisonentrecesdeuxgroupes,envalant1pendanttoutelatransition(FigureII-23).Finalement,onobtientl’expressionsimplifiéesansglitch:

𝑆 = 𝐴𝐵 + 𝐴𝐶𝐷 + 𝐵𝐶𝐷

FigureII-23.Ajoutduterme𝑩𝑪𝑫pourmaintenir𝑺à1lorsdelatransitiondeaversb.Leglitchdisparaîtsurlesignaldesortie𝑺.

II.5.2. MéthodedeQuine-McCluskeyOnvamontrersonusageensimplifiantlafonctionà5variablessuivante:

𝑓 𝐴, 𝐵, 𝐶, 𝐷, 𝐸 = 𝐴𝐵𝐶𝐷𝐸 + 𝐴𝐵𝐶𝐷𝐸 + 𝐴𝐵𝐶𝐷𝐸 + 𝐴𝐵𝐶𝐷𝐸 + 𝐴𝐵𝐶𝐷𝐸 + 𝐴𝐵𝐶𝐷𝐸+ 𝐴𝐵𝐶𝐷𝐸 + 𝐴𝐵𝐶𝐷𝐸 + 𝐴𝐵𝐶𝐷𝐸

UnetabledeKarnaughseraitdélicateàutiliserdanscecas,carelleauraitunetaillede4x8,etcertainsregroupementspossiblespourraientnepasêtreconnexes.Paréconomied’écriture,oncommenceparreprésenterchaquemintermparlenombreassociéàsareprésentationbinaire:

𝑓(𝐴, 𝐵, 𝐶, 𝐷, 𝐸) = (0, 2, 8, 10, 12, 13, 26, 29, 30)Onplaceensuitecesmintermsdansuntableau,enlesgroupantselonlenombrede1qu’ilspossèdent(FigureII-24).

20

nombrede1 minterm valeurbinaire0 0 000001 2

80001001000

2 1012

0101001100

3 1326

0110111010

4 2930

1110111110

FigureII-24.Onclasselesmintermsselonlenombrede1deleurvaleurbinaire.

Lessimplificationsnepeuventseproduirequ’entregroupesadjacents.Lasimplificationentrelesminterms1et2senoteraparexemple:000-0,enmettantuntiretàl’endroitoùlavariableadisparu.Lorsqu’onaeffectuétouteslessimplificationspossibles,onrecommenceàpartirdesnouveauxgroupesformés,jusqu’àcequ’aucunesimplificationnesoitpossible(FigureII-25).

étape1 étape2 étape30 00000 ü28

0001001000

üü

1012

0101001100

üü

1326

0110111010

üü

2930

1110111110

üü

0-20-8

000-00-000

üü

2-108-108-12

0-010010-001-00

üü

10-2612-13

-10100110-

13-2926-30

-110111-10

0-2-8-10 0-0-0

FigureII-25.Onsimplifieentregroupesadjacents,étapeparétape.Lestermesquiontétéutilisésdansunesimplificationsontcochés.

Maintenant,ilsuffitdechoisirdanscetableaulestermesquivontincluretouslesmintermsdedépart,enessayantdetrouverceuxquicorrespondentàl’expressionlaplussimple.Onpeutlefairedefaçonpurementintuitive,encommençantparlestermeslesplusàdroite:parexemplelesgroupes0-2-8-10,8-12,13-29,26-30vontincluretouslesminterms.Ontrouvedonc:

𝑆 = 𝐴𝐶𝐸 + 𝐴𝐵𝐷𝐸 + 𝐵𝐶𝐷𝐸 + 𝐴𝐵𝐷𝐸Danslescascomplexes,ousionveutprogrammercetalgorithme,onénumèrelalistedesimplicantspremiers,quisontlestermesdutableauprécédentquin’ontétéutilisésdansaucunesimplification.Dansletableauprécédent,onacochéavecune’3’lestermesquiontétéutilisésdansunesimplification,donclalistedesimplicantspremiersest:8-12,10-26,12-13,13-29,26-30,0-2-8-10.Ilestclairquelerésultatsimplifiénecomporteraquedestermesdecetteliste,etlebutestdedéterminerparmieuxceuxqu’ilestindispensabledeplacerdanslerésultat,appelésimplicantspremiersessentiels.Onconstruitpourcelalatabledesimplicantspremiers(FigureII-26).

21

0 2 8 10 12 13 26 29 30

8-12 01-00 ü ü 10-26 -1010 ü ü 12-13 0110- ü ü 13-29 -1101 * ü ü 26-30 11-10 * ü ü

0-2-8-10 0-0-0 * ü ü ü ü

FigureII-26.Tabledesimplicantspremiers;lesimplicantspremierssontenlignesetlesmintermsdedépartsontencolonnes.Unimplicantpremierestditessentiels’ilestleseulàcouvrirundesmintermsencolonne;onlerepèreavec

unemarque’*’.

Parmiles5mintermsplacésenlignedansletableau,3sontditsessentiels,parcequ’ilssontlesseulsàcouvrirundesmintermsplacésencolonnes:l’implicantpremier13-29estleseulàcouvrirleminterm29,26-30estleseulàcouvrir26et30,et0-2-8-10estleseulàcouvrirlesminterms0et2.8-12et12-13nesontpasessentiels,car8,12et13sontcouvertspard’autresimplicantspremiers.Lesimplicantspremiersessentielssontnécessaires,maispasforcementsuffisants.Iciparexemple,sionneprenaitqu’eux,leminterm12neseraitpascouvert.Ilrestedoncunephaseheuristiquedechoixparmilesimplicantspremiersnonessentielspourcouvrirtouslesmintermsnonencorecouverts.Dansnotreexemple,onpeutajouter,soit8-12,soit12-13pourcouvrirle12manquant,cequidonnelesdeuxpossibilitéssuivantes:

• versionavec8-12:𝑆 = 𝐴𝐶𝐸 + 𝐴𝐵𝐷𝐸 + 𝐵𝐶𝐷𝐸 + 𝐴𝐵𝐷𝐸• versionavec12-13:𝑆 = 𝐴𝐶𝐸 + 𝐴𝐵𝐶𝐷 + 𝐵𝐶𝐷𝐸 + 𝐴𝐵𝐷𝐸

II.6. DécodeursUndécodeurestuncircuitpossédantnentréeset2nsortiesnumérotées(FigureII-27).

Àtoutmoment,uneetuneseulesortieestactive:celledontlenumérocorrespondàlavaleurbinaireprésentesurlesnentrées.Ledécodeurtraduitdonclavaleurd’entréeenuneinformationdepositionspatiale.

module decodeur(e[2..0], en : s[7..0]) s[7] = en*e[2]*e[1]*e[0] ; s[6] = en*e[2]*e[1]*/e[0] ; s[5] = en*e[2]*/e[1]*e[0] ; s[4] = en*e[2]*/e[1]*/e[0] ; s[3] = en*/e[2]*e[1]*e[0] ; s[2] = en*/e[2]*e[1]*/e[0] ; s[1] = en*/e[2]*/e[1]*e[0] ; s[1] = en*/e[2]*/e[1]*/e[0] ; end module

FigureII-27.Décodeur3vers8.Aveclavaleur6enentrée(110enbinaire),lasortienuméro6estactivée.

Undécodeurpeutêtreutilisépourn’activerqu’auplusuncomposant3-étatsàlafois,puisqu’auplusuneseuledesessortiesestactiveàlafois.

Lesdécodeurspeuventégalementêtreutiliséspourimplémenterdesfonctionslogiquesbooléennes.Puisquechaquesortiereprésenteundesmintermspossibles,etquetoutefonctioncombinatoirebooléennes’exprimesousformed’unesommedeminterms,onrelieraavecunOUlessortiescorrespondantsauxmintermsdésirés.OnpeutvoirFigureII-28laréalisationd’unOUexclusif(XOR)àtroisentréesavecundécodeuretunOUà4entrées.

22

FigureII-28.Undécodeur3vers8utilisépourréaliserunOUexclusifà3entrées.

II.7. MultiplexeursCessontdescircuitsd’aiguillagepourlessignauxlogiques.Unmultiplexeurpossède2nentréesdedonnées,nentréesdecommandes,etuneseulesortie.Onindiquesurlacommandelenuméro(enbinaire)del’entréededonnéequivaêtreaiguilléeensortie.OnaenFigureII-29unexempledemultiplexeur8vers1surlacommandeduquelestécrit1102=610;lasortiereflètealorsl’étatdelasixièmeentrée:E6.OndonneaussiFigureII-29l’écritureSHDLdecemultiplexeur,quiestcelled’uncircuitcombinatoiresimple.

module mux8to1(e[7..0], c[2..0] : s) s = c[2]*c[1]*c[0]*e[7] + c[2]*c[1]*/c[0]*e[6] + c[2]*/c[1]*c[0]*e[5] + c[2]*/c[1]*/c[0]*e[4] + /c[2]*c[1]*c[0]*e[3] + /c[2]*c[1]*/c[0]*e[2] + /c[2]*/c[1]*c[0]*e[1] + /c[2]*/c[1]*/c[0]*e[0] ; end module

FigureII-29.Multiplexeur8vers1.L’entréenuméro6estaiguilléeverslasortie.

Biensûr,lesmultiplexeurspeuventêtremisenparallèlepouraiguillerdesbusentiers.Onmettraalorsencommunleslignesdecommande,etenparallèleleslignesdedonnées.OnpeutvoirFigureII-30unmultiplexeur2vers1aiguillantdesbusde32bits,avecl’écritureSHDLcorrespondante.

module mux32to1(a[31..0], b[31..0], c : s[31..0]) s[31..0] = /c*a[31..0] + c*b[31..0] ; end module

FigureII-30.Multiplexeur2vers1,aiguillantdesbusde32bits.

Unmultiplexeur2vers1implémentematériellementunesituationdetypesi-alors-sinon;plusprécisément:siCalorsS=AsinonS=B(FigureII-31).C’estuneremarquequipeutsemblerbanale,maisquienfaitvapermettred’organiserledécoupageenmodulesd’unsystèmecomplexe,dèslorsqu’untelgenredesituationauraétéidentifié.

23

FigureII-31.Unmultiplexeur2vers1implémenteunesituation’si-alors-sinon’:siCalorsS=AsinonS=B.

Unmultiplexeur2nvers1peutégalementêtreutilisédirectementpourimplémenterdesfonctionscombinatoiresànentrées.Ilsuffitderelierlesentréesdelafonctionàréaliserauxentréesdecommandedumultiplexeur:chaquecombinaisonvaconduireàunaiguillagespécifique,etiln’yaplusqu’àmettrelavaleur0ou1attenduesurl’entréededonnéecorrespondantedumultiplexeur.Iln’yacettefoisaucuncomposantsupplémentaireàrajouter,etonpeutvoirFigureII-32l’implémentationd’unefonctionXORà3entréesavecundécodeur8vers1.Biensûr,cettesolutionn’estpasoptimaleennombredetransistorsutilisés,puisquetouteslesentréesforcéesà0sontreliéesàdesportesETinutilisées.

FigureII-32.Unmultiplexeur8vers1utilisépourréaliserunOUexclusifà3entrées.

II.8. EncodeursdeprioritéUnencodeurdeprioritépossède2nentréesetnsorties.Lesentréessontnumérotées,etcorrespondentàdesévénementsdeprioritécroissante.Onverraenparticuliercommentutiliserlesencodeursdeprioritépourgérerl’arrivéed’interruptionssimultanéesdansunprocesseur,tellesquelesévénementsréseau,lesévénementsdisque,lesévénementsUSBouclavierousouris,etc.

LasortieNUMcontientlenumérodel’entréeactivéelaplusprioritaire,c’estàdiredenuméroleplusélevé.Uneautresortie(ACTsurlafigure)peutaussiindiquers’ilyaaumoinsuneentréeactive.LeschémadelaFigureII-33montreuntelencodeurpour23entréesaveclesentrées0,3et6activées,etlavaleurbinaire6placéesurlessorties.

24

module encodeur(e[7..0]: num[2..0], act) num[2]=e[7]+e[6]+e[5]+e[4] ; num[1]=e[7]+e[6]+/e[5]*/e[4]*e[3]+ /e[5]*/e[4]*e[2] ; num[0]=e[7]+/e[6]*e[5]+/e[6]*/e[4]*e[3]+ /e[6]*/e[4]*/e[2]*e[1] ; act = e[7]+e[6]+e[5]+e[4]+e[3]+e[2]+e[1]+e[0] ; END MODULE

FigureII-33.Encodeurdeprioritésà8entrées.L’entréeactive#6estlaplusprioritaire.

Latabledevéritéd’untelcircuità8entréespossède256lignes;onpeutnéanmoinslareprésenterdefaçoncondensée(FigureII-34).

L’entrée#0estsouventnoncâblée:l’absenced’entréeactiveestalorsdétectéelorsqueNUM=0,évitantainsid’avoirlasortiesupplémentaireACT.

e[7] e[6] e[5] e[4] e[3] e[2] e[1] e[0] num[2..0] act1 * * * * * * * 111 10 1 * * * * * * 110 10 0 1 * * * * * 101 10 0 0 1 * * * * 100 10 0 0 0 1 * * * 011 10 0 0 0 0 1 * * 010 10 0 0 0 0 0 1 * 001 10 0 0 0 0 0 0 1 000 10 0 0 0 0 0 0 0 000 0

FigureII-34.Tabledevéritécondenséed’unencodeurdeprioritésà8entrées.

Onadonc:

𝑛𝑢𝑚 2 = 𝑒 7 + 𝑒 7 . 𝑒 6 + 𝑒 7 . 𝑒 6 . 𝑒 5 + +𝑒 7 . 𝑒 6 . 𝑒 5 . 𝑒[4]

𝑛𝑢𝑚 1 = 𝑒 7 + 𝑒 7 . 𝑒 6 + 𝑒 7 . 𝑒 6 . 𝑒 5 . 𝑒 4 . 𝑒 3 + 𝑒 7 . 𝑒 6 . 𝑒 5 . 𝑒 4 . 𝑒 3 . 𝑒[2]

𝑛𝑢𝑚 0 = 𝑒 7 + 𝑒 7 . 𝑒 6 . 𝑒 5 + 𝑒 7 . 𝑒 6 . 𝑒 5 . 𝑒 4 . 𝑒 3+ 𝑒 7 . 𝑒 6 . 𝑒 5 . 𝑒 4 . 𝑒 3 . 𝑒 2 . 𝑒[1]

Lethéorèmed’absorptions’appliqueplusieursfois,etonobtientfinalement:

𝑛𝑢𝑚 2 = 𝑒 7 + 𝑒 6 + 𝑒 5 + 𝑒[4]

𝑛𝑢𝑚 1 = 𝑒 7 + 𝑒 6 + 𝑒 5 . 𝑒 4 . 𝑒 3 + 𝑒 5 . 𝑒 4 . 𝑒[2]

𝑛𝑢𝑚 0 = 𝑒 7 + 𝑒 6 . 𝑒 5 + 𝑒 6 . 𝑒 4 . 𝑒 3 + 𝑒 6 . 𝑒 4 . 𝑒 2 . 𝑒[1]

L’écritureSHDLd’unencodeurà8entréesestdonnéeFigureII-33.

II.9. Circuitd’extensiondesigne

25

Uncircuitd’extensiondesignedepbitsversnbits,p<nestuncircuitcombinatoirequitransformeunnombresignécodéencomplémentà2surpbitsencemêmenombrecodéencomplémentà2surunnombredebitsnplusgrand.

Considéronsparexempleuneextensiondesignede4bitsvers8bits,etquelquescasparticuliers:

• 00112(=3)seraconvertien000000112• 11112(=-1)seraconvertien111111112• 10002(=-8)seraconvertien111110002

Onvoitdoncquelemotdenbitsestformédelarecopiedumotdepbits,complétéàgaucheden−pbitstouségauxà0ouà1selonlesignedunombre.Onrecopieenfaitn−pfoislebitdesignedumotdedépart,c’estàdirelebitderangp−1(FigureII-35).

FigureII-35.Opérationd’extensiondesigne.Ondupliquelespbitsd’entréeetonajouteàgauchen-pbitsdesigne.

LaFigureII-36montreàtitred’exemplelecodeSHDLcorrespondantàuncircuitd’extensiondesignede13bitsvers32bits.

module signext13(e12..e0: s31..s0) s[12..0] = e[12..0]; s[31..13] = e12*0b1111111111111111111; end module

FigureII-36.ÉcritureSHDLd’uncircuitd’extensiondesigne13bitsvers32bits.Les13bitsdepoidsfaiblessontrecopiésetonajoute19bitsdepoidsforts,touségauxaubitdesignee[12]dunombrededépart.

II.10. DécaleuràbarilletLedécaleuràbarillet(barrelshifter)décaleunmotbinairedenbitsverslagaucheouversladroite,d’unnombrevariabledebits.LesensdudécalageestdéfiniparunecommandeR(pourright)etlenombredebitsdudécalageestdonnédansunecommandeNBsurpbits(FigureII-37).C’estuncircuitdirectementemployéàl’exécutiondesinstructionsdedécalageetderotationdesprocesseurs,tellesquelesinstructionsslletslrdeCRAPSquenousverronsauchapitresuivant.Généralement,n=p2:undécaleuràbarilletsur8bitsauraunevaleurdedécalagecodéesur3bits;undécaleursur32bitsauraunevaleurdedécalagesur5bits,etc.

26

FigureII-37.Interfacegénérald’undécaleuràbarillet.Lemotdenbitsestdécaléàdroite(resp.gauche)siR=1(resp.0),

d’unnombredebitsNB.Lesbitsquisortentsontperdus,etlesbitsentrantssontdes0.

Sur8bitsparexemple,laFigureII-38présentelatabledevéritécondenséed’untelcircuit,avecunevaleurdécalagesur3bitsquipermettouslesdécalagesde0à7danslesensdroit(R=1)commedanslesensgauche(R=0).

r nb entrées sorties* 000 e7 e6 e5 e4 e3 e2 e1 e0 e7 e6 e5 e4 e3 e2 e1 e00 001 e7 e6 e5 e4 e3 e2 e1 e0 e6 e5 e4 e3 e2 e1 e0 00 010 e7 e6 e5 e4 e3 e2 e1 e0 e5 e4 e3 e2 e1 e0 0 00 011 e7 e6 e5 e4 e3 e2 e1 e0 e4 e3 e2 e1 e0 0 0 00 100 e7 e6 e5 e4 e3 e2 e1 e0 e3 e2 e1 e0 0 0 0 00 101 e7 e6 e5 e4 e3 e2 e1 e0 e2 e1 e0 0 0 0 0 00 110 e7 e6 e5 e4 e3 e2 e1 e0 e1 e0 0 0 0 0 0 00 111 e7 e6 e5 e4 e3 e2 e1 e0 e0 0 0 0 0 0 0 0

1 001 e7 e6 e5 e4 e3 e2 e1 e0 0 e7 e6 e5 e4 e3 e2 e11 010 e7 e6 e5 e4 e3 e2 e1 e0 0 0 e7 e6 e5 e4 e3 e21 011 e7 e6 e5 e4 e3 e2 e1 e0 0 0 0 e7 e6 e5 e4 e31 100 e7 e6 e5 e4 e3 e2 e1 e0 0 0 0 0 e7 e6 e5 e41 101 e7 e6 e5 e4 e3 e2 e1 e0 0 0 0 0 0 e7 e6 e51 110 e7 e6 e5 e4 e3 e2 e1 e0 0 0 0 0 0 0 e7 e61 111 e7 e6 e5 e4 e3 e2 e1 e0 0 0 0 0 0 0 0 e7

FigureII-38.Tabledevéritécondenséed’undécaleuràbarilletsur8bits.

Untelcircuitestdifficileàconcevoirdirectement;parailleurs,sionvoulaitleréalisersousformed’unseulétagedepropagation-cequiestpossibleenthéorie-leséquationsseraientcomplexes,etced’autantplusquelesvaleursdenetpseraientgrandes.

Àl’inverse,uneconceptionmodulaireetrécursiveestpossibledefaçontrèssimple,sionprocèdeparétage,avecdesdécalagesparpuissancesde2successives.Cetteorganisationgénéraleestditededécalageàbarillet,etelleestmontréeFigureII-39pourundécaleur8bits.

TouslesdécaleursontleurslignesRreliéesensemble,etdoncopèrentdanslemêmesens.Ilssonttouséquipésd’uneligneCS,etundécalagen’esteffectuéquesiCS=1.Ilseffectuentchacunun

27

nombrededécalagesfixe,4,2ou1.Leurorganisationenbarilletpermetd’effectuertouteslesvaleursdedécalageentre0et7.Lepremierniveaueffectueundécalagede4bitsounon,selonquenb[2]=1ounon.Lesecondniveaueffectueounonundécalagede2bits,selonlavaleurdenb[1].Ledernierniveaueffectueundécalagede1bit,selonlavaleurdenb[0].

FigureII-39.Organisationen3niveaux(barillets)d’undécaleur8bits.Chaqueniveaudécaledansunsensouunautred’unnombredepositionségalàunepuissancededeux,sisaligneCSestà1.Leurscombinaisonspermettenttoutesles

valeursdedécalage.

Parexemplesinb=101etsiR=0,lepremierniveauvadécalerde4bitsverslagauche(saligneCSestà1),transformantE=(e7,e6,e5,e4,e3,e2,e1,e0)en(e3,e2,e1,e0,0,0,0,0).Lesecondniveauvalaisserpassercevecteursansletransformer.Leniveaudubasvaeffectuerundécalagede1,transformantlevecteuren(e2,e1,e0,0,0,0,0,0).Autotal,c’estdoncbien4+1=5décalagesàgauchequiontétéeffectués.

Biensûr,unetelleorganisationestgénéralisableàunnombrequelconquedebits.Undécaleur32bitsseraitconstituéde5étages,formésdedécaleursfixesde16,8,4,2et1bits.L’accroissementencomplexitéetentempsdepropagationaugmentedoncenlog(n),cequiesttrèssatisfaisant.

II.11. Sortieshaute-impédanceetbuffers3-étatsCertainscircuitspossèdentdessortiesditestroisétats(tri-state),c’estàdirequ’enplusdepouvoirêtredansl’état’0’oul’état’1’(c’estàdiredansunétatélectriquede’basseimpédance’),ellespeuventêtredansuntroisièmeétatditde’haute-impédance’,souventnotéHigh-Z.Lorsqu’unesortieestenhaute-impédance,toutsepassecommesiellen’étaitplusconnectée,carelleneproduitplusnineconsommeplusaucuncourant.Cettepropriétépermettraderelierdirectemententre-ellesplusieurssortiesdecetype,sousréservedegarantirqu’auplusuneseuledecessortiesproduiseducourantàunmomentdonné(souspeinedecourt-circuit!).

Lescircuitsayantdessortiestroisétatspossèdenteninternedescomposantsappelésbuffertrois-états,quisereprésententtelsquesurlaFigureII-40.

28

FigureII-40.Buffer3-états-Lasortieestenhaute-impédancetantqueVALIDE=0.

LaligneVALIDEquiarrivesurlecôtédutriangle,souventnotéeOE(pour’OutputEnable’),commandel’étatdelasortie.Tantquecetteligneestinactive,lasortierestedansl’étatHigh-Z.

Dupointdevuedel’écritureSHDL,cettecommandeOutputEnablesurunsignaltelqueSs’indiqueparl’ajoutaprèslenomdusignald’unecommandetelleque:OE

SionconsidèrecetétatHigh-Zcommeuntroisièmeétatlogique(cequin’estpastrèsexactsurleplanmathématique),onalatabledevéritédelaFigureII-41.

𝐴 𝐵 𝐴 + 𝐵0 0 00 1 11 0 11 1 1

FigureII-41.Tabledevéritéd’unbuffer3états

Onpeutillustrerl’utilisationdecesbufferslorsdelaréalisationd’unmultiplexeur(FigureII-42).

module mux1(a, b, c : s) s = a : /c ; s = b : c ; end module

module mux2(a, b, c : s) s1 = /c * a ; s2 = c * b ; s = s1 + s2 ; end module

FigureII-42.Multiplexeurréaliséàl’aidedebuffers3-états,comparéàsaréalisationenlogiquecombinatoireclassique.Onéconomisele’ou’final.

Lessortiesdesdeuxbuffers3-étatssontreliéesentre-elles,carleurslignesOEs’activentdefaçonmutuellementexclusive.L’idéedeceschémaestque,soitondoitlaisserpasserlecourantquivientdeA(avecl’interrupteurcommandéqueformelebuffertroisétats),soitondoitlelaisserpasserdepuisB.Commecesdeuxconditionssontmutuellementexclusives,onpeutrelierlessortiesdes

29

deuxbuffersentoutesécurité.OnéconomiseainsilecircuitOUduschémaclassiquededroite,quin’opéraitjamaisavecsesdeuxentréesà1simultanément.

Onnoteral’écritureSHDLtelleque:S=A:/C;L’équipotentielles’appelleS,maisdeuxsourcesdecourantpeuventyimposerleurpotentiel;onlesnotealorsA:/CetB:C.

OnvoitsurlaFigureII-43uneconfigurationélectriqueparticulièredececircuit:lacommandeCétantà1,seullebuffer3-étatsdubasvaêtredansunétatdebasseimpédance,etvaimposersonétatélectriqueàlasortieS.Lebuffertroisétatsduhautasasortieenhauteimpédanceetn’entrepasenconflitavecl’autrepourl’établissementdupotentieldeS;toutsepassecommes’ilétaitdéconnectéducircuit,cequiaétéfiguréparlesdeuxlignesbrisées.

FigureII-43.Fonctionnementdumultiplexeur.Danscetteconfiguration,c’estlebufferdubasquiimposesonpotentiel.

Sionrelieensembledeuxsortiesdebufferstroisétats,etqu’àunmomentdonnéleurslignesOEsontà1enmêmetemps,lecourtcircuitestréel,etlescircuitssemettentàchaufferdangereusement,entraînantparfoisladestructionoul’endommagementduplusfaible.

Celapeutseproduiredansdesréalisationscomposéesdeplusieurscircuitsintégrés,dontlessortiestroisétatssontreliéesentreelles.Celapeutseproduireégalementàl’intérieurd’unseulcircuitcommeunFPGA,danslequeldeslignesinternesàtroisétatspeuventêtrereliéesentreelleslorsdelaprogrammation-configuration.Onéviteparfoislepireavecunbonodorat,endétectantl’odeurdecuissondelapoussièreprésenteàlasurfacedescircuitsàdestempératuresavoisinantparfoisles100degrésCelsius,etendébranchantenhâtel’alimentation!

C’estenfaitlaseulesituationdangereusepourlescomposantslorsquel’onfaitdelalogiquedigitale.Tantqu’onn’utilisepasdecomposantsavecdessortiestroisétats,riennepeutêtreendommagésionprendsoindenerelierchaquesortiequ’àdesentrées.Aveclescomposantsayantdessortiestroisétats,ilfaudraimpérativementconnecterleurslignesOEàdescircuitstelsquedesdécodeurs(voirsection3)quivontgarantirl’exclusionmutuelleentrelessortiesreliéesentreelles.

II.12. Exercicescorrigés

Exercice1:utilisationdestablesdeKarnaughConcevoiruncircuitquidétectelaprésenced’unchiffredécimal(entre0et9)sursesentréesA,B,C,D.

SolutionLatabledevéritédecedétecteurdonne’1’pourlesvaleursde(0,0,0,0)à(1,0,0,1),et’0’pourlesvaleurssuivantes(FigureII-44).

30

A B C D S0 0 0 0 10 0 0 1 10 0 1 0 10 0 1 1 10 1 0 0 10 1 0 1 10 1 1 0 10 1 1 1 11 0 0 0 11 0 0 1 11 0 1 0 01 0 1 1 01 1 0 0 01 1 0 1 01 1 1 0 01 1 1 1 0

FigureII-44.Tabledevéritéd’undétecteurdechiffredécimal.

OnpeutmaintenantdessinerlatabledeKarnaughcorrespondante,etchercherlepluspetitnombrederegroupementsquirecouvrenttousles’1’(FigureII-45).

FigureII-45.TabledeKarnaughaveclesregroupementspourledétecteurdechiffresdécimaux.

Ilyadeuxregroupements,cequidonnel’expressionsimplifiée:𝑆 = 𝐴 + 𝐵𝐶𝐷

Onpeuttrouverlemêmerésultatdefaçonalgébrique:𝑆 = ( 𝐴, 𝐵, 𝐶, 𝐷 ≤ 8) + ((𝐴, 𝐵, 𝐶, 𝐷) = 9)) = 𝐴 + 𝐴𝐵𝐶𝐷

ParabsorptiondeA:𝑆 = 𝐴 + 𝐵𝐶𝐷

Exercice2:analyseinductivedestablesdevéritéConcevoirlestranscodeurssuivants:

1. BinairepurversGrayréfléchi.2. Grayréfléchiversbinairepur.

SolutionLafigureII.61montrelatabledevéritéquirelieunevaleurbinaire(X,Y,Z,T)àuncodedeGray(A,B,C,D).LecodedeGrayaétéconstruitselonlaméthoderécursivedécriteàlasection5.4.

31

OnpourraitdessinerdestablesdeKarnaugh,maisellesnedonneraientrienici.ParailleursonvavoirquelescodesdeGraysonttrèsétroitementassociésàl’opérateurXOR,etonvaessayerdedevinerlesrelationsdirectement.

X Y Z T A B C D0 0 0 0 0 0 0 00 0 0 1 0 0 0 10 0 1 0 0 0 1 10 0 1 1 0 0 1 00 1 0 0 0 1 0 00 1 0 1 0 1 0 10 1 1 0 0 1 1 10 1 1 1 0 1 1 01 0 0 0 1 0 0 01 0 0 1 1 0 0 11 0 1 0 1 0 1 11 0 1 1 1 0 1 01 1 0 0 1 1 0 01 1 0 1 1 1 0 11 1 1 0 1 1 1 11 1 1 1 1 1 1 0

FigureII-46.Binaire<->codedeGray.

1. BinairepurversGrayréfléchi.OnvoittoutdesuitequeA=X.BestégalàYpendantlapremièremoitiédelatable,puisilestégalà𝑌.’Êtredanslapremièremoitiédelatable’estgouvernéparX;enrésuméBestégalàYavecuneinversioncommandéeparX.C’estXORl’opérateurd’inversioncommandée,donc:𝐵 = 𝑋 ⊕ 𝑌Defaçonanalogue,onremarquequeCestégalàZlorsqueYvaut0,etestégalà𝑍lorsqueYvaut1,donc:𝐶 = 𝑌 ⊕ 𝑍.Ontrouvedemême𝐷 = 𝑍 ⊕ 𝑇.

2. Grayréfléchiversbinairepur.OnabiensûrX=A,etonvoitaussique𝑌 = 𝐴 ⊕ 𝐵.ParcontrepourZ,ilestbienégalàCou𝐶,maisl’inversionn’estpassimplementcommandéeparB.Ilyainversiondurantledeuxièmeetletroisièmequartdelatable:celaévoqueunXOR.Ilyaenfaitinversionlorsque𝐴 ⊕ 𝐵 = 1,donc:𝑍 = 𝐴 ⊕ 𝐵 ⊕ 𝐶.Parinductionondevine,etonvérifieensuite,que𝑇 = 𝐴 ⊕ 𝐵 ⊕ 𝐶 ⊕ 𝐷

32

33

ChapitreIII. ArithmétiquebinaireIII.1. Motsbinaires

Lessignauxbinairessontsouventregroupéspourformerdesmots.Lalargeurd’unmotbinaireestlenombredessignauxquisontregroupés.Onappelleparexempleoctetunmotde8bits(unmotdelargeur8).Unmotdenbitspermetdecoder2nvaleursdifférentes;256valeursparexemplepourunoctet.OnpeututiliserunoctetpourcoderuncaractèrealphanumériqueàlanormeISO-8859;unmotde32bitspourreprésenterunnombreentierrelatif;unmotde16à96bitspourreprésenterdesnombresréelsennotationscientifiqueflottanteselonlanormeIEEE754.Desstructuresdedonnéespluscomplexes(tableaux,listes,ensembles,dictionnaires,etc.)nécessitentuneagrégationdecestypessimples.

CodageenbinairepurOnécriralesnombresbinairesaveclechiffre2enindice.Parexemple:011011012.Surnbits,l’intervalledesvaleursreprésentéesest[0,2n-1].Commeendécimal,letotalestunesommepondérée,plusprécisémentleproduitdechaquechiffreparlapuissancede2demêmerang:

s = 2\b^

9_6

\`a

où𝑏\ estlebitderangidumot.Parexemple,onareprésentésurlafiguresuivantelespoidsrespectifsdesbitsdumotde8bits100110102=15410:

FigureIII-1.Poidsdeschiffresenbinairepur

Poidsforts,poidsfaiblesParréférenceàcettenotiondepondérationdeschiffres,onemploiecourammentdesexpressionstellesque’lesnbitsdepoidslesplusforts’,ou’lesnbitsdepoidslesplusfaibles’pourdésignerlesnbitslesplusàgauche(respectivementlesplusàdroite)dansunmotbinaire.Danslesdocumentationsenanglais,ontrouverafréquemmentdeslibelléstelsqueMSB(mostsignificantbits)ouLSB(leastsignificantbits)aveclesmêmesens.

1Kilon’estpas1000(eninformatique)Lorsquevousachetezunkilowatt-heured’électricité,ilestbienentenduavecvotrefournisseurqu’ils’agitde1000watts-heure.Cen’estpaslamêmechoseeninformatique!Pourcontinueràénumérerenutilisantlabase2,lesinformaticiensontdécidéd’utiliserl’unité1K=210=1024,doncunpeuplusde1000.Lesuffixe’méga’est:1M=1K×1K=220;un’giga’est:1G=1K×1M=230;un’Tera’est:1T=1K×1G=240.Ungrandnombredevaleursusuelless’exprimentalorsdirectementenmultiplesde1K,1M,1Gou1T,parexemplelatailledesmémoiresRAM,carelleestnécessairementunepuissancede2àcausedeleurorganisationmatricielle.1K,1Met1Gvalentenvironmille,unmillionetunmilliard,maislapetitedifférenceentre1000et1Kaugmentelorsqu’onpasseà1Met1G:1M=1024*1024=1048576,et1G=1024*1048576=1073741824,soitpresque1,1milliard.Lesvendeursdedisquesdursexploitentcetteambiguïté:le

1001101076543210

128 16 82

S=128+16+8+2=154

34

plussouventsivousachetezundisqueétiqueté’100giga-octets’,ils’agitd’undisquede100milliardsd’octets,etnonde107374182400octets,soitunedifférencede7%.

64bits,latailleidéalepourlesdonnées?Lesmicroprocesseursmanipulentdesmotsbinairesdetaillefixe,lespluspetitsde8bits,d’autresde16bits,32bitsetmaintenant64bits.Unprocesseur8bits,s’ilveutajouter1000et1000,doiteffectuerdeuxadditionsetnonuneseule,puisque1000ne’rentre’pasdansuncodage8bits.Unprocesseur16bitscodedirectementdesnombresentiersdel’intervalle[-32768,+32767],cequinepermetpasdecoderdesnombresuntantsoitpeugrands.Onsembledéfinitivementàl’aiseavec32bits,maiscen’estpaslecas:leplusgrandentierquipeutêtrecodéest232,soitenviron4milliards,cequinesuffitpasàreprésenterlemontanteneurosd’unejournéedetransactionsàlaboursedeParis.Avec64bits,onestdéfinitivementsauvéscôtéentiers,àmoinsdevouloircompterlesgrainsdesablesurlaplage.Pourlecodagedesnombresréels,64bitsestlatailledecodageendoubleprécisionlaplususuelle,quidonneuneprécisiond’unedizainedechiffresaprèslavirgule,suffisantedanslamajoritédesapplications.Commeondoitaussisouventstockerdesadressesdemémoiredansdesmots,64bitsestaussiunetaillesuffisante,alorsque32bitsnepermettentpasdedépasser4giga-octets.Unetailledemotde64bitsadoncdesqualitésintrinsèquesquen’avaientpasjusquelà16bitsou32bits.Utiliserunetailleplusgrandede128bitsdansunprocesseurconduiraitàbeaucoupdegaspillage,puisquelaplupartdesmotsmanipulésseraienttrèspeuremplis.Maprédictionpersonnelleestque,danslefutur,cettetailledumotmémoirenevapasaugmenterindéfiniment,maisvasestabiliserà64bitsdufaitdesqualitésquiviennentd’êtredécrites.

NombresbinairesàvirguleCommeendécimal,onpeutmanipulerdesnombresàvirguleenbinaire.Leschiffresplacésaprèslavirguleontalorsdespoidsquisontlespuissancesnégativesdécroissantesde2.Ainsi,0.12=2−1=0.5;0.012=2−2=0.25,etc.Sioncherchelareprésentationbinaireapprochéedunombreπ,ontrouveraπ=11.001001…(FigureIII-2).

FigureIII-2.Écriturebinaireàvirgule(approchée)dunombreπ.

Pourchaqueposition,onmet1ou0defaçonàcequelavaleurcourantenedépassepaslavaleuràreprésenter,toutens’enapprochantlepluspossible.Parexempleaprèsavoirchoisi11.001(totalcourant=21+20+2−3=2+1+0.125=3.125),onnepeutpasmettrede1enposition-4ou-5,carceladépasseraitπ.Ondoitattendrelaposition-6,etonaunevaleurapprochéede21+20+2−3+2−6=3.140625.

1100100110-1-2-3-4-5-6

2

0,015625

π=2+1+0.125+0.015625

10,125

35

IncrémenteretdécrémenterenbinaireUneopérationfréquenteeffectuéesurdesnombresbinairesestlecomptage.Parexemplesur3bits,passerde000à001,puis010,etc.Selonquelalgorithmeunevaleursetransforme-t-elleenlasuivante?Onpeutessayerdes’inspirerducomptageendécimal,qu’onsaitfairedepuisnotrepetiteenfance,etpourlequelonnenousapourtantjamaisdonnél’algorithmique.Pourpasserde124à125,seullechiffredesunitéss’estincrémenté.Enfaitcechiffres’incrémentetoujours,avecunpassagede9à0.Lechiffredesdizainesserarecopiéavecincrémentation,silechiffredesunitésvaut9,commedanslepassagede129à130,sinonilserarecopiésanschangement,commedanslepassagede124à125.Ontientnotrealgorithme:pourpasserd’unnombredécimalàsonsuivant,onconsidèrechaquechiffreunparun,etonlerecopieenl’incrémentantsitousleschiffresquisontàsadroitevalent9,ousinononlerecopiesanschangement.Onremarqueraquel’ordredetraitementsurleschiffresestindifférent,etqu’onpeuteffectuercetalgorithmeenparallèlesurtousleschiffres.LaFigureIII-3montreunexemple.

FigureIII-3.Incrémentationd’unnombredécimal.Unchiffreestrecopiéavecincrémentationsitousleschiffresàsa

droitevalent9;sinonilestrecopiésanschangement.

Lemêmealgorithmes’appliqueenbinaire,maiscettefoisl’opérationd’incrémentationd’unchiffreestencoreplussimple,carelleserésumeàuneinversiondubit.Pourincrémenterunnombrebinaire,onconsidèrechaquebitdumotinitial,etonlerecopieavecinversionsitouslesbitsquisontàsadroitevalent1,ouonlerecopiesanschangementsinon.Lebitleplusàdroiteesttoujoursinversé.LaFigureIII-4montreunexemple.

FigureIII-4.Incrémentationd’unnombrebinaire.Unbitestinversésitouslesbitsàsadroitevalent1;sinonilest

recopiésanschangement.

Làencorel’algorithmepeuts’effectuerenparallèlesurtouslesbits,doncpeutêtreréalisédirectementparuncircuitcombinatoire,dontc’estlemodedefonctionnementnaturel.

1

1

2 9 9

deschiffresàdroitediffèrentde9

onrecopiesanschanger

tousleschiffresàdroitevalent9

onrecopieenincrémentant

tousleschiffresàdroitevalent9

onrecopieenincrémentant

onincrémentetoujours

3 0 0

1 0 1 1

desbitsàdroitesontdifférentsde1

onrecopiesanschanger

touslesbitsàdroitevalent1

onrecopieeninversant

touslesbitsàdroitevalent1

onrecopieeninversant

oninversetoujours

1 1 0 0

36

Attention,ilfautnoterqu’onnepeutpasincrémenterlavaleur’surplace’:lemotbinairequicontientlenombrededépartetlemotbinairequicontientlerésultatdoiventêtredistincts,etnepeuventpasêtreconfondus.Unalgorithmeanalogueexistepourledécomptage:onrecopieunbitavecinversionsitouslesbitsàsadroitevalent0,sinononlerecopiesanschangement.Parvacuité,lebitleplusàdroiteesttoujoursinversé.Parexemple,onpassede110à101eninversantlesdeuxbitsdepoidsfaible,cartouslesbitsquisontàleurdroitevalent0.

HexadécimalLesmotsmanipulésparunordinateurontsouventunelargeursupérieureà16ou32bits,etsontdoncdifficilesàtranscrireenbinaire.Pourobteniruneécritureconcise,onutilisesouventlabase16,appeléehexadécimal,dontles16chiffressontnotés:0,1,2,3,4,5,6,7,9,A,B,C,D,E,F.Chaquechiffrehexadécimalpermetdecoder4bits(24=16).Pourpasserd’unenotationbinaireàunenotationhexadécimale,ilsuffitdegrouperlesbitsparpaquetsde4,dedroiteàgaucheàpartirdespoidsfaibles.Parexemple:

0110.11012=6D16=109100110.1000.1010.11002=68AC16

Débordementlorsd’uneadditionnonsignéeLorsqu’onadditionnedesnombresentiersnaturelscodésenbinairepur,uneretenuefinaleindiqueundébordement.

III.2. CodagedesnombresentiersnaturelsOnutiliselebinairepur.Avecnbits,onpeutcoderlesnombresentierspositifsdel’intervalle[0,2n−1].L’additionetlasoustractions’effectuentdelamanièrehabituelle;ilyadébordementdel’additionlorsqu’uneretenuedoitêtrepropagéeaudelàdudernierbitderangn.

LecteuretimprimeurdécimalSiunprogrammeutilisedesnombresentiersnaturelscodésenbinairepur,lareprésentationexternedecenombreàl’utilisateurduprogrammeestgénéralementfaitedansuneautrebase,leplussouventlabase10.Unsous-programmeappeléimprimeurestchargédeconvertirunevaleurenbinairepurensonécrituredécimale,etunautreappelélecteurfaitlatraductioninverse.Onpeutexaminerrapidementlesalgorithmesqu’ilsutilisent.Ilsseraientbiensûrfacilementtransposablesàd’autresbases.

TraductiondubinaireversledécimalConsidéronsparexempleunmotde8bitsN=101101102;oncherchelasuitedescaractèresquireprésentecenombreenécrituredécimale.C’estunprogrammed’ordinateurquiréalisecetteconversion,etquidisposedoncd’opérateursarithmétiques(binaires)telsqueadditionetmultiplications,quisaitfairedescomparaisons,etc.Cettetraductionnecomporterapasplusde3chiffresdécimaux,notonsles:XYZ.OnchoisitpourXlechiffreleplusgrandtelque100X≤N.IciX=1convientcar1×100≤Net2×100>N.PourfairecechoixdeX,onpeuteffectivementréaliserdesmultiplications,ouutiliserunetablepréconstruite.IlresteàtraduireN1=N−X×100=10100102.Pourcettevaleur,oncherchelaplusgrandedesvaleursdeYtelleque10×Y≤N1;ontrouveY=8,etilresteàconvertirN2=N1−Y×10=000000102;ontrouvealorsZ=2.Finalement,lestroischiffresdécimauxcherchéssontXYZ=182.

TraductiondudécimalverslebinaireOncherchedoncàconvertirl’écrituredécimaled’unnombreenunmotbinaire.Leproblèmen’estpaslesymétriqueduprécédent,carl’ordinateursaitfairetouteslesopérationssurlecodagebinaire,alorsqu’ilnesaitenfaireaucunedirectementenbase10.

37

Pourunnombredécimaltelque’XYZ’(quiconduitàunevaleurbinairesur8bits),ilsuffitenfaitdefairelecalculn=100x+10y+zoùx,yetzsontlesnumérosd’ordreassociésauxchiffres’X’,’Y’et’Z’respectivement.

III.3. CodagedesnombresentiersrelatifsAuxdébutsdel’informatique,oncodaitgénéralementlesnombresentierssignésenmettantdanslepremierbitlesigne(’1’signifiant’moins’)etdanslessuivantslavaleurabsolue.-3secodaitparexemple10000011sur8bits.L’encodageetledécodaged’untelnombreétaientsimple(bienqu’onnoteraque0peutêtrecodé+0ou-0),maisonnepouvaitplusréaliserunesimpleadditioncommeavecdesnombresnaturels.Siparexempleontentedefairel’additionbitàbitde10000011(-3)etde00000100(+4),onobtient:10000111,c’estàdire-7,cequiestabsurde.

Codageencomplémentà2Uncodageappelécomplémentàdeuxs’estrapidementimposédanslesannées1970.Lesdifférentsbitsd’unnombrecodéencomplémentà2ontpourpoidslespuissancessuccessivesde2,commepourlebinairepur,saufpourlebitdepoidsfort,quiaunpoidsde−29_6aulieud’avoirunpoidsde29_6:

𝑠 = −29_6𝑏9_6 + 2\𝑏\

9_8

\`a

où𝑏\ estlebitderangidumot.Onpeutprouverquececodagealespropriétésremarquablessuivantes:

• c’estuncodageéquilibré:surnbits,onreprésentelesnombresrelatifsdel’intervalle[−2n−1,2n−1−1]soitautantdenombrepositifsounulsquedenombresstrictementnégatifs

• 0secodesousformed’unchampuniformede0;iln’aqu’unseulcodage• lebitdepoidsfortducodagereprésentelesignedunombre• lesopérationsd’additionoudesoustractionenbinairepurs’appliquentégalementavecdes

opérandescodésencomplémentàdeux,avecladifférencequelaretenuen’apasdesensetdoitêtrenégligéelorsd’uneopérationencomplémentàdeux

Pourillustrerlefaitquelemêmeopérateurd’additionestutilisépourlebinairepuretlecomplémentà2,considéronsl’additiondela

FigureIII-5:

38

FigureIII-5.Unemêmeopération’mécanique’d’additions’interprètededeuxfaçonsdifférentes.

Lamêmeopérationeffectuéemécaniquementsurdescodages(colonnecentrale)s’interprètededeuxfaçonsdifférentesselonqu’onconsidèrelesnombrescommeétantsignésounon.

Débordementlorsdel’additiondenombressignésQuandya-t-ildébordementlorsd’uneadditiondedeuxnombressignés?Ilestclairqu’ilnepeutpasseproduirelorsquelesopérandessontdesignesopposés,puisquelavaleurabsoluedurésultatestalorsinférieureàlaplusgrandedesvaleursabsoluesdesdeuxopérandes.Ilnepeutdoncseproduireques’ilssontdemêmesigne,touslesdeuxpositifsoutouslesdeuxnégatifs.Ondémontrequ’alorsilyadébordementsietseulementsil’additiondesdeuxdonneunrésultatdesigneopposéausignecommundesdeuxopérandes.

Comparaisondenombresencomplémentà2OnseposeicileproblèmededéterminerlespositionsrespectivesdedeuxnombresentiersAetBcodésencomplémentà2:sontilségaux,oul’unest-ilplusgrandquel’autre?Ilfautd’abordexaminerleurssignes,c’estàdireleursbitsdepoidsforts.Silessignessontdifférents,lacomparaisonestimmédiate.Silessignessontidentiques,ilsuffitdecomparerlesn−1autresbitsdansl’ordrebinairenaturel,quelesnombressoientpositifsounégatifs.

Calculdel’opposéAveclecodageencomplémentà2,ondémontrequelecodagedel’opposéd’unnombres’obtientenappliquantlaprocéduresuivante:

• oninversetoussesbits(=«complémentà1»)• onajoute1,sanstenircomptedel’éventuelleretenue(=«complémentà2»)

Parexemple,+3estcodé00000011sur8bits.Pourobtenirlecodagede-3,oninversetouslesbitsducodageprécédent,soit11111100etonajoute1,soit11111101quiestbienlecodagede-3.Sionréappliquelaprocédureaucodagede-3,onretrouveralecodagede+3.

Calculdel’opposé(bis)Ondémontreégalementquel’opposépeutsecalculeràpartirdel’originaldelafaçonsuivante:lebitdepoidsfaibleestrecopiételquel;lesautresbitssontinversésseulements’ilexisteunbità1surleurdroitedansl’original.

III.4. Problématiquedel’additionLorsqu’oneffectueuneadditionenbinaire,laméthodelaplussimpleconsisteàl’effectuerbitàbit,encommençantparlebitdepoidsfaible(figureII.29).

39

FigureIII-6.Additionenbinairebitàbit.

Achaquerangidel’addition,onfaitlasommedesbitsA[i]etB[i],ainsiquedel’éventuelleretenuequiviendraitdurangprécédenti−1.CecalculproduitlebitS[i]durésultat,ainsiqu’uneretenuequiserapasséeaurangsuivant.Lorsqu’onaeffectuétoutescesadditionsdepuislebitdepoidsleplusfaible(rang0)jusqu’aubitdepoidsleplusfort,laretenuefinaleseralaretenuequisortdudernierrangd’addition.Onappelledemi-additionneurlecircuitquifaitlecalculdurang0,cariln’apasàprendreencomptederetenuequiviendraitd’unétageprécédent.Onappelleadditionneurcompletlecircuitquiprendencomptelecalculd’unbitderangquelconquedifférentde0.

III.4.1. Demi-additionneurUndemi-additionneurestlecircuitquiréaliseuneadditionentredeuxbitsAetB,etquiproduitlasommesurunbitSavecl’éventuelleretenueR.LatabledevéritéetlemodulecorrespondantsontreprésentésfigureII.30.IlestclaireneffetquelasommeestleXORentreAetB,etlaretenuenepeutintervenirquelorsqueAetBvalent1touslesdeux.

𝐴 𝐵 𝑆 𝑅0 0 0 00 1 1 01 0 1 01 1 0 1

FigureIII-7.Tabledevéritéetschémadudemi-additionneur.

III.4.2. AdditionneurcompletUnadditionneurcompletestundemi-additionneurquicomporteenplusenentréeuneretenueentrantequiviendraitd’unautreétaged’addition.Lesentréessontdonclesdeuxbits𝐴et𝐵etlaretenueentrante𝑅𝐸;lessortiessontlebitrésultat𝑆etlaretenuesortante𝑅𝑆.Ilestfacilededéterminer𝑆et𝑅𝑆auvudeleurfonction,sansavoirbesoindeleurtabledevérité:

• 𝑆estlasommedestroisbits𝐴, 𝐵et𝑅𝐸,etonsaitdepuislasection3quec’estunXORàtroisentrées:𝑆 = 𝐴�𝐵�𝑅𝐸

• 𝑅𝑆estlaretenuedecetteaddition,etvaut1lorsqu’ilyaaumoinsdeuxvaleursà1dansletriplet(𝐴, 𝐵, 𝑅𝐸):c’estdonclafonctionmajoritédéjàvueensection3,𝑅𝑆 = 𝐴. 𝐵 + 𝐴 ·𝑅𝐸 + 𝐵 · 𝑅𝐸

40

module fulladder(A,B,RE: S,RS) S = /A*/B*RE+/A*B*/RE+A*/B*/RE+A*B*RE ; RS = A*B + A*RE + B*RE ; end module

FigureIII-8.Additionneurcomplet:lasommeestunXOR,etilyaretenuelorsqu’unemajoritédesentréesvaut1.

III.4.3. Additionneurripple-carryUnadditionneurripplecarryréaliselittéralementlaméthoded’additioncolonneparcolonne,encommençantparunedemi-additiondespoidsfaiblesetenenchaînantensuitel’additioncomplètedesbitssuivants.Surnbits,ilnécessiteraundemi-additionneur,etn−1additionneurscomplets.Sur4bitsparexemple,ilprendlaformedelafigureII.32.LadescriptionenlangageSHDLesttrèssimple:ilsuffitdecombinerlesécrituresd’undemi-additionneuretde3additionneurscomplets(figureII.33).Cetyped’additionneurestsimple,maislent:ilfautattendrequetouteslesretenuessesoientpropagéesdepuislebitdepoidsleplusfaiblejusqu’aubitdepoidsleplusfortpourquelecalculsoitterminé.Oruncalculd’additionestuncalculcombinatoire,doncquipeutêtreeffectuéenthéorieenuneétapedepropagation,sousformed’unesommedeminterms,etsanstouscestermesintermédiairesquereprésententlesretenues.Maisleséquationsàécriredeviennenttrèscomplexesdèslerang3,etsontdoncimpraticables.Entrecesdeuxextrêmes,ilestnécessairedeconcevoirdesadditionneursdecomplexitéraisonnablepourunnombredebitssupérieurà8,etavecdestempsdepropagationquinecroissentpaslinéairementaveccenombredebits.Onvavoirensection8.5commentlesadditionneurscarrylookaheadparviennentàcecompromis.

FigureIII-9.Additionripplecarry4bits.Lerang0estcalculéavecundemi-additionneur,etlesautresrangsavecdes

additionneurscomplets.

41

module ripplecarry4(a3,b2,a1,a0,b3,b2,b1,b0: s3,s2,s1,s0,carry) halfadder(a0,b0:s0,c0); fulladder(a1,b1,c0:s1,c1); fulladder(a2,b2,c1:s2,c2); fulladder(a3,b3,c2:s3,carry); end module

module halfadder(a,b: s,cout) s = /a*b+a*/b; cout = a*b; end module

module fulladder(a,b,cin: s,cout) s = /a*/b*cin+/a*b*/cin+a*/b*/cin+a*b*cin; cout = a*b + a*cin + b*cin; end module

FigureIII-10.ÉcritureSHDLd’unadditionneurripple-carry4bits.Oncombineunmodulehalfadderet3modulesfulladder.

III.4.4. Additionneurcarry-lookaheadOnavuensection8.1quec’étaitlapropagationdelaretenuequiralentissaitlecalculd’unesommedansunadditionneurripplecarry.Sioncalculea[n..0]+b[n..0],onapourchaqueadditionneurcomplet:

𝑠\ = 𝑎\�𝑏\�𝑐\ 𝑐\ = 𝑎\. 𝑏\ + 𝑎\. 𝑐\ + 𝑏\. 𝑐\

Calculer𝑠eparexemplenécessitedecalculer𝑐e,donc𝑠8,donc𝑐8,etc.Laméthodecarrylookaheadpartduconstatqu’onpeutfacilementdétermineràchaqueétages’ilyaurauneretenueounon,enraisonnantentermesderetenuepropagéeetderetenuegénérée.Considéronsl’additiondesdeuxtermessuivants:

P P P G G P P1 0 1 1 1 0 0 10 1 0 1 1 1 0 0

Un’G’estplacéaudessusd’unecolonnederangilorsquelestermesàajouter𝑎\ et𝑏\ valenttousdeux’1’:onestalorssûrqu’uneretenuesera’Générée’pourl’étagesuivant.Sinon,un’P’estplacélorsqu’undesdeuxtermesvaut’1’:siuneretenuearrivedepuisl’étageprécédent,alorscetétagevala’Propager’,puisqu’onseraalorssûrqu’ilyaaumoinsdeux’1’parmilestroisbitsàadditionneràcerang.Enraisonnantuniquementsurles’P’etles’G’,ontrouvefacilementquelsétagesvontémettreuneretenue.Ainsisurl’exemple,l’étage0peutpropageruneretenue,maisaucunen’aencoreétégénérée.Lesétages3et4génèrentuneretenue,etlesétagessuivants5,6et7lapropagent.Lestermes𝐺\ et𝑃\ sonttrèsfacilesàcalculer:

𝐺\ = 𝑎\. 𝑏\ 𝑃\ = 𝑎\ + 𝑏\

Unmoduleautonomepeutprendreenentréeslesvaleursdes𝐺\ et𝑃\detouslesrangsetlesutiliserpourcalculerlesretenuesentrantesdechaqueadditionneurcomplet,selonleschémagénéraldelaFigureIII-11.

42

FigureIII-11.Schémagénérald’unadditionneurcarry-lookahead.OncalculepourchaquerangideuxbitsGietPiqui

indiquentsicetétagevagénéreruneretenue,ouenpropagerunedel’étageprécédent.Unmodulespécifiquecarry_lookaheadcalculerapidementàpartirdesGietPilesretenuescipourtouslesrangs.

Onnoteraquelesretenuessortantescoutdesadditionneurscompletsnesontpasexploitées,puisquec’estlemodulecarry_lookaheadquis’occupeducalculdetouteslesretenues.Ilfautmaintenantréaliserunmodulecarry_lookaheadquieffectuececalculdansletempslepluscourt.L’idéegénéraleestqu’ilyauneretenueaurangisi𝐺\ =1ousi𝑃\=1etsiuneretenueexisteaurang𝑖 − 1:

𝑐\<6 = 𝐺\ + 𝑐\ · 𝑃\ Ontrouve:

𝑐6 = 𝐺a + 𝑐\9 · 𝑃a𝑐8 = 𝐺6 + 𝑐6 · 𝑃6 = 𝐺6 + 𝐺a. 𝑃6 + 𝑐\9 · 𝑃a. 𝑃6𝑐e = 𝐺8 + 𝑐8 · 𝑃8 = 𝐺8 + 𝐺6. 𝑃8 + 𝐺a. 𝑃6. 𝑃8 + 𝑐\9 · 𝑃a. 𝑃6. 𝑃8𝑐i = 𝐺e + 𝑐e · 𝑃e = 𝐺e + 𝐺8. 𝑃e + 𝐺6. 𝑃8. 𝑃e + 𝐺a. 𝑃6. 𝑃8. 𝑃e + 𝑐\9 · 𝑃a. 𝑃6. 𝑃8. 𝑃e

Ilnefautpasseleurrer:ilyalàaussiunecascadedanslescalculs,maiselleportesurdestermesplussimplesquesionavaitopérédirectementsurlestermesaietbi.Au-delàde7à8bits,leséquationsdumodulecarry_lookaheaddeviennenttropcomplexespourêtreimplémentéessousformedesommesdetermes,etdessignauxintermédiairesdoiventêtreintroduits.Sionconsidèrelasommedeproduitscommeunitédecalculetdepropagation(hypothèsed’implémentationdansunCPLDouunFPGA),lecalculcompletd’unesommenécessite1tempspourlecalculdesGietPi,1tempspourlecalculdesretenues,et1tempspourl’additionneurcomplet,soituntotalde3tempsdepropagation,contre4pourl’additionneurripplecarry.Legainestfaible,maisilaugmenteàmesurequelenombredebitsgrandit.

43

L’écriturecomplèted’unteladditionneur4bitsenlangageSHDLestdonnéeFigureIII-12 end module

module carry_lookahead(G[3..0],P[3..0],c0:c4,c3,c2,c1) c1=G[0]+P[0]*c0 ; c2=G[1]+P[1]*G[0]+P[1]*P[0]*c0 ; c3=G[2]+P[2]*G[1]+P[2]*P[1]*G[0]+P[2]*P[1]*P[0]*c0 ; c4=G[3]+P[3]*G[2]+P[3]*P[2]*G[1]+P[3]*P[2]*P[1]*G[0]+P[3]*P[2]*P[1]*P[0]*c0 ; end module

module cla4(a[3..0],cin,b[3..0]:s[3..0],cout) G[3..0] = a[3..0] * b[3..0]; P[3..0] = a[3..0] + b[3..0]; carry_lookahead(G[3..0],P[3..0],cin:cout,c3,c2,c1) ; xor3(a[3],b[3],c3:s[3]) ; xor3(a[2],b[2],c2:s[2]) ; xor3(a[1],b[1],c1:s[1]) ; xor3(a[0],b[0],cin:s[0]) ; end module

FigureIII-12.ÉcritureSHDLd’unadditionneur4bitscarry-lookahead.Onnoteral’écriturevectoriellepourleséquationsdestermes𝑮𝒊et𝑷𝒊.

Associationd’additionneurscarry-lookaheadLatechniquedel’additionneurcarry-lookaheadnepeutpasêtreutiliséeaudelàde7à8bits,maisonsouhaitecontinueràl’exploitersurdesadditionneursdeplusgrandetaille.Onpeutsubdiviserlesmotsàadditionnerengroupesde4bitsparexemple,eteffectuerdanschaquegroupeuneadditioncarry-lookahead.Seposealorsleproblèmedel’associationdecesgroupes:va-t-onsecontenterdeleschaînerenripplecarry?Onpeutenfaitappliquerànouveaulatechniquecarry-lookaheadàl’échelledesgroupes.Chaqueadditionneurcarry-lookaheadsur4bits𝐶𝐿𝐴\ vagénérerdeuxsignaux𝐺𝐺\(groupgenerate)et𝐺𝑃\ (grouppropagate).𝐺𝐺\ indiqueraquelegroupegénèreranécessairementuneretenueet𝐺𝑃\ indiqueraquesiuneretenuearrivedanscegroupe(parsonentrée𝑐𝑖𝑛),elleserapropagéeàtraversluiaugroupesuivant.Lamêmeméthodeestainsiappliquéeàl’échelledesgroupes,chaquegroupejouanticilemêmerôlequejouaitunétagede1bitdansl’additionneurcarry-lookaheadordinaire.Lemêmemodulecarry_lookaheadestd’ailleursemployépourcalculerrapidementlesretenuesc4,c8,c12etc16quisontenvoyéesauxdifférentsgroupes.LaFigureIII-13montreunexempled’addition,etlaFigureIII-14présentel’organisationgénéraled’untelgroupement.

FigureIII-13.Exempled’addition16bitsavecunadditionneurgroupcarry-lookahead.Legroupe#0génèreuneretenue,

quiestpropagéeautraversdugroupe#1,etdontl’effetvientseterminerdanslegroupe#2.

44

IlnousresteseulementàtrouverleséquationsdeGGetGP.GGindiquequ’uneretenueestgénéréeparlegroupe,c’estàdiregénéréeanniveaudubit3,ougénéréeauniveaudubit2etpropagéeaurang3,etc.:

𝐺𝐺 = 𝐺3 + 𝐺2 ∗ 𝑃3 + 𝐺1 ∗ 𝑃2 ∗ 𝑃3 + 𝐺0 ∗ 𝑃1 ∗ 𝑃2 ∗ 𝑃3

FigureIII-14.Schémagénérald’ungroupementde4additionneurs4bitscarry-lookahead.Chaqueadditionneurfournit

deuxsignauxGGetGPquiindiquents’ilgénèreoupropageuneretenuepourlegroupesuivant.Unmodulecarry_lookaheadeffectuelecalculrapidedesretenuesentrantesdechaquegroupeàpartirdecessignaux.

GPindiquequ’uneretenuearrivantparcinserapropagéetoutaulongdugroupe,c’estàdirequ’àchaquerangdebitiilyaaumoinsun’1’suraioubi,c’estàdireencorequ’àchaquerangionaPi=1

𝐺𝑃 = 𝑃0 ∗ 𝑃1 ∗ 𝑃2 ∗ 𝑃3

45

Lafiguresuivantedonnel’ensemblecompletdeséquationsSHDLdecetadditionneur.Lesmodulescarry_lookaheadetfulladdersontlesmêmequ’àlafigureII.35,cla4aétélégèrementmodifiépuisqu’ilproduitmaintenantlessignauxGGetGP.module cla16(a15..a0,b15..b0,cin:s15..s0,cout) cla4(a3..a0,b3..b0,cin:s3..s0,c4_,GG0,GP0); cla4(a7..a4,b7..b4,c4:s7..s4,c8_,GG1,GP1); cla4(a11..a8,b11..b8,c8:s11..s8,c12_,GG2,GP2); cla4(a15..a12,b15..b12,c12:s15..s12,c16_,GG3,GP3); carry_lookahead(GG3,GP3,GG2,GP2,GG1,GP1,GG0,GP0,cin:cout,c12,c8,c4); end module

module cla4(a3,a2,a1,a0,b3,b2,b1,b0,cin:s3,s2,s1,s0,cout,GG,GP) G3..G0 = a3..a0 * b3..b0; P3..P0 = a3..a0 + b3..b0; carry_lookahead(G3,P3,G2,P2,G1,P1,G0,P0:cout,c2,c1,c0); full_adder(a3,b3,c2:s3,cout3); full_adder(a2,b2,c1:s2,cout2); full_adder(a1,b1,c0:s1,cout1); full_adder(a0,b0,cin:s0,cout0); GG = G3+G2*P3+G1*P2*P3+G0*P1*P2*P3; GP = P0*P1*P2*P3; end module

FigureIII-15.ÉcritureSHDLd’unadditionneur16bitscarry-lookahead.Lesmodulescla4,carry_lookaheadetfulladdersontceuxutilisésdanslaversion4bits,cla4ayantétélégèrementmodifiépourproduirelessignauxGGetGP.

III.4.5. Soustraction

ProblématiquedelasoustractionCommel’addition,lasoustractionpeutêtreeffectuéebitàbit,encommençantparlebitdepoidsfaible.

FigureIII-16.Soustractionenbinairebitàbit.Unbitd’empruntestpropagédesbitsdepoidsfaiblesverslesbitsdepoids

forts.

Lebitquiestpropagéderangenrangestunbitd’emprunt:ilvaut1lorsqueaiestpluspetitquebi,ouplusexactementlorsqueaiestpluspetitquebipluslebitd’empruntdel’étageprécédent.Chaquerangdesoustractionestuncircuitcombinatoireà3entréeset2sortiesappelésoustracteurcompletdontlatabledevéritéestdonnéeFigureIII-17.OnanotéEEl’empruntentrant,quivientdurangprécédentetESl’empruntsortantquiestpasséaurangsuivant.

46

𝐴 B 𝐸𝐸 𝑆 𝐸𝑆0 0 0 0 00 0 1 1 1

0 1 0 1 10 1 1 0 11 0 0 1 01 0 1 0 0

1 1 0 0 01 1 1 1 1

FigureIII-17.Tabledevéritéd’unsoustracteurcomplet.OnsoustraitBàA;EEestl’empruntentrantetESl’empruntsortant.

OnvoitimmédiatementqueSestleXORdestroisentréesA,BetEE.L’empruntsortantESvaut1lorsqueAvaut0etqu’undesdeuxBouEEvaut1,oulorsqueAvaut1etqueBetEEvalenttouslesdeux1.Ontrouvedonc:𝐸𝑆 = 𝐴 · 𝐵 + 𝐴 · 𝐸𝐸 + 𝐸𝐸 · 𝐵LeschémadusoustracteurcompletetsonécritureSHDLsontdonnésFigureIII-18.

module fullsub(A,B,EE: S,ES) S = /A*/B*EE+/A*B*/EE+A*/B*/EE+A*B*EE ; ES = /A*B + /A*EE + B*EE ; end module

FigureIII-18.Soustracteurcomplet:ladifférenceestunXOR,etilyaretenuelorsqu’unemajoritédessignaux(/A,B,EE)vaut1.

Soustracteurripple-borrowCommeunadditionneurripple-carry,unsoustracteurripple-borrowestforméparchaînagedeplusieursétagesdesoustracteurscomplets.Commelui,ilesttrèssimpledeconception,maisprésenteaussilesmêmesinconvénientsdelenteurdusàlapropagationdessignauxd’emprunt.Lesfiguressuivantesmontrentunadditionneur4bitsripple-borrowetl’écritureSHDLassociée.

FigureIII-19.Schémagénérald’unsoustracteur4bitsripple-borrow.

47

Transformationd’unadditionneurensoustracteurOnpeutfairelasoustractionA−Beneffectuantl’additionA+(−B).−Bestobtenuenprenantlecomplémentà2deB,c’estàdirelecomplémentà1deBauquelonajoute1.L’ajout+1peutsefaireenexploitantunsignalderetenueentrante,commeonpeutlevoirsurlafiguresuivante:

FigureIII-20.Additionneur/soustracteurréaliséàpartird’unadditionneur.Lorsquel’entréeADD/SUBvaut0l’additionA+Bestréalisée;lorsqu’ellevaut1,lesXORscalculentlecomplémentà1deBetleforçageà1delaretenueentrantecin

créélecomplémentà2,d’oùlasoustraction.

Cettefiguremontreunadditionneur/soustracteur:siADD/SUBvaut0ileffectueuneaddition;s’ilvaut1lesnXORseffectuentlecomplémentà1duvecteurB,etleforçageà1delaretenueentrantevaconduireàajouter1,doncàconstruirelecomplémentà2deB,doncàréaliserunesoustraction.Onperdmalheureusementlesignalderetenueentrante;laretenuesortantecoutparcontreabienlesensd’uneretenuepourl’addition,etsoninverselesensd’unemprunt,d’oùl’inversionfinalecommandéeparlesignalADD/SUB.LaFigureIII-21donnelecodeSHDLassociépourunadditionneur/soustracteur16bits;ellereprendlemoduleadditionneurcarry-lookahead16bitscla16étudiéàlasectionprécédente.

module addsub16(a[15..0],b[15..0],addsub: s[15..0],cout) bb[15..0] = /addsub*b[15..0] + addsub*/b[15..0]; cla16(a[15..0],bb[15..0],addsub:s[15..0],co); cout=/addsub*co+addsub*/co; end module

FigureIII-21.ÉquationsSHDLd’unadditionneur/soustracteur16bits.Onréutilisel’additionneurcarry-lookahead16bitsétudiéauparavant.

III.4.6. Multiplicateursystolique

ProblématiquedelamultiplicationOnsouhaitemultiplierdeuxnombresdenbitsnonsignés.Lerésultatestsur2nbits,puisquelamultiplicationdesdeuxplusgrandsnombressurnbitsdonne:

(29 − 1)(29 − 1) = 289 − 2 · 29 + 1 < 289 − 1Laproblématiqueestlamêmequepourl’addition:puisqu’ils’agitd’uncalculcombinatoire,ilpeutsefaireenthéoriesousformed’unesommedeminterms,enuneétapedepropagation(enconsidérantunefoisencorequel’unitédepropagationestlasommedeproduit).Maisbiensûrenpratique,leséquationsàimplémenterseraientbeaucouptropcomplexes.Enbinaire,laméthodelaplusdirectepoureffectuerunemultiplicationconsisteàlaposercommeàl’école:

48

FigureIII-22.Exempledemultiplicationdenombresnonsignésde4bits.

Cetteopérationestplusfacileàfaireenbinairequ’endécimal,cariln’yapasàconnaîtresestablesdemultiplication!Plusprécisément,lorsqu’onmultiplieunchiffre𝑎\ avecunchiffre𝑏\,onproduit(c’estlecasdeledire)𝑎\. 𝑏\ (FigureIII-23).Ilresteensuiteàfairelasommedesproduitspartielsainsiobtenus.Quandonfaitcettesommeàlamain,onlafaitcolonneparcolonne,encommençantparlacolonnelaplusàdroite,etonadditionneàlafoistousleschiffresquiapparaissentdansunecolonneetlaoulesretenuesquiproviennentdelacolonneprécédente.Ilpeuteneffetyavoiruneretenuesupérieureà1lorsdelasommationdeschiffresd’unecolonne,contrairementaucasdel’addition.L’idéedumultiplicateursystolique(matriciel)consisteàréalisercettesommedesproduitspartielsdansunematricedecellulesquialamêmeformequelesrangéesàajouter(figureII.47).

FigureIII-23.(a)Lesretenuespeuventêtrepropagéesàunniveaulocal,etnonàl’échelledetoutelacolonne.(b)entrées

etsortiesauniveaud’unecellule.

Chaquefoisqu’unecelluleproduituneretenue,elleestpasséedirectementàlacolonneimmédiatementàgauche,unrangplusbas(situation(a)).Cettetechniquepermetdenepaslaisserlesretenuess’accumuleràchaquecolonne,enlestraitantsimmédiatementàunniveaulocal.Chaquecelluledoitfairel’additiondetroistermes:leproduitpartiel𝑎\. 𝑏\,lasommeduniveauprécédent,etlaretenuequiprovientdelacelluleenhautàdroite(situation(b)).Unadditionneurcompletpermetd’effectuercettesomme,quiestpasséeàlacelluleimmédiatementenbas,etdecalculeruneretenueàpasseràlacelluleenbasàgauche(FigureIII-24).

49

FigureIII-24.Multiplicateursystolique:chaquecelluleestunadditionneurcomplet.

Leschémagénérald’untelmultiplicateurestdonnéFigureIII-25.Lescellulesontlamêmedispositionquelasommedestermespartiels,avecunrecadrageàdroite.Onremarqueraladernièrerangée,quifournitlesbitsdepoidsfortsdurésultatfinal𝑠o. . 𝑠i.Lesbitsdepoidsfaibles𝑠e. . 𝑠aproviennentquantàeuxdescellulesdelacolonnededroite.

FigureIII-25.Schémagénérald’unmultiplicateursystolique4bitsx4bitsvers8bits.

LetexteSHDLcorrespondantàceschémaestlesuivant:

50

module multsyst(a[3..0], b[3..0]: s[7..0])

// première rangée ; produit s0 p30=a[3]*b[0]; p20=a[2]*b[0]; p10=a[1]*b[0]; p00=a[0]*b[0]; fulladder(0,0,p30:s30,c30); fulladder(0,0,p20:s20,c20); fulladder(0,0,p10:s10,c10); fulladder(0,0,p00:s[0],c00);

// deuxième rangée ; produit s1 p31=a[3]*b[1]; p21=a[2]*b[1]; p11=a[1]*b[1]; p01=a[0]*b[1]; fulladder(c30,0,p31:s31,c31); fulladder(c20,s30,p21:s21,c21); fulladder(c10,s20,p11:s11,c11); fulladder(c00,s10,p01:s[1],c01);

// troisième rangée ; produit s2 p32=a[3]*b[2]; p22=a[2]*b[2]; p12=a[1]*b[2]; p02=a[0]*b[2]; fulladder(c31,0,p32:s32,c32); fulladder(c21,s31,p22:s22,c22); fulladder(c11,s21,p12:s12,c12); fulladder(c01,s11,p02:s[2],c02);

// quatrième rangée ; produit s3 p33=a[3]*b[3]; p23=a[2]*b[3]; p13=a[1]*b[3]; p03=a[0]*b[3]; fulladder(c32,0,p33:s33,c33); fulladder(c22,s32,p23:s23,c23); fulladder(c12,s22,p13:s13,c13); fulladder(c02,s12,p03:s[3],c03);

// rangée du total final pour s7..s4 fulladder(0,c33,0:s[7],c3x); fulladder(s33,c23,0:s[6],c2x); fulladder(s23,c13,0:s[5],c1x); fulladder(s13,c03,0:s[4],c0x); end module

FigureIII-26.ÉcritureSHDLd’unmultiplicateursystolique4bitsx4bits.

Onvoitfacilementquecemultiplicateur4x4nécessite6tempsdepropagation(unité:sommedetermes).Defaçonplusgénérale,unmultiplicateursystoliquenbitsxnbitsnécessiten+2tempsdepropagation.C’estdoncuneméthodeassezefficace,quiestfacileàimplémenterdansdescircuitsmatricielstelsqueCPLDsetFPGAs.

III.4.7. Divisionentière

ProblématiquedeladivisionCommepourlamultiplication,onvaessayerdeconcevoirunréseaudecellulesquiréaliseunedivisionnonsignéeenutilisantlaméthodeeuclidienne.Prenonsunexemple:

51

FigureIII-27.Exemplededivisioneuclidienneenbinaire.

Onaréaliséiciunedivisionnonsignée8bits/4bits->8bits.Ledividendeest𝑝o. . 𝑝a=11010101012=213etlediviseurest𝑑e. . 𝑑a=10112=11;ontrouveunquotient𝑞o. . 𝑞a=000100112=19etunreste𝑟e. . 𝑟a=01002=4.Onvoitquelenombred’étagesdecettedivisionestégalàlalargeurdudividende,8dansl’exemple.Àchaqueétape,oneffectueunesoustractionentreuntermecourantetlediviseur.Audépart,cetermecourantestlepoidsfortdudividendecomplétéde4zérosàgauche.Lediviseurestégalementcomplétéd’unzéroàgaucheetc’estunesoustractionsur5bitsquiestréalisée.Ilyaalorsdeuxcas:

• lasoustractiondonneunrésultatnégatif,signaléparlebitd’empruntà1;onnedoitalorspasprendresonrésultatpourletermecourant,maislelaissertelquel.Onluirajouteraàdroiteunbitsupplémentairedudividende,àl’étagesuivant.Onajouteunzéroàdroiteauquotient.

• lasoustractiondonneunrésultatpositif,signaléparlebitd’empruntà0;onremplaceletermecourantparlerésultatdecettesoustraction,etonluiajouteraàdroiteunbitsupplémentairedudividende,àl’étagesuivant.Onajouteun1àdroiteauquotient.

Lereste𝑟e. . 𝑟aestlavaleurdutermecourantaprèsladernièreétape.

StructuredudiviseurOnsouhaiteainsiréaliserundiviseur2nbits/nbits->2nbits;onvaprendreicicommedansl’exemplen=4,maislatechniqueestbiensûrgénéralisableàtoutevaleurden.Lafiguresuivantemontrelastructurenécessairedudiviseur.

52

FigureIII-28.Structuredudiviseurnonsigné8bits/4bits->8bits.Àchaqueétageontestesionpeutsoustrairelediviseurautermecourant.Lesbitsduquotientsontlesinversesdesbitsd’empruntdessoustractions;leresteestla

valeurdutermecourantaprèsladernièreétape.

Àchaqueétageonréaliselasoustractionentreletermeissudel’étageprécédentet𝑑e. . 𝑑a.Onutilisepourceladessoustracteurs5bitssansretenueentrante,etavecuneretenuesortante;onavuauxsectionsprécédentescommentlesréaliser.Àchaqueétageilfautaussiconstruireletermecourant,enfonctiondesdeuxcasexaminésdansladiscussionprécédenteetdéterminésparlavaleurdubitd’empruntdelasoustraction.Ondevrapourcelautiliserdesmultiplexeursdontlacommandeseralebitd’emprunt.LafiguresuivantedonnelecodeSHDLcompletassociéàcediviseur.

53

module div8(p[7..0],d[3..0]: q[7..0],r[3..0]) // soustracteur sub5(0,0,0,0,p[7],0,d[3],d[2],d[1],d[0]:x74,x73,x72,x71,x70,nq7); q[7]=/nq7; // multiplexeur s74=nq7*z+/nq7*x73; s73=nq7*z+/nq7*x73; s72=nq7*z+/nq7*x72; s71=nq7*z+/nq7*x71; s70=nq7*p7+/nq7*x70; sub5(s73,s72,s71,s70,p[6],0, d[3],d[2],d[1],d[0]:x64,x63,x62,x61,x60,nq6); q[6]=/nq6; s64=nq6*s73+/nq6*x64; s63=nq6*s72+/nq6*x63; s62=nq6*s71+/nq6*x62; s61=nq6*s70+/nq6*x61; s60=nq6*p6+/nq6*x60; ... // code analogue pour q4,...,q1 ... sub5(s13,s12,s11,s10,p0,0, d[3],d[2],d[1],d[0]:x04,x03,x02,x01,x00,nq0); q[0]=/nq0; s04=nq0*s13+/nq0*x04; r[3]=nq0*s12+/nq0*x03; r[2]=nq0*s11+/nq0*x02; r[1]=nq0*s10+/nq0*x01; r[0]=nq0*p0+/nq0*x00; end module

FigureIII-29.ÉcritureSHDLd’undiviseurnonsigné8bits/4bits->4bits.

III.4.8. ComparateursL’opérationdecomparaisonentrenombresentiersestfondamentaledansunordinateur.Sionsouhaitecomparerdeuxnombresdenbits,l’interfacegénéralequ’onpeututiliserestcelledelaFigureIII-30.

FigureIII-30.Interfaced’uncomparateursurnbits.UnesortieindiquequeA=B,uneautreindiquequeA>B.

UnesortieSUPindiquequeA>B,l’autreEQindiquequeA=B.AvoircesdeuxsortiespermetdetoutsavoirsurlespositionsrespectivesdeAetB:

• 𝐴 > 𝐵:SUP=1.• 𝐴 ≥ 𝐵:SUP=1ouEQ=1.• 𝐴 = 𝐵:EQ=1• 𝐴 < 𝐵:SUP=0etEQ=0.• 𝐴 ≤ 𝐵:SUP=0.

Ilfautmaintenantsavoirsilesnombresquel’oncomparesontdesnombresentiersnaturels,oudesnombresrelatifscodésencomplémentà2.Eneffet,siA=1111etB=0101,unecomparaisonnon

54

signéevadonnerA>B(carA=15etB=5),alorsqu’unecomparaisonsignéedonneraA<B(carA=−1etB=+5).

ComparateurnonsignéSupposonsqueAetBsoientcodésenbinairepur,parexemplesur4bits.Oncommenced’abordparcomparerleurspoidsfortsA3etB3;siceluideAestplusgrandqueceluideB,onpeutconclureSUP=1;sinonSUPnepeutvaloir1quesiA3=B3etquesiA2..A0>B2..B0.OnaainsiunedéfinitionrécursivedeSUP:

𝑆𝑈𝑃 = (𝐴3 > 𝐵3) + (𝐴3 = 𝐵3) · (𝐴2. . 𝐴0 > 𝐵2. . 𝐵0)𝑆𝑈𝑃 = (𝐴3 > 𝐵3) + (𝐴3 = 𝐵3) · ((𝐴2 > 𝐵2) + (𝐴2 = 𝐵2) · (𝐴1. . 𝐴0 > 𝐵1. . 𝐵0))𝑆𝑈𝑃 = (𝐴3 > 𝐵3) + (𝐴3 = 𝐵3) · ((𝐴2 > 𝐵2) + (𝐴2 = 𝐵2) · ((𝐴1 > 𝐵1) + (𝐴1

= 𝐵1) · (𝐴0 > 𝐵0)))Ai>Bicorrespondenfaitàl’uniquesituationAi=1etBi=0ets’exprimedoncAi−Bi.PourAi=Bi,onpeututiliserlefaitqu’unXORestunopérateurdedifférence,etdoncquesoninverseestunopérateurdecoïncidence:(𝐴\ = 𝐵𝑖) = 𝐴w ⊕ 𝐵\ = 𝐴\ · 𝐵\ + 𝐴w · 𝐵w

𝑆𝑈𝑃 = 𝐴e𝐵e + 𝐴e ⊕ 𝐵e · (𝐴8𝐵8 + 𝐴8 ⊕ 𝐵8 · (𝐴6𝐵6 + 𝐴6 ⊕ 𝐵6 · 𝐴a𝐵a))LecodeSHDLcorrespondantest:

module cmpu4(a[3..0], b[3..0]: sup, eq) sup=a[3]*/b[3]+eq3*sup2; eq3=a[3]*b[3]+/a[3]*/b[3]; sup2=a[2]*/b[2]+eq2*sup1; eq2=a[2]*b[2]+/a[2]*/b[2]; sup1=a[1]*/b[1]+eq1*a[0]*/b[0]; eq1=a[1]*b[1]+/a[1]*/b[1]; eq0=a[0]*b[0]+/a[0]*/b[0]; eq=eq3*eq2*eq1*eq0; end module

ComparateursignéUnecomparaisonsignéeestunpeuplusdélicatequ’unecomparaisonnonsignée;l’essentieldelacomparaisonsejoueenexaminantlessignes𝑎9_6et𝑏9_6destermes𝐴 = 𝑎9_6. . 𝑎aet𝐵 =𝑏9_6. . 𝑏aàcomparer:

• siA<0(𝑎9_6 = 1)etB>0(𝑏9_6 = 0)alorslacomparaisonestimmédiate:SUP=0etEQ=0.

• siA>0 𝑎9_6 = 0 etB<0(𝑏9_6 = 1)alorslacomparaisonestimmédiate:SUP=1etEQ=0.

• siA>0 𝑎9_6 = 0 etB>0(𝑏9_6 = 0)alorsilsuffitdecomparerlesn−1bitsdepoidsfaibles.

• siA<0(𝑎9_6 = 1)etB<0(𝑏9_6 = 1)alorsilsuffitégalementdecomparerlesn−1bitsdepoidsfaibles.Eneffet,lesnombresdel’intervalle[2n−1,0]s’écriventencomplémentà2:[1000..000,1000..001,1111..111]etonvoitquelesn−1bitsdepoidsfaibleévoluentdefaçoncroissante.

OnareprésentésurlaFigureIII-31uncomparateursignésur5bitsutilisantuncompteurnonsignéde4bits.Unmultiplexeur4vers1sépareles4situationsdécrites.

55

module cmps5(a[4..0],b[4..0]: sup, eq) cmpu4(a[3..0], b[3..0]: sup1, eq1); mux4(sup1, 1, 0, sup1, a[4], b[4]: sup); eq= a[4]*b[4]*eq1+/a[4]*/b[4]*eq1; eq=eq4*eq1; end module

FigureIII-31.Comparateursignésur5bits.Silessignesa4etb4sontdifférents,lacomparaisonestimmédiate;s’ilssontégauxoncompareennonsignéles4bitsdepoidsfaibles.

AssemblagedecomparateursnonsignésIlestfaciledechaîner2comparateursnonsignésdenetmbitspourformeruncomparateurnonsignéden+mbits(figureII.57).

module cmpu(a[9..0], b[9..0]: sup, eq) cmpu5(a[9..5], b[9..5]: sup1, eq1); cmpu5(a[4..0], b[4..0]: sup2,eq2); eq=eq1*eq2; sup=sup1+eq1*sup2; end module

FigureIII-32.Associationdedeuxcomparateursnbitsnonsignés.Lerésultatformeuncomparateur2nbitsaveclemêmeinterface.

Oncompared’abordlesnbitsdepoidsforts;siceuxdeAsontplusgrandsqueceuxdeB,leSUPfinalestassertéautraversduOU.SilespoidsfortsdeAetceuxdeBsontégaux,oncomparelesmbitsdepoidsfaiblesetonconclue.LasortiefinaleEQestquantàelleassertéelorsquelesdeux

56

sortiesEQsontassertées.OnareprésentéenfigureII.58lecodeSHDLd’uncomparateurnonsignésur10bits,forméparl’assemblagededeuxcomparateursnonsignésde5bits.LasortiedemoduleEQaétéessentielleicipourpermettred’associerlescircuits.Parailleurs,lenouveaumoduleforméexposelemêmeinterfacequesesparties:AetBenentrées,etSUPetEQensorties,cequipermetànouveauetrécursivementd’associercescircuits.Commedanslesdisciplineslogiciellesdel’informatique,ilestintéressantdetrouverlabonneinterfaceàunmodule,quivapermettreunebonneréutilisation.

III.5. Exercicescorrigés

Exercice1:conversionsÉcrire54321enbinaire,puisenhexadécimal.

SolutionOnpeutsereporteràlatabledonnéeenannexeApourobtenirlalistedespremièrespuissancesde2.Laplusgrandequisoitinférieureà54321est215=32768.Onpeutécrirealors:

54321=215+21553.Onrecommenceavec21553:ilcontient214=16384,etilreste21553-16384=5169,donc:

54321=215+214+5169.5169contient212=4096,reste1073:

54321=215+214+212+1073.1073contient210=1024,reste49:

54321=215+214+212+210+49.Encontinuantceprocessus,ontrouve:

54321=215+214+212+210+25+24+20.L’écriturebinaireestalors:

54321=11010100001100012Pourtrouverl’écriturehexadécimale,onregroupelesbitsparpaquetsde4:

54321=1101.0100.0011.00012Onconvertitensuitechaquegroupeenunchiffrehexadécimaléquivalent:

54321=D43116

Exercice2:addition1. Donnerl’intervalledesvaleurspossiblespourdesnombresnonsignéscodésenbinairepur

sur11bits.1. Donnerl’intervalledesvaleurspossiblespourdesnombressignéscodésencomplémentà2

sur11bits.2. Effectuerlasommeenbinaire:11012+01112etinterpréterlerésultatenarithmétique

signéeetnonsignée.

Solution1. Intervalledesvaleurspossiblesenbinairepursur11bits.

Avec11bits,lenombredecombinaisonspossiblesest211=2048.L’intervalledesvaleursestdonc:[0,2047].

2. Intervalledesvaleurspossiblesencomplémentà2sur11bits.Onavudanslechapitreprécédentquelecodageencomplémentà2étaitéquilibré,c’estàdirequ’ilcodeautantdenombresstrictementnégatifsquedenombrespositifsounuls.Pourrespectercetéquilibreavec2048codes,ilnousfautnécessairement1024codespositifsounulset1024codesstrictementnégatifs,soitl’intervalle:[-1024,+1023].

3. Sommebinaire11012+01112.

57

Eneffectuantlasommebitàbit,ontrouve01002avec1deretenuesortante.Enarithmétiquenonsignée,laretenuedoitêtrepriseencompte,etellesignaleundébordement;onpeuttoutdemêmeintégrercebitderetenuecommebitdepoidsfortdurésultat.Onadoncfaitlasomme13+7etontrouve101002,soitlavaleurattendue20.Enarithmétiqueencomplémentà2,laretenueestignorée.Lesnombresajoutéssont-3et+7etlerésultatest+4,cequiestégalementcorrect.Undébordementétaitimpossibleici,caronajoutaitunnombrepositifàunnombrenégatif.

Exercice3:simplificationsalgébriquesSimplifieralgébriquement:

1. 𝐹6 = 𝐴𝐵𝐶 + 𝐴𝐶 + 𝐴𝐵 + 𝐴𝐵𝐶2. 𝐹2 = 𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐷 + 𝐴𝐶 + 𝐵𝐶 + 𝐴𝐶3. 𝐹3 = 𝐴 + 𝐵𝐶 + 𝐴𝐷𝐸 + 𝐴𝐵𝐶𝐷𝐸 + 𝐵𝐶𝐷𝐸 + 𝐴𝐶𝐷

Solution1. 1.𝐹6 = 𝐴𝐵𝐶 + 𝐴𝐶 + 𝐴𝐵 + 𝐴𝐵𝐶

Icidestermesdisparaissentcarilssontplusspécifiquesqued’autres.Parexemple𝐴𝐵𝐶estplusspécifiqueque𝐴𝐵etlepremierdisparaîtauprofitdudeuxième.Delamêmefaçon,𝐴𝐵𝐶estplusspécifiqueque𝐴𝐶etdisparaît.Ona:𝐹6 = 𝐴𝐶 + 𝐴𝐵

2. 𝐹2 = 𝐴𝐵𝐶𝐷 + 𝐴𝐵𝐷 + 𝐴𝐶 + 𝐵𝐶 + 𝐴𝐶𝐹2 = 𝐴𝐵(𝐶𝐷 + 𝐷) + 𝐴𝐶 + 𝐵𝐶 + 𝐴𝐶Aveclethéorèmed’absorption,𝐶𝐷 + 𝐷 = 𝐶 + 𝐷,donc:𝐹2 = 𝐴𝐵𝐷 + 𝐴𝐵𝐶 + 𝐴𝐶 + 𝐵𝐶 + 𝐴𝐶Parailleurs,+𝐴𝐶 = 𝐶,donc:𝐹2 = 𝐴𝐵𝐷 + 𝐴𝐵𝐶 + 𝐵𝐶𝐶𝐹2 = 𝐴𝐵𝐷 + 𝐴𝐵𝐶 + 𝐶Onpeutencoreutiliserlethéorèmed’absorptionsur𝐴𝐵𝐶 + 𝐶:𝐹2 = 𝐴𝐵𝐷 + 𝐴𝐵 + 𝐶𝐹2 = 𝐴𝐵 + 𝐶

3. 𝐹3 = 𝐴 + 𝐵𝐶 + 𝐴𝐷𝐸 + 𝐴𝐵𝐶𝐷𝐸 + 𝐵𝐶𝐷𝐸 + 𝐴𝐶𝐷Ainclue𝐴𝐷𝐸et,donc:𝐹3 = 𝐴 + 𝐵𝐶 + 𝐵𝐶𝐷𝐸 + 𝐶𝐷(absorptionentreAet𝐴𝐶𝐷)𝐹3 = 𝐴 + 𝐵𝐶 + 𝐷(𝐵𝐶𝐸 + 𝐶)𝐹3 = 𝐴 + 𝐵𝐶 + 𝐷(𝐵𝐸 + 𝐶)(absorptionde𝐶)𝐹3 = 𝐴 + 𝐵𝐶 + 𝐵𝐷𝐸 + 𝐶𝐷AvecdestablesdeKanaugh,dessimplificationsnonadjacentesdonneraientlemêmerésultat.

Exercice4:circuitincrémenteurConcevoiruncircuitcombinatoireprenantenentréeunnombrebinairea3…a0etdonnantensortieb3…b0lavaleurd’entréeincrémentéede1.ÉcrirelecodeSHDLcorrespondant.

SolutionL’algorithmedebasedel’incrémentationaétédonnéensection4.Lebitdepoidsfaibleb0esttoujoursinverséparrapportàa0.Ensuite,bnestl’inversedeansietseulementsitouslesbitsquisontàladroitedeanvalent1,soitlorsquean−1…a0=1.Onadoncuneinversioncommandéeparcettevaleur,etonavuensection4queleXORestlaporteadaptéeàcetteopération:𝑏9 = 𝑎9 ⊕(𝑎9_6 … 𝑎a)

58

Finalement,sur4bits:𝑏a = 𝑎a𝑏6 = 𝑎6 ⊕ 𝑎a𝑏8 = 𝑎6 ⊕ (𝑎6𝑎a)𝑏e = 𝑎6 ⊕ (𝑎8𝑎6𝑎a)Exprimésousformedesommesdetermes:𝑏a = 𝑎a𝑏6 = 𝑎6𝑎a + 𝑎6𝑎a𝑏8 = 𝑎8𝑎6𝑎a + 𝑎8𝑎6𝑎a = 𝑎8𝑎6𝑎a + 𝑎8(𝑎6 + 𝑎a) = 𝑎8𝑎6𝑎a + 𝑎8𝑎6 + 𝑎8𝑎a𝑏e = 𝑎e𝑎8𝑎6𝑎a + 𝑎e𝑎8𝑎6𝑎a = 𝑎e𝑎8𝑎6𝑎a + 𝑎e𝑎8 + 𝑎e𝑎6 + 𝑎e𝑎aFinalement,lemoduleSHDLcorrespondantest:

module incr(a[3..0]: b[3..0]) b[0]=/a[0]; b[1]=/a[1]*a[0]+a[1]*/a[0]; b[2]=/a[2]*a[1]*a[0]+a[2]*/a[1]+a[2]*/a[0]; b[3]=/a[3]*a[2]*a[1]*a[0]+a[3]*/a[2]+a[3]*/a[1]+a[3]*/a[0]; end module

59

ChapitreIV. ElementsdelogiqueséquentielleIV.1. Définition

Uncircuitestditséquentiel,silesvaleursdesessortiesnedépendentpasquedesvaleursdesesentrées.C’estdonclecontraired’uncircuitcombinatoire,dontlesvaleursdessortiesnedépendaientquedecellesdesesentrées,avecunepropagationsansretourarrièredessignauxdesentréesverslessorties.Àl’inverse,lessortiesd’uncircuitséquentieldépendentnonseulementdesvaleursdesentréesaumomentprésent,maisaussid’unétatinternequidépenddel’historiquedesvaleursd’entréesprécédentes.Envertudecequenousavionsdémontrépourlescircuitscombinatoires,celaimpliqueunrebouclageversl’arrièredecertainssignauxinternesaucircuit(Erreur!Nousn’avonspastrouvélasourcedurenvoi.).

FigureIII-33.Circuitséquentiel:certainssignauxinternesousortiesrebouclentenarrière.

Cetypedecircuitpeutdonnerlieuàdesfonctionnementstrèscomplexes;ilpeutégalementêtreinstabledanscertainesconfigurations.Plusencorequepourlescircuitscombinatoires,desméthodespourmaîtriserleurcomplexitésontnécessaires.Unedesvoiespourlasimplificationdeleurconceptionconsisteàsynchroniserleschangementsd’étatssurlesfrontsd’unehorlogeuniqueetglobale,etcelaconduitàl’étudedescircuitsséquentielsditssynchronespurs,qu’onétudieraprincipalementdanscelivre.

IV.2. LatchRSLanotiondecircuitséquentielavecsesétatsinternesincorporelanotiondemémoire(retoursursonpassé).LacellulemémoirelaplussimpleestlelatchRS(RSétantlesinitialesdeReset-Set),parfoisappelébistable(FigureIII-34).

60

module latch_rs(s,r: q) q=/nq*/r ; nq=/q*/s ; end module

FigureIII-34.LatchRS.

Cecircuitaclairementdesconnexionsquireviennentenarrière.Ils’agitd’unecelluledemémorisationde1bit,dontlemoded’emploiestlesuivant:

1. lacelluleestenmode’lecture’lorsquelesentréesRetSsonttouteslesdeuxà0;lapaire𝑄, 𝑄estalorsnécessairementdansundesdeuxétats(0,1)ou(1,0),caronpeutconstaterquecesdeuxétats,etseulementeux,s’auto-entretiennentlorsqueRetSvalent0.

2. pourmémoriser0(c’estàdirequelessortiessoientdansl’état𝑄, 𝑄 = (0, 1)lorsquelacellulereviendradanslemode’lecture’),ilfautappliquerun1surR(reset),puisleremettreà0.Quelqu’aitétésonétatantérieur,lacelluleseretrouvealorsdansl’étatauto-stable𝑄, 𝑄 = (0, 1).

3. pourmémoriser1(c’estàdirequelessortiessoientdansl’état𝑄, 𝑄 = (1, 0)lorsquelacellulereviendradanslemode’lecture’),ilfautappliquerun1surS(set),puisleremettreà0.Quelqu’aitétésonétatantérieur,lacelluleseretrouvealorsdansl’étatauto-stable𝑄, 𝑄 = (1, 0).

Cecircuitestbienséquentiel:sessortiesnedépendentpasuniquementdesesentrées.Lanotiond’étatinterneesticiclairementprésentesouslaformed’unbitmémorisé.

Graphed’étatsLesmodesdefonctionnementdécritsprécédemmentpeuventêtrerésumésdanslegraphedelaFigureIII-35.Untelgrapheestappelégraphed’étatducircuit;ilsynthétisecomplètementsonfonctionnement.Lesdeuxnœudscorrespondentauxdeuxétatsstablesducircuit;lesarcsmontrentlespassagesducircuitd’unétatversunautrelorsd’unchangementdesvaleursdesentrées.LavaleurdelasortieQestassociéeàchacundesdeuxétats:0pourl’étataet1pourl’étatb.Onnereprésentequelesétatsstablesducircuit,etnonlesconfigurationsintermédiairesfugitivesentredeuxétats.

61

FigureIII-35.Graphed’étatsd’unlatchRS.Lesnœudscorrespondentauxétatsstablesducircuit,etlesarcsreprésentent

lestransitionsentrelesétats.

IV.3. Frontsetniveaux;signauxd’horlogeLeniveaud’unsignal,c’estsavaleur0ou1.Onparledefrontlorsd’unchangementdeniveau:frontmontantlorsquelesignalpassede0à1,frontdescendantlorsqu’ilpassede1à0.Enpratique,cestransitionsnesontpastoutàfaitinstantanées,maisleurduréeesttrèsinférieureauxtempsdepropagationdesportes(FigureIII-36).

FigureIII-36.Frontsetniveauxd’unsignalréel,etleuréquivalentlogiquesimplifié.

Unehorlogeestunsignalpériodique,produitàpartird’unquartzoud’unréseauRC.Ilproduitdoncunesuccessionpériodiquedefrontsmontantset/oudescendants.Commeenphysiqueouenmathématiques,onemploielestermesdefréquenceetdepériodepourqualifierlachronologied’unsignald’horloge;elleagénéralementuneformecarrée,maiscen’estpasobligatoire.

IV.4. Circuitsséquentielssynchronesetasynchrones:définitions

CircuitsasynchronespursOnappellecircuitsséquentielsasynchronespursdescircuitsséquentielssanssignauxd’horloge,etdanslesquelscesontleschangementsdevaleurdesentréesquisontàlasourcedeschangementsd’états.LelatchRSestunexempledecircuitasynchronepur:iln’estpasgouvernéparunehorloge,etcesontleschangementsdesentréesquiprovoquentleschangementsd’état.

CircuitssynchronespursOnappellecircuitséquentielssynchronespursdescircuitsséquentielsquipossèdentunehorlogeunique,etdontl’étatinternesemodifieprécisémentaprèschaquefront(montantoudescendant)del’horloge.

62

Lescircuitsséquentielssynchronespurssontplussimplesàétudieretàconcevoirquelescircuitsséquentielsasynchronespurs,carlemomentdelatransitionestdéfinidel’extérieuretsurunseulsignal.Ilspeuventparcontreêtremoinsrapidesqu’unéquivalentasynchrone,etconsommerplusd’énergie.Eneffet,onserappelle(section3)quelescircuitsCMOSconsommentessentiellementducourantlorsdeschangementsd’états.Uncircuitséquentielsynchroneconsommeraainsiducourantàchaquefrontd’horloge,contrairementàuncircuitasynchronepur.CeteffetesttoutefoisàrelativiseraveccertainscircuitsCMOSdontonabeaucoupabaissélatensiond’alimentation,etpourlesquelslecourantdefuite(consomméaurepos)estprocheducourantdecommutation(consommélorsdeschangements).

AutrescircuitsséquentielsLescircuitsséquentielsquinesont,nisynchronespurs,niasynchronespurs,n’ontpasdedénominationparticulière.Ilssontsouventl’uniondeplusieurssous-ensemblesquisontchacungouvernésdefaçonsynchroneparunehorloge,maisl’interfaceentrecessous-domainesestsouventlacausedeproblèmesdefiabilité.Onn’étudierapasdetelscircuitsdanscetouvrage.

IV.5. Graphesd’étatsConsidéronslefonctionnementducircuitséquentielsynchronedelaFigureIII-37,détecteurdelaséquence’1,0,1’:

FigureIII-37.Détecteurdeséquence1,0,1.

UnesuitedechiffresbinairesarrivesurE,etlesinstantsd’échantillonnage(momentsoùlavaleurdeEestpriseencompte)sontlesfrontsmontantsdeCLK.OnsouhaitequelasortieSvaille1sietseulementsilesdeuxdernièresvaleursdeEsont:1,0,1.Cettespécificationestenfaitimprécise,carelleneditpasexactementàquelmomentparrapportàl’horlogeCLKlasortiedoitprendresavaleur.Ilyadeuxpossibilités:

1. lasortienedépendquedel’étatinterneducircuit,etnepeutchangerquejusteaprèschaquefrontd’horloge.Ellenepourrachangerensuitequ’auprochainfrontd’horloge,mêmesilesentréeschangententretemps.OnappelleschémadeMOOREunetelleconception,etelleconduitaugraphedeMOOREdelaFigureIII-38.

63

FigureIII-38.Détecteurdeséquence1,0,1detypeMoore,nonsimplifié.Chaqueétatestassociéàlaréceptiond’unecertaineséquencedes3derniersbits.Seull’étatgprovoquelasortieS=1.

LavaleurdelasortieSestclairementassociéeauxétats,etnepeutdoncchangerqu’aveceux.Leschangementsd’étatseproduisentàchaquefrontdel’horlogeCLK,quin’estpasreprésentéesurlegraphe,maisdontlaprésenceestimplicite.Unarclibellé’0’parexempleindiqueunchangementd’étatlorsqueE=0.

2. lasortiedépenddel’étatinterneducircuitetdesesentrées,etonditalorsqu’ils’agitd’unschémadeMEALY.Pourledétecteurdeséquenceparexemple,lasortieSpourraitvaloir1dèsqueEpasseà1pourladeuxièmefois,avantmêmequesavaleurnesoit’officiellement’échantillonnéeauprochainfrontd’horloge.CelaconduitaugraphedeMEALYdelaFigureIII-39.

FigureIII-39.Détecteurdeséquence1,0,1detypeMealy,nonsimplifié.

L’arclibellé’1/0’deaversbparexempleindiqueunchangementd’étatdeaversblorsqueE=1,avecunevaleurdelasortieS=0.Maisattention:lechangementd’étatneseproduiraqu’auprochainfrontd’horloge,alorsquelechangementdesortieseproduitimmédiatementaprèslechangementdesentrées.

64

DifférencesentrelescircuitsdeMOOREetdeMEALYLaprincipaledifférencetientdanslefaitquedansuncircuitdeMEALY,onobtientlessortiesunempsd’horlogeplustôt.ParexempledanslatransitiondecversfpourE=1,lasortieS=1seraéchantillonnable(=mémoriséeetutilisable)aufrontd’horlogesuivant,enmêmetempsquel’étatcourantpasseraàf.DanslecircuitdeMOORE,lasortiepasseraà1aprèslefrontd’horlogesuivant,etneserastableetéchantillonnablequ’aufrontd’horlogeencoreultérieur,c’estàdireuntempsplustardquedanslecircuitdeMEALY.Pourcertainstypesdecircuits,ilestplusfacilededessinerungraphedeMOORE,quicorrespondàunevisionplus’statique’duproblème.Labonnenouvelleestqu’ilexisteuneméthodeautomatiquedetransformationd’ungraphedeMOOREengraphedeMEALY,lorsquel’onveutprofiterdesavantagesdecedernier.

Transformationd’ungraphedeMooreengraphedeMealyOnvoitsurlaFigureIII-40commentunarcdansungraphedeMOOREsetransformeenunarcdansungraphedeMEALYéquivalent.

FigureIII-40.Unarcd’ungraphedeMOOREtransforméenunarcéquivalentd’ungraphedeMEALY.Siavecl’entréeeon

vaenaassociéàunesortieS,alorscettesortiepeutêtredirectementattachéeàl’arc:e/S.

OnadoncuneméthodeautomatiquepourtransformerlesgraphesdeMOOREengraphesdeMEALY,trèsutilecarlesgraphesdeMOOREsontsouventplusfacilesàconcevoir.C’estellequ’onautiliséeparexemplepourtransformerlegraphedeMOOREdelaFigureIII-38engraphedeMEALY(FigureIII-39).

Transformationd’ungraphedeMealyengraphedeMooreCen’estpastoujourspossible,etdoncaucuneméthodegénéralen’existe.LescircuitsdeMEALYsontdoncintrinsèquementplusrichesqueceuxdeMOORE.

IV.6. TablesdetransitionsLestablesdetransitions,encoreappeléestablesdeHuffmannesontriend’autrequ’uneversiontabulairedesgraphesdetransitions.Parexemple,lestablesassociéesauxgraphesdeMOOREetdeMEALYdudétecteurdeséquencesontreprésentéesFigureIII-41etFigureIII-42.

65

avant aprèsétat E étata 0 aa 1 bb 0 cb 1 dc 0 ec 1 fd 0 gd 1 he 0 ae 1 bf 0 cf 1 dg 0 eg 1 fh 0 gh 1 h

état Sa 0b 0c 0d 0e 0f 1g 0h 0

FigureIII-41.TabledetransitionsdugraphedeMOOREpourledétecteurdeséquence1,0,1.Àchaquearcdugraphecorrespondunelignedanslatable.Onnoteralatablecomplémentaire,quidonnelessortiesassociéesàchaqueétat.

avant aprèsétat E état Sa 0 a 0a 1 b 0b 0 c 0b 1 d 0c 0 e 0c 1 f 1d 0 g 0d 1 h 0e 0 a 0e 1 b 0f 0 c 0f 1 d 0g 0 e 0g 1 f 1h 0 g 0h 1 h 0

FigureIII-42.TabledetransitionsdugraphedeMEALYpourledétecteurdeséquence1,0,1.Àchaquetransitiondugraphecorrespondunelignedelatable.LavaleurdelasortieSestassociéeàchaquetransition.

SimplificationdestablesdetransitionUnetabledetransitionspermetnotammentderepérerfacilementdesétatséquivalents.UngroupeGd’étatssontditséquivalentssi,pourchaquecombinaisonpossibledesentrées,ilsconduisentàdesétatsdugroupeGaveclesmêmessorties.Onpeutalorsdiminuerlenombred’étatsenremplaçant

66

touslesétatsdugroupeGparunseul,puistenterderappliquercetteprocédurederéductionsurl’ensembled’étatsréduit.Parexemple,surlatabledetransitionsprécédenteassociéeaudiagrammedeMOORE,onconstatequeaetesontéquivalents,quecetgsontéquivalents,quedethsontéquivalents.Attention:betfnesontpaséquivalentscar,bienqu’ilsaientmêmesétatssuivants,ilssontassociésàdessortiesdifférentes.Onpeutréécrirelatabledetransitionsensupprimantleslignesassociéesàe,geth,etenremplaçantpartoutepara,gparc,hpard(FigureIII-43).

avant aprèsétat E étata 0 aa 1 bb 0 cb 1 dc 0 ac 1 fd 0 cd 1 df 0 cf 1 d

état Sa 0b 0c 0d 0f 1

FigureIII-43.Tabledetransitionsdudétecteurdeséquence1,0,1aprèsunepremièrephasedesimplification.

Surcettetable,onconstatequebetdsontéquivalents,cequinepouvaitpasêtredéterminéàl’étapeprécédente.LaErreur!Nousn’avonspastrouvélasourcedurenvoi.Leprocessusdesimplifications’arrêteici.Finalement,4étatssuffisentpourcedétecteurdeséquence.Ceux-ciontperdulasignificationqu’ilsavaientinitialementdanslegrapheà8états.LegraphesimplifiéestreprésentéFigureIII-44.

FigureIII-44.GraphedeMOOREsimplifiédudétecteurdeséquence1,0,1

Cetteprocéduredesimplifications’appliqueégalementauxgraphesdeMEALY,encherchantdesidentitésdanslescouplesétat/sortie.Surl’exempleprécédent,onconstatequeaetesontéquivalents,quebetfsontéquivalents,quecetgsontéquivalents,etquedethsontéquivalents.Enprocédantauxsuppressionsetsubstitutionsassociées,ontrouvelanouvelletable(

avant aprèsétat E état Sa 0 a 0a 1 b 0b 0 c 0

67

FigureIII-45).

FigureIII-45.Tabledetransitionsdudétecteurdeséquence1,0,1aprèsunedeuxièmephasedesimplification.

Cettefois,onvoitquebetfsontéquivalents(

avant aprèsétat E état Sa 0 a 0a 1 b 0b 0 c 0b 1 b 0c 0 a 0c 1 b 1

FigureIII-46).

avant aprèsétat E état Sa 0 a 0a 1 b 0b 0 c 0b 1 b 0c 0 a 0c 1 b 1

FigureIII-46.TabledetransitionsdeMOOREpourledétecteurdeséquence1,0,1,aprèsunedeuxièmephasedesimplification.

Leprocessuss’arrêteici.Commec’estsouventlecas,legraphedeMEALYestplussimplequelegraphedeMOOREassociéaumêmeproblème,necomportantque3états(FigureIII-47).

b 1 d 0c 0 a 0c 1 b 1d 0 c 0d 1 d 0

avant aprèsétat E état Sa 0 a 0a 1 b 0b 0 c 0b 1 d 0c 0 a 0c 1 b 1d 0 c 0d 1 d 0

68

FigureIII-47.GraphedeMEALYsimplifiédudétecteurdeséquence1,0,1

IV.7. BasculessynchronesNotrebutestmaintenantderéaliseràl’aidedecircuitslogiqueslesmachinesséquentiellestellesqu’ellespeuventêtredécritesparlesgraphesd’états.Pourfacilitercettesynthèse,ilaétéimaginédecréerdescomposantsappelésbascules,quiformeraientlesbriquesdebaseàutiliser.Unebasculemémoriseunseulbitetpermetdereprésenterseulementdeuxétatsdistincts,maisl’utilisationd’unvecteurdenbasculespermetdecoderjusqu’à2nétatsdistincts.Parexemple,pourledétecteurdeséquenceanalyséàlasectionprécédente,legraphedeMooresimplifiécomportait4états,etunvecteurdedeuxbasculesvapermettredelesencoder.Parailleurs,pourquetoutunvecteurdebasculesévoluedefaçonfiabled’étatenétat,ilestsouhaitablequechacuned’ellesaituneentréed’horlogereliéeàunehorlogecommune(circuitsynchrone),etnepuissechangerd’étatqu’aumomentprécisd’unfrontdecettehorloge(montantoudescendant),etjamaisentredeuxfronts,mêmesilesautresentréesducircuitsontmodifiéesplusieursfoisentretemps.Detelscircuitssontdeconceptiondifficile;onlesprésentedanscettesection.

IV.7.1. LatchRSactifsurunniveaud’horlogeDanslebutderendresynchronelelatchRSvuprécédemment,onpeutessayerlimiterlapérioded’écriture(FigureIII-48).

FigureIII-48.LatchRSquimémorisesurunniveaudeH

L’étatdececircuitestmodifiablelorsqueH=1,c’estàdiresurunniveaudusignalH.TantqueHestauniveau1,lesmodificationsdeSetdeRvontavoiruneffetsurl’étatdubistable.Untellatchpeutavoircertainesapplications,maisiln’estpasadaptéàlaréalisationdecircuitsséquentielssynchrones,oùleschangementsd’étatsdeleursdifférentespartiesdoiventseproduiredefaçonparfaitementsynchronisée,aumomentprécisdéfiniparunfrontd’unehorlogecommune.Lasectionsuivantevaprésenteruntelcircuit.

IV.7.2. Basculeactivesurfrontd’horlogeNousavonsdoncbesoindecomposantsséquentielsquichangentd’étatsurunfrontd’horloge,etseulementàcemomentprécis.LelatchRSvuàlasectionprécédenteneremplissaitpascettecondition,puisquelebistablepouvaitchangerdevaleurtantqueHétaitauniveau1.Lecircuitde

69

laFigureIII-49,quiréalisecequ’onvaappelerunebasculeD(Dpour’delay’),nechanged’étatquantàluiquesurlefrontdescendantdel’horlogeH.

module basculeD(h,d: q) s=/h*/r*/ns ; ns=/s*/d ; r=/nr*/h ; nr=/ns*/r ; q=/r*/nq ; nq=/s*/q ; end module

FigureIII-49.BasculeDsynchrone:l’étatdubistableqnechangequ’aumomentoùhpassede1à0.

Lacompréhensiondétailléedufonctionnementdececircuitestdifficile,etl’utilisationd’unsimulateurtelqueceluideSHDLpeutyaider.Onpeutdéjàremarquerquelorsquehvaut1,onanécessairementR=0etS=0,etdonclebistablefinalquiproduitqestdansl’étatderepos:tantquehvaut1,l’étatinterneqnepeutpaschanger,mêmesidchangedevaleurunnombrequelconquedefois.Lorsquehpassede1à0,onpeutmontrerquelebistableduhautvastockerlavaleurde𝐷etlaplacersurR,etqueceluidubasvastockerlavaleurdeDetlaplacersurS.Onadoncaumomentdufrontdescendantun’set’ouun’reset’dubistablefinal,danslesensdelamémorisationdeladonnéedenentrée.Enfin,etc’estlepointimportant,onpeutmontrerégalementquelorsquehestmaintenuà0,lesvaleursdeRetdeSnepeuventpaschangermêmesidchange,etdoncleschangementsdedn’affectentpaslebistablefinal.Onadoncbiendémontrélapropriétéessentielledececircuit,quiestquesonétatinterneqestaffectédurantlapériodetrèscourteoùl’horlogehpassede1à0,c’estàdiredurantunfrontdescendantdecelleci,etquetousleschangementssurdendehorsdecettepérioden’ontpasd’effetsurq.

IV.7.3. BasculeDUnetellebasculeDestreprésentéecourammentparleschémadelaFigureIII-50.

module test(e,h,reset: x) x:=e ; x.clk=h ; x.rst=reset ; end module

FigureIII-50.Représentationhabituelled’unebasculeDsynchrone.

Onaindiquéégalementl’écritureSHDLassociéeàcettebascule.LesignalderemiseàzéroRSTn’étaitpasprésentsurlaFigureIII-49.Ils’agitd’uneremiseàzéroasynchrone,quiprovoqueleforçageà0ducontenudelabascule,sansqu’ilyaitbesoind’unfrontd’horloge.TantquelesignalRSTestactif(surniveau1surlafigure),labasculeestforcéeà0etsoncontenunepeutpasévoluer.Ils’agitdumêmesignalresetqueceluiquiestprésentsurvotremicro-ordinateur,votretéléphone

70

portable,etc.:enl’appliquant,vousremettezdansl’état0touslescomposantsséquentielsdevotremachine.Dupointdevuegraphique,letriangledevantl’entréeCLKindiqueunsignald’horloge.S’ilétaitprécédéd’unrond,celaindiqueraitunehorlogeactivesurfrontdescendant;ensonabsenceelleestactivesurfrontmontant.Delamêmefaçon,unronddevantl’entréeRSTindiqueuneactivitésurniveaubas.LaFigureIII-51illustrecesdifférentessituations.

module test(e,h,reset: x) x:=e ; x.clk=/h ; x.rst=reset ; end module

module test(e,h,reset: x) x:=e ; x.clk=h ; x.rst=reset ; end module

module test(e,h,reset: x) x:=e ; x.clk=/h ; x.rst=/reset ; end module

FigureIII-51.DifférentesbasculesD.(a)horlogesurfrontdescendant.(b)resetactifsurniveaubas.(c)horlogefrontdescendantetresetactifsurniveaubas.

BasculesetlangageSHDLEnSHDL,lanotation’:=’estappeléeaffectationséquentielle,etlessuffixes’.clk’et’.rst’serventàrepérerlessignauxd’horlogeetderemiseàzéro.Deshorlogesactivessurfrontdescendant,oudesresetactifssurniveaubassetraduisentparunsigne’/’devantlenomdusignald’horlogeoudereset.Parailleurs,onnoteraqu’onnepeutpasécrirequelquechosecomme:

x.clk = a*b ; // incorrect Celaimpliqueraitl’existenced’unebasculeetd’uneportecombinatoire,cequidoitsetraduirepardeuxéquationsdistinctes:

x.clk = i ; i = a*b ;

Lorsqu’onécritx.clk = /h; ,onnefaitpasappelàuneportesupplémentaired’inversion:onutiliseunebasculeactivesurfrontdescendant,etdonconn’apasàcréerdelignesupplémentaire.Pourlesmêmesraisons,onnedoitpasécrire:x:=a*b ;,mais:

x := i ; i = a*b ;

Onatoutdemêmelapossibilitéd’écrirex:=/i;,quicorrespondàunebasculeDquichargel’inversedesonentrée,etquisetraduitparlaprésenced’unronddevantl’entréeD(FigureIII-52).

Autresmodifieurs:- .rstpermetunforçageà0asynchrone,c’est-à-direindépendammentdufrontd’horloge.

Ons’ensertgénéralementpourinitialiserlecircuit.s- .setpermetunforçageà1asynchrone,defaçonanalogueà.rst- .enaestuneentrée‘enable’:labasculen’évoluepastantquecetteentréen’estpasactive.

Cemodifieurestfacultatifs.

71

module test(e,h,reset:x) x:=e ; x.clk=/h ; x.rst=reset ; end module

module test(e,h,reset:x) x:=/e ; x.clk=h ; x.rst=reset ; end module

(a) (b)

FigureIII-52.Lesdeuxformespossiblesd’unebasculeD.(a)entréenormale.(b)entréeinversée.

Équationd’évolutionL’équationd’évolutiond’unebascule,c’estl’équationdelavaleurqueprendral’étataprèslefrontd’horloge.DanslecasdelabasculeD,c’esttoutsimplementlavaleurprésenteàsonentrée:

𝑄 ∶= 𝐷

IV.7.4. BasculeTToutcommelabasculeD,labasculeT(trigger)mémoriseégalementunbitdefaçonsynchrone,maiselleadesmodalitésdifférentesd’utilisation.Sonschéma,unetabledetransitionssynthétiqueetl’écritureSHDLassociéesontdonnésFigureIII-53.

avant aprèsT Q Q0 𝑥 𝑥1 𝑥 𝑥

module test(e,h,reset: x) x:=/e*x+e*/x ; x.clk=h ; x.rst=reset ; end module

FigureIII-53.BasculeTsynchrone.Lorsquel’entréeTestà0ellenechangepasd’état;lorsquel’entréeTvaut1sonétats’inverse.

L’étatmémorisédelabasculeTs’inverse(aprèslefrontd’horloge)sietseulementsisonentréeTvaut1.LorsquesonentréeTvaut0,cetétatresteinchangé.Elleestdoncadaptéeauxproblématiquesdechangementsd’unevaleuretnonàunsimplestockagecommelabasculeD.Endehorsdesvariationssurlesfrontsd’horlogeetlalignederesetasynchrone,lesdeuxseulesversionspossiblesdelabasculeTsontdonnéesFigureIII-54.

72

module test(e,h,reset: x) x:=/e*x+e*/x ; x.clk=h ; x.rst=reset ; end module

module test(e,h,reset: x) x:=e*x+/e*/x ; x.clk=h ; x.rst=reset ; end module

(a) (b)

FigureIII-54.Lesdeuxformespossiblesd’unebasculeT.(a)entréenormale.(b)entréeinversée.Onnoteraladifférenced’écritureenlangageSHDL.

Equationd’évolution𝑄 ∶= 𝑇𝑄 + 𝑇𝑄

Lepremiertermeexprimebienque,siTestà0,Qnechangepas,etquesiTestà1,Qs’inverse.Onretrouvel’écritureSHDLdel’affectationséquentielle.

IV.7.5. BasculeJKCommelesbasculesDetT,labasculeJK(Jack-Kilby)mémoriseunbitdefaçonsynchrone.Sonschéma,satabledetransitionssimplifiéeetl’écritureSHDLassociéesontdonnésFigureIII-55.

avant aprèsJ K Q Q0 0 𝑥 𝑥0 1 - 01 0 - 11 1 𝑥 𝑥

module test(reset,h,j,k:x) x:=/k*x+j*/x ; x.clk=h ; x.rst=reset ; end module

FigureIII-55.BasculeJKsynchrone,tabledetransitionssimplifiéeetécritureSHDL.SelonlesvaleursdesesentréesJetK,ellepermetleforçagedesonétatà0ouà1,maisaussilaconservationoul’inversiondesonétat.

EllefonctionnedefaçonanalogueaulatchRS,JjouantlerôledeSetKdeR.LorsqueJetKsontà0,l’étatdelabasculenechangepasaufrontd’horloge.Sionveutfaireunemiseà1ouunemiseà0,onapplique1surJ(respectivementsurK)puisonappliqueunfrontd’horloge.Deplus,mettreàlafoisJetKà1estautorisé,etl’étatdelabascules’inverseaufrontd’horloge.

Équationd’évolution𝑄 ∶= 𝐾𝑄 + 𝐽𝑄

ElleestmoinsimmédiatementévidentequecelledesbasculesDetT.Onvérifiequedanstouslescas,onalerésultatattendu:

• si𝐽=0et𝐾=0,𝐾𝑄 + 𝐽𝑄 = 0 + 𝑄 = 𝑄• si𝐽=0et𝐾=1,𝐾𝑄 + 𝐽𝑄 = 0 + 0 = 0• si𝐽=1et𝐾=0,𝐾𝑄 + 𝐽𝑄 = 𝑄 + 𝑄 = 1• si𝐽=1et𝐾=1,𝐾𝑄 + 𝐽𝑄 = 0 + 𝑄 = 𝑄

LabasculeJKexisteégalementavecdesentréesJetKinversées.LaFigureIII-56montrecesdifférentesformes,etl’écritureSHDLassociée.

73

module test(reset,h,j,k: x) x:=/k*x+j*/x ; x.clk=h ; x.rst=reset ; end module

module test(reset,h,j,k: x) x:=/k*x+/j*/x ; x.clk=h ; x.rst=reset ; end module

(a) (b)

module test(reset,h,j,k: x) x:=k*x+j*/x ; x.clk=h ; x.rst=reset ; end module

module test(reset,h,j,k: x) x:=k*x+/j*/x ; x.clk=h ; x.rst=reset ; end module

(c) (d)

FigureIII-56.Lesdifférentesformespossiblesd’unebasculeJKetleursécrituresSHDLassociées.(a)entréenormales.(b)entréeJinversée.(c)entréeKinversée.(d)entréesJetKinversées

IV.7.6. ChoixdesbasculesLabasculeDestclairementadaptéeauxsituationsoùondoitstockerunbitprésent.LabasculeTestadaptéeauxsituationsquiseposententermesdechangementoud’inversion.LabasculeJKsembleplusversatile,etelleestd’ailleurssouventappeléebasculeuniverselle.Paranalogieaveclesportescombinatoires,onpourraitsedemandersicettebasculeJKest’pluspuissante’quelesbasculesDouT,c’estàdires’ilestpossibledefabriqueravecelledescircuitsquelesautresnepourraientpasfaire.Laréponseestnon.Cestroistypesdebasculesontunepuissanced’expressionéquivalente:ellesmémorisentunbit,etellesnediffèrentqueparlesmodalitésdestockagedecebit.Parexemple,onvérifiefacilementqu’onpeutfabriquerunebasculeJKavecunebasculeTetréciproquement(FigureIII-57).

74

(a) (b)

FigureIII-57.(a)constructiond’unebasculeTavecunebasculeJK,(b)constructiond’unebasculeJKavecunebasculeT.

Danslecas(a),ilestclairqu’enreliantlesdeuxentréesJetK,labasculerestedanslemêmeétatsitvaut0,etelles’inversesitvaut1,cequicorrespondbienaufonctionnementd’unebasculeT.

Danslecas(b),onafigurélasolutionavecunmultiplexeurpourplusdeclarté.LavaleurmiseenentréedelabasculeTdépenddelavaleurducouplej,k,etonvérifiequ’onalerésultatsouhaitédanstouslescas:

1. sijk=00,onplace0surl’entréedelabasculeTetellenechangerapasdevaleuraufrontd’horloge.

2. Sijk=10,onplacesurl’entréedelabasculeTl’inversedesonétatinterne,etilestfaciledevoirquecelaconduitàlamiseà1delabasculeauprochainfrontd’horloge.

3. Sijk=01,onplacel’étatcourantdelabasculeTsursonentrée,cequiconduitàlaforcerà0auprochainfront.

4. Enfinsijk=11,onplace1enentréedelabasculeTcequivadéclenchersoninversion.

IV.7.7. Schémagénérald’uncircuitséquentielsynchronedetypeMOORE

LaFigureIII-58montreleschémagénérald’uncircuitséquentielsynchronedetypeMOORE.L’étatinterneestmémorisédansunvecteurdenbits(2nétatauplus)constituédebasculesdetypequelconque.Pourquececircuitsoitbiendetypesynchronepur,toutesleshorlogesdesbasculesontbienétéreliéesensembledirectementàl’horlogegénérale,defaçonàgarantirunchangementd’étatdetouteslesbasculesexactementaumêmemoment.

75

FigureIII-58.Schémagénérald’uncircuitséquentielsynchronedetypeMOORE

Lespropriétésdesbasculesgarantissentquecetétatnepeutpaschangerentredeuxfrontsd’horloge,mêmesilesentréesducircuitchangentplusieursfoisentretemps.Parailleursonvoitquelessortiesnedépendentquedel’étatinterne,étantunsimpletranscodagecombinatoiredecelui-ci.

IV.7.8. Schémagénérald’uncircuitséquentielsynchronedetypeMEALY

LaFigureIII-59montreleschémagénérald’uncircuitséquentielsynchronedetypeMEALY.Ils’agitégalementd’uncircuitsynchronepur,danslequelleshorlogesdetouteslesbasculessontreliéesentreellesàl’horlogegénérale.Avecunvecteurd’étatcomposédenbascules,onpeutégalementcoderauplus2nétatsdifférents,etlamécaniquedechangementd’étatsestanalogueàcelled’uncircuitdetypeMOORE.Laseuledifférenceestdanslecalculdessorties:onvoitqu’ellesnedépendentpasquedel’étatinterne,maisqu’ellesdépendentaussidesentrées.C’estcequivaleurpermettred’obtenirlesmêmessortiesqu’uncircuitdeMOORE,untempsplustôt.

FigureIII-59.Schémagénérald’uncircuitséquentielsynchronedetypeMEALY.

IV.8. Synthèsed’uncircuitséquentielsynchrone

IV.8.1. Étapesdelasynthèsed’uncircuitséquentielsynchroneLorsdelasynthèsed’uncircuitséquentielsynchroneàl’aidedebascules,qu’ilsoitdetypeMOOREoudetypeMEALY,onobtiendralecircuitleplussimpleensuivantlesétapessuivantes:

76

1. Dessindugraphed’état:ilpermetunespécificationclaireducircuit2. tabledetransitions:formepluslisibledugraphe,quipermetdevérifierqu’aucunetransition

n’estoubliée,etpréparelaphasedesimplification.3. simplificationdelatabledetransitions:onappliquelaméthodevueprécédemment,parfois

enplusieursétapes.4. déterminationdunombredebascules:lenombred’étatsdugraphesimplifiépermet

d’établirunnombreminimumndebasculesàemployer.Onnechoisitpasencoreletypedesbasculesàemployer,carlaphased’assignationfourniradenouvellesinformations.

5. assignationdesétats:pourchaqueétat,unvecteuruniquedenbitsestassigné,appelévecteurd’état.Desrèglesheuristiquesd’assignationpermettentdetrouvercellequiconduiraàdescalculssimples.

6. tabledetransitionsinstanciée:onréécritlatabledetransitions,enremplaçantchaquesymboled’étatparlevecteurassocié.

7. choixdesbascules:enobservantlatabledetransitionsinstanciée,certainstypesdebasculespeuventêtrepréférés.OnemploieraunebasculeDlorsqu’unétatsuivantestlarecopied’unevaleurdel’étatprécédent,unebasculeTlorsquel’étatsuivantestl’inversed’unétatprécédent;danslesautrescas,labasculeJKpeutêtreemployée.

8. calculdesentréesdesbasculesetcalculdessortiesducircuit.

IV.8.2. Synthèsedudétecteurdeséquence,versionMOORE

Atitred’exemple,onvadétaillerlasynthèseducircuitdétecteurdelaséquence1,0,1décritprécédemment,enversionMOORE.Onreprenddonctouteslesétapesénuméréesenintroduction.

Graphed’état,tabledetransitions,simplificationCestroisétapesontétéréaliséesensection6,etontaboutiesaugraphesimplifiéetàlatabledetransitionsdelaFigureIII-60etdelaFigureIII-61.

FigureIII-60.GraphedeMOOREsimplifiédudétecteurdeséquence1,0,1.

avant aprèsétat E étata 0 aa 1 bb 0 cb 1 bc 0 ac 1 ff 0 cf 1 b

état Sa 0b 0c 0f 1

FigureIII-61.Tabledetransitionssimplifiéedudétecteurdeséquence1,0,1.

DéterminationdunombredebasculesIlyaquatreétatsàcoder,donc2basculesserontemployées,dontonappelleralessortiesXetY.

77

AssignationdesétatsLaphased’assignationconsistedoncàaffecterunvecteurd’étatàchacundesétatsducircuit;iciuncouple(X,Y)pourchacundes4états.N’importequelleassignationpeutêtreemployée.Néanmoins,onpeuttoujoursaffecteràl’étatinitiallevecteurd’état(0,0,…),quiseraforcélorsd’unRESETasynchroneducircuit.Parailleurs,certainesassignationsdonnentlieuàdescalculsplussimplesqued’autres.Onlestrouvesouventenappliquantlesrèglesheuristiquessuivantes,parordredeprioritédécroissante:

1. rendreadjacentslesétatsdedépartquiontmêmeétatd’arrivéedanslegraphe.2. rendreadjacentslesétatsd’arrivéequiontmêmeétatdedépartdanslegraphe.3. rendreadjacentslesétatsquiontmêmessorties.

L’idéeestdeminimiserlenombredebitsquichangent(étatousorties)lorsdeschangementsd’états.Appliquéànotrecircuit,lapremièrerèglepréconised’associeraetc,aetf,betf;ladeuxièmerèglepréconised’associeraetb,betc,aetf;latroisièmerèglepréconised’associera,betc.LaFigureIII-62proposeuneassignationquirespecteaumieuxcesrègles.

FigureIII-62.Assignationdesétats:chaqueétatestassociéàuneconfigurationbinairedesbascules

TabledetransitionsinstanciéeOnrecopielatabledetransitionsprécédente,enremplaçantchaquesymboled’étatparsonvecteurd’état(FigureIII-63).

avant aprèsXY E XY00 0 0000 1 1111 0 0111 1 1101 0 0001 1 1010 0 0110 1 11

XY S00 011 001 010 1

FigureIII-63.Tabledetransitionsinstanciée.

ChoixdesbasculesEnobservantlatableinstanciée,onconstatequeXàl’étatsuivantreproduitl’entréeE:unebasculeDs’imposepourX.DanslecasdeY,ilreproduitpresquelavaleurdeXdel’étatprécédent,saufpourladeuxièmeligne.Atitred’exemple,onvachoisirunebasculeJK.

CalculdesentréesdesbasculesetdelasortieducircuitPlusieursméthodessontpossiblespourcescalculs.Cellequiseraemployéeiciestbaséesuruneréécrituredelatabledetransitions,àlaquelleonrajoutelesentréesdesbascules,iciDXpourlabasculeXetJY,KYpourlabasculeY(FigureIII-64.Tabledetransitionsinstanciéeaveclesentréesdesbasculeschoisies..

78

avant aprèsXY E DX JY KY XY00 0 0 0 * 0000 1 1 1 * 1111 0 0 * 0 0111 1 1 * 0 1101 0 0 * 1 0001 1 1 * 1 1010 0 0 1 * 0110 1 1 1 * 11

XY S00 011 001 010 1

FigureIII-64.Tabledetransitionsinstanciéeaveclesentréesdesbasculeschoisies.

EnfaitonconnaissaitdéjàlerésultatpourX:𝐷𝑋 = 𝐸,quiestlaraisonpourlaquelleonavaitchoisieunebasculeD.PourY,ontrouvefacilementque𝐽𝑌 = 𝐸 + 𝑋et= 𝑋.Parailleurs,ona𝑆 =𝑋𝑌Lasynthèseestterminée,etnotreséquenceurseréduitauschémadelaFigureIII-65.Onnoteral’écrituredesaffectationsséquentiellesdexety:x:=eestl’équationd’évolutiondelabasculeD,ety:=x*y+jy*/yestuneéquationdelaformeq:=/k*q+j*/q,pourlaquellel’entréeKestinversée.

module seq101(rst,h,e: s) x := e ; x.clk = h ; x.rst = rst ; y := x*y+jy*/y ; y.clk = h ; y.rst = rst ; jy = e+x ; s = x*/y ; end module

FigureIII-65.Schémafinalsynthétisédudétecteurdeséquence1,0,1(typeMOORE)etdescriptionSHDLassociée

IV.8.3. Synthèsedudétecteurdeséquence,versionMEALYOneffectueicilasynthèsedumêmedétecteurdeséquence1,0,1,cettefoisenversionMEALY.Ilpermettrad’obtenirlasortieunfrontd’horlogeavantlaversionMOORE,etonpeutespéreruncircuitencoreplussimplepuisquesongraphesimplifiécomporteunétatdemoinsqueceluideMOORE.

Graphed’état,tabledetransitions,simplificationCestroisétapesontétéréaliséesensection6,etontaboutiesaugraphesimplifiédelaFigureIII-66etàlatabledetransitionsdela

avant aprèsétat E état Sa 0 a 0a 1 b 0b 0 c 0b 1 b 0c 0 a 0c 1 b 1

FigureIII-67.

79

FigureIII-66.GraphedeMEALYsimplifiédudétecteurdeséquence1,0,1

avant aprèsétat E état Sa 0 a 0a 1 b 0b 0 c 0b 1 b 0c 0 a 0c 1 b 1

FigureIII-67.TabledetransitionsdeMEALYsimplifiéepourledétecteurdeséquence1,0,1.

AssignationdesétatsLaphased’assignationconsistedoncàaffecterunvecteurd’étatàchacundesétatsducircuit;iciuncouple(X,Y)pourchacundes3états.Afind’obtenirlesrésultatslesplussimplespossibles,onessaied’appliqueraumieuxlesheuristiquesd’assignationdécritesàlasectionprécédente.

Appliquéeànotrecircuit,lapremièrerèglepréconised’associeraetc;ladeuxièmerèglepréconised’associeraetb.LaFigureIII-68proposeuneassignationquirespecteaumieuxcesrègles.

FigureIII-68.Assignationdesétats:chaqueétatestassociéàuneconfigurationbinairedesbascules

TabledetransitionsinstanciéeOnrecopielatabledetransitionsprécédente,enremplaçantchaquesymboled’étatparsonvecteurd’état(FigureIII-69).

80

avant aprèsXY E XY S00 0 00 000 1 10 010 0 01 010 1 10 001 0 00 001 1 10 1

FigureIII-69.Tabledetransitionsinstanciée.

ChoixdesbasculesEnobservantlatableinstanciée,onconstatequeXàl’étatsuivantreproduitl’entréeE:unebasculeDs’imposepourX.DanslecasdeY,iln’yaqu’uneligneoùYpasseà1;onpeutchoisirégalementunebasculeD,dontonappelleral’entréeDY.

CalculdesentréesdesbasculesetdelasortieducircuitIciencoreonvaréécrirelatabledetransitions,àlaquelleonvarajouterlesentréesdesbascules,iciDXpourlabasculeXetDYpourlabasculeY(FigureIII-70).

avant aprèsXY E DX DY XY S00 0 0 0 00 000 1 1 0 10 010 0 0 1 01 010 1 1 0 10 001 0 0 0 00 001 1 1 0 10 1

FigureIII-70.Tabledetransitionsinstanciéeaveclesentréesdesbasculeschoisies

EnfaitonconnaissaitdéjàlerésultatpourX:DX=E,quiestlaraisonpourlaquelleonavaitchoisiunebasculeD.PourY,onpeutfaireunetabledeKarnaughquivanouspermettred’exploiterlescombinaisonsnonspécifiéesduesaufaitquelatabled’assignationn’estpascomplètementremplie(FigureIII-71).

FigureIII-71.TabledeKarnaughpourlecalculdeDX.LevecteurXY=11estnonspécifié

Ontrouvedonc:𝐷𝑋 = 𝐸𝑋.Parailleurs,ona:𝑆 = 𝐸𝑌.

Lasynthèseestterminée,etnotreséquenceurseréduitauschémadelaFigureIII-72.Onvoitquecettefoislasortienedépendplusseulementdel’étatinternecommedanslecircuitdeMOORE;elledépendaussidel’entréeE.AveclesimulateurSHDL,onpourraseconvaincrequedanslecircuitdeMEALYonobtientbienlasortieSunfrontd’horlogeavantlecircuitdeMOORE.

81

module seq101(rst,h,e: s) x := e ; x.clk = h ; x.rst = rst ; y := dy ; y.clk = h ; y.rst = rst ; dy = /e*x ; s = e*y ; end module

FigureIII-72.Schémafinalsynthétisédudétecteurdeséquence1,0,1(typeMEALY)etdescriptionSHDLassociée.OnvoitquelasortieSdépenddel’étatinterne,maisaussidel’entréeE

IV.9. Chronologied’uncircuitséquentielsynchrone

IV.9.1. Tempsdesetup,deholdetdepropagationdesbasculesParmilescaractéristiquestemporellesd’unebasculefigurentlestempsdesetupetdehold.Letempsdesetupestladuréeavantlefrontd’horlogedurantlaquellelesentréesdelabasculedoiventêtrestablespourquelebasculementsepassecorrectement.Letempsdeholdestladuréeanalogueaprèslefrontd’horloge.L’uniondesdeuxdéfinitunepériodeautourdufrontd’horlogedurantlaquellelesentréesdoiventêtrestables,fautedequoilebasculementneseproduiraitpascommeprévu.

Letempsdepropagationquantàluiestletempsaprèslequelonestgarantid’avoirlanouvellevaleurdelabascule,aprèslapérioded’instabilitédelatransition.

ToutescesduréessontillustréessurlaFigureIII-73.

FigureIII-73.Tempsdesetup,deholdetdepropagationd’unebascule

IV.9.2. Chronologiedétailléed’unetransition.Lalecturedecettesectionn’estpasnécessairepourquiveutconcevoiruncircuitséquentiel.Illuisuffitd’admettrequ’aprèslefrontd’horloge,aumomentoùlesbasculesducircuitchangentéventuellementd’état,onpassesanscoupférirdesvaleursdel’étatprécédentauxvaleursdel’étatsuivant.

Onpeutaussichercheràcomprendreendétailcequisepasselorsd’unetransition,etmêmecraindrequ’ellenesepassemal.Mêmesilefrontd’horlogeestlemêmepourtouteslesbascules,lesvaleursdessignauxdel’étatprécédentnepeuvent-ellespasinterféreraveccellesdel’étatsuivant?C’esteneffetpossibledanscertainesconditions.ConsidéronsparexempleleschémadelaFigureIII-74.

82

Silabasculeaaunecommutationbeaucoupplusrapidequelabasculeb,lavaleurdeavachangerdurantlapériodedeholddelabasculeb,provoquantainsiunfonctionnementincorrect.

Leplussouvent,c’estletempsdesetupquiestviolé,lorsqu’onaugmentelavitessed’horlogeàunrythmetelqu’unfrontd’horlogearrivealorsquelesentréesdesbascules,quisontdesfonctionscombinatoiresdesentréesetdel’étatcourant,n’ontpaseuuntempssuffisantpoursestabiliser.

FigureIII-74.Silabasculeaesttroprapide,letempsdeholddebseraviolé.

Enpratique,onemploiedesbasculesauxcaractéristiquestemporellesanalogues.

IV.9.3. Basculesmaître-esclaveUnefaçonderésoudreleproblèmedetimingprécédentconsisteàséparerclairementlemomentdecapture(d’échantillonnage)desvaleursdel’étatprécédentdumomentoùonlibèrelesvaleurspourl’étatsuivant,plutôtquedecomptersurdesdélaisdepropagationtropserrés.

Onutilisepourceladesbasculesspécialesappeléesbasculesmaître-esclave,câbléesselonlemodèledelaFigureIII-75

FigureIII-75.Basculemaître-esclave.Oncapturelesvaleursdel’étatprécédentaufrontmontantdel’horloge,etonlibèrelesvaleurspourl’étatsuivantaufrontdescendant.

Surlefrontmontantdel’horlogeh,lesvaleursissuesdel’étatprécédentsontprisesencompte,sansêtrelibéréesencoreverslessorties,etdoncsansrisquederétroactionnéfaste.Plustard,surlefrontdescendantdeh,lesnouvellesvaleursdesbasculesassociéesàl’étatsuivantsontlibérées.

Lesbasculesmaître-esclavepeuventêtreemployéesàpeuprèspartoutoùsontemployéesdesbasculesordinaires,maisilfautcettefoisbiencontrôlerlesdeuxfrontsdel’horloge,etnonunseul.

IV.10. Compteursbinaires

CompteurdebaseUncompteurbinairesurnbitsincrémenteàchaquefrontd’horlogeunevaleurdenbits.Onpourraitd’abordpenseràcréerunregistredenbitsavecdesbasculesD,puisàrelierleursentréesàuncircuitd’incrémentation,maisilyaunesolutionplusdirecteetefficace.Onserappelleeneffet

83

(section4)l’algorithmedecomptage:unbitestrecopiéavecinversionsitouslesbitsàsadroitevalent1,etlebitdepoidsfaibleesttoujoursinversé.

Cettedescriptionentermesd’inversionconduitàuneconceptionàbasedebasculesT,danslaquellel’entréeTd’unebasculeestreliéeauETdetouslesbitsquisontàsadroite.LaFigureIII-76montreunexempled’untelcompteursur4bits.

module cpt4(rst,h: a,b,c,d) d := /d ; d.clk = h ; d.rst = rst ; c := /d*c+d*/c ; c.clk = h ; c.rst = rst ; b := /tb*b+tb*/b ; b.clk = h ;

b.rst = rst ; tb = c*d ; a := /ta*a+ta*/a; a.clk = h ; a.rst = rst ; ta = b*c*d ; end module

FigureIII-76.Compteurbinaire4bits.Unbitestinversélorsquetouslesbitssituésàsadroitevalent1.

Cecompteurcomptebiensûrmodulo2n:aprèslavaleur’1111’,suitlavaleur’0000’sansqu’onpuisseêtreprévenudecedébordement.

Onnoteral’affectationséquentielleSHDLutiliséepourlabasculedepoidsfaibled:d:=/d;,quisetraduitparunebasculeTavecun’1’surl’entréeT.Pourlebitc,l’écriturec:=d*c+/d*/c;setraduitégalementparunebasculeT,maisavecuneinversionavantsonentrée.LesautresbasculesTontuneécrituredirectementtiréedel’équationd’évolutionstandardd’unebasculeT.

Danslafoulée,onpeutégalementcréeruncircuitdécompteurselonlamêmeméthode:unbitestinversélorsquetouslesbitsquisontàsadroitevalent0(FigureIII-77).

84

module dec4(rst,h: a,b,c,d) d := /d ; d.clk = h ; d.rst = rst ; c := d*c+/d*/c ; c.clk = h ; c.rst = rst ; b := /tb*b+tb*/b ;

b.clk = h ; b.rst = rst ; tb = /c*/d ; a := /ta*a+ta*/a ; a.clk = h ; a.rst = rst ; ta = /b*/c*/d ; end module

FigureIII-77.Décompteurbinaire4bits.Unbitestinversélorsquetouslesbitssituésàsadroitevalent0

Ajoutd’uneentréedevalidationCescircuitscomptentoudécomptentenpermanence,etiln’yaaucunmoyendesuspendreetdereprendreleurcomptage.Onvamaintenantajouteruneentréedevalidationen(pour’enable’)quinepermettraaucompteurdecompterquesiellevaut’1’.Lorsqu’ellevaudra’0’,lecompteurresterafigésurladernièrevaleurproduite,malgrél’arrivéedefrontsd’horlogesurh.

Ilsuffitpourcelad’ajouteruneentréedevalidationàchaquebasculeT.LelangageSHDLautorisel’emploidel’écriture:q.ena=en;quiréaliseexactementcela,etqu’ilsuffitd’employerpourchacunedesbasculesducompteur.Sionnedisposequedebasculessansentréedevalidation,latransformationdelaFigureIII-78permetdel’obtenir.

module bascten(rst,h,en,t:q) q := /tq*q+tq*/q ; q.clk = h ; q.rst = rst ; tq = en*t ; end module

FigureIII-78.BasculeTavecentréedevalidation

Ajoutd’uneremiseàzérosynchroneOnsouhaitemaintenantajouteruneentréesclrderemiseàzérosynchrone,quiremetlecompteuràzéroauprochainfrontd’horloge.Ellen’estbiensûrpasdemêmenaturequel’entréederesetasynchrone,quin’estlàquepourl’initialisation.Parailleursilnefautpasessayerd’utiliserceresetasynchronepourimplémenternotreremiseàzérosynchrone.

Larègled’ordescircuitsséquentielssynchronespurs,c’estderelierentre-ellestoutesleshorlogesetderelierentreeuxtouslessignauxderesetasynchrone,sanschercheràlesmodifier.Noussommesheureuxdepouvoirréinitialiseràtoutcoupnotreordinateurpersonnelenappuyantsurleboutondereset,sansquecelanedépended’uneconditionplusoumoinsbienpenséeparunconcepteurpeurigoureux.

85

Commepourl’entréedevalidation,lelangageSHDLauneécritureq.sclr=sclr;quifaitexactementcedontnousavonsbesoin.SionnedisposepasdebasculesTavecremiseàzérosynchrone,laFigureIII-79rempliracettefonction.

module tclr(rst,h,sclr,t:q) q := /tq*q+tq*/q ; q.clk = h ; q.rst = rst ; tq = /sclr*t+sclr*q ; end module

FigureIII-79.BasculeTavecremiseàzérosynchrone.

Onnoteral’écritureSHDLtq=/sclr*t+sclr*q;quiconduitàl’utilisationd’unmultiplexeur2vers1.Sisclrvaut0,labasculeTreçoitsonentréetnormalement;sisclrvaut1,labasculeTreçoitqenentrée,quiprovoquelaremiseà0auprochainfrontd’horloge.

Eneffet,silabasculeavaitl’état0,enayant0enentréeelleresteàl’état0;sielleavaitl’état1,enrecevant1enentrée,elles’inverseetpasseà0:danstouslescasellepasseàzéro.

ChaînagedemodulesdecomptageNoussouhaitonsmaintenantchaînerplusieursmodulesdecomptagedenbitsafindeformerdescompteursdem×nbits.L’algorithmiquedecomptageparblocestanalogueàcelleparbits:unblocincrémentesavaleursitouslesblocsquisontàsadroitesontàleurvaleurmaximum.Ilnousmanquedoncpourchaqueblocunsignalquiindiquequ’ilaatteintlavaleurmaximum.Pouréconomiserl’usagedeportesET,onvaplutôtproduireunsignalriplquivaut1lorsquelecompteurestàlavaleurmaximumetqueen=1.Pourchaînerlesmodules,ilsuffitmaintenantderelierleripldel’unauendel’autre.LaFigureIII-80montrelechaînagede4modulesde4bitspourformeruncompteur16bits.

86

module cpt4(rst,h,en:a,b,c,d,ripl) d:=/en*d+en*/d ; d.clk=h ; d.rst=rst ; c:=/tc*c+tc*/c ; c.clk=h ; c.rst=rst ; tc=en*d ; b:=/tb*b+tb*/b ; b.clk=h ; b.rst=rst ; tb=en*c*d ; a:=/ta*a+ta*/a ; a.clk=h ; a.rst=rst ; ta=en*b*c*d ; ripl=en*a*b*c*d ; end module

module cpt16(rst,h,en:s15..s0) cpt4(rst,h,en:s3,s2,s1,s0,ripl1); cpt4(rst,h,ripl1:s7,s6,s5,s4,ripl2); cpt4(rst,h,ripl2:s11,s10,s9,s8,ripl3); cpt4(rst,h,ripl3:s15,s14,s13,s12,ripl); end module

FigureIII-80.Compteur16bitsforméavec4compteurs4bits.Lasortieripld’unmoduleindiquequ’ilestàlavaleurmaximumetquetousceuxquisontàsadroitesontàleurmaximum.Lemodulequiestàsagaucheasonentréeen

reliéeàcesignal,etnepeuts’incrémenterquelorsqu’ilvaut1.

IV.11. RegistresUnregistredenbitsestunensembledenbasculesDsynchronesmisesenparallèleetpartageantlamêmehorloge(FigureIII-81).

// Description SHDL d’un registre 32 bits module reg32(d[31..0],h,reset: q[31..0]) q[31..0] := d[31..0] ; q[31..0].clk = h ; q[31..0].rst = reset ; end module

FigureIII-81.Registrede32bitsavecsonécritureSHDL.

Onnoteral’écriturevectorielledetyped[31..d0].Elleeststrictementéquivalenteàl’écritured31..d0quiaétéutiliséejusqu’ici;elleestpluscourtelorsquelenomdusignalestlong,cariln’estmentionnéqu’unefois.

RegistreaveclignedesélectionUnregistrepeutêtreéquipéd’unelignedesélectionquidoitêtreactivéesil’onveutfaireuneécriture;cetypedesignalasouventpournomen(enable),oucs(chipselect)ouencorece(chipenable).OnavuàlasectionprécédentequelelangageSHDLdisposaitdel’écriture.enapourprendreencomptedirectementuntelsignal.LaFigureIII-82metenœuvrecetteécriturepournotreregistrede32bits.

87

// description SHDL directe module reg32_2(reset,h,en,d31..d0: q31..q0) q[31..0] := d[31..0] ; q[31..0].clk = clk ; q[31..0].rst = reset ; q[31..0].ena = en ; end module

FigureIII-82.Registreavecentréedesélection,écritureSHDLdirecte.

Pourmieuxcomprendresonfonctionnement,onpeutleréaliseravecunmultiplexeuretparrebouclagedelasortiesurl’entrée.LaFigureIII-83montrecetteconstruction,aveclecodeSHDLcorrespondant.

module reg32_3(reset,h,en,d31..d0: q31..q0) reg32(reset,h,in[31..0]: out[31..0]) ; in[31..0] = d[31..0]*en + q[31..0]*/en ; q[31..0] = out[31..0] ; end module

FigureIII-83.Registreavecentréedesélectionconstruitavecunmultiplexeur.

Lorsquel’entréeenestà0,lemultiplexeurreconduitlavaleurduregistreenentrée:ilnechangealorspasdevaleurauprochainfrontd’horloge.Lorsqueenvaut1,c’estlavaleurprésentesurlesentréesd31..d0quiestaiguilléeparlemultiplexeur,puismémorisée.

Cetteconstructionestbiensûrmoinsperformantequ’avecdesbasculesDdéjàéquipéesd’uneentréedevalidation;enparticulierelledemandeuntempsdesetuppluslongdûàlapropagationautraversdumultiplexeur.

IV.12. Circuittimer/PWM

PrincipeUncircuittimer/PWMgénèreunsignalcycliquerectangulairedontlesparamètressontprogrammables.Cesparamètressont:

• lapériodeP,expriméeennombredecyclesdel’horlogegénérale.• laduréeDàl’intérieurdecettepériodeoùlasortievaut0,expriméeennombredecycles.

LaFigureIII-84illustrelaformedusignalrecherché.

88

FigureIII-84.Signalpériodiquegénéréparuncircuittimer/PWM.

LetermePWM(PulseWidthModulation:modulationenlargeurd’impulsion)faitréférenceàunetechniqueutiliséefréquemmentpourmodulerl’énergiefournieàcertainsdispositifstelsquedeslampes,desmoteursàcourantcontinu,etc.Plutôtquedeleurfournirunetensionvariable,difficileàproduireavecprécision,onleurfournitunsignalpériodiquedontonfaitvarierlerapportcyclique

entrelesmomentsoùlatensionestmaximaleetceuxoùlatensionestnulle(~–�~

surlafigure).La

fréquence6~doitêtreassezélevéepouréviterlesà-coupsoulesclignotements,maispastropélevée

pouréviterd’éventuelseffetsnéfastes.

Parexemple,lesLEDsàhauteluminositéquiéquipentlesfeuxdestopetarrièredesvoituresontleurluminositécommandéedecettemanière.

Lecircuitseraplutôtappelé’timer’sionn’exploitequelesfrontsmontantsoudescendantsdusignaldesortie,pourgénéreruneinterruptionparexemple.

OrganisationPourréaliseruntimer/PWMsurnbits,onutiliseuncompteurnbitsetdeuxcomparateursnbits,quicomparentenpermanencelavaleurducompteurauxdeuxparamètresPetN(FigureIII-85).

Lecompteurdisposed’uneremiseàzérosynchrone(voirsection10.1),quiestactivéedèsquelecompteurarriveàlavaleurP.Ainsiilvacompter0,1,…,P,c’estàdireavecunepériodedeP+1cyclesd’horloge.

89

FigureIII-85.Organisationd’untimer/PWMsurnbits.Lavaleurd’uncompteurnbitsestcomparéeauxvaleursdeNetP;quandilatteintPilestremisà0;quandildépasseNlavaleurdelasortiemchange.LabasculeDfinaleprévient

d’éventuelsglitchs.

DurantcettepériodeP+1,lavaleurducompteurestcomparéeàlavaleurdeN,etlasortiemestlerefletdecettecomparaison.Lasortiemn’estpasdirectementlerésultatcombinatoiredelacomparaison,maisonlefaitpasserautraversd’unebasculeD,pourdeuxraisons:

• ilpourraitêtreaffectédeglitchsdanscertainessituations;enlefaisantpasserautraversd’unebasculeDonestcertaind’avoirunsignalparfaitementpropre.

• sontimingestexactementalignéaveclesfrontsd’horloge,cequiaméliorelaprécision.

LaFigureIII-86donnelecodeSHDLd’untelcircuittimer/PWMsur4bits.OnréutiliselescircuitsdecomptageetdecomparaisondéjàdécritsenSHDLauxsections10.1et8.9.

module pwm(rst, clk, en, p[15..0], n[15..0], m) count4Z(clk, rst, en, eqP : cnt[3..0], ripple) ; ucmp4(cnt[15..0], p[3..0] : supP, eqP) ; ucmp4(cnt[15..0], n[3..0] : supN, eqN) ; dm = supN + eqN ; m := dm ; m.clk = clk ; m.rst = rst ; m.ena = en ; end module

FigureIII-86.ÉcritureSHDLd’untimer/PWMsur4bits.

Lapériodepestégaleàp3…p0+1ennombredecyclesdel’horlogeclk;lavaleurn3…n0définitlavaleurn.LetimingprécisdecemoduleestdéfiniparlechronogrammeFigureIII-87.

90

FigureIII-87.Exempledechronologiedessignauxdutimer/PWMsur4bits.

IV.13. RAMsetROMs

IV.13.1. IntroductionCettesectionestconsacréeauxcircuitsutilisésdanslamémoirecentraledesordinateurs,quicontientlesprogrammesetlesdonnéesmanipulésparlesprogrammes.L’informationyeststockéesousformedemotsdetaillefixe,dontlalargeurdépenddel’architectureutilisée.Cesmotsmémoiresontordonnésetpossèdentchacununeadresse,sousformed’unnombre.Onpeutdoncvoirunemémoirecommeunrubandecasesnumérotées:

…oucommeuntableau:

𝑑𝑜𝑛𝑛é𝑒 = 𝑚𝑒𝑚[𝑎𝑑𝑟𝑒𝑠𝑠𝑒], 𝑎𝑑𝑟𝑒𝑠𝑠𝑒 ∊ [0, 𝑛].

Detellesmémoiresseclassentendeuxgrandstypes,selonqu’ellessontenlectureseuleouenlecture-écriture:lesRAMs(RandomAccessMemory)peuventêtreluesetécrites,etl’attributrandomindiquequeceslectures-écriturespeuventsefaireàdessuitesd’adressestotalementquelconques,paroppositionàdesmémoiresdetypeséquentiel(commelesdisquesdurs)quifontdessériesd’accèsàdesadressesconsécutives.LesROMs(ReadOnlyMemory)sontfonctionnellementidentiquesauxRAMs,maisnepermettentquelalectureetpasl’écriture.Utiliséesdanslamémoirecentraled’unordinateur,lesRAMspourrontstockerlesprogrammesetlesdonnées,alorsquelesROMsvontseulementstockerdesprogrammesinvariables,commeparexempleleprogrammeexécutéaudémarragedelamachine,etstockédanslaROMditedeBIOS.Danscertainsordinateursplusanciens,toutlesystèmed’exploitationétaitstockéenROM,cequipermettaitd’avoirunsystèmeincorruptibleetaudémarragerapide.

UneRAMpeutêtrestatiqueoudynamique.Chaquebitmémoired’uneRAMstatique(SRAM)estconstituéd’unebascule,etconservesonétattantqu’elleestalimentée.Al’inverse,chaquebitd’uneRAMdynamique(DRAM)estcomposéd’unecapacité,quidoitêtrerafraîchiepériodiquementparuneélectroniqueséparée.LesRAMsstatiquesontuntauxd’intégrationplusfaiblequelesRAMdynamiques,puisqu’unbitmémoirenécessite6transistorsdansuncas,etunecapacitéplusuntransistordansl’autre.

91

UneRAMpeutêtresynchroneouasynchrone,uneRAMsynchroneétantenfaituneRAMasynchroneàlaquelleonaajoutéunemachineàétatsfinissynchronequiplacelescommandesdelectureetd’écrituredansunpipeline,afindepermettred’accepterunenouvellecommandeavantquelaprécédenten’aitétécomplétée.

LesbarrettesdeRAMdenosordinateurspersonnelssontdesSDRAM,c'est-à-diredesRAMdynamiquessynchrones,fonctionnantàdesfréquencesde200MHzetplus.EllessontsouventdetypeDDR(doubledatarate),quandlesfrontsmontantsetdescendantsdel’horlogesontexploitéspourleschangementsd’état.

Dansbeaucoupd’autresappareils(assistantspersonnels,consolesdejeux,etc.),laRAMestdetypestatiqueasynchrone(SRAM),souslaformedecircuitsintégrés.LesROMsexistentégalementdansungrandnombredetypesdifférents,principalementselonlafaçondontonpeutprogrammerleurcontenu(invariable,pardéfinition).Ilyad’abordlesROMsprogramméesparmasqueàl’usine;ellessontproduitesengrandnombreavecunfaiblecoûtàl’unité,maisleurcontenunepeutjamaisêtremisàjourultérieurement.

LesPROMs(ProgrammableRom)sontprogrammablesparunappareilspécial,quigénéralementdétruitparuncourantfortuneliaisoninternecorrespondantàunbit.LesEPROMs(ErasablePROM)fonctionnentdelamêmefaçon,maispossèdentunefenêtretransparenteetpeuventêtreeffacéesparuneexpositiond’unevingtainedeminutesauxrayonsultraviolets.EllessontmaintenantsouventremplacéespardesEEPROMs(ElectricallyEPROM),reprogrammablesélectriquement.LesmémoiresFlashsontégalementuneformedemémoireseffaçablesélectriquement,maisonréservegénéralementletermeEEPROMauxmémoirescapablesd’effaceràl’échelledumot,etleterme’mémoiresFlash’àcellesquieffacentàl’échelledeblocs.Danslesdeuxcas,letempsd’effacementestlongparrapportautempsdelecture,etellesnepeuventpasêtreconsidéréescommeuneformespécialedeRAM.OntrouvedelamémoireEEPROMetflashdanslesassistantspersonnels,danslessticksmémoiresurportsUSB,pourlestockagedufirmwaredenombreuxappareils(BIOSd’ordinateurs,lecteursdeDVD,tunerssatellites,etc.)

IV.13.2. Moded’emploidesmémoiresstatiquesasynchronesLesmémoiresstatiquesontgénéralementuneorganisationetunmoded’emploispécifique.Onavuàlasectionprécédentequechaquebitd’unetellemémoireétaitstockédansunebascule,cequiconduitpourlesformeslesplussimplesàséparerlesdonnéesàécriredesdonnéeslues,delamêmefaçonquesontséparéesl’entréeetlasortied’unebascule.

LaFigureIII-88montrel’interfaced’untelcircuit.

FigureIII-88.Interfaced’unboîtierdeRAMstatiqueasynchronede2mmotsdenbits,avecséparationdesdonnéesluesetdesdonnéesàécrire.

Lemoded’emploidececircuitestlesuivant:

92

Lectured’unmotmémoire• activerlaligneCE(ChipEnable),placerl’adressedumotsurlesmlignesd’adresseADRet

garderinactivelaligneW(write).• aprèsuncertaintempsappelétempsd’accèsenlecture,lemotmémoire(delargeurn)placé

àcetteadresseestdisponiblesurleslignesDOUT(DataOut).

Écritured’unmotmémoireo activerlaligneCE(ChipEnable),placerl’adressedumotsurlesmlignesd’adresseADR,

placerladonnéeàécriresurlesnlignesDIN(DataIn)etactiverlaligneW(write).o aprèsuncertaintempsappelétempsd’écriture,lemot(delargeurn)estécritenmémoire,

etpourraêtreluultérieurement.

Letempsd’écritureestgénéralementvoisindutempsd’accèsenlecture;cestempsvarientd’unedizainedenanosecondespourlesmémoiresstatiqueslesplusrapidesàunecentainedenanosecondes.

Enpratique,lesboîtiersdisponiblesmettentencommunleslignesDINetDOUT,defaçonàminimiserlenombredebroches,etàfaciliterl’interconnexiondeplusieursboîtiers.Detelscircuitsontl’interfaceetlastructuresuivante:

FigureIII-89.Interfaced’unboîtierdeRAMstatiqueasynchronede2mmotsdenbits,avecdonnéesluesetécrites

communes.

UneentréesupplémentaireOE(OutputEnable)estnécessaire,quifonctionnedelafaçondécriteendébutdechapitre.Lorsdel’écritured’unmotmémoire,laligneOEdoitêtreinactive,etladonnéeàécrirepeutêtreplacéesurDATAsansrisquedecourt-circuit.Lorsd’unelectureenmémoire,laligneOEdoitêtreactivéeaprèsletempsd’accèsenlecturepourqueladonnéeluesoitdisponiblesurDATA.Onverraplusloincommentinterconnectercescircuits;lesprécautionsdéjàévoquéesdoiventêtrerespectéesici,etenparticulierlerisquequ’ilyad’avoiràlafoisOEactiveetunedonnéeprésenteenentréedeDATA,quipeutconduireàladestructionducircuit.

IV.13.3. Moded’emploidesmémoiresdynamiquesasynchronesLesmémoiresdynamiquesontgénéralementuneorganisationlégèrementdifférentedesmémoiresstatiques,mêmesicettedifférencen’estpasàattribueràleurnaturestatiqueoudynamique.LeurinterfaceestceluidelaFigureIII-90.

93

FigureIII-90.Interfaced’unboîtierdeRAMdynamiqueasynchronede22mmotsdenbits.

Onremarqued’abordqu’iln’yapasdelignedevalidation(CEouCS),etquedeuxnouvelleslignesRASetCASsontprésentes.Lalégendedelafigureparlede22mmotsdenbits,alorsqu’onnevoitquemlignesd’adresses.Onvavoirqu’enfait,cesmlignessontmultiplexées,etqu’onyprésentesuccessivementunnumérodelignesurmbits,puisunnumérodecolonnesurmbits,pouraccéderàunecellulemémoiredansunematricede2mx2m=22mcellulesmémoire.LaprésentationdesnumérosdeligneetdecolonneestsynchroniséeparlessignauxRASetCAS.

RASsignifiesélectiondeligned’adresse(RowAddressSelect);CASsignifiesélectiondecolonned’adresse(ColumnAddressSelection).LeboîtierestinactiftantqueRASetCASsontinactifs.Leschronologiesdelectureetd’écrituresontmontréesFigureIII-91etFigureIII-92.

Pourunelectureouuneécriture,onplaced’abordunnumérodelignesurADR,quiestobtenuenprenantlamoitiédel’adressecomplète,généralementlespoidsfortsetonactiveensuitelaligneRAS(frontdescendant).OnplaceensuitesurADRl’autremoitiédel’adressecomplète,généralementlespoidsfaibles,etonactiveensuitelaligneCAS(frontdescendant).Encasdelecture(W=1)ladonnéeseradisponiblesurDOUT;encasd’écritureilfaudraplacerladonnéesurDIN.

FigureIII-91.Chronogrammedelecturedansunemémoiredynamique.

94

FigureIII-92.Chronogrammed’écrituredansunemémoiredynamique.

Uncyclespécifiquederafraîchissementexisteégalement,quiopèresurdeslignesentièresdecellules.Chaquelignedoitêtrerafraîchietypiquementtoutesles5ms,etcelan’estpasfaitautomatiquementparlecircuit:c’estlalogiquedecommandequiestautourquidoits’encharger.

FigureIII-93.Structureinterned’unemémoiredynamiquede22mmotsdenbits.

UntelmodedefonctionnementcorrespondàlastructureinternedelaFigureIII-93.Onvoitque,lorsquelenumérodeligneestprésentésurADRetqu’unfrontdescendantestappliquésurRAS,cenumérodeligneeststockédansleregistredeligne.Savaleurestdécodéeetsélectionneunedesm2lignesdelamatrice.Delamêmefaçon,lorsquelenumérodecolonneestprésentésurADRetqu’unfrontdescendantestappliquésurCAS,cenuméroeststockédansleregistredecolonne,dontlavaleurestégalementdécodéeetsélectionneunedescolonnes.Unedescellulesmémoireestainsisélectionnée.Encasdelecture(W=1)ladonnéeseradisponiblesurDOUT;encasd’écritureilfaudraplacerladonnéesurDIN.Lamiseenœuvredecescircuitsestpluscomplexequecelledesmémoiresasynchrones,puisqu’onnepeutplusprésenterl’adresseentièredirectement.Onestobligédelaprésenterendeuxfois,généralementpoidsfortsd’abord(numérodeligne)etpoidsfaiblesensuite(numérodecolonne),cequipeutêtrefaitàl’aided’unmultiplexeur.

95

IV.13.4. Associationdemémoiresstatiquesasynchrones

premièreassociationIlfautd’abordremarquerquedanslesdeuxcas,lamémoireobtenueabienunnombretotaldebitsmémoireégalàlasommedesbitsmémoiredesdeuxparties.Chaqueboîtierinitialpossèdem×2nbitsmémoire,etleursommefaitdoncm×2n+1.Danslapremièreassociation,onaura2nmotsde2mbitssoit2×m×2n=m×2n+1;dansladeuxièmeonauraaussilesm×2n+1bits.

Pourformerunemémoirede2nmotsde2mbits,ilfautmettreessentiellementtoutesleslignesdesdeuxboîtiersencommun,àl’exceptiondeslignesdedonnéesqu’ilfautmettreenparallèle.CeladonnelecircuitdelaFigureIII-94.

FigureIII-94.Associationdemémoiresasynchrones,avecdoublementdelalargeurdesdonnées.

Lorsqu’unaccèsmémoire(lectureouécriture)esteffectué,lesdeuxboîtierssontsélectionnésenmêmetempsàlamêmeadresse,etfournissentouacceptentsimultanémentlesdeuxmoitiésdelargeurmdeladonnéeglobaledelargeur2m.

deuxièmeassociationPourformerunemémoirede2n+1motsdembits,ilvafalloirmettreencommunlesmlignesdedonnées,etdoncilnevaplusêtrepossibledesélectionnerlesdeuxboîtiersenmêmetemps,souspeinedecourt-circuit.Pourunemoitiédesadresses,ilfaudrasélectionnerlepremierboîtier,etl’autrepourl’autremoitiédesadresses.Lamanièrelaplussimpleesticid’utiliserundesbitsdel’adresseden+1bits,parexempleadr[n],pourfairecettesélection(FigureIII-95).

96

FigureIII-95.Associationdemémoiresasynchrones,avecdoublementdunombred’adresses.

Cebitestmisenentréed’undécodeur1vers2:s’ilvaut0,c’estleboîtiermémoireduhautquiestsélectionné;s’ilvaut1c’estleboîtierdubas.ToutcelasupposequelesignalCSglobalsoitactif,cars’ilnel’estpas,ledécodeurnesélectionneaucunboîtierLesignalOEsuituntraitementparticulier:pourchaqueboîtier,ilnedoitêtreactifquesileOEglobalestactif,etsileboîtierestsélectionné(CS=1).Onestalorsassuréqu’aucuncourt-circuitn’estpossible,puisquelesOEdesdeuxboîtierssontalorsmutuellementexclusifs.

Danscetteconfiguration,l’espacedesadressesdel’ensembleest[0,2n+1−1];lapremièremoitié[0,2n−1]correspondaupremierboîtier;laseconde[2n,2n+1−1]correspondausecond.Sionavaitutilisélebitdepoidsfaibledel’adresseglobalecommeentréedudécodeur,ladistributiondesadressesentrelesboîtiersauraitétédifférente:l’unauraitcontenulesadressespaires,etl’autrelesadressesimpaires.

IV.14. Exercicescorrigés

IV.14.1. Exercice1:systèmedesécurité

ÉnoncéRéaliserunsystèmedemiseenmarchedesécuritédemachinedangereuse.IlestéquipédedeuxentréesAetBetlamiseenmarcheestcontrôléeparlasortieM.Ilfautpourcelaquelaprocéduresuivantesoitrespectée:

1. AetBdoiventêtrerelâchésinitialement;2. appuyersurA,3. appuyersurB:lamachinesemetenmarche.

Touteautremanipulationarrêteoulaisselamachinearrêtée;ilfautensuitereprendrelaprocédureaupoint1pourlamettreenmarche.

97

SolutionOnvaadopterunesolutiondetypeMOORE.Onferaégalementuneconceptionsynchrone,c’estàdirequ’onsupposeraprésenteunehorlogesuffisammentrapidepournerateraucunévénementsurAetB.Legraphed’étatdeceproblèmeestdonnéFigureIII-96.

FigureIII-96.Graphed’étatdusystèmedesécurité,typeMOORE

Enpartantdel’étata,onprogressejusqu’àl’étatcpourlequelM=1sionrespectelaséquencedemiseenmarche.Surcechemin,ontombedansl’étatd’erreuredèsqu’ons’écartedelaprocédure.Lorsqu’onestene,onyrestetantqueAetBnesontpasrelâchéstouslesdeux,conformémentàlaspécificationdel’énoncé.

Onréécritcegraphesousuneformetabulairepourcherchers’ilestsimplifiable(FigureIII-97).

avant aprèsétat A B étata 0 0 aa 0 1 ea 1 0 ba 1 1 eb 0 0 eb 0 1 eb 1 0 bb 1 1 cc 0 0 ec 0 1 ec 1 0 ec 1 1 ce 0 0 ae 0 1 ee 1 0 ee 1 1 e

état Sa 0b 0c 1e 0

FigureIII-97.Tabledetransitionsdugraphedesécurité

Aucunesimplificationn’estpossible;lecircuitpossèdedoncunnombreminimald’étatsde4.Ilfautdonc2basculespourcodercetétat,dontonappelleralessortiesXetY.

Vientmaintenantl’étaped’assignation,durantlaquellenousdevonschoisiruneconfigurationdesbasculesXetYpourchacundesétats.Onassigneraàl’étatalevecteurXY=00,associerauresetdes

98

bascules.Pourlesautres,ilestsouhaitablepourobtenirdescalculsplussimplesderespecterlesheuristiquesd’assignation,quirecommandentdeplacercôteàcôtelesétatsfortementreliésdanslegraphe.Onpeutparexemplechoisirl’assignationdelaFigureIII-98.

FigureIII-98.Assignationdesétatsdusystèmedesécurité

Onpeutmaintenantréécrirelatabledetransition,enremplaçantlesétatssymboliquesparleurvecteurassocié(FigureIII-99).

avant aprèsétat A B état00 0 0 0000 0 1 0100 1 0 1000 1 1 0110 0 0 0110 0 1 0110 1 0 1010 1 1 1111 0 0 0111 0 1 0111 1 0 0111 1 1 1101 0 0 0001 0 1 0101 1 0 0101 1 1 01

état S00 010 011 101 0

FigureIII-99.Tabledetransitionsinstanciéedugraphedesécurité

Aucunebasculenesembleparticulièrementadaptéeàceschangementsd’état.Àtitred’exemple,onvautiliserdeuxbasculesT.Onpeutànouveauécrirelatabledetransitioninstanciée,enrajoutant2colonnesTXetTYquisontlesentréesTdesbasculesXetY(FigureIII-100).

99

avant aprèsétat A B TX TY état00 0 0 0 0 0000 0 1 0 1 0100 1 0 1 0 1000 1 1 0 1 0110 0 0 1 1 0110 0 1 1 1 0110 1 0 0 0 1010 1 1 0 1 1111 0 0 1 0 0111 0 1 1 0 0111 1 0 1 0 0111 1 1 0 0 1101 0 0 0 1 0001 0 1 0 0 0101 1 0 0 0 0101 1 1 0 0 01

état S00 010 011 101 0

FigureIII-100.Tabledetransitionsinstanciéedugraphedesécurité,aveclesentréesdes2basculesT.

IlsuffitmaintenantdetrouverlesformulesalgébriquespourTXetTY,enfonctiondeX,Y,AetB.OnpeutpourcelautiliserdestablesdeKarnaugh(FigureIII-101).Ontrouve:

1. 𝑇𝑋 = 𝐴𝐵𝑋𝑌 + 𝐴𝑋 + 𝐵𝑋𝑌2. 𝑇𝑌 = 𝐴𝐵𝑋𝑌 + 𝐵𝑌𝑋 + 𝐴𝑋𝑌3. 𝑀 = 𝑋𝑌

FigureIII-101.Simplificationdeséquationsdusystèmedesécurité

IV.14.2. Exercice2:compteur/décompteur

ÉnoncéConcevoiruncircuitséquentielsynchroneavecuneentréeeet4sortiesa,b,c,d,quicompteenbinairesura,b,c,dlorsquee=0etquidécomptelorsquee=1.

SolutionOnpourraitconcevoircecircuitenconstruisantungraphed’états,unetabledetransitions,etc.Maiscetteméthodeneseraitpasgénériqueetavec4bitslegrapheseraitdéjàdegrandetailleavec16états.Ilestpréférableicidecombinerdeuxcircuitsquel’onconnaîtdéjà,lecompteuretledécompteur.

100

Onadéjàprésentélescompteursetlesalgorithmesdecomptageetdedécomptageenbinaire(section4).Onréaliseuncompteurbinaire4bitsavec4basculesT;labasculedepoidsfaibleapourentrée1carellechanged’étatàchaquefrontd’horloge;lesautresbasculesontpourentréeleETdesbitsquisontàleurdroite.Undécompteursefaitégalementavec4basculesT;labasculedepoidsfaiblechangeégalementàchaquefront;lesautresbasculeschangentd’étatlorsquetouslesbitsquisontàleurdroitesontdes0.

Lasynthèsedesdeuxestdoncsimple:labasculedepoidsfaibleestcommune,carellechanged’étatàchaquefrontd’horlogedanslesdeuxcas.Pourlesautresbits,ils’agitégalementdefaireunETdanslesdeuxcas,maisdesbitsquisontàdroitepourlecomptageetdel’inversedecesmêmesbitspourledécomptage.Ilsuffitdoncdemettreuninverseurcommandé(unXOR,voirsection4)parlesignaledevantchacundesbitsàprendreencomptedansleET.CelaconduitauschémadelaFigureIII-102,avecuncodeSHDLimmédiat.

module cptdec(rst, h, e : a, b, c, d) // bascule a a := /ta*a+ta*/a; a.clk = clk; a.rst = rst; ta = nb * nc * nd; // bascule b b := /tb*b+tb*/b; b.clk = clk; b.rst = rst; tb = nc * nd; // bascule c c := /tc*c+tc*/c; c.clk = clk; c.rst = rst; tc = nd; // bascule d d := /d; d.clk = clk; d.rst = rst; // inversion de a,b,c,d // commandée par e na = a*/e + /a*e; nb = b*/e + /b*e; nc = c*/e + /c*e; nd = d*/e + /d*e;

end module

FigureIII-102.Compteur/décompteur:schémaetécritureSHDL

IV.14.3. Exercice3:utilisationdesbascules

ÉnoncéConstruireunebasculeDavecunebasculeT,puisunebasculeTavecunebasculeD.Onpourrautiliserdescircuitscombinatoires.

Solution1. BasculeDavecunebasculeT.

101

Onpeutseposerunequestionsimple:commentmettreà0unebasculeT?IlsuffitdemettrelavaleurQdelabasculesursonentréeT.Siellevalait0elleyresteetsiellevalait1elles’inverseetpasseà0.

Pourmettreà1unebasculeT,onvoitaussifacilementqu’ilsuffitd’appliquerl’inversedeQsurl’entréeT.

Danslesdeuxcas,onaappliquésurl’entréeTlavaleurQdelabascule,avecuneinversioncommandéeparlavaleurDàmémoriser:XOR(D,Q).

FigureIII-103.BasculeDavecunebasculeT

2. BasculeTavecunebasculeD.

Lasolutionesticiplusdirecte:ilsuffitd’appliquersurDl’équationd’évolutiondelabasculeT,quiest𝑄 ∶= 𝑇𝑄 + 𝑇𝑄

FigureIII-104.BasculeTavecunebasculeD

102

103

ChapitreV. Programmationduprocesseur32bitsCRAPS/SPARC

Lelangagemachine(etsaformeéquivalentesymboliquediteassembleur)estexécutédirectementparleprocesseur,etilestàcetitrel’intermédiaireobligédetouslescomposantslogicielsd’unordinateur.Mêmes’ilestvraiquepeudegensprogrammentdirectementenassembleur,sonétudeestéclairantepourlacompréhensiondelarelationentrelogicieletmatériel.Lebutdeceprésentchapitreestd’initieràlaprogrammationenassembleurduprocesseurCRAPSautraversdeprogrammesdedifférentesnatures,defaçonàensuitemieuxcomprendresonarchitectureetsonfonctionnement.

V.1. Lelangagemachine,àlafrontièreentrelogicieletmatériel

LangagemachineetISALesinstructionsqu’exécuteunprocesseursontécritesdansunlangageappelélangagemachine,etsontforméesdecodesécritsdansdesmotsmémoiresconsécutifs;onappelleISA(InstructionSetArchitecture)celangageetsonorganisation.L’informatiqueutiliseungrandnombredelangagesdifférents:deslangagesdeprogrammationtelsqueCouJavapourlesprogrammeurs,deslangagesinterprétéstelsqueleslangagesdemacrodessuitesbureautiques,deslangagesdegestiondebasesdedonnées,etc.Maislaparticularitédulangagemachine,c’estd’êtrelelangageintermédiaireenlequeltouslesautreslangagesvontêtretraduits,enuneouplusieursétapes.Ilestsituéàlafrontièreentreleprocesseuretleslogiciels,entrehardwareetsoftware,etleprocesseurestl’interpréteurdecelangage(FigureIII-105),celuiquimetenactionsesinstructions.

FigureIII-105-Touslesprogrammesproduisentdulangagemachine,quiestexécutédirectementparleprocesseur.

ISAgénéraleouspécialisée?Biensûr,ilseraitplusefficaced’avoirunprocesseurquiexécutedirectementunlangageévolué,toutaumoinspourlesprogrammesécritsdanscelangage.Detelsprocesseursexistentouontexisté,notammentpourlelangageLisp,etplusrécemmentpourlelangageintermédiaire(bytecode)utiliséenJava.Cesdeuxlangagessontgénéralistesetpeuventêtreutilisésdanstouteslessituationsconcrètesdel’informatique,etl’espoirdesconcepteursdecesprocesseursétaitd’éleverauniveaudeceslangageslafrontièreentrematérieletlogiciel.MaislebytecodeJavaexploiteunemachineà

104

basedepile,peuadaptéeàlacompilationd’autreslangagesdeprogrammationtelsqueC.Finalement,lecompromisgénéralementadoptélorsdelaconceptiond’unnouveauprocesseurestledéveloppementd’uneISAadaptéeàlacompilationdelaplupartdeslangagesdeprogrammationcourants.

ÉvolutiondesISACommetoutestructuresituéeàunefrontière,l’ISAestunéquilibreentredesforcesopposées.LesconcepteursdecompilateurssouhaitentuneISArégulièreetpossédantleplusdepossibilitésentermesd’adressagemémoire,d’opérationsarithmétiques,etc.,alorsquelesarchitectesdesprocesseursveulentuneISAsimpleàimplémenterefficacement.

Uneforceimportantequilimitel’apparitiondenouvellesISAs(denouveauxlangagesmachine)estlademandedesclientsd’unecompatibilitéascendanted’unprocesseurd’unegénérationàl’autre,defaçonàpouvoirfairefonctionnersanschangementleursanciensprogrammes.CetteforcesemanifestedefaçontrèspuissanteaveclesprocesseursdePC(dontl’ISAestsouventdésignéeparx86,parcequelesnomsdesprocesseursseterminentpar86:8086,80286,etc.),pourlaquelletoutchangementconduisantàunenoncompatibilitéestexclu.Ainsi,lesprocesseursx86lesplusrécentscontinuentàmanifesterlabizarreried’écritureenmémoireinverséedetypelittle-endian,parcequ’elleétaitprésenteàl’originesurleprocesseur8bitsIntel8080pourdesmotifsdesimplicitédeconception,etqu’elles’esttransmisepourraisondecompatibilitétoutlelongdelachaîne8080,8085,8086,80286,80386,Pentium,Pentium2,etc.jusqu’auxprocesseursdesPCsactuels.

D’autresprocesseursmoinsconnusontégalementunelignéetrèslongueetrespectable.OnpeutciterleprocesseurARM,undespremiersprocesseurs32bitscommercialisés,quifaitévoluersonISAdefaçonascendantedepuislesannées80jusqu’àmaintenant,etquiéquipeungrandnombredetéléphonesportables,lesconsolesdejeuxportablesNintendoetungrandnombred’appareilsmobiles.

ProcesseursCISCetRISCUnenouvellegénérationdeprocesseursestapparuedanslesannées80,caractériséeparunjeud’instructionlimitéàl’essentiel,d’oùleurnomdeprocesseursRISC(ReducedInstructionSetComputer).Parailleurs,leurISAestgénéralementtrèsrégulière,contientbeaucoupderegistresutilisateurs,etlesinstructionssontcodéessousformed’unmotmémoireunique.Toutcelarendheureuxlesarchitectesduprocesseur,quipeuventconcevoirdesarchitecturestrèsefficacespourcetteISA,etnerendpastropmalheureuxlesconcepteursdecompilateurs,quiontunpeuplusdedifficultéàtraduirelesprogrammes,maisquiapprécientlegainenvitessed’exécution.Paropposition,lesanciensprocesseurstelsquelesx86ontétérebaptisésprocesseursCISC(ComplexInstructionSetComputer),etsicen’étaitl’énormeinvestissementdûausuccèsduPCavecl’ISAx86,lesprocesseursRISCauraientconnusundéveloppementplusimmédiatetpluslarge.

V.2. RessourcesduprogrammeurCRAPS/SPARCLelangagemachinedeCRAPSestunsousensembledulangagemachineduSPARCdeSUN(aucasoùvousnel’auriezpasencoreremarqué,’CRAPS’=’SPARC’àl’envers!),avecuncertainnombredelimitations.C’estdoncunlangagedetypeRISC,quiserapartiellementcompatibleavecleSPARCauniveaubinaire.Néanmoinsiln’exploitepaslanotionSPARCdefenêtrederegistresetiln’apasd’instructiond’arithmétiqueflottante.

105

Afinderendreplusconcrèteslesdescriptionsquisontsuivre,onvaprogressivementprogrammerlepetitalgorithmesuivantquifaitlasommedes10élémentsd’untableau:

résultat <- 0 ;

pour i de 0 à 9 faire

résultat <- résultat + TAB[i] ;

fin pour

V.2.1. TypesdedonnéesdeCRAPSCRAPSestunprocesseur32bits:celasignifiequelesmotsmémoirequ’ilmanipuleleplusdirectementont32bitsdelarge,etquetoussesregistressontde32bits.

Lesentierssignéssontcodésencomplémentà2etlesopérationsarithmétiquesdisponiblessontl’additionetlasoustractionsur32bits,lamultiplication16bitsX16bitsvers32bitsetladivision32bits/16bitsvers32bits.Ilnedisposepasderegistrespourlesnombresflottants,nid’instructiond’arithmétiqueflottante.Sidescalculssurdesréelsdoiventêtreeffectués,ilsdoiventêtreexécutéspardeslibrairieslogiciellesspécialisées.

Aucunautretypededonnéesn’estexplicitementsupporté.Leschaînesdecaractères,leslistesetc.devrontêtreassembléesetmanipuléesencombinantlesopérationssurlesoctetsetlesmotsde32bits.

V.2.2. LesregistresdeCRAPS

LesregistresbanalisésCRAPSpossède32registresdirectementaccessiblesauprogrammeur(FigureIII-106).Onlesnote%r0,…%r31.Ilssonttousaccessibleslibrementenlectureetenécriture,mais%r0aunstatutspécial:ilvauttoujours0enlecture,quellesquesoientlesécrituresqu’onfassededans.Cettebizarrerieestenfaittrèscommodeetonverraparlasuitecommentelleestexploitée.

FigureIII-106.LesregistresduprocesseurCRAPS.Ilssonttousaccessiblesauprogrammeur,maiscertainsontdéjàdesfonctionsassignéesparleprocesseur.

106

r31serautilisécommeregistreinstructionparleprocesseuretr30commecompteurordinal;r29seragénéralementlepointeurdepileetr28serviraàstockerl’adressederetourdesinstructionscall(maiscesconventionsnesontpasimposéesparlematériel).

Leprogrammeurdisposedoncd’unnombreimportantderegistresqu’ilpeututiliseràsaguisedanssesopérationslocales,cequiestd’ungrandconfortetpermetdelimitergrandementlenombred’accèsàlamémoirecentrale.

Notrealgorithmesetransformedelafaçonsuivante:

%r1 <- 0;

pour %r2 de 0 à 9 faire

%r3 <- TAB[%r2] ;

%r1 <- %r1 + %r3 ;

fin pour

Troisregistresutilisateurssontdéjàmobilisés,etcen’estqu’undébut!Onvoitl’intérêtqu’offreauprogrammeuruneISAfournissantbeaucoupderegistresutilisateurs.

V.2.3. LemodèlemémoiredeCRAPSCommelaplupartdesprocesseursactuels,l’ISAdeCRAPSvoitlamémoiresousformed’unruband’octetssituésàdesadressesconsécutives(FigureIII-107).

FigureIII-107.LamémoiredeCRAPSestunrubandemots,numérotéspardesadressesallantde0à232–1.

LesadressesserontprésentesdansCRAPSsousformedemotsde32bits,définissantainsiunemémoirecentralepouvantcompterjusqu’à232cases,soit4giga-octets,lesadressesallantde0à232−1.Lefaitd’avoir32lignesd’adressesseracommodedansCRAPSpourmanipulerlesadressesàl’intérieurdesregistres.Cechoixn’étaitpasobligatoire,etonauraitpuimaginerunnombredelignesd’adressesinférieurousupérieuràlatailledumotmémoireduprocesseur,ici32.

Enpratique,l’ensembledecetespaced’adressagen’estsouventpasentièrementoccupépardelamémoirephysique.Unmécanismededécodagedesadressesquel’onétudieraauchapitresuivantpermettrad’associerunblocd’adressesparticulieràunboîtiermémoireparticulier;parailleurslalectureetl’écritureàcertainesadressesneconduirapasàunsimplestockage,maisdéclencheralacommandedecertainscircuits,telsqueletimeroulecircuitd’entrées-sorties,selonunmécanismeappeléentrées/sortiesmappéesenmémoire,dontonétudieral’implémentationauchapitresuivant,maisquel’onapprendraàutiliserentantqueprogrammeurunpeuplusloindanscechapitre.

Reprenonsnotrepetitalgorithmedesommedesnombresd’untableau.Onvadésignerparmem[adr]l’octetenmémoiresituéàl’adresseadr.NotretableauTABenmémoirecentraleestformédemotsde32bitssituésconsécutivement.

Notrealgorithmedevient:

107

%r1 <- 0 ;

%r4 <- adresse de TAB ;

pour %r2 de 0 à 9 faire

%r3 <- mem[%r4+%r2] ;

%r1 <- %r1 + %r3 ;

fin pour

V.2.4. LesinstructionsdeCRAPSTouteslesinstructionsdeCRAPSsontconstituéesd’unseulmotde32bits.Cettecaractéristiquedesinstructionsd’avoirunetaillefixed’unmotesttypiquedesprocesseursRISC,etellefacilitegrandementcertainsaspectsdeleurconception.LesinstructionsdeCRAPSsontforméesdeplusieursgroupes,chacunayantunecertainestructuredecodage(FigureIII-108).

FigureIII-108.Structurebinairedesdifférentsgroupesd’instructionsdeCRAPS.

Lavaleurdesdeuxbitsdepoidsfortpermetd’identifierimmédiatementlegroupedel’instruction.LetableaudelaFigureIII-109donnelasignificationdeleursvaleurspourleprocesseurCRAPS.

FigureIII-109.Significationsdesvaleursd’opcodes.

Lesdifférentescombinaisonspossiblessurlesformatsd’instructionsconduisentautableaud’instructionsdelaFigureIII-110.

108

FigureIII-110.Lesgroupesd’instructionsduprocesseurCRAPS.

Cetableauestremarquablementréduit;SPARC/CRAPSméritevéritablementsonqualificatifdeprocesseurRISC.LesversionssuivantesduSPARC,notammentl’UltraSparcIIsur64bits,vontajouteràcetensemblebeaucoupdeformatsd’instructionssupplémentaires,etperdredecetteélégantesimplicité.

LangageassembleurDanscestableauxFigureIII-110,lesinstructionsontétéécrites,nonpasenlangagemachinequiauraitétépeucompréhensible,maisdansuneécrituresymboliqueéquivalentediteécritureassembleur.Pourchaqueprocesseur,leconstructeurfournitledescriptifcompletdujeud’instructionenlangagemachine,maisaussiuneécritureassembleurconseilléeéquivalente.Lesdéveloppeurspeuventalorsécriredesprogrammesassembleurs,ditsencoreassembleurs,dontlerôleestdetraduireuntextesourceécritenlangageassembleur,enlasuitedescodesmachinecorrespondants.Letermeassembleurdésignedoncàlafoislelangageduprocesseur(soussaformesymbolique)etleprogrammequitraduituntextesourcedulangageassembleurverslelangagemachine.LaFigureIII-111montreuneinstructionécriteenassembleur,etsoncodemachineéquivalent.

addcc %r2, 10, %r3 ⇔ 10.00011.010000.00010.1.0000000001010

FigureIII-111.UneinstructionenassembleurCRAPS/SPARCetlecodemachinecorrespondant.

InstructionssynthétiquesCertainesinstructionssemblentmanquer.Parexemple,iln’yapasd’instructiondecopied’unregistreversunautre,oud’instructionquicompare2registres,ouencored’instructionquimetteàzérounregistre.Enfait,iln’estpasnécessairequecesinstructionsexistent,carellessontdescasparticuliersd’instructionsplusgénérales.Parexemplelamiseà0d’unregistre%ripeutsefairepar

109

l’instructionorcc%r0,%r0,%ri.Onexploiteicilefaitque%r0vauttoujours0;leORde0avec%r0(quivaut0)estainsistockédans%ri,cequiestlerésultatsouhaité.

DanslasyntaxeduprocesseurCRAPS/SPARCfigurentainsidesinstructionsditessynthétiques,quisontenfaitremplacéesaumomentdel’assemblageparlaoulesinstructionséquivalentes.LaFigureIII-112montrel’ensembledesinstructionssynthétiquesdisponiblespourCRAPS.

Instruction Effet implémentation

clr %ri metàzéro%ri orcc %r0, %r0, %ri

mov %ri,%rj copie%ridans%rj orcc %ri, %r0, %rj

inccc %ri incrémente%ri addcc %ri, 1, %ri

deccc %ri décrémente%ri subcc %ri, 1, %ri

set val31..0, %ri copievaldans%ri sethi val31..8, %ri

orcc %ri, val7..0, %ri

setq val12..0, %ri copievaldans%ri orcc %ri, val12..0, %ri

cmp %ri, %rj compare%riet%rj subcc %ri, %rj, %r0

tst %ri testenullitéetsignede%ri orcc %ri, %r0, %r0

negcc %ri Calculel’opposéde%ri subcc %r0, %ri, %ri

nop nooperation sethi 0,%r0

call <label> Appeldesous-programmeterminal

or %r0, %r30, %r28

ba <label>

rcall <label> Appeldesous-programmeavecsauvegardedel’adressederetour

push %r28

call <label>

pop %r28

ret retourdesous-programme add %r28, 1, %r30

push %ri empile%ri sub %r29, 1, %r29

st %ri, [%r29]

pop %ri dépile%ri ld [%r29], %ri

add %r29, 1, %r29

FigureIII-112.LesinstructionssynthétiquesdeCRAPS.Ellessonttraduitesenuneécritureéquivalente.

Initialisationd’unregistreparuneconstanteL’instructionsynthétiqueset val,%risertàinitialiserunregistre%riavecuneconstantediteimmédiate,c’estàdirefourniedirectementdansleprogramme.Cetteinstructionsynthétiqueestremplacéepardeuxinstructionssethi val31..8,%rietorcc %ri,val7..0,%riquivonteffectivementbienfairecetteaffectation,enpositionnantd’abordles24bitsdepoidsfortavecsethi,puisles8bitsdepoidsfaiblesavecorcc.Lefaitd’avoiràexécuterdeuxinstructionspourinitialiserunregistreàunevaleurimmédiateesttypiquedesprocesseursRISC.Ceux-ciayantdes

110

instructionsdelatailledeleurmotmémoire,ilsnepeuventpasdansuneseuleinstructionfournirunedonnéeimmédiatedecettetaille.Onnoteralaprésencedel’instructionsynthétiquesetq(rajoutéeparrapportauSPARC)quipermetdefaireunetelleinitialisationenuneseuleinstructionlorsquelaconstanteestpetite(13bitssignée,c’estàdireentre-4096et+4095).Elleestéquivalenteàorcc %r0,val,%riquitireencorepartidufaitque%r0vaut0.

Onnoteraégalementlatrèsclassiqueinstructionmov %r1,%rjquienréalitéest:orcc %ri,%r0,%rj,réalisantbienlacopieducontenude%ridans%rj.

Nouspouvonsmaintenantmettreuncertainnombred’instructionsCRAPSenfacedeslignesdenotrepetitalgorithme:

clr %r1 // %r1 <- 0 ;

set TAB, %r4 // %r4 <- adresse de TAB ;

pour %r2 de 0 à 9 faire

ld [%r4+%r2], %r3 // %r3 <- mem[%r4];

addcc %r1, %r3, %r1 // %r1 <- %r1 + %r3 ;

fin pour

Dansceprogramme,nemanquentquelesinstructionsquivontpermettred’implémenterlastructuredecontrôlepour … fin pour.Touteslesautresinstructionssontdenatureséquentielle,c’estàdirequ’elless’exécutentdansl’ordreoùellessontprésentesenmémoire,disposéesàdesadressescroissantes.

V.2.5. RupturesdeséquenceenCRAPSBiensûr,siunprocesseurn’étaitdotéqued’instructionsséquentielles,ilseraitincapabled’exécuterlamoindretâcheunpeucomplexe,puisqu’incapabled’implémenterdesbouclesoudesstructuresdecontrôledetype‘tantque’.Ilfautdoncabsolumentqu’ilsoitdotéd’instructionsditesderupturedeséquence,quipermettent,nonseulementde’sauter’àuneinstructionquin’estpaslasuivante,maisaussidefairecesautdefaçonconditionnelle,enfonctiondesrésultatsdesopérationsprécédentes.

UnregistrespécialdeCRAPS/SPARCappelé%pc(programcounter),nondirectementaccessibleauprogrammeur,contientenpermanencel’adressedel’instructionencoursd’exécution.Aprèsl’exécutiond’uneinstructionséquentielle,%pcestsystématiquementincrémenté,desortequ’aucycled’exécutionsuivant,lecontrôleestpasséàl’instructionsuivanteenmémoire.

BranchementsinconditionnelsPoureffectuerunsautinconditionneltelqueba addr,ilsuffitquecetteinstructionn’effectuepasl’incrémentationde%pc,maisaucontraire’force’lavaleurdel’adresseaddrdans%pc.Ainsiaucycled’exécutionsuivant,leprocesseurchargeral’instructionsituéeàcettenouvelleadresse,etlecontrôleseradonttransféréàcepointdansleprogramme.

BranchementsconditionnelsCesautpeutégalementêtrefaitdefaçonconditionnelleaveclesinstructionsbcctellesquebne, beq, bpos,etc.Achacunedecesinstructionsestassociéuntestbooléen;sicetestestvérifié,lesautesteffectué(%pcestalorsaffectéavecl’adressedesaut);sinon%pcestincrémenté,c’estàdire

111

quelesautn’estpasfaitetquelecontrôlecontinueenséquencedansleprogramme,àl’instructionquisuitcebranchement.

Letestenquestionestfaitsurlavaleurde4bitsN,Z,V,Cappelésindicateursouflags,quisontpositionnésaprèscertainesinstructionsarithmétiquesetlogiques.Ilsontlessignificationssuivantes:

• Nindiquequelerésultatdel’opérationestnégatif,c’estàdirequesonpoidsfortestà1.

• Zindiquequelerésultatdel’opérationestnul.

• Vindiquequ’ilyaeudébordementd’uneadditionoud’unesoustractionsignée.

• Cindiquequ’ilyaeuuneretenuelorsd’uneadditionouempruntlorsd’unesoustraction.

Lesinstructionsquiaffectentlesflagsontunnomquiseterminegénéralementpar’cc’:addcc, xorcc,etc.Pourêtresûrdesflagsquisontaffectésounonparuneinstruction,ilfautsereporteràsadescriptiondétaillée,présenteàlafindel’ouvrage.

Lesinstructionsdebranchementconditionnelbcceffectuentlesautpourcertainescombinaisonsdevaleursdesflags.Lestableauxdes3figuressuivanteslesdécrivent,lepremiertableauprésentantlesbranchementsconditionnelslesplussimplesquinefontintervenirqu’unseulflag,lesecondprésentantlesbranchementsassociésàunearithmétiquesignéeetletroisièmelesbranchementsassociésàunearithmétiquenonsignée.

Instruction Opération Testba Branchalways 1

beq(synonymes:be,bz) Branchonequal Z

bne(synonyme:bnz) BranchonNotEqual notZ

bneg(synonyme:bn) BranchonNegative N

bpos(synonyme:bnn) BranchonPositive notN

bcs(synonyme:blu) BranchonCarrySet C

bcc(synonyme:bgeu) BranchonCarryClear notC

bvs BranchonOverflowSet V

bvc BranchonOverflowClear notV

FigureIII-113.Branchementsconditionnelsassociésàunseulflag.

Instruction Opération Testbg(synonyme:bgt) Branchonequal not(Zor(NxorV))

bge BranchonGreaterorEqual not(NxorV)

bl(synonyme:blt) BranchonLess (NxorV)

ble BranchonLessorEqual Zor(NxorV)

FigureIII-114.Branchementsconditionnelsassociésàunearithmétiquesignée.

112

Instruction Opération Testbgu BranchonGreaterUnsigned not(ZorC)

bgeu(synonyme:bcc)

Branchongreaterthan,orequal,unsigned

notC

blu(synonyme:bcs) Branchonlessthan,unsigned C

bleu BranchonLessorEqualUnsigned ZorC

FigureIII-115.Branchementsconditionnelsassociésàunearithmétiquenonsignée.

Lesbranchementsdupremiertableauquinefontintervenirqu’unseulflagpeuventêtreutilisésdanslaplupartdessituationssimples,etonpeutenlescombinantn’utiliserqu’euxdansdessituationspluscomplexes.

Lesbranchementsassociésàl’arithmétiquesignéeetnonsignéedesdeuxtableauxsuivantsnesecomprennentquesionsupposequ’unecomparaisonentredeuxvaleursvientd’êtrefaite,c’estàdiredansunprogrammedelaforme:

cmp %ri, reg/val

bxx saut

bxxreprésenteunedesinstructionsdebranchementconditionnel,etreg/valreprésenteunregistreouuneconstante.L’instructionsynthétiquecmp %ri,opestéquivalenteàsubcc %ri,op,%r0c’estàdirequ’elleeffectuelasoustraction%ri–op(oppouvantêtreunregistreouuneconstantesignéesur13bits)danslebutd’obtenir,nonpaslavaleurdurésultatentantquetelle(quiestéliminéedans%r0),maisplutôtlavaleurdesflagsaprèscettesoustraction.Ceux-cipermettenteneffetdetoutsavoirsurlespositionsrespectivesde%rietdereg/val:

• %ri=op⇔%ri−op=0,soitZ.

• %ri>op⇔%ri−op>0,soitN=0etZ=0,soit𝑁 + 𝑍.

• %ri≥op⇔%ri−op≥0,soit𝑁.

• %ri<op⇔%ri−op<0,soitN.

• %ri≤op⇔%ri−op≤0,soitN=1ouZ=1,soitZ+N.

Enarithmétiquesignée,ondoitremplacerNpar(N+V)dansceséquationspourtenircomptedessituationsoùoncomparedesgrandsnombresenvaleurabsolue,etoùlasoustractionprovoqueundébordementmaisquipermettoutdemêmedeconclure.CelaconduitalorsauxéquationsdutableauFigureIII-114.

Enarithmétiquenonsignée,ondoitremplacerNparC,carCvaavoirlamêmevaleurqueNlorsdelasoustractiondepetitesvaleurs,maisvaégalementpermettredeconcluredansdessituationsoùlasoustractionaunegrandeamplitudeetchangelesignedurésultat,tellesquelacomparaisonde0x00000001et0xFFFFFFFF:leursoustractiondonne0x00000002,avecN=0etC=1.SeulCindiquedanstouslescasqu’ilafalluemprunterpoursoustrairelesdeuxarguments.CelaconduitauxéquationsdutableauFigureIII-115.

113

Maintenant,noussommesprêtsàterminerlaprogrammationdenotrealgorithme:

/////// somme des éléments d’un tableau //////

clr %r1 // %r1 <- 0 ;

set TAB, %r4 // %r4 <- adresse de TAB ;

clr %r2 // index i

loop: ld [%r4+%r2], %r3 // %r3 <- TAB[i];

addcc %r1, %r3, %r1 // %r1 <- %r1 + %r3 ;

inccc %r2

cmp %r2, 9

bleu loop // fin pour

%r2estinitialiséà0audébutdelabouclepour…finpour.Enfindeboucle,%r2estincrémenté(incc %r2),puiscomparéà9.Entouterigueurilfaututiliserbleupuisqu’onfaituntest≤nonsigné,maisbposauraitfonctionnéégalementcarlesvaleursdesindicesrestentpetites.

BranchementsrelatifsPourtouslesbranchementsquenousvenonsdevoir,baetbcc,cen’estpasl’adresseabsoluedusautquiestcodée,maisundéplacementrelatifàcetteadresse.Sionreprendlecodagebinairedecesinstructions(FigureIII-108),onvoitquelebranchementestcodédanslechampdisp22quicodeundéplacementsigné,ennombredemots.Ledéplacementestsigné,cequisignifiequ’unevaleurnégativeconduiraàunsautenarrièredansleprogramme,etundéplacementpositifàunsautenavant.Ainsi,puisquel’instructionencoursd’exécutionasonadressestockéedansleregistre%pc,lesautconduiraàfairel’affectation:

%pc←%pc+disp22

Parexemple,l’instructiondenotreprogrammebne loopdécritunsaut(conditionnel)de4instructionsenarrière,soit:

00.0.1001.010.1111111111111111111100 bne loop

Coderlesautsousformed’undéplacementprésentedeuxavantages:

• c’estpluséconomiqueenmémoire,puisquetoutlesautestcodéenuneinstructiond’unmot.

• l’instructionobtenueesttranslatable,c’estàdirequ’unprogrammequinecomprendquedetellesinstructionspeutêtreplacén’importeoùenmémoire.C’estunecaractéristiqueimportantedesprogrammeslorsqu’ilsdoiventêtrechargésparlesystèmed’exploitationàuneplacelibreenmémoire.

Lesauteffectuéparcesinstructionsnepeutpasêtrefaitd’uneextrémitédelamémoireàl’autre.OnpeutvoirsurleformatbinairedesinstructionsFigureIII-108queledéplacementestcodésur22bits,etdonconnepeutpasfaireunsautdeplusde221instructionsenavantouenarrière.Enpratiquec’estunevaleurtrèssuffisantetantquelesautestfaitàl’intérieurd’unmêmeblocdeprogramme.

BranchementsabsolusDanscertainessituations,onpeutavoirlebesoindesebrancheràuneadresseabsolue,etnonuneadresselocaleetrelativeaublocdecodecourant.Lesystèmed’exploitationacebesoin,lorsqueson

114

schedulerdetâchesvaenleverlecontrôleàunetâchepourledonneràuneautreparexemple,oulorsqu’ilvaexécuterunsous-programmed’interruption.Nousenverronsdesexemplesplusloindanscechapitre.

Danscecas,ondoitmanipulerdirectementlecompteurordinal,c'est-à-direleregistre%r31,quiestdirectementaccessibleauprogrammeur.

V.2.6. Lesmodesd’adressagedeCRAPSUnmoded’adressageestuntyped’accèsauxdonnéespourleprocesseur.PourCRAPS,ilssontaunombrede5:

• l’adressageregistre:ladonnéeestdansunregistre,spécifiéparsonnuméro.Parexemple:

addcc %r1, %r2, %r3

Iciles3donnéesmanipuléessontdansdesregistres.

• l’adressageimmédiat:l’instructionelle-même,danssoncodageenlangagemachine,contientladonnée.Parexemple:

addcc %r1, 2, %r3

Iciladeuxièmedonnée(2)estcodéedanslechampsimm13del’instruction.

• l’adressagedirect(ouabsolu):l’instructioncontientl’adressedeladonnée.Parexemple:

ld [600], %r1

%r1estchargéavecladonnéesituéeenmémoireàl’adresse600.Cetteadresse600estcodéedansl’instructionelle-même(unpeucommedansunadressageimmédiat),danssonchampsimm13.Commecettevaleurnepeutpasdépasser4095,cemoded’adressageestd’unusagetrèslimitédansCRAPS.

• l’adressageindirect:l’instructioncontientl’adressedel’adressedeladonnée.Parexemple:

ld [%r1], %r2

%r2estchargéavecladonnéesituéeàl’adressecontenuedans%r1.«L’adressedel’adresse»esticilenuméroduregistre(1)quicontientl’adressedeladonnée.Cemoded’adressageestindispensablepouraccéderauxélémentsd’untableaudetaillenonconnueapriori.C’estparexempleceluiqu’onautilisédansnotreprogrammedecalculdelasommedesélémentsd’untableau,pouraccéderauxnombresenmémoire.

• l’adressageindirectavecdéplacement.Parexemple:

ld [%r1-2], %r2

Cecasestsimilaireauprécédent,maisonajouteaucontenuduregistreuneconstante(ici-2)pourobtenirl’adressedeladonnée.

V.3. Directivesd’unprogrammeassembleur

115

Sionchercheàassemblereffectivement,àl’aidedeCRAPSEMUparexemple,leprogrammedesommedesélémentsd’untableauétudiéàlasectionprécédente,lesymboleTABseradéclarécommeindéterminé.Ilesteneffetcenséreprésenterl’adressededébutdutableau,maisrienn’aétéspécifiépourl’initialiser.Unedirectivedansunprogrammeassembleurestunelignequinecorrespondpasàuneinstruction,maisquispécifie:

• lalocalisationenmémoired’unblocd’instructionsoudedonnées.• laréservationet/oul’initialisationd’unblocdedonnées.

PournotretableauTAB,nousavonsbesoindespécifieràlafoissonadresse,etsoncontenuinitial,sionsupposequ’ilestdonnéetnonqu’ilestlerésultatd’uncalculantérieur.Leprogrammesuivantcontientlesdirectivesnécessaires:

;;;;;;;;;; zone de programme ;;;;;;;;;

.org 0

clr %r1 // %r1 <- 0 ;

set TAB, %r4 // %r4 <- adresse de TAB ;

clr %r2 // pour i de 0 à 9

loop: ld [%r4+%r2], %r3 // %r3 <- TAB[i];

addcc %r1, %r3, %r1 // %r1 <- %r1 + %r3 ;

inccc %r2

cmp %r2, 9

bleu loop // fin pour

ba *

;;;;;;;;;; zone de données ;;;;;;;;;

.org 0x100

TAB .word 12, -4, 5, 8, 3, 10, 4, -1, 1, 9

ADRESSED’ASSEMBLAGELadirective.orgchangel’adressed’assemblagecourante.Avec.org0,leprogrammeseraassembléàpartirdel’adresse0.LetableauTABserasituéplusloinenmémoire,àpartirdel’adresse0x100,grâceàladirective.org0x100.

ALLOCATIONETINITIALISATIONDEMOTSENMEMOIRELadirective.wordfournitunelistedenombres,écritsendécimal,hexadécimaloubinaire,quiserontplacésenmémoireàpartirdel’adressed’assemblagecourante.Dansnotreprogrammeexemple,celanouspermetdecréeruntableauetdel’initialiserstatiquement(c’estàdireavantlelancementduprogramme)avec10motsde32bits.Voicicequedonnelelistingd’assemblagecomplet,quiimprimetouteslesadressesmémoire(colonnedegauche)etleurcontenu:

00000000 .org 0

00000000 82900000 clr %r1

00000001 12000002 set TAB, %r4

00000002 88912000

00000003 84900000 clr %r2

00000004 C6010002 loop: ld [%r4+%r2], %r3

00000005 82804003 addcc %r1, %r3, %r1

00000006 8480A001 inccc %r2

116

00000007 80A0A009 cmp %r2, 9

00000008 08BFFFFB bleu loop

00000009 10800000 ba *

00000100 .org 0x100

00000100 0000000C TAB .word 12, -4, 5, 8, 3, 10, 4, -1, 1, 9

00000101 FFFFFFFC

00000102 00000005

00000103 00000008

00000104 00000003

00000105 0000000A

00000106 00000004

00000107 FFFFFFFF

00000108 00000001

00000109 00000009

Parexempleàl’adresse0x100ontrouve0x0000000C,c’estàdire12;àl’adresse0x101ontrouve0xFFFFFFFC,c’estàdire-4,etc.

UTILISATIONDESYMBOLESOnpeututiliserdessymbolespourreprésenterdesvaleursconstantesdefaçonpluslisibledansunprogramme.Onutilisepourcelauneécrituredutype:

N = 100

Danscetexemple,partoutoùNapparaîtra,ilseraremplacépar100.Parexemplesionécrit:set N, %r1,toutsepassecommesionavaitécritset 100, %r1.

Parailleurs,unearithmétiqueestutilisablesurdetelssymboles.Sionvoulaitinitialiseruntableauavecles3premiersmultiplesde15,onécrirait:

N = 15

TAB .word N, 2*N, 3*N

Detellesexpressionsarithmétiquespeuventcomporterdessignes’-’,’+’,’*’,’/’etdesparenthèsesaveclasyntaxeetlasémantiquehabituelle.Biensûr,onauracomprisquelescalculssurcesexpressionssonteffectuésaumomentdelaphased’assemblageetnonaumomentdel’exécutionduprogramme.Siparexempleonécrit:

N = 15 set 2*N+4, %r1

,toutsepassecommesionavaitécrit:set 34, %r1

V.4. Exempledeprogramme:cribled’ÉratosthèneAfind’illustrerdefaçonplusparlantelesélémentsdeprogrammationenassembleurquiviennentd’êtreprésentés,onvaécrireunprogrammequirecherchetouslesnombrespremiersinférieursàunecertainelimiteN,parlaméthodeducribled’Eratosthène.

ALGORITHMECetteméthodeconsisteàconstruireuntableauTAB[i],0≤i≤ndanslequelTAB[i]=0signifiequeiestpremier,etTAB[i]=1signifiequein’estpaspremier.Pourcelaonremplitd’abordtoutletableaudezéros.Ensuite,àpartirdei=2,onmetà1TAB[2*i],TAB[3*i],…jusqu’àlafindutableau,puisque

117

2*i,3*i,…nesontpaspremiers.Onchercheensuite,après2,lepremierindiceidutableaupourlequelTAB[i]=0.Enl’occurrencec’est3,quiestnécessairementpremiercarsinonilauraitétécochéprécédemment.Onmetalorsà1TAB[2i],TAB[3i],…jusqu’àlafindutableau,puisque2i,3i,…nesontpaspremiers.

OnrecommenceensuiteaveclaprochainevaleurdeipourlaquelleTAB[i]=0,quiestnécessairementpremière,etc.Onpeutarrêterceprocessusdèsqueiatteint 𝑁,caronpeutfacilementmontrerqu’alorstouslesnombresnonpremiersontdéjànécessairementétémarquésà1dansletableau.

Onpeuttraduirecetteméthodeparl’algorithmesuivant:

pour i de 0 à N-1

TAB[i] <- 0 ;

fin pour

pour i de 2 à racine(N)

si TAB[i] = 0 alors

j <- 2*i ;

tant que (j < N)

TAB[j] <- 1 ;

j <- j + i ;

fin tq

fin si

fin pour

PROGRAMMATIOND’aprèsl’algorithme,lesélémentsdutableauTABsontseulementlesvaleurs0ou1.Untableaudebitsauraitfournilecodagelepluscompact,maisauraitétédifficileàmanipuler.PuisqueCRAPSn’aquedesaccèsmémoiredetypemot,onvasecontentericid’untableaudemotsde32bitspourstockercesvaleurs;cetableauoccuperadoncN*4octets.

Commençonsd’abordparlamiseàzérodesélémentsdutableau:

N = 300

TAB = 0x150

set TAB, %r1 // %r1 = pointeur en début de tableau

set N, %r5 // %r5 = N durant tout le programme

clr %r2 // pour i de 0 à N-1

loop: st %r0, [%r1+%r2] // TAB[i] <- 0

inccc %r2 // élément suivant

cmp %r2, %r5

blu loop ; fin pour

Oncherchedonclesnombrespremiersjusqu’à300,onsupposeiciqu’ilyaunezonedemémoirevivelibreàl’adresse0x150,oùonvastockerlesélémentsdutableauTAB.

Onaimplémentéstrictementl’algorithme,avec%r3commeindicedansletableauet%r1commepointeursurledébutdutableau.Pourécriredansletableau,onnepeutemployerquel’instructionstd’écritureenmémoire.Laformegénéraledecetteinstructionétant:st %ri, [op+%rj],leregistreàécrireseranécessairement%r0(quivaut0)etl’adressedumotde32bitsàécriresera

118

%r1+%r2.Onfaiticilechoixdegarderunpointeurfixe%r1endébutdetableau,etdeluiajouterundéplacementvariable%r2pouraccéderàunélémentquelconquedutableau.Celaconduitàl’instruction:

st %r0,[%r1+%r2] // TAB[i] <- 0

Lestroisinstructionssuivantessontrelativesàlarecherchedel’indicesuivant.Oncommenced’abordparincrémenterl’indice:

inccc %r2 // élément suivant

Ilfautensuitevérifierquel’indiceestinférieuràlalimiteN−1:

cmp %r3, %r5

Cetteinstructionsynthétiquecmp %r3, %r5équivautàl’instructionsubcc %r3, %r5, %r0.Aprèssonexécution,lesflagssontpositionnésenfonctiondelavaleurde%r3−N,c’estàdiredei−N.Puisquel’algorithmementionneunerelationd’inégalité,c’estlavaleurduflagNquinousintéresse.Ona:

N=1⇔i−N<0⇔i<N⇔i≤N−1

Ondoitdoncutiliserl’instructionbneg,quieffectuelebranchementversledébutdelabouclesiN=1:

bneg loop // fin pour

Enfait,puisqu’ils’agitd’unecomparaisonnonsignée,ilestmêmepréférabled’utiliserlebranchementblu(synonyme:bcs),quifaitunecomparaisondetypeinférieurstrict,nonsignée.Ellepermettraeneffetd’étendrel’algorithmeàdesvaleursdeNtrèsgrandes,jusqu’aumaximumpossiblesur32bits.Onécrira:

blu loop // fin pour

Onvientdetraduirelittéralementl’algorithmequiétaitdonné,àlafaçond’uncompilateur,maisonpeutrendrececodepluscompactetplusefficace.

Danslerestedel’algorithme,lastructuredecontrôledeplushautniveauestdelaformepouride2à 𝑁...finpour.Cettefoisl’indiceiestutilisédefaçoncroissante.Onvaletraduirecommedanslapremièreversiondel’initialisationdutableau:

setq 2,%r2 // pour i de 2 a racine(N)

loopi : ...

<corps de la boucle>

...

nexti: inccc %r2

cmp %r2, RN

bleu loopi // fin pour

Onremarqueral’usagedel’instructionsynthétiquesetqpourinitialiserunepetiteconstante,pluséconomiquequesetquiutilisedeuxinstructions.RNestuneconstanteégaleàlaracinedeN;onfaiticil’hypothèsequ’ellenedépassepas13bitsafindepouvoiremployerdirectementcmp %r2, RN.

119

Danslecorpsdelaboucle,ondoitensuitelirel’élémentTAB[i]dutableau,etchoisiruneautrevaleurdeisicetélémentdetableauvaut1:

setq 2,%r2 // pour i de 2 a racine(N)

loopi: ld [%r1+%r2], %r6

tst %r6

bne nexti // si TAB[i] = 0

...

L’élémentdetableauestluenmémoire,c’estdoncuneinstructionldquidoitêtreutilisée.Letableaucommenceàl’adresse%r1etonlitl’élémentd’indice%r2:ilsetrouvedoncàl’adresse%r1+%r2.Ilestludans%r6etcommecettelecturenemodifielesflags(voirdétaildel’instructionldenannexe),uneinstructiontst %r6estnécessaire.L’instructionbne nextiprovoquelarecherched’unnouvelindiceisiZ=0,c’estàdiresi%r6estdifférentde0,doncégalà1ici.

L’instructionj<-2*is’implémentetrèssimplementsousformed’uneaddition:

addcc %r2, %r2, %r3 // j <- 2*i

Onaensuiteunestructuredecontrôletant que (j < N),qu’onvatraduire:

loopj: cmp %r3, %r5 // comparaison entre %r3 et N

bpos nexti // tant que (j < N)

...

<corps de la boucle>

...

ba loopj // fin tq

Elleestanalogueàl’implémentationdelastructurepour…finpour,maisletestestfaitentêtedeboucle.%r4contientdepuisl’initialisationlaconstanteN.

Lecorpsdelabouclesetraduitensuitedirectement:

check: setq 1, %r4

st %r4, [%r1+%r3] // TAB[j] <- 1

addcc %r3, %r2, %r3 // j <- j + i

Finalement,leprogrammecompletestdonnéFigureIII-116.Onnoteral’instructiond’arrêtsousformedeboucleinfinie.

N = 300 // taille tableau

RN = 15 // sqrt(N)

TAB = 0x100 // adresse du tableau

set TAB, %r1

set N, %r5

clr %r4

loop: st %r0, [%r1+%r4] // TAB[i] <- 0

inccc %r4 // élément suivant

cmp %r4, %r5

blu loop // fin pour

setq 2, %r2 // pour i de 2 a rac(N)

loopi: ld [%r1+%r2], %r6

tst %r6

120

bne nexti // si TAB[i] = 0

addcc %r2, %r2, %r3 // j <- 2*i

loopj: cmp %r3, %r5

bpos nexti // tant que (j < N)

check: setq 1, %r4

st %r4, [%r1+%r3] // TAB[j] <- 1

addcc %r3, %r2, %r3 // j <- j + i

ba loopj

nexti: inccc %r2

cmp %r2, RN

bleu loopi // fin pour

FigureIII-116.Programmecompletducribled’ÉratosthèneenCRAPS/SPARC.Ilconstruituntableaud’octetstelqu’unélémentd’indiceivalant0indiquequeiestpremier

V.5. Appelsdesous-programmesterminauxPourlemoment,nousn’avonsécritquedesprogrammesmonolithiques,utilisablesuneseulefois.Pourtant,ilseraitutilequ’unprogrammetelquelasommedesélémentsd’untableaupuisseêtreutiliséplusieursfoissurdifférentstableauxdurantl’exécutiond’unprogramme,sanspourautantavoiràdupliquersoncode.

CRAPSfournituntelmécanismesouslaformedesdeuxinstructionscalletret:

• call<adresse>sauvegardel’adressecouranted’exécutiondansleregistre%r28,puisprovoqueunbranchementàl’adressespécifiée,oùestsituélesous-programmequ’onsouhaiteappeler.

• retprovoquelebranchementàl’adresse%r28+2.Silecontenude%r28n’apasétémodifiédepuisl’appelcall,l’exécutionreprendàl’adressequisuitcelledel’instructioncall.

Toutsepassecommesicall<adresse>étaituneinstructiondesommedetableaux.Onmontresurleprogrammesuivantcommentnotreprogrammedesommedesélémentsd’untableauaététransforméensous-programme,etinvoquésurdeuxtableauxdifférents:

///////// programme principal ////////

set TAB1, %r4 // arg. 1er appel

call tabsum // 1er appel

set TAB2, %r4 // arg. 2eme appel

call tabsum // 2eme appel

stop: ba stop // arrêt

///////// sous-programme ////////

tabsum: clr %r1 // %r1 <- 0 ;

clr %r2 // pour i de 0 à 9

loop: ld [%r4], %r3 // %r3 <- mem[%r4,...,%r4+3];

addcc %r1, %r3, %r1 // %r1 <- %r1 + %r3 ;

addcc %r4, 4, %r4 // %r5 <- %r5 + 4 ;

inccc %r2

cmp %r2, 9

bleu loop // fin pour

ret

/////// zone de données ///////

121

.org 0x1000

TAB1 .word 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

TAB2 .word 2, 4, 6, 8, 10, 12, 14, 16, 18, 20

Cemécanismecall…retestappeléappeldesous-programmesterminaux,c'est-à-diredesous-programmessituésaudernierniveaud’appel.Onl’aurasansdoutedéjàcompris,iln’estpaspossibleaveccemécanismed’appelerunautresous-programmeàpartirducorpsd’unsous-programmeappelé,puisquelapremièreadressederetourseraitécraséeparlasecondedans%r31.Ilnousmanquemaintenantunmécanismequipermettedesauvegardercettevaleur;ilestprésentéàlasectionsuivante.

V.6. Utilisationdelapile

PrincipeUnepileestunestructurededonnéesquisemanipuleuniquementaveclesdeuxopérationssuivantes:

• PUSHdata:sauvegarde(empile)datadanslapile.• POP:enlèvelesommetdelapile,etlerenvoie.

Onpeutsauvegarderaprioriautantdedonnéesqu’onlesouhaite;l’inconvénientestqu’onnepeutpasrécupérern’importequandunedonnéesauvegardée:ondoitavantavoirrécupérétoutescellesquiontétéempiléesaprèselle.

Unetellepilepourraitêtreimplémentéedeplusieursfaçons,àcommencerparunepilematérielleàbased’ungrandtableauderegistres.Laméthodelaplussimple(maisaussilapluslente)estdestockerlapilesousformedemotsconsécutifsdanslamémoirecentrale,etd’utiliserunregistrequipointesurladernièrevaleurempilée,appelépointeurdepile.

DanslecasdeCRAPS,onutiliseraleregistre%r29,qu’onnoterasouvent%sp,etlesopérationspushetpopexistentdéjàsousformed’instructionssynthétiques:

push %ri : sub %r29, 1, %r29

st %ri, [%r29]

pop %ri : ld [%r29], %ri

add %r29, 1, %r29

LaFigureIII-117montrecequ’onobserveenmémoire,aprèsquatreopérationssuccessivesd’empilementetdedépilement.

122

FigureIII-117.Opérationssuccessivesd’empilementetdedépilement.

Endisposantlerubanmémoiredehautenbas,onobservequelesopérationsd’empilementsetraduisentvisuellementparunempilementdesvaleurslesunessurlesautres:le7pardessusle5,etc.Réciproquementundépilementsetraduitparlasaisiedelavaleurausommet,c’estàdirecellequiestpointéepar%r29.Onnoteracependantquelavaleurdépiléen’estpaseffacéedelamémoire,maisqu’elleestlaisséetellequelle.Celan’aaucuneimportance,carellen’estplusaccessiblepardesopérationpop,etellepeutêtreécraséeparuneopérationpushultérieure.C’estcequisepasselorsdupushdelavaleur9(situation(e)).

LapiledeCRAPS,commecelledelaplupartdesprocesseurs,alesdeuxpropriétéssuivantes:

• lorsd’unempilement,lesommetdelapile’remonte’,c’estàdirequelavaleurdupointeurdepilediminue.

• lepointeurdepilepointetoujourssurladernièrevaleurempilée.

Cesindicationssontutilesnotammentlorsqu’ondébogueunprogrammeetqu’onsouhaitesavoirprécisémentcequelapilecontient.

123

Allocationdel’espacedepileLapileétantenmémoirecentrale,doitêtredansunezonedeRAM.Parailleurs,ilfautprévoirqu’aveclesempilementssuccessifselleva’grignoter’delaplaceenmémoire,enprogressantverslesadressesbasses(FigureIII-118).

FigureIII-118.Lapilegranditenmémoireenprogressantverslesadressesbasses.Ellepeutdébordersurdeszonesdeprogrammeoudedonnées.

Ilyadoncundangerpotentield’écrasementd’unezonedeprogrammesoudedonnéesparlapile,sicelle-cigrandittrop.Lorsqu’onutiliseunepiledansunprogramme,ilfautdoncinitialiserlepointeurdepileenprenantencomptelapositiondesautresdonnéesenmémoire,etlataillemaximalequelapilepeutprendreaucoursdel’exécutiondesprogrammes.

SAUVEGARDEDEL’ADRESSEDERETOURDESOUS-PROGRAMMEUnpremierusagequel’onpeutfaired’unepileestderésoudrenotreproblèmedesauvegardedel’adressederetourlorsd’unappeldesous-programmedetypecall…ret.

Lasolutionesttrèssimple:

• justeavantl’appelcall,ilfautempilerl’adressederetour%r28• justeaprèsleretourducall,ondépiledans%r28cetteadresse

Ainsi,mêmesi%r28estmodifiédansl’appeldusous-programme,onestsûrderetrouverlavaleurde%r28quel’onavaitavantlecall,c’estàdirel’adressederetour(sousréservequelapilesoitaumêmeniveauauretourqu’audépart).

APPELSDEFONCTIONSRECURSIVESCetteméthodeouvred’unseulcouplapossibilitéderéaliserdesprogrammesrécursifsetmutuellementrécursifs,puisquelessauvegardes/restaurationsdesadressesderetourpeuventêtrefaitesennombrequelconquedanslapile.

Onval’illustrerparuncalculdeplusgrandcommundiviseur(PGCD),quis’obtientparl’algorithmerécursifsuivant:

124

fonction int pgcd(int x, int y)

si (x = y) alors

val <- x ;

sinon si (x > y) alors

val <- pgcd(x-y, y) ;

sinon

val <- pgcd(x, y-x) ;

return val ;

fin fonction

Parexemple,PGCD(78,143)=PGCD(78,65)=PGCD(13,65)=PGCD(13,52)=PGCD(13,39)=PGCD(13,26)=PGCD(13,13)=13.

Commeparailleurs78=2×3×13et143=11×13,onvérifiebienque13estleurplusgrandcommundiviseur.

PourleprogrammerrécursivementenCRAPS,ilnoussuffitàl’intérieurdusous-programmepgcdderappelerparcalllesous-programmepgcd,enprenantsoindesauvegarderdanslapiletoutl’environnementlocalnécessaireaucalcul,c’estàdire:

• lesvaleursderegistresquel’onsouhaiteconserverautraversdecetappel• l’adressederetour%r28

LaFigureIII-119donnelelistingcompletduprogramme.

STACK = 0x150

.org 0

main: set STACK, %sp // init pointeur pile

set 78, %r1 // valeur de x

set 143, %r2 // valeur de y

call pgcd // appel pgcd

stop: ba stop // arrêt

// calcule pgcd(x,y)

// in : x = %r1, y = %r2

// out : résultat dans %r3

pgcd: push %r28 // sauvegarde @ retour

cmp %r2, %r1

bne skip ; x=y ?

// x = y : return x

mov %r1, %r3 // val <- x

ba retour // retour

skip: bneg sup // x>y ?

// x < y : préparation de pgcd(x, y-x)

subcc %r2, %r1, %r2 // y <- y - x

call pgcd // appel récursif

ba retour

sup: // x > y : préparation de pgcd(x-y, y)

subcc %r1, %r2, %r1 // x <- x - y

125

call pgcd // appel récursif

pop %r28 // restaur. @ retour

retour: ret

FigureIII-119.ProgrammerécursifdecalculduPGCD.Leprogrammeesttrèslisible,auprixd’uneexécutionpluslente.

Leprogrammeestlatraductionlittéraledel’algorithmerécursif.Silecalculnécessitenappelsrécursifs,lapilevagrossirprogressivementjusqu’àoccupernmotsenmémoire,adressesderetoursauvegardéesàchaqueappel.Ensuite,nexécutionsdel’instructionretvontremettrelapileàsonniveauinitial.

L’utilisationdelarécursivitédanslecasdeceprogrammeestmaladroite,carelleestassezinefficaceàl’exécution,vulegrandnombred’accèsmémoireeffectués.L’algorithmepeuttrèssimplementêtretraduitdefaçonitérative:

fonction int pgcd(int x, int y)

tant que (x <> y) faire

si (x > y) alors

x <- x - y ;

sinon

y <- y -x ;

fin si

fin tq ;

return x ;

fin fonction

CetalgorithmesetraduitdirectementparleprogrammeFigureIII-120.

RAM = 0x100

.org 0

main: set 78, %r1 // valeur de x

set 143, %r2 // valeur de y

call pgcd // appel pgcd

stop: ba stop // arrêt

// calcule pgcd(x,y)

// in : x = %r1, y = %r2

// out : résultat dans %r3

pgcd: cmp %r2, %r1 // tant que x <> y

bne skip // x=y ?

// x = y : return x

mov %r1, %r3 // val <- x

ret retour

skip: bneg sup // x>y ?

// x < y

subcc %r2, %r1, %r2 // y <- y - x

ba pgcd

sup: // x > y

subcc %r1, %r2, %r1 // x <- x - y

ba pgcd

126

FigureIII-120.ProgrammeitératifdecalculduPGCD.Ilestplusefficacequelaversionrécursivecariln’yaplusd’accèsenmémoire.

Laleçonàtirerdecetexempleestqu’ilnefautpasabuserdelarécursivitédanslesfonctionsdebasniveau,siunalgorithmeitératifestdisponible.Elleesteneffetgourmandeentempsetenespaceoccupéenmémoire.Larécursivitéestparcontreindispensabledanslesfonctionsdehautniveau,pourdesraisonsdeclartéetdemodularitédontladiscussionsortducadredecetouvrage.

Enfinonpeutnoterquelorsqu’onparamètrelacompilationd’unprogrammepourqu’ilproduiseuncodeplusefficace,ilchercheentreautrestechniquesàdérécursiverlesrécursionsterminalescommecellesdenotrefonctionPGCD,afindelesrendreitératives.

V.7. Langagesàstructuredeblocset‘stack-frames’Ons’intéressedanscettesectionauxproblèmesqueposentauxcompilateursleslangagesàstructuredeblocstelsqueC,Java,etc.lorsdelaphasedegénérationdecode.

Uncompilateuresteneffetessentiellementuntraducteurdulangagesourceversunlangageciblequiestgénéralementlelangageassembleurduprocesseurvisé.Oncherchedanscettesectionquellesméthodescescompilateursmettentenoeuvredefaçonsystématiquepourimplémenterlanotiondebloc,ainsiquelorsdesappelsdefonctions.

Implémentationdesblocssousformedestack-framesLesprogrammesécritsdansdeslangagestelsqueCetJavasontorganisésenblocs,encadréspardessymbolestelsque{...}oubegin…end.Àl’intérieurdechaquebloconpeutdéclarerdenouvellesvariables,dontlaportéeestlimitéeaubloc.

Généralementunblocestassociéàunestructuredecontrôle(boucleforouwhile)ouaucorpsd’unefonction.Onpeutnéanmoinscréerunblocàtoutmomentdansunprogramme,etydéclarerlesvariableslocalesdesonchoix:leurportéeseralimitéeàcebloc.AinsienlangageC,onpeutécrirelepetitprogramme(inutile)suivant:

int main(int argn,char** args) {

int x = 1 ;

int y = 10 ;

printf("x=%d\n", x) ;

{

int x = 2 ;

int z = x + y ;

printf("x=%d\n", x) ;

}

printf("x=%d\n", x) ;

}

Àl’exécution,ilvaproduirel’affichage:

x=1

x=2

x=1

Ilyadeuxblocsdansceprogramme:celuiassociéaucorpsdelaprocéduremain,etunblocinternesituéaubeaumilieu,etquin’estlàquepourillustrernotrepropos.Laportéedelavariablexsituée

127

dansleblocinterneestlimitéeàcebloc,etelleatemporairementprislaplacedelavariablexdublocplusexterne.Lavariablezn’estvisiblequedansleblocinterne,etlavariableyestvisibledanslesdeuxblocs.

Lapileestutiliséepourmettreenplacecettevisibilitétemporairedesvariables.Lorsdel’entréedansunbloc,lecompilateurcréeunstack-framedanslapile,c’estàdireunezonedemémoiredanslaquelleserontplacéeslesvaleursdesvariablesdéclaréesdanslebloc.Lesstack-framesassociésauxdeuxblocsdenotreprogrammepourraientêtreimplantéscommesurlaFigureIII-121.

FigureIII-121.Stack-framesassociésauxdeuxblocsdecodeduprogramme.Chaquevariablelocaleasaplacedanslestack-frameassociéaubloc.Onremarqueralepointeurverslestack-frameprécédent.

Unregistreestgénéralementaffectéaupointageaupieddustack-framecourant,etlesaccèsauxdifférentsélémentsdustack-framesefonttrèssimplementparadressageindirectavecdéplacement.Parexemple,sionutilise%r27commepointeurdestack-frame,onauralemécanismed’adressagedelaFigureIII-122.

FigureIII-122.Utilisationduregistre%fp=%r27commepointeuràlabasedustack-framecourant.Lesaccèsauxvariableslocalessefontparadressageindirectavecdéplacement.

Lecodeassembleurtraduisantceprogrammepourraitêtre:

STACK = 0x200

main: // initialisation pointeur de pile

set STACK, %sp

128

// création du stack-frame 1

push %fp // empile val. prec.de %fp

mov %sp, %fp // %fp reste fixe au pied du stack frame

add %sp, -2, %sp // réserve 2 mots dans la pile

setq 1, %r1

st %r1, [%fp-1] // x <- 1

setq 10, %r1

st %r1, [%fp-2] // y <- 10

// création du stack-frame 2

push %fp // empile val. prec. de %fp

mov %sp, %fp // %fp reste fixe au pied du stack frame

add %sp, -2, %sp // réserve 2 mots dans la pile

setq 2, %r1

st %r1, [%fp-1] // x <- 2

// recherche de la valeur de y par double indirection

ld [%fp], %r2 // %r2 <- "@stack-frame 1"

ld [%r2-2], %r1 // %r1 <- y

ld [%fp-1], %r3 // %r3 <- x

addcc %r1, %r3, %r4 // %r4 <- x + y

st %r4, [%fp-2] // stockage de z

// sortie stack frame 2

mov %fp, %sp // sp <- fp

pop %fp // dépilement dans %fp de la val prec.

// sortie stack frame 1

mov %fp, %sp // sp <- fp

pop %fp // dépilement dans %fp de la val prec.

Lacréationd’unstackframeconsisteessentiellementàréserverlaplacenécessaireauxvariableslocales;ils’agitd’unesimplesoustractionsurlavaleurde%sp.Àchaquecréationd’unstack-frame,lavaleurcourantede%fp=%r27estempilée,et%fpestpositionnéaupieddustack-frame.L’accèsàunevariablelocaleàceblocsefaitdirectementparréférenceà%fp;parexemplel’accèsàxdanslestack-frame2sefaitpar[%fp-1].Plusdélicatestl’accèsàlavariableydansl’expressionz=x+y;eneffetyn’appartientpasaubloccourant,maisaublocderanginférieur.Laréférenceàlavariableyestcorrecte,maislecompilateurdoitdanscecasaccéderàyparunedoubleindirection,enallantchercherd’abordl’adressedustack-framederanginférieur,puisenfaisantàpartirdelàunaccèsindirectavecdéplacement.Selonlescas,plusieursdecesindirectionspeuventêtrenécessaires.

AppeldefonctionL’appeld’unefonctiontelqu’ilesttypiquementimplémentéparlecompilateurd’unlangageàstructuredeblocspasseparlacréationd’unstack-framequicontiendratouteslesdonnéesmanipuléesparelle,àsavoir:

• lesparamètresd’appel,• lesvariableslocalesaublocprincipaldelafonction,• lavaleurquelafonctionvarenvoyer.

129

Ainsi,chaquenouvelappelaurasonproprecontextedetravailsousformed’unstack-frame,etlesappelssuccessifsapparaitrontsousformed’unempilementdestack-framesquinemélangerontpasleursvariableslocalesetlesparamètresd’appel,permettantnotammentl’usagedelarécursivité.

Àlasortied’unappeldefonction,lavaleurrenvoyéeparlafonctionestrécupéréeavantquel’espacedustack-framenesoitdésallouédelapile(FigureIII-123).Onrestaureégalementl’adressederetour,(valeurde%r28danslecasdeCRAPS)quiavaitétéempiléejusteavantlebranchementaucodedelafonction.

FigureIII-123.Stack-framecréélorsd’unappeldefonction.Onytrouvelesparamètresd’appel,lesvariableslocales,l’emplacementdelavaleuràrenvoyer.L’adressederetourestempiléepar-dessusjusteavantlecall,maisnefaitpas

partiedustack-frame.Leregistre%fppointeaupieddustackframecourant;lestackframecontientégalementlavaleurde%fpdustack-frameprécédent,cequipermetderetrouverlesinformationsdescontextesantérieurs.

Atitred’exemple,onvaécrireselonceprincipeunprogrammedecalculdefactorielle.Lestack-frameassociéàchaqueinstanced’appeldelafonctioncontiendra(FigureIII-124):

- l’argumentd’appelx- unevariablelocalevalquijoueenmêmetempslerôledevaleuràretourner

FigureIII-124.Stack-framecréélorsd’unappeldelafonctionfact;onytrouveleparamètresd’appelxetunevariablelocaleval,quijoueenmêmetempslerôledevaleurdereturn.

130

Leprogrammeprincipalappellefact(5):pourcela,ilcrééunstack-framedanslequelilinitialiseà5lavaleurdex,danslacasemémoired’adresse%fp-1.Justeavantl’appelparcall,ilempilel’adressederetourquiseretrouvedoncausommetdustack-frame.Auretour,lavaleurrenvoyéepeutêtrerécupéréedansval,àl’adresse%fp-2.Unefoiscestack-framed’appeldéfait,lapileseretrouveexactementdansl’étatinitial.

Avantchaqueappelrécursifdefact,unstack-frameestcréédelamêmemanière,etonydéposelesargumentsd’appel(icix).Auretourdelafonction,lavaleurretournéeestrécupéréedanslestack-frame,puiscelui-ciestdéfait.

STACK = 0x200 main: // initialisation pointeur de pile set STACK, %sp // création du stack-frame d'appel push %fp // empile val. prec. de %fp mov %sp, %fp // %fp reste au pied du stack frame add %sp, -3, %sp // réserve 2 mots dans la pile setq 5, %r1 st %r1, [%fp-1] // x <- 5 // branchement à fact avec sauvegarde @retour push %r28 call fact pop %r28 // récupération résultat dans %r2 ld [%fp-2], %r2 // sortie du stack frame d'appel mov %fp, %sp // sp <- fp pop %fp // dépilement dans %fp de la val prec // le programme est terminé // %r2 contient le résultat et la pile est dans l'état initial stop: ba stop ////////// fonction fact ///////// fact: ld [%fp-1], %r1 // lecture de x cmp %r1, 1 // x <= 1 ? bgu sup st %r1, [%fp-2] // x <= 1: cas terminal, val = x ba end_fact sup: // x > y : création du stack frame d'appel de fact(x-1) push %fp // empile val. prec. de %fp mov %sp, %fp // %fp reste au pied du stack frame add %sp, -3, %sp // réserve 2 mots dans la pile sub %r1, 1, %r1 st %r1, [%fp-1] // x <- x-1 // branchement à fact avec sauvegarde @retour push %r28 call fact pop %r28 // récupération résultat ld [%fp-2], %r2 // sortie du stack frame d'appel mov %fp, %sp // sp <- fp pop %fp // dépilement dans %fp de la val prec ld [%fp-1], %r1 // lecture de x umulcc %r1, %r2, %r2 // calcul de x*fact(x-1) st %r2, [%fp-2] // stockage dans val end_fact: // le résultat est dans [%fp-2] ret

131

V.8. Programmationdesentrées/sortiesJusqu’icinousn’avonsécritquedesprogrammes’autistes’:ilsn’onteffectuéaucunéchangeavecl’extérieur.LesdonnéessurlesquellesilstravaillaientleursétaientfourniesdirectementsousformedezonesdemémoireprérempliesaveclesvaleursduproblèmeetilsproduisaientdesrésultatssousformededonnéesécritesenRAM.

Onvaconsidérerquel’interfaced’unordinateuravecl’extérieurestfaitautraversd’unensembledelignesdigitales,chacuned’elleétantàunmomentdonnéuneentréeouunesortie.Sic’estuneentrée,leprocesseurdoitêtrecapabledeliresonétat0ou1;sic’estunesortieildoitpouvoirforcersonétatà0ouà1.Desamplificateursoudesatténuateursenentréeouensortiepeuventpermettrelalectureoulacommandedecourantstrèsfortsoutrèsfaibles;mêmelacommandeoul’acquisitiondesignauxanalogiquesrentredanscecadre,puisqu’onpeututiliserdesconvertisseursnumérique/analogiquequivontfairelaconversiond’unmondeversl’autre.

Certainesdeceslignessontdesentréesoudessortiessanspouvoirchangerdenature:ceseraparexemplelecasdessortiesdescircuitsappeléstimer/PWMchargésdeproduiredessignauxparamétrablesdeformerectangulaire.Certaineslignesd’usageplussoupleserontdeslignesd’entrée/sortiegénérales,quipourrontêtreconfiguréesindividuellementetparprogrammeenentréeouensortie.

Instructionsspécialesd’entrées/sortiesSurcertainsprocesseursexistentdesinstructionsspécialesd’entrées/sorties.Lex86parexemplepossèdeuneinstructionINAL,PORTquilitunoctetdePORTversALetuneinstructionOUTPORT,ALquiécritunoctetdeALversPORT.PORTdésigneunnumérodeport,élémentparmiunespaced’adressagespécial,propreauxentrées/sorties.LesécrituressurdesnumérosdeportparticuliersmettentenactivitélespériphériquesassociéstelsquecontrôleursUSB,contrôleursdebusPCIExpress,etc.

Entrées/sortiesmappéesenmémoireSurd’autresprocesseurstelsqueCRAPS/SPARC,iln’existepasdetellesinstructionsspécialisées.Commentalorspeuvent-ilsfairepourinteragiravecl’extérieur?Ilsutilisentenfaitunmécanismeappeléentrées/sortiesmappéesenmémoire:c’estenlisantetenécrivantàcertainsemplacementsmémoireparticuliers,queleprocesseurvadialogueraveclespériphériques.L’avantagedecetteméthode,c’estqu’iln’yapasd’instructionsspécialesàutiliseretque,enCRAPSparexemple,desimplesldetstsuffiront.Soninconvénient,c’estdegaspillercertainsemplacementsdel’espaced’adressagemémoire,quinepeuventplusêtreutiliséspourdelavéritableRAMouROM.

LamachineCRAPS,tellequ’elleseradécriteendétailauchapitresuivant,ettellequ’elleestutilisableautraversdusimulateurCrapsEmuetdesonimplantationdansunFPGA,estéquipéed’untimer/PWM,de8lignesd’entréesreliéesà8interrupteursàglissière,de8lignesdesortiesreliéesà8LEDetde4afficheurs7-segment.Cespériphériquessontdoncmappésenmémoireetonvadécriremaintenantlafaçondelesprogrammer.

V.8.1. Programmationdeslignesd’entréesetdesortiesCRAPSestdoncéquipéde8lignesd’entréesreliéesàdesinterrupteursàglissière,etde8lignesdesortiesreliéesàdesLED,dontunextraitducâblageestdonnéFigureIII-125.

132

FigureIII-125.Partieducâblagedeslignesd’entréesetdesortiesdeCRAPS.

OnvoitquesiunedelignesdesortieOut[0]ouOut[1]està’0’,ladiodecorrespondanteestéteinte;sielleestà’1’,uncourantd’environ20mAtraverseladiodeetl’allume.

Inversement,lorsqu’undesinterrupteursestouvert,lalignecorrespondantelit’1’(carlarésistancede1Kinduituncourantentrantde5mAsiVcc=5v);s’ilestferméellelit’0’.

AdressesmémoireutiliséesDanslaconfigurationquenousallonsdécrire,leslignesd’entréesetdesortiesdeCRAPSsontmappéesenmémoireselonletableaudelaFigureIII-126.

Adresse read/write Opération

0x90000000 read Lecturedes8lignesd’entrées(switches)

0xB0000000 write Ecrituredes8lignesdesorties(leds)

FigureIII-126.Mappingdesaddressesd’entréesetdesortiesdeCRAPS

Lesvaleurs0x900000,0xB00000nedépendentpasduprocesseurCRAPSenluimême,maisdelafaçondontilestinterfacéavecsespériphériques.Ondétailleracomplètementcetaspectdecequ’onappelleledécodagedesadressesauchapitreconsacréàlaconceptiondeCRAPS.

Lecture/écrituresurleslignesPourlirel’étatdesentrées,ilsuffitdelireen0x900000,etdetesterdanslemotlulesbitsdesrangs0à7correspondantsauxentrées.Pourpositionnerl’étatdessorties,ilsuffitd’écrireen0xB00000unmotdontlesbits0à7correspondentauxvaleursquel’onsouhaiteplacersurleslignes.

ParexemplesurleschémadelaFigureIII-125,pourlirel’étatdel’interrupteursituésurlaligneIn[1]etallumerladiodesituéesurOut[0]sicetinterrupteurestouvert(Out[0]=1)onécriralecodesuivant:

INPUTS = 0x90000000 // adresse de base des entrées

OUTPUTS = 0xB0000000 // adresse de base des sorties

set INPUTS, %r1

set OUTPUTS, %r2

ld [%r1], %r3 // lecture des lignes d’entrée

andcc %r3, 0b10, %r3 // isolation du bit 1

133

srl %r3, 1, %r3 // déplacement de ce bit au rang 0

st %r3, [%r2] // écriture sur les lignes de sortie

Exemple:programmationd’unjeude’pileouface’LeprogrammedelaFigureIII-127exploitelecâblagedesentrées/sortiesdelaFigureIII-125,etfaitallumerenalternancel’unedesdeuxLEDssituéessurIO[0]etIO[1].Lorsquelejoueurappuiesurl’interrupteursituésurIO[0],l’étatdesLEDssefige,faisantapparaîtreunedesdeuxcombinaisons.

INPUTS = 0x90000000 // adresse de base des entrées

OUTPUTS = 0xB0000000 // adresse de base des sorties

set INPUTS, %r1

set OUTPUTS, %r2

setq 0b10, %r4 // état initial des LEDs

st %r4, [%r2] // écriture état des LEDs

loop: ld [%r1], %r3 // lecture des lignes d’entrées

andcc %r3, 0b10, %r3 // isolation du bit 1

bne loop // attend qu’il vaille 1

// interrupteur ouvert : on inverse l’état des LEDs

xor %r4, 0b11, %r4 // inversion par xor

st %r4, [%r2] // écriture état des LEDs

ba loop // reboucle éternellement

FigureIII-127.Programmed’unjeude’pileouface’.LesLEDs#0et#1s’allumentenalternance,etunappuisurl’interrupteur#2figelaconfiguration.

Lescommentairesduprogrammeparlentd’eux-mêmes.Onnoteral’inversionparlexordesdeuxbitsdepoidsfaiblesdel’étatdesLEDsdans%r4.

V.8.2. Programmationdesafficheurs7-segmentsLapériphériedeCRAPScomporte4afficheurs7-segmentsqu’onpeutallumer/éteindreglobalement,etdontonpeutaffecterlavaleurlorsqu’ilssontallumés.Ilssontcapablesd’afficherdesnombreshexadécimauxde0000àFFFF.

AdressesmémoireutiliséesCesafficheurssontmappésenmémoireselonletableaudelaFigureIII-128.

Adresse read/write Opération

0xA0000000 write Donnéeàafficher(16bitsdepoidsfaible)

0xA0000001 write Les4bitsdepoidsfaibledeladonnéeécritecommandentrespectivement

l’activationdes4afficheurs

FigureIII-128.Mappingdesaddressesdesafficheurs7-segments.

Parexemple,lecodesuivantallumelesafficheurs,puisyaffichelenombre«ABCD»:

SSEGS = 0xA0000000 // adresse de base afficheurs 7-segs

set SSEGS, %r1 // %r1 <- adresse de base

setq 0b1111, %r2

134

st %r2, [%r1+1] // activation des 4 afficheurs

set 0xABCD, %r2

st %r2, [%r1] // affichage de “ABCD”

V.8.3. Programmationdutimer/PWM

PrincipegénéralCRAPSpossèdeuntimer/PWMquiluipermetdegénérersurunelignedesortiedédiée,dessignauxrectangulairesdontlapériodeetlerapportcycliquesontprogrammables.LaformedusignalestdonnéeFigureIII-129.

FigureIII-129.Formeetparamètresdusignaldesortiedutimer/PWMdeCRAPS.

Lesusagesd’untimer/PWMsontnombreux.Dansunsystèmemulti-tâches,lasortied’untimersertàdéclencheruneinterruptionquieffectuelacommutationentrelesdifférentestâches.Ilfonctionneàunefréquenced’environ50hertz,cequidonneàl’utilisateurl’illusionquesesdifférentsprogrammesfonctionnentenparallèle.

Ons’ensertégalementpourcontrôleravecprécisionl’énergiecommuniquéeàunappareildetypelampeoumoteuràcourantcontinu(aprèsamplification),celle-ciétantproportionnelleaurapport

cyclique~_�~

.

RegistresdecommandeIls’agitd’untimer16bits,c’estàdirequelesparamètresPetNsontcodéssur16bits,etreprésententunnombredecyclesdel’horlogedutimer.DanslaversionactuelledeCRAPS,l’horlogedutimerestobtenueàpartirdel’horlogegénérale,dontlafréquenceaétéprédiviséepar32.Avec

unefréquenced’horlogede50MHz,lapériodeDTdel’horlogedutimerestainside 6�a6a�

∗ 32 =0,64𝜇𝑠

LetimerpossèdeeninternedeuxregistresquistockentlesvaleursNetPnécessairesàsonfonctionnementetquisontégalementmappésenmémoire,auxadressesdonnéesFigureIII-130.

Adresse read/write Opération

0xC0000000 write EcrituredelavaleurdeP

0xC0000001 write EcrituredelavaleurdeN

FigureIII-130.Mappingdesaddressesassociéesautimer/PWM

135

Siparexempleonsouhaitegénérerunsignalcarrédepériode100DT,onécriralecodesuivant:

BASETIMER = 0xC0000000 // adresse de base du timer

set BASETIMER, %r1 // %r1 = base timer

setq 100, %r2 // P = 100

st %r2, [%r1] // écriture de P

setq 50, %r2 // N = 50

st %r2, [%r1+1] // écriture de N

Exempled’utilisation:commanded’unservo-moteurUnservo-moteurestcomposéd’unmoteuràcourantcontinuavecunensembled’engrenagesdémultiplicateursquiluidonnentuncoupletrèsélevé.Ilestmunid’uneélectroniquedecommandequipermetdecontrôleravecprécision,nonpaslavitessederotation,maislapositionangulairedesonaxe,quin’aundébattementquede180°(FigureIII-131).

FigureIII-131.Servo-moteur.Larotationdel’axeesttrèsdémultipliéeetauncoupleélevé.Lacommandeajustelapositionangulairedel’axe,quipeutvarierde0°à180°.

Lacommandesefaitsurunseulfil,àlanormeTTL(0ou5v),etconsisteenuneimpulsionpériodiquedontlalargeurcodelapositionangulairedel’axe(FigureIII-132).

FigureIII-132.Formedusignaldecommanded’unservo-moteur.Ilestpériodiquedepériode20ms;l’impulsionaunelargeurcompriseentre1mset2ms,quicodelapositionangulairedel’axeentre0°et180°.

Danscediagramme,P=20msetNvarieentre18mset19ms.OnavuquelapériodedebasedutimerestDT=0,64μs,cequicorrespondauxvaleursderegistresP=31250(DT)etNvariantentre28125(DT)et29687(DT).

LaFigureIII-133donneunsous-programmedepositionnementduservo-moteur,auquelondonnecommeparamètrel’angledepositionnementdans%r1sousformed’unevaleurentre0et1562,0correspondantàunanglede0°et1562àunanglede180°.Lesous-programmeajoute28125àcettevaleuretprogrammeensuitelesregistresPetNdutimer.

136

BASETIMER = 0xC0000000 // adresse de base du timer

main: // exemple d’utilisation

set 390, %r1

call servo

stop: ba stop

servo: set BASETIMER, %r2 // %r2 = base timer

set 31250, %r3 // valeur de P

st %r3, [%r2] // écriture de P

set 28125, %r3

add %r1, %r3, %r1 // N = %r1 + 28125

st %r1, [%r2+1] // écriture de N

ret

FigureIII-133.Sous-programmedecommandedeservo-moteur.

Oncomprendtoutl’intérêtdecommanderunservo-moteurparuntelcircuittimer/PWM:lesignalpériodiqueestgénérédefaçonautonomeetleprocesseurn’abesoind’intervenirquelorsd’unchangementdeposition,quisetraduitparunesimpleécritureenmémoire.

V.9. Programmationdesexceptions

V.9.1. DéfinitionsUneexceptionestunévénementexceptionnelquiintervientaucoursdufonctionnementduprocesseur.Lapriseencompted’uneexceptionsetraduitparl’exécutiond’unsous-programmequiluiestassocié,appelégestionnaired’exception.Onpourraitdirequ’uneexceptionestunappeldesous-programmeinattendu.

Onclasselesexceptionsendeuxgroupes,selonqueleurcauseestinterneouexterne.

LestrapsLestrapssontdesexceptionsàcauseinterne,provoquésparl’exécutiond’uneinstructionparleprocesseur.Unelistedetrapscourantsferacomprendreleurnature:

• instructionillégale.Leprocesseurtented’exécuteruneinstructiondontlecodemachinenecorrespondàaucuneinstructionconnue.

• buserror.Leprocesseurtented’effectuerunaccèsmémoireàuneadresseoùaucunemémoiren’estimplantée.

• divisionpar0.Leprocesseurexécuteuneinstructiondedivisionetlediviseurestnul.• erreurd’alignement.Leprocesseurtented’effectuerunaccèsmémoireàuneadressequi

n’estpasunmultiplede4siparexempleils’agitd’unprocesseur32bits.Laplupartdesprocesseursexigenteneffetquelalectureoul’écrituredesmotsrespectentdetellescontraintesd’alignement.

• instructionprivilégiée.Leprocesseurtented’exécuteruneinstructionprivilégiée(réservéeauxprogrammesenmodesuperviseur)maisiln’estpasenmodesuperviseur.

Onditdetellesexceptionsqu’ellessontsynchrones,carellessurviennentàunendroitprévisibleduprogramme.Ellescorrespondentgénéralementàunfonctionnementincorrectdecelui-cietconduisentsouventàl’arrêtdelatâcheassociée.

137

Lestrapssontainsil’équivalentmatérieldesexceptionslogicielles,quiellesaussisedéclenchentencasd’exécutionincorrected’instructions,etquiontungestionnaireassocié.

LesinterruptionsUneinterruptionestuneexceptionàcauseexterne,généralementliéeàunévénementd’entrée/sortie.Parexemple:

• lalecturededonnéesparundisqueestterminéeetlecontrôleurdedisquesenvoieauprocesseuruneinterruptionpourl’eninformer.

• unpaquetderéseauvientd’arriver.• unévénementclavierousourisvientdeseproduire.• unchangementestintervenusurunedeslignesd’entrées/sorties.• unévénementestintervenusurlachaîneUSB.

Lesinterruptionssontditesasynchrones,carellessurviennentàdesmomentstotalementimprévisiblesdufonctionnementduprocesseur,etnonenrapportavecdesinstructionsprécises.Leprocesseurestprévenudel’occurrencedel’interruptionparl’activationd’uneligneexternespécifique,souventcommuneàplusieursouàtouteslesinterruptions.C’estseulementensuitequeletypedel’interruptionseraidentifié,etqu’unsous-programmeassociéseraexécuté,etced’unefaçonquidevrarestertransparentepourleprogrammeprincipalquiétaitencoursd’exécutionàcemoment.Parexemplelorsquevousappuyezsurunetouchedevotreclavierd’ordinateur,aucunprogrammen’attendspécifiquementetactivementcettefrappe.Lorsdelafrappe,uneinterruptionestgénéréeparlecontrôleurdeclavierversleprocesseur,etcelui-cisuspendleprogrammeencoursd’exécution,etappelleunsous-programmegestionnairedecetteinterruption,dontlerôlevaêtred’obtenirducontrôleurdeclavierlecodedelatouchefrappéeetdeleplacerdansunbuffersituéauniveaudusystèmed’exploitation.L’exécutiondecesous-programmeseratrèsrapideetonverraqu’elleserafaitedefaçontransparentepourleprogrammequiaétéinterrompu.

Uneinterruption=uncoupdesonnettePourmieuxfairecomprendrelestrapsetlesinterruptions,onpeutemployeruneanalogiedomestique.Supposonsquenoussoyonsentraindefaireungâteau,ensuivantlesinstructionsd’unerecette:ceseral’équivalentduprogrammeprincipalencoursd’exécution.Laplupartdesinstructionsdelarecettesontsansproblème:remuerlapâte,etc.Unpetitnombred’entre-ellespeuventmalsepasser:siondoitcasserunœufmaisqu’iln’estpasfrais;siondoitmettreunepincéedeselmaisqu’onn’aplusdesel,etc.Cesproblèmesspécifiquessontassociésàdesinstructionsspécifiques,cesontl’équivalentdestraps.Leplussouvent,leurpriseencompteconsisteraàabandonnerlatâcheencours.

Supposonsmaintenantquependantquenousfaisonscetterecettenousattendionslavisitedufacteur,maisquenotresonnettesoitenpanne.Commelemomentprécisdecettevisiten’estpasdéfini,celavanousobligeràinterrompresanscessenotrerecettepourallerregarderparlafenêtre.Celaserapénalisantpourlarecette,maisaussipastrèsefficace:lefacteurpeuttrèsbienêtrevenuetrepartienpensantqu’iln’yavaitpersonne,sionlaissepassertropdetempsentredeuxcoupsd’œil.Avecunesonnette,quijouelerôled’uneligned’interruption,onpeutréaliserlarecettesanspensersanscesseaufacteur.Siuncoupdesonnettesurvient,ontermineral’instructionencours,(parexemple,ilfautterminerdecasserunœufsionadéjàcommencé)etoncocherasurlarecettel’endroitoùons’estarrêté.

138

Onréagiraensuiteàl’interruptionparuneprocédureadaptée:alleràlaporte,ouvrir,saluer,récupéreréventuellementdesdonnées,etc.Deretourdecetteprocédure,dontletraitementauraétécourt,onreprendralarecetteàl’instructionquisuitcellequ’onavaitcochée.

Cetteanalogiepermetmêmedeprésenterleproblèmedesniveauxdeprioritéentreexceptions.Commentdoit-onfairesiparexempleletéléphonesonnealorsqu’onestentrainderépondreauvisiteuràlaporte?Sionjugequeletéléphoneestplusprioritairequelaported’entrée,alorsoninterrompraledialogueencoursaveclevisiteurpoureffectuerlaprocédureassociéeautéléphone.Unefoisqu’onaurafiniderépondre,onreprendraledialogueaveclevisiteurlàoùonl’avaitarrêté,pourfinalementrevenirauprogrammeprincipal(larecette),dontl’exécutionn’aurapasétéperturbée.

NiveauxdeprioritéAinsi,àchaqueexception(trapouinterruption)estassociéunniveaudepriorité,codégénéralementsousformed’unnombreentier.Parailleursleprocesseurentretientdansunregistred’étatunevaleurdeniveaucourantd’exécution.Lorsqueleprocesseurexécuteunprogrammeàunniveaup,ilnepeutêtreinterrompuqueparuneexceptiondeniveauqsupérieuràp.Lorsquecetteinterruptionestpriseencompteetquesongestionnaireestexécuté,leprocesseurélèvesonniveaud’exécutionàqdefaçonànepluspouvoirêtreinterrompuquepardesexceptionsdeniveausupérieuràq.Lorsqueleprocesseursortdugestionnairedecetteexception,ilreprendleniveaud’exécutionqu’ilavaitavantl’appel.Leprogrammeprincipals’exécuteauniveau0,etilestparconséquentinterruptiblepartouteslesexceptions.

LaFigureIII-134montreunexempledescénariod’exécutionduprogrammeprincipaletdedeuxgestionnairesd’exceptiondeniveauxdeprioritédifférents.

FigureIII-134.Niveauxdeprioritésetgestionnairesd’exceptions.Leprogrammeprincipalestinterrompuparl’exception#25,quiluimêmeestinterrompuparl’exception#13;chaqueinterruptionesttransparentepourceluiquiest

interrompu.

Numérodel’exceptionÀchaqueexceptionestégalementassociéunnumérodetype,uniquepartyped’exception,quivaserviràlocaliserl’adressedesongestionnaired’exception.Cenuméron’aenprincipepasderapportdirectavecleniveaudeprioritédel’exception.

139

Gestionnairesd’exceptionsLorsqu’uneexceptionestpriseencompte,unsous-programmeappelégestionnaired’exceptionouhandlerd’exceptionestappelé,associéaunumérodetypettdel’exception.

Ilexistegénéralementunetabledevecteursd’exceptionquicontientlesadressesdetouslesgestionnairesd’exception,classéeparnumérodetypett.Cettetableestinitialiséelorsduchargementdusystèmed’exploitation,ouellepeutêtreenROM.Souvent,unregistrespécialduprocesseurpointesurledébutdecettetable.

V.9.2. LesexceptionsdansleprocesseurCRAPSLagestiondesexceptionsestextrêmementsimplifiéedansCRAPS.Iln’yapasdetraps(exceptionsàcauseinterne)etiln’yaqu’uneseuleligned’interruption,quipeutêtrereliéeàlasortiedutimeroutoutautresignal.L’interruptioncorrespondalorsàunfrontmontantdecesignal,quiestmémorisédansunebasculevisibleentantquebit2duregistred’état%psr=%r25.Leprocesseurnepossèdepasplusieursniveauxd’exécution.

Unefoisl’interruptiondéclenchée,laprocéduresuivante,ininterruptible,estautomatiquementexécutéeparleprocesseur:

• l’instructionencoursd’exécutionestterminée• lebit2de%psr(lebitquimémorisel’interruption)estremisà0• %pcestempilé,defaçonàmémoriserl’adressederetourdansleprogrammeinterrompu• %psrestempilé,defaçonàsauvegarderlesflags• %pcß1,cequivaconduireaubranchementdanslehandlerd’interruption

Lehandlerd’interruptionestdoncnécessairementàl’adresse4.Cedoitêtreunsous-programmecourt,pournepasinterrompretroplongtempsleprogrammeprincipal.Ildoitseterminerparl’instructionreti,quiprovoqueunretourdansleprogrammeinterrompu,àl’adressesuivantl’instructionquiaétéinterrompue.

Lehandlerdoitprendresoindenepaschangerlesvaleursdesregistres,pournepasperturberleprogrammequiaétéinterrompu.Celapassesouventparunempilementdesvaleursdesregistresquelehandlermanipule,puisundépilementjusteavantleretipourredonneràcesregistreslesvaleursqu’ilsavaientaumomentdel’interruption.Iln’estpasnécessairedesauvegarderlesflags,quisontautomatiquementsauvegardésparlaprocéduredepriseencomptedel’interruption.

Enfin,puisquelehandlerestàl’adresse1,celaimpliquequ’encasd’usagedesinterruptions,lapremièreinstructionduprogrammeprincipalàl’adresse0doitêtreunbranchementinconditionnelplusloinenmémoireverslasuiteduprogramme,au-delàduhandlerd’interruption.

L’instructionretifonctionnedelafaçonsuivante:

• ondépiledans%psr(%r25)pourqu’ilretrouvesavaleurinitiale• ondépiledans%pcpourquelecontrôleretourneàl’adressequiaétéinterrompue

Ils’agitbiend’uneinstructionetnond’uneinstructionsynthétique,carelledevras’exécuterdefaçonatomiqueetnoninterruptible.

140

Exemple:horlogetempsréelÀtitred’exemple,onvamettreenplaceunehorlogequipermettraàunprogrammed’obteniruneheured’uneprécisionparfaite,sousformed’unefonctiongetTimeMillis.

Àchaqueappeldecettefonction,onobtiendradans%r1lenombredemillisecondesécouléesdepuislamiseenroutedelamachine;cettevaleurs’incrémenteradefaçonexacteentrechaqueappel,sansqueleprogrammeprincipalencoursd’exécutionnes’enoccupeexplicitement.

Onvapourcelaprogrammerletimerpourqu’ilfournissedesimpulsionstouteslesmillisecondes,etbranchersasortieàlaligned’interruption.Lehandlerdel’interruptionincrémenterasimplementuncompteurdemillisecondes,quelafonctiongetTimeMillissecontenteraderenvoyer.

BASETIMER = 0x400000 // adresse de base du timer

STACK = 0x200 // adresse du sommet de pile

TIME = 0x100 // mot mémoire contenant le temps en ms

.org 0

ba main // brancht vers le début du programme

.org 1 // adresse du handler d’interruption = 1

handler: push %r1 // sauvegarde %r1 et %r2

push %r2

set TIME, %r1

ld [%r1], %r2 // lecture du temps

add %r2, 1, %r2 // incrémentation

st %r2, [%r1] // écriture valeur incrémentée

pop %r2 // restauration %r1 et %r2

pop %r1

reti

getTimeMillis: set TIME, %r1

ld [%r1], %r1

ret

init_timer: // configuration du timer à une période de 1ms

set BASETIMER, %r1 // %r1 = base timer

setq 1562, %r2 // P = 1562 * DT = 1ms

st %r2, [%r1] // écriture de P

setq 781, %r2 // N = P/2

st %r2, [%r1+1] // écriture de N

ret

main: set STACK, %r30 // initialisation sommet de la pile

call init_timer // initialisation timer

loop: call getTimeMillis

ba loop

V.10. Exercicescorrigés

141

V.10.1. multiplicationprogrammée

ÉnoncéÉcrireunsous-programmequieffectuelamultiplicationdedeuxnombresnonsignésde16bitsplacésdanslespoidsfaiblesde%r1et%r2respectivement,avecunrésultatsur32bitsdans%r3.

SolutionOnsupposedoncqu’onnedisposepasdel’instructionumulcc.Onpourraitmettreenplaceunebouclequ’oneffectuerait%r1fois,etdanslaquelleoncumulerait%r2dans%r3.Cetteméthodeseraitsimple,maisparticulièrementinefficacepourdegrandesvaleursde%r1.Onvaplutôtutiliseruneméthodedanslaquelleonprendlesbitsde%r2unparunencommençantparlepoidsfaible,etoncumuledans%r3(initialiséà0)lavaleurde%r1,quel’ondécaleverslagaucheàchaqueétape.Celacorrespondàl’algorithmesuivant:

; calcul du produit A x B

résultat <- 0 ;

tant que (B <> 0) faire

b0 <- poids_faible(B) ;

décaler B d’un bit vers la droite ;

si b0 = 1 faire

résultat <- résultat + A ;

fin si

décaler A d’un bit vers la gauche ;

fin tq

Leprogrammequisuitestunetraductionlittéraledel’algorithme.Onnoteraletestbne noaddquin’estpasfaitimmédiatementaprèsl’instructionandcc %r2, 1, %r0quipositionneleflagZ;celaestpossiblecarl’instructionquilasuitsrl %r2, 1, %r2nemodifiepaslesflags.

// programme principal de test

set 17, %r1 // A <- 17

set 14, %r2 // B <- 14

call mulu16 // calcul de A x B

stop: ba stop // arrêt

mulu16: clr %r3 // résultat <- 0

loop: tst %r2 // tant que B <> 0

be fin

andcc %r2, 1, %r0 // b0 (Z) <- poids faible de B

srl %r2, 1, %r2 // décale B vers la droite

bne noadd // si b0 = 1 faire

addcc %r1, %r3, %r3 // résultat <- résultat + A

noadd: sll %r1, 1, %r1 // décale A à gauche

ba loop // fin tq

fin: ret

142

V.10.2. Systèmedesécurité

ÉnoncéOnsouhaiteutiliserleslignesd’entrées/sortiesdeCRAPSpourréaliserunsystèmedemiseenmarchedemachinedangereuse.OnsupposeraquelesentréesIn[0]etIn[1]sontreliéesàdesboutonspoussoirsappelésAetBrespectivement,équipésd’undispositifanti-rebond.LaligneOut[0]commanderalamiseenmarchedelamachine.Ondemanded’écrireunprogrammequifonctionneenpermanence,etquidéclenchelamiseenmarchedelamachinelorsquelaprocéduresuivanteestrespectée:

• AetBdoiventêtrerelâchésinitialement;• appuyersurA,• appuyersurB:lamachinesemetenmarche.

Touteautremanipulationarrêteoulaisselamachinearrêtée;ilfautensuitereprendrelaprocédureaupoint1pourlamettreenmarche.

SolutionOnadéjàréaliséunetellecommandeàl’aidedecircuitsséquentiels.Ondemandemaintenantdeleréaliserparprogramme,commeonpourraitlefaireavecunmicrocontrôleur.

Onrappellelegraphed’étatsdecesystèmeFigureIII-135.

FigureIII-135.Graphed’étatsdusystèmedesécurité.

Àchaqueétatdanslegraphecorrespondraunepositiondansleprogramme.Celaconduitàl’algorithmesuivant:

label a:

écrire 0 sur M ;

lire état de A et B ;

cas (A,B)

(0,0): aller en a ;

(1,0): aller en b ;

autre: aller en e ;

fin cas

label b:

lire état de A et B ;

cas (A,B)

(1,0): aller en b ;

143

(1,1): aller en c ;

autre: aller en e ;

fin cas

label c:

écrire 1 sur M ;

lire état de A et B ;

cas (A,B)

(1,1): aller en c ;

autre: aller en e ;

fin cas

label e:

écrire 0 sur M ;

lire état de A et B ;

cas (A,B)

(0,0): aller en a ;

autre: aller en e ;

fin cas

Leprogrammequisuitestunetraductionlittéraledel’algorithme.

INPUTS = 0x90000000 // adresse de base des entrées

OUTPUTS = 0xB0000000 // adresse de base des sorties

set INPUTS, %r3

set OUTPUTS, %r4

a: setq 0b0, %r2 // M <- 0

st %r0, [%r4]

ld [%r3], %r2 // lecture état de A et B

andcc %r2, 0b11, %r2 // isolation des bits 0 et 1

subcc %r2, 0b00, %r0

be a // (A,B) = (0,0) : aller en a

subcc %r2, 0b10, %r0 // (A,B) = (1,0) : aller en b

bne e // sinon aller en e ;

b: setq 0b0, %r2

st %r2, [%r4] // M <- 0

ld [%r3], %r2 // lecture état de A et B

andcc %r2, 0b11, %r2 // isolation des bits 0 et 1

subcc %r2, 0b10, %r0

be b // (A,B) = (1,0) : aller en b

subcc %r2, 0b11, %r0 // (A,B) = (1,1) : aller en c

bne e // sinon aller en e

c: setq 0b1, %r2

st %r2, [%r4] // M <- 1

ld [%r3], %r2 // lecture état de A et B

andcc %r2, 0b11, %r2 // isolation des bits 0 et 1

subcc %r2, 0b11, %r0 // (A,B) = (1,1) : aller en c

be c // sinon aller en e

e: setq 0b0, %r2

st %r2, [%r4] // M <- 0

ld [%r3], %r2 // lecture état de A et B

144

andcc %r2, 0b11, %r2 // isolation des bits 0 et 1

subcc %r2, 0b00, %r0 // (A,B) <> (0,0) : aller en e

bne e

ba a // sinon aller en a

145

ChapitreVI. AméliorationdesperformancesVI.1. Pipelines

Dansl’organisationinitialed’unprocesseurtellequecelledenotreCRAPS,l’exécutiond’uneinstructionsefaitenuneséquencedeplusieursétapes.Chaqueétapenefaitintervenirqu’unepartiedelamicro-machine,pendantquelesautresélémentsrestentinoccupés,cequilaisseunemarged’efficacitéinexploitée.L’idéed’uneorganisationenpipeline,c’estderéalisercettesuccessiond’étapescommesurunechained’assemblageautomobile,avecdespostesspécialisésàchaqueétape.Onchargeuneinstructiondanslapremièreétape,puisaucycled’horlogesuivant,cetteinstructionpasseàl’étape2pendantqu’unenouvelleinstructionenchargéeàl’étape1,etainsidesuite.Idéalement,silepipelineestconstituédenétages,lapremièreinstructionseratotalementexécutéeaprèsncyclesd’horloges,puisunenouvelleinstructionsetermineraàchaquenouveaucycled’horloge.Ainsi,mêmesiletempsd’exécutiond’uneinstructionesttoujourslemême,ledébitdesortiedesinstructionsestquant-àluimultipliéparn.Enpratique,plusieursfacteursempêcherontsouventlepipelinedefonctionneràpleinrendement,maisl’efficacitén’enserapasmoinstrèsaugmentée.

VI.1.1. UnpipelinepourCRAPSCommetouslesprocesseursRISC,CRAPSaunjeud’instructionsquiseprêtebienaudécoupagepourunpipeline.Parexemple,pourquasimenttouteslesinstructions,ilyauncalculetunseulàeffectuerparl’UAL,mêmepourlesaccèsmémoirepourlesquelsl’adresseestlerésultatd’unesomme.Onauradoncunétagedédiéàcecalculdanslepipeline.Onpeutparexempleutiliserledécoupagesuivant:

FigureIII-136.PipelinepourCRAPS.

Lescomposantssontséparéslesunsdesautrespardesregistresd’étage,quimémorisentlesinformationsnécessairesauxcomposantsdel’étagepourréaliserleurtâchespécifique.Lesétagesetleurstâchesassociéssont:

• EtagePC:leregistrepcestmémorisédansleregistred’étagePC,puisilestincrémentéde4.Aprèsexécutionducycle,ilestprêtàproduirelepcdel’instructionsuivantequientreradanslepipeline.

146

• EtageInstr:l’instructionsituéeàl’adressePCestlueenmémoire,etenregistréedanslechampirduregistred’étagesuivant.

• EtageArgs:unelectureparallèledesregistresdontlesnumérossontformésdeschampsrs1,rs2,rs3del’instructionduregistred’étageesteffectuée,enprévisiondesdifférentessituationspossibles.Demême,l’extractiondesconstantesimmédiatesetdesdéplacementsdebranchementsontréalisés.Touscesrésultatssontmémorisésdansleregistred’étagesuivant.

• EtageCalc:l’additionpourlesbranchementsetlesaccèsmémoire,oul’opérationassociéeàl’instructiondecalcul,sonteffectués.Lerésultateststockédanslechampresduregistred’étagesuivant.

• EtageMem:pouruneinstructionld,lectureenmémoireàl’adressecontenuedanslechampresduregistred’étageetstockagedurésultatdanslechampresduregistred’étagesuivant.Pourlesautresinstructions,lechampresestsimplementtransféréàl’étagesuivant.

• EtageResult:lerésultatestmémorisédansunregistre(pcsic’estunbranchement),oudansunecasemémoire,selonletypedel’instruction.

Parexemple,uneinstructiontellequeld [%r1-2], %r3vas’exécuterdelafaçonsuivante:

§ PC:MémorisationduPCdansleregistred’étagesuivant,incrémentationdePCde4§ Instr:Lecturedel’instructionenmémoireàl’adressecalculéeàl’étageprécédent§ Args:lecturesimultanéede%r1,%r2et%r3.Lalecturede%r2,inutile,correspondàune

extractionincongrueduchamprs2;demêmelalecturede%r3serainutile.Parcontre,lechampsimm13estétendusur32bitspuismémorisédanslechamparg2duregistred’étagesuivant.

§ Calc:%r1(arg1)et-2(arg2)sontadditionnés,puismémorisésdanslechampresduregistred’étagesuivant.

§ Mem:lectureenmémoireàl’adressecontenuedansres,puisstockagedurésultatdanslechampresdel’étagesuivant.

§ Result:écrituredelavaleurlue,situéedanslechampresduregistred’étage,dansleregistredenumérord,ludanslechampirduregistred’étage.

Chaqueétageréaliseunetâchesimpleetspécialisée.Cettesimplicitépermetd’abaisserlestempsdecycled’horloge,etdoncd’augmenterledébitdesortiedesinstructions.

AléasIlexistetroistypesdesituations,appeléesaléas,oùlepipelinenepeutfonctionneràpleinrendement,etoùdesétagesrestentinoccupés:

§ Aléasstructurels–Ilscorrespondentaucasoùdeuxinstructionsutilisentlamêmeressourceduprocesseur(registre,mémoire,UAL)Parexemple,ilyaunconflitpotentielpourl’écrituredansleregistrepcentrelesétagesPcetResult,maisceconflitneseraeffectifques’ilyauneinstructiondebranchementdansl’étageResult.

§ Aléasdedonnées–Ilyaaléadedonnéelorsqu’uneinstructionproduitunrésultat,etqu’uneinstructionsuivanteabesoindecerésultatavantquelaprécédenten’aiteuletempsdel’écrireenmémoireoudansleregistredestination.Parexemple,danslemorceaudeprogrammesuivant:

147

add %r1,%r2,%r3 st %r3,[%r4]

Lesinstructionsvontsesuivredanslepipeline,etlorsqueleaddseradansl’étageArgs,l’instructionstseradansl’étageCalc.Maisaddnepourrapascontinuer,carelleabesoindelavaleurde%r3quiseramodifiéeparstlorsquecelle-cifinirasonexécution.

Autreexemple:

st %r3,[%r4] ld [%r4],%r5

Ici,l’aléadedonnéesportesurlacasemémoiredontl’adresseestdans%r4.

§ Aléasdecontrôle–Unaléadecontrôleseproduitchaquefoisqu’unbranchementesteffectué.Lorsqu’uneinstructiondebranchementestchargée,ilestnécessairedeconnaîtrel’adressededestinationdubranchementpourchargerl’instructionsuivante.Or,savoirqu’uneinstructionestunbranchementn’estconnuqu’àl’étageInstr,etl’adressedubranchementn’estconnuequ’àl’étageResult.Plusieursstratégiessontpossiblespourpalierceproblème.

BullesdanslepipelineLorsqu’unaléaestdétecté,lesinstructionsprésentesàchaqueétagenepeuventpascontinueràêtreexécutéestellesquelles.Danscecas,lepipelineestpartagéendeux:lesétagesdelapartiedroitedupipelinequinesontpasaffectésparlesaléaspeuventcontinueràs’exécuteretàsedécalerprogressivementjusqu’àsortir;lesautresétagesrestentbloqués(aléasstructurel,aléasdedonnées)oueffacés(aléasdecontrôle)tantquedesaléaspersistent.Lesétagesvacantsentrelesdeuxsontappelésdes«bulles»dupipeline.

Ilestimportantdenoterquelesconséquencesdel’exécutiond’uneinstruction(écrituredansunregistreoudansunecasemémoireetaffectationdesflags)nesonteffectivementréaliséesquedansledernierétagedupipeline.Uneinstructionquiatteintcestadeestdéfinitivementvalidéeetleregistreoulacasemémoirerésultatsontdéfinitivementaffectésenuneopérationatomique;encasd’abandond’uneinstructionquiestencoreàunétageinférieuretdoncpartiellementexécutée,iln’yarienbesoindedéfaire.

DétectiondesaléasPourdétecterlesaléasdedonnéessurlesregistres,lesregistresd’étagemémorisentpourchaqueinstruction,àpartirdel’étagededécodageInstr,unchampdebits‘setreg’,quiindiquepourchaqueregistresil’instructionmodifierasavaleurdansl’étageResult.Uneinstructionsituéedansl’étageArgsserabloquéesielleabesoindelirelavaleurd’unregistrepourlequellebitcorrespondantde‘setreg’està1danslesétagesplushautCalc,MemouResult.

Unaléadedonnéesurunecasemémoireestdifficileàrepérerfinement;onpeutsecontenterd’ununiquebit‘setmem’danslesregistresd’étageàpartirdel’étageInstr,quiindiquequel’instructionvamodifierunecasemémoire.Uneinstructionsituéedansl’étageMemserabloquéesilebit‘setmem’duregistred’étageResultestà1.Onnoteraqu’enprincipe,uneinstructionstprovoqueunaléadedonnéesystématique,puisqu’elleestsusceptibledemodifierlescodesdesprochainesinstructionsquin’ontpasencoreétélusenmémoire.Enpratique,lesystèmed’exploitation,viala

148

segmentationdelamémoire,interditàunprogrammedemodifierlazonedecoded’unautreprogramme,etcetaléan’existedoncpas.

Onpeutconsidérerquel’aléadecontrôleestuneformed’aléadedonnéessurleregistrepc,quipeutêtregéréenutilisantlechampdebits‘setreg’.Apartirdel’étageInstr,uneinstructiondebranchementvamettreà1lebitde‘setreg’associéàpc,indiquantparlàqu’elleestsusceptibledemodifierpc(mêmesicen’estpascertain).Ensuite,lesétagesquin’ontpasuntelbità1surleurdroitepeuventcontinueràprogresserdanslepipeline,ycomprisl’instructiondebranchementelle-même.

GestiondesaléasdecontrôleOnl’avu,lorsqu’uneinstructiondebranchementestchargée,ilestnécessairedeconnaîtrel’adressededestinationpourpouvoircontinueràchargerlepipelineaveclesinstructionssuivantes.Orcetteadressededestinationneseraconnueaveccertitudequequandl’instructiondebranchementauratraverséeledernierétagedupipeline.Plusieursstratégiessontalorspossibles:

• Leprocesseurpeutchargerdesbullesdanslepipelinejusqu’àcequelebranchementsortedupipeline.C’estbiensûrlaméthodelamoinsefficace

• leprocesseurpeutfaireleparisystématiquequelebranchementn’aurapaslieu(c’estlecasleplusfréquent,etleplussimple).Ilpeutalorscontinueràchargerdanslepipelinelesinstructionsquisuiventlebranchement,maisensepréparantàleseffacer(lesremplacerpardesbulles)silepariestperdu,c'est-à-diresifinalementils’avèrequelebranchementesteffectué,quandilestdansl’étageResult.Cettegestionpeutêtrefaiteenutilisantlebitassociéauregistrepcdanslechampdebitssetreg

• leprocesseurpeutréaliserdesprédictionsdebranchement.Destechniquessophistiquéesexistent,quiserontdétailléesplusloin,etquipermettentdeprédireavecunassezbontauxderéussitesiunbranchementseraprisounon,àpartirdel’histoiredesévénementsrécents.

Exempled’exécutionConsidéronsleprogrammesuivant:

setq 10, %r1 setq 1000, %r2 loop: st %r0, [%r2+%r1] deccc %r1 bne loop i6

i7 …

L’entréedesinstructionsdanslepipelineestmontréeFigureIII-137.Aprèslechargementdebne,leprocesseurfaitlepariquelebranchementn’aurapaslieuetcontinuedechargerlesinstructionssuivantes.

cycle PC Instr Args Calc Mem Result

1 @setq o o o o o 2 @setq setq o o o o

149

3 @st setq setq o o o 4 @deccc st setq setq o o 5 @bne deccc st setq setq o 6 @bne deccc st o setq setq 7 @bne deccc st o o setq 8 @bne deccc st o o o 9 @i6 bne deccc st o o

10 @i7 i6 bne deccc st o

11 @i8 i7 i6 bne deccc st

12 @i9 i8 i7 i6 bne deccc

13 @i10 i9 i8 i7 i6 bne

14 o o o o o o

15 @st o o o o o

16 @deccc st o o o o

17 @bne deccc st o o o

18 @i6 bne deccc st o o

19 @i7 i6 bne decc st o

FigureIII-137.Entréedesinstructionsdanslepipeline.

Dansl’étagePC,lesinstructionssontprécédéesd’unsigne‘@’carc’estseulementleuradressequiestdansleregistrepc,maislecodeinstructionlui-mêmen’apasencoreétéluenmémoirenidécodé.Cettelectureetcedécodagesontréalisésàl’étagesuivantInstr.

Aucycle5,unaléadedonnéesseproduitpourlesregistres%r1et%r2entrel’instructionstquiestdansl’étageArgsetquiabesoindeleurvaleur,etlesinstructionssetqquimodifientcesregistresetquin’ontpasfinides’exécuter.Desbullessontdoncintroduites,jusqu’aucycle8.Acemoment,lesinstructionsst,decccetbnepeuventprogresserdanslepipeline,etl’instruction@i1yentreégalement.Aucycle9,unaléadecontrôleseproduitàcausedelaprésenceetdudécodagedel’instructionbneàl’étageInstr.Leprocesseurcontinueàchargerlesinstructionsi7,i8,etc.maisaucycle13,ilconstatequelebranchementestprisetqu’ilfauteffacertouteslesinstructionsàgauchedubranchement.Lemêmealéasereproduitaucycle17,etc.

150

LeproblèmedesexceptionsLorsqu’uneexceptionestpriseencompte,lesystèmed’exploitations’attendàcequel’instructionencourssoitterminée,puisquelecontrôlesoitpasséauhandlerdel’exception.Ils’attendaussiàceque,lorsquel’exécutionduhandlerseraterminée,lecontrôlereprenneaprèsl’instructioninterrompue.Oncomprendqu’avecuneexécutionbaséesurunpipeline,lasituationestpluscomplexe.Toutd’abord,qu’est-ceque«l’instructionencours»?Eneffet,jusqu’à8instructionssontsimultanémentencoursd’exécutiondanslepipeline,àdesdegrésd’avancementdivers.SIl’exceptionestuneinterruption,c'est-à-direàcauseexterne(timer,I/O,etc.),onpeutconsidérerque«l’instructionencours»estl’instructionsituéedansledernierétagedupipeline,carc’estlaseulequiestcertained’êtreexécutée.Lesinstructionsquisontàsagauchedanslepipelinesontcellesquisuiventpossiblementdansleprogramme(cen’estpascertain)l’instructioninterrompue.Leplussimpleestdelesremplacerpardesbulles,carleprocesseurdoitexécuterimmédiatementlehandlerdel’interruption.Sil’exceptionestuntrap,c'est-à-direàcauseinterne(divisionpar0,instructionillégale,problèmed’accèsmémoire),ellepeutsurveniralorsquel’instructionn’estpascomplètementexécutée.Uneinstructionillégaleserarepéréecommetelledansl’étageInstr;unedivisionparzéroseradétectéedansl’étageCalc,uneerreurdelecturemémoiredansl’étageMemetuneerreurd’écrituremémoiredansl’étagefinalResult.Leproblèmeestqu’iln’estpascertainquecetteinstructionatteigneledernierétagedupipeline,àcaused’unbranchementoumêmed’uneinterruption.Lasolutionestdoncdemettreà1unbitspécialduregistred’étageoùs’estdéclenchéletrap,etdecontinueràexécuterlesinstructionsdupipelinejusqu’àcequecebit,quiestdécaléprogressivementversladroite,atteigneledernierétage,s’ill’atteint.Danscecas,onprocèdecommelorsd’uneinterruption,c'est-à-direqu’onremplacetouslesautresétagespardesbulles,etonlancel’exécutionduhandlerdel’exception.

PrédictiondebranchementOnavudansl’exempleFigureIII-137quelesbranchementspouvaientintroduiredenombreusesbullesdanslepipeline,etced’autantplusquecelui-cipossèdeungrandnombred’étages.Commeilyaenmoyenneunbranchementtoutesles5instructions,l’intérêtdupipelineserafortementdiminués’iln’yapasmoyendeprédireavecuneassezbonnecertitudesiunbranchementvaêtreprisounon.

VI.2. Cachesmémoire

VI.2.1. ProblèmedesaccèsmémoireL’écartdeperformanceenvitesseentreleprocesseuretlamémoireatendanceàs’accroitre.Unaccèsmémoirenécessiteparfoisplusieursdizainesdecyclesd’horlogeduprocesseur,sachantqu’ilyaenmoyenneunaccèsmémoirepour3instructionsexécutées.Surunsystèmedetypex86parexemple,onamaintenantdesCPUavecdeshorlogessupérieuresauGHz,alorsquelamémoirefonctionneàdesfréquencesbeaucoupplusbasse(figureVI-1).Cettedifférencedeperformanceauraitunimpacttrèsnégatifsurlaperformanceglobalesionn’introduisaitpasdemécanismepourmasquercettelatence.

151

FigureIII-138.Différencesdevitesseentreleprocesseuretlamémoirecentrale

Pourtant,onsaittrèsbienfairedelamémoirequifonctionneraitàlafréquenceduCPU–qu’onpenseparexempleaubistablecomposéd’unepairedeNAND-maisellenepourraitêtrequesurlamêmepuce,etd’unetailleréduite.D’unautrecôté,onsaitfairedesmémoires(relativement)lentesetdegrandetaille.Leproblèmeestdonc:est-ilpossibledeconcevoirunemémoiredegrandetailleavecdesaccèsrapides,toutaumoinsdanslaplupartdescas?Laréponseest:oui,sionutiliselemécanismedesmémoirescache.

VI.2.2. MémoirecacheUnmémoirecacheestunepetitemémoire,trèsrapide,placéeentreleCPUetlamémoirecentralepluslente(FigureIII-139).Leprocesseurn’aaucunementconsciencedesaprésenceettoutsepassepourluicommes’ildialoguaitdirectementaveclamémoirecentrale.

FigureIII-139.LecacheestplacéentreleCPUetlamémoirecentrale

L’idéedebaseestdegarderlesmotslesplusutilisésdanslecache.Lorsqueleprocesseurfaitunaccèsmémoireenlectureouenécriture,silemotrecherchéestdanslecache,larequêteestexécutéeimmédiatementsansaccèsàlamémoirecentraleetonparledecachehit;sinononparledecachemissetunaccèsenmémoirecentraleestalorseffectué.Enpratique,onobserveuntauxdecachehitdel’ordrede80%à90%,cequiconduitàunefortediminutiondelalatencemoyennedelamémoire.

VI.2.3. LocalitédesaccèsmémoireLorsqu’onfaitunaccèsmémoireàl’adressex,laprobabilitéestgrandequelesprochainsaccèsmémoire(localitétemporelle)serontàdesadressesprochesdex(localitéspatiale):motsdansunepile,manipulationdechaînes,detableauxetmatrices,destructures.

Pourexploiterlalocalitéspatiale,lecachecontientdescopiesdesmotsmémoireparblocs,appeléscachelines.Enpratique,lescachelinesontunetaillede32ou64octets.

Pourexploiterlalocalitétemporelle,unchoixjudicieuxdescachelinesàretirerdoitêtrefaitlorsqu’ilfautrajouterunecachelineàuncachedéjàplein

152

Parailleurs,onfaitsouventdescachesséparéspourlesinstructionsetpourlesdonnées(splitcachevsunifiedcache).

VI.2.4. Hiérarchiedescaches• Fréquemment:3niveauxdecache• Level1cache:surlapuceCPUelle-même,128/256K• Level2cache:danslemêmepackagequeleCPU,maispassurlamêmepuce,2/4Mo• Level3cache:surlacartemère

FigureIII-140.Hiérarchiedecachesàtroisniveaux

VI.2.5. Direct-mappedcache

FigureIII-141.Organisationdelatabledescachelines

• Lebitvalidindiquequelacachelinecontientunecopie,exacteounon,delamémoire.

Initialementtouslesbitsvalidsontà0.• Lebitdirtyindiquequelecontenudelacachelineaétémodifiédepuislalectureen

mémoire• Lorsd’unaccèsmémoire,lechampLINEestextraitdel’adresseetpermetd’accéderàune

cacheline.• Sivalid=1etsiTAGégalelechamptagdelacacheline:cachehit.Sinon:cachemiss.

• Cachehitenlecture:lemotdenuméroWORDestextraitdelacacheline• Cachemissenlecture:leblocdedonnéesestluenmémoireetplacédanslacacheline;le

champtagdelacachelineestmisàjour,validß1,dirtyß0• Cachehitenécriture:lemotWORDdelacachelineestmisàjour.Aucuneécritureen

mémoirecentralen’estfaite.dirtyß1.• Cachemissenécriture:lacachelineaccédéeestréécriteenmémoirecentralesisonbitdirty

està1.UnenouvellecachelineassociéeàTAG/LINEestluedepuislamémoire,lemotWORDestmisàjourdanslacacheline,dirtyß1.

153

• Designtrèssimple• Bonnesperformancessurdesaccèsàdesadressesaléatoires• Sileprocesseurfaitdesaccèsmémoiresàdesadressesdifférentesmaisquiontlemême

LINE,situationpirequesanscache.Possibleavecdesaccèsmodulo-Nàdestableaux,matrices,etc.

VI.2.6. Set-associativecache• n-wayset-associativecache:chaquecachelineestunemémoireassociativedenblocs,

généralement2ou4• Lesurcoûtderecherchedanslamémoireassociativeestcompenséparl’améliorationdes

performances• Stratégiederetraitquandunemémoireassociativeestpleine:généralementLRU(least

recentlyused)

VI.2.7. Snoopingcachespourmultiprocesseursàmémoirepartagée

FigureIII-142.Organisationd’unsystèmemultiprocesseuràmémoirepartagée

• Problème:lescacheslocauxpeuventdevenirinconsistants=problèmedecohérencedecache

VI.2.8. Protocolesdecohérencedecaches• Empêchentdifférentesversionsdelamêmecachelined’apparaîtredansplusieurscaches• Lecontrôleurdechaquecachedoitécouterlesrequêtesmémoiresfaitessurlebus=

snooping

VI.2.9. Protocolewrite-through• Readmissàlitladonnéeenmémoire• Readhitàlitladonnéedanslecache• Writemissàmetàjourladonnéeenmémoire• Writehitàmetàjourlecacheetlamémoire,invalideleslignescorrespondantesdansles

cachesdesautresCPU.Variante:lesautresCPUmettentàjourleurcacheaulieudel’invalider.

• Lamémoireestàjourenpermanence• Pb:chaqueécritureeffectueuneopérationsurlebus

VI.2.10. Protocolewrite-back

154

• Utiliserunbitdirtypourchaquecacheline• ProtocoleMESI(Pentium,UltraSparc):chaquecachelinepeutêtredans4états:

– I.invalid:lacachelinecontientunedonnéeinvalide– S.shared:plusieurscachespeuventcontenirladonnée,lamémoireestàjour– E.exclusive:aucunautrecachenecontientlamêmeligne,lamémoireestàjour– M.modified:lacachelineestvalide,lamémoireestinvalide,aucunecopien’existe

FigureIII-143.EvolutiondesbitsMESIlorsd’unesuccessiond’accèsmémoireenlectureetenécriture

VI.3. Mémoirevirtuelle• Idée:utiliserlamémoiresecondaire(disque)pourdonnerl’illusiond’unemémoireprincipale

plusgrande• Séparationentrel’espaced’adressageréeletl’espaced’adressagevirtuel.• Leprocesseurtravailleavecdesadressesvirtuelles;lemécanismelestraduitenadresses

réelles,defaçontransparentepourlesprogrammes• NécessiteunMMU(memorymanagementunit)etlacoopérationdusystèmed’exploitation

• Lamémoirevirtuellepermet:– D’augmenterletauxdemulti-programmation– Demettreenplacedesmécanismesdeprotectiondelamémoire

VI.3.1. Mémoirevirtuellepaginée• L’espaced’adressagevirtuelestdécoupéenpages(généralement4Kà64K).L’espaceréelest

découpéenportionsdemêmetaille,appeléespageframes.

155

• LesystèmemaintientenRAMunetabledespagesquicontientnotammentl’associationnumérodepage(virtuelle)ànumérodepageframe(réelle)

• LeMMUcontientunemémoireassociativepouraccélérercettetraduction:translationlookasidebuffer(TLB)

VI.3.2. Pagination

FigureIII-144.Adressesvirtuellesetadressesréelles

VI.3.3. Tabledespages

FigureIII-145.Tabledespages

VI.3.4. Traductiond’adresse

156

FigureIII-146Traductiond’uneadressevirtuelleenadressephysique

VI.3.5. Défautdepage• DéfautdepagelorsqueleMMUindiquequelapagedemandéen’estpasdanslamémoireà

interruption• Handlerdel’IT:

– Unalgorithmederemplacement(FIFO,LRU)choisitunepageframeàécraser.Silapageestdirty,elleestréécritesurledisque

– Lapageàchargerestluesurledisqueetcopiéeenmémoireàl’emplacementprévuparlenumérodepageframe.

– Latabledespagesestmiseàjour,notammentpourl’associationnumérodepageànumérodepageframe

FigureIII-147.Evolutiondelatabledespageslorsd’unesuccessiondelectureetécrituressurledisque.

157

ChapitreVII. CRAPS:guideduprogrammeurLelangageassembleurduprocesseurCRAPSestlargementinspirédeceluiduSPARCversion8.Iln’implémentepaslanotiondefenêtrederegistresetlesinstructionsquisuiventlesbranchementsn’ontpasdestatutspécial.Ilnepossèdepasd’unitédecalculflottant.

VII.1. FormatbinairedesinstructionsdeCRAPS

VII.2. InstructionssynthétiquesLesinstructionsdutableausuivantsontappeléesinstructionssynthétiques;cesontdescasparticuliersd’instructionsplusgénérales.Plusieursd’entre-elless’appuientsurlefaitque%r0vauttoujours0.

Instruction Effet implémentation

clr %ri metàzéro%ri orcc %r0, %r0, %ri

mov %ri,%rj copie%ridans%rj orcc %ri, %r0, %rj

inccc %ri incrémente%ri addcc %ri, 1, %ri

deccc %ri décrémente%ri subcc %ri, 1, %ri

158

set val31..0, %ri copievaldans%ri sethi val31..8, %ri orcc %ri, val7..0, %ri

setq val12..0, %ri copievaldans%ri orcc %ri, val12..0, %ri

cmp %ri, %rj compare%riet%rj subcc %ri, %rj, %r0

tst %ri testenullitéetsignede%ri orcc %ri, %r0, %r0

negcc %ri Calculeopposéde%ri subcc %r0, %ri, %ri

nop nooperation sethi 0,%r0

call <label> Appeldesous-programmeterminal

or %r0, %r30, %r28

ba <label>

rcall <label> Appeldesous-programmeavecsauvegardedel’adressederetour

push %r28

call <label>

pop %r28

ret retourdesous-programmeterminal

add %r28, 1, %r30

push %ri empile%ri sub %r29, 1, %r29 st %ri, [%r29]

pop %ri dépile%ri ld [%r29], %ri add %r29, 1, %r29

VII.1. Directivesdel’assembleurCRAPS

Syntaxe Rôle

.org val32 Forceàval32lanouvelleadressed’assemblage

label = val32 Associelabelàval32danslatabledessymboles.word val32 [,val32]* Alloueetinitialisedesmotsmémoires

consécutifs

.global sym Faitdesymunsymboleglobal,visibleparlesautresmodules

159

VII.1. Tablesdesbranchementsconditionnels

Instruction Opération Testba Branchalways 1

beq(synonymes:be,bz) Branchonequal Z

bne(synonyme:bnz) BranchonNotEqual notZ

bneg(synonyme:bn) BranchonNegative N

bpos(synonyme:bnn) BranchonPositive notN

bcs(synonyme:blu) BranchonCarrySet C

bcc(synonyme:bgeu) BranchonCarryClear notC

bvs BranchonOverflowSet V

bvc BranchonOverflowClear notV

Branchementsconditionnelsassociésàunseulflag.

Instruction Opération Testbg(synonyme:bgt) BranchonGreater not(Zor(NxorV))

bge BranchonGreaterorEqual not(NxorV)

bl(synonyme:blt) BranchonLess (NxorV)

ble BranchonLessorEqual Zor(NxorV)

Branchementsconditionnelsassociésàunearithmétiquesignée.

Instruction Opération Testbgu BranchonGreaterUnsigned not(ZorC)

bgeu(synonyme:bcc)

Branchongreaterthan,orequal,unsigned

notC

blu(synonyme:bcs) Branchonlessthan,unsigned C

bleu BranchonLessorEqualUnsigned ZorC

Branchementsconditionnelsassociésàunearithmétiquenonsignée.

160

161

VII.2. Jeud’instructionsduprocesseurCRAPS

Instruction:addDescription:idemaddcc,maisaucunflagn’estaffecté.

Instruction:addccDescription:Effectuel’additiondesdeuxopérandes,etplacelerésultatdansl’opéranderésultat.LaretenueCn’estpasajoutéeauxarguments.Lesflags(conditioncodes,cc)sontpositionnésconformémentaurésultat.Flagsaffectés:N,Z,V,CExemple:addcc %r1, 5, %r1Ajoute5aucontenude%r1,etpositionnelesflags.

Instruction:andDescription:idemandcc,maisaucunflagn’estaffecté.

Instruction:andccDescription:EffectueunETlogiquebitàbitentrelesopérandessources,etplacelerésultatdansl’opéranderésultat.Lesflags(conditioncodes,cc)sontpositionnésconformémentaurésultat.Flagsaffectés:N,ZExemple:andcc %r1, %r2, %r3EffectueleETlogiquebitàbitentrelescontenusde%r1et%r2,etplacelerésultatdans%r3.

Instruction:b(cc)Description:Silaconditionccestvérifiée,sebrancheàl’adresseobtenueenajoutant4xdisp25àl’adressedel’instructioncourante.Silaconditionn’estpasvérifiée,passeàl’instructionsuivanteenséquence.disp25peutêtrenégatif,cequicorrespondàunbranchementàunpointantérieurduprogramme.Ontrouveraenannexelestablescomplètesdesconditionsdetestpossibles.Flagsaffectés:aucunExemple:bcs labelSebrancheàlabelsiCvaut1.C’estledéplacementrelatifentrelabeletl’adressecourantedel’instruction,ennombredemots,quiestcodédanslechampdisp25del’instruction.

Instruction:ldDescription:Loadword.Chargeunregistreàpartird’unmotde32bitsdelamémoirecentrale,soit4octetsconsécutifs.L’adresseestcalculéeenajoutantlecontenuduregistreduchamprs1aucontenuduchamprs2oudelavaleurimmédiatecontenuedanslechampsimm13,selonlecas.Flagsaffectés:aucun.Exemple:ld [%r2+%r3], %r1Copiedansleregistre%r1lemotmémoiredontl’adresseestobtenueenadditionnantlesvaleursdesregistres%r2et%r3.

Instruction:orDescription:idemorcc,maisaucunflagn’estaffecté.

Instruction:orcc

162

Description:EffectueunOUlogiquebitàbitentrelesopérandessources,etplacelerésultatdansl’opéranderésultat.Lesflags(conditioncodes,cc)sontpositionnésconformémentaurésultat.Flagsaffectés:N,ZExemple:orcc %r1, 1, %r1Positionneà1lebitdepoidsleplusfaiblede%r1etlaissetouslesautresinchangés.

Instruction:retiDescription:Défaitlesempilementsde%pcetde%psrquisontréaliséslorsdelapriseencompted’uneexception.%psrreprenddoncsavaleurinitiale(etenparticulierlesflags),et%pcreprendlavaleurqu’ilavaitaumomentdudépart.Cetteinstructiondoitêtreplacéeàlafindechaquehandlerd’interruption.Flagsaffectés:potentiellementtous,lorsdudépilementde%psrExemple:reti

Instruction:sethiDescription:Positionneles24bitsdepoidsfortsd’unregistre,etforceàzéroles8bitsdepoidsfaibles.Flagsaffectés:aucunExemple:sethi 0xE2F1A0, %r1Positionneles24bitsdepoidsfortsde%r1àE2F1A016etforceà0les8bitsdepoidsfaibles.

Instruction:sllDescription:Décalelecontenud’unregistreverslagauched’unnombredepositionsdésignéparledeuxièmeargument,comprisentre0et31.Sicenombreestfournisousformed’unevaleurderegistre,seulsles5bitsdepoidsfaiblessontutilisés.Flagsaffectés:aucunExemple:sll %r1, 7, %r2Décalelecontenude%r1verslagauchede7bits,avecinsertionde7zérosparladroite,etstockelerésultatdans%r2.Aucunflagn’estaffecté.

Instruction:srlDescription:Décalelecontenud’unregistreversladroited’unnombredepositionsdésignéparledeuxièmeargument,comprisentre0et31.Sicenombreestfournisousformed’unevaleurderegistre,seulsles5bitsdepoidsfaiblessontutilisés.Flagsaffectés:aucunExemple:srl %r1, 7, %r2Décalelecontenude%r1versladroitede7bits,avecinsertionde7zérosparlagauche,etstockelerésultatdans%r2.Aucunflagn’estaffecté.

Instruction:stDescription:Stockelecontenud’unregistreenmémoirecentrale.L’adresseestcalculéeenajoutantlecontenuduregistreduchamprs1aucontenuduchamprs2oudelavaleurcontenuedanslechampsimm13,selonlecas.Lechamprdestutilisépourdésignerleregistresource.Flagsaffectés:aucunExemple: st %r1, [%r2]Copielecontenuduregistre%r1danslacasemémoiredontl’adresseestlavaleurde%r2.Danscecasparticulier,rs2=0,etl’instructionpourraitêtreécrite:st%r1,[%r2+%r0]

163

Instruction:subDescription:idemsubcc,maisaucunflagn’estaffecté.

Instruction:subccDescription:Effectuelasoustractiondesdeuxopérandes,etplacelerésultatdansl’opéranderésultat.Lesflags(conditioncodes,cc)sontpositionnésconformémentaurésultat.Flagsaffectés:N,Z,V,CExemple:subcc %r1, 5, %r1Soustrait5aucontenude%r1,etpositionnelesflags.

Instruction:umulccDescription:Unsignedmultiply.Effectueunemultiplicationnonsignée16bitsx16bitsvers32bits.Seulsles16bitsdepoidsfaiblesdesdeuxopérandessourcesontprisencomptedanslecalcul.Flagsaffectés:ZExemple:umulcc %r7, %r1, %r6Copiedans%r6lerésultatdelamultiplicationnonsignéeentreles16bitsdepoidsfaiblesde%r7etles16bitsdepoidsfaiblesde%r1.

Instruction:xorDescription:idemxorcc,maisaucunflagn’estaffecté.

Instruction:xorccDescription:EffectueunXORlogiquebitàbitentrelesopérandessourcesetplacelerésultatdansl’opéranderésultat.Lesflags(conditioncodes,cc)sontpositionnésconformémentaurésultat.Flagsaffectés:N,ZExemple:xorcc %r7, %r1, %r6Copiedans%r6lexorcalculébitàbitentre%r7et%r1,etpositionnelesflagsNetZenconséquence.

164

165

VII.3. LamicromachinedeCRAPS

166

167

SYNTAXESHDLPARL'EXEMPLE

MODULESmodule xor3(a, b, c : s) // module à 3 entrées a,b,c et une sortie s

s = a*/b*/c + /a*b*/c + /a*/b*c; // équation combinatoire

end module

module xor6(a, b, c, d, e, f, s) // le ‘:’ n’est pas obligatoire

xor3(a, b, c, s1); // incorporation d’une instance du module xor3

xor3(d, e, f, s2); // incorporation d’une 2ème instance du module xor3

s = s1*/s2 + /s1*s2; // s = xor des deux sorties intermédiaires

end module

module xor6V(e[5..0] : s) // même module avec un vecteur d’entrée

xor3V(e[2..0], s1);

xor3V(e[5..3], s2);

s = s1*/s2 + /s1*s2;

end module

module descendant(rst, h, : down) // circuit séquentiel

down := e; // := affectation séquentielle (ici : bascule D)

down.clk = h; // horloge, front montant

down.rst = rst ; // signal de reset asynchrone

end module

AFFECTATIONSCOMBINATOIRESx = y*z + u*v*w ;

x = 0 ; // autorise car la valeur est 0 ou 1

x = 123 ; // INTERDIT (x scalaire, arité 1)

x[7..0] = 123 ; // pas de problème car 123 tient sur 8 bits

x[7..0] = 623 ; // INTERDIT (incompatibilité d'arités)

x[7..0] = -123 ;

x[7..0] = 0x7E ;

168

x[7..0] = 0b10101010 ;

x[7..0] = y[7..0]*z[7..0]*u[7..0] ; // AND position par position

x[7..0] = y[7..0]*z[6..0] ; // INTERDIT (incompatibilité d'arités)

x[7..0] = y[7..0]+z[7..0]+u[7..0] ; // OR position par position

x[7..0] = y[7..0]+z[6..0] ; // INTERDIT (incompatibilité d'arités)

x[7..0] = y*z[7..0] ; // factorisation du scalaire y

x[7..0] = y*z[7..0]*u[7..0]*v ; // factorisation et AND par position

x[7..0] = y[7..0] * 0b1010 ;

x[7..0] = y[7..0] * 0b1010101010 ; // INTERDIT (incompatibilité d'arités)

x[7..0] = y[7..0] + 0b1101 ;

TRI-STATEx = y:oe; // buffer 3-états de y vers x, commandé par oe

x = /y:/oe; // idem avec des inversions sur l’entrée et la commande

x = y*z:oe; // INTERDIT (tri-state uniquement pour les buffers 3 états)

x[7..0] = y[7..0]:/oe; // vecteur de buffers 3-états avec mise en commun de la commande

x[7..0] = 0b10101010:oe; // entrée littérale, écrite en binaire

x[7..0] = y[7..0]:0b10101010;

x[7..0] = 0b11110000:0b10101010;

x[7..0] = 0b1010:0b10101010;

x[7..0] = 0b11110000:0b101010; // INTERDIT (incompatibilité d'arités)

AFFECTATIONSSEQUENTIELLESq := d ; // équation d’évolution de la bascule D

q := /d ; // bascule D avec entrée inversée

q := /t*q + t*/q ; // bascule T

q := /q*t + /t*q ; // bascule T avec entrée inversée

q := /k*q + j*/q ; // bascule JK

q := a*q + b*/q ; // bascule JK : b=J, /a=K

q := a*q + b*/c ; // INTERDIT (ne correspond à aucune bascule)

q := a*q ; // INTERDIT (ne correspond à aucune bascule)

q.rst = /nrst ; // reset asynchrone sur niveau bas

q.rst = a * b ; // INTERDIT (seulement un terme à un seul signal)

169

q.ena = en ; // en = signal d’enable synchrone

q.set = set ; // set = signal de mise à 1 asynchrone

q.clk = /h ; // horloge de la bascule : front descendant de h

q[7..0] := 123 ;

q[7..0] := /d[7..0] ; // vecteur de bascules D

q[7..0] := /t[7..0]*q[7..0] + t[7..0]*/q[7..0] ; // vecteur de bascules T

q[7..0].ena = en ; // mise en commun

q[7..0].ena = en[7..0] ;

q[7..0].ena = en[5..0] ; // INTERDIT (incompatibilité d'arités)

SIGNAUXPREDEFINISSURNEXYS

mclk // horloge 50MHz

btn[3..0] // 4 boutons poussoir

sw[7..0] // 8 switches à glissière

ld[7..0] // 8 leds haute luminosité

ssg[7..0] // cathodes (dp, g, f, e, d, c, b, a) des afficheurs 7 segments

an[3..0] // anodes des afficheurs 7 segments

red, grn, blue // port VGA : 3 signaux de couleur

hs, vs // port VGA: signaux de synchro. horizontale et verticale

ja_out[7..0] // connecteur d’extension ja, signaux de sortie

jb_out[7..0] // connecteur d’extension jb, signaux de sortie

jc_out[7..0] // connecteur d’extension jc, signaux de sortie

jd_out[7..0] // connecteur d’extension jd, signaux de sortie