introduction a l architecture des...
TRANSCRIPT
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