A Bne megvalósítása a MIPS processzor áramkörében

Megpróbálom a BNE utasításokat beépíteni a következő áramkörbe új vezérlővonal bevezetése nélkül. Számos lehetséges módszert gondoltam, mint pl. Muxok vagy kapuk hozzáadása a megvalósításhoz, de a megvalósítás után mindig probléma merült fel a három utasítás bármelyikével, PC+4, BEQ és néha maga BNE. Most egy kis tanácsra van szükségem a szakértőktől, hogyan tudnám megvalósítani a bne funkciót anélkül, hogy új vezérlővonalat vezetnék be. Itt van az áramkör:

Áramkör diagram itt

Megjegyzések

  • Nem vagyok EE, de milyen nehéz lenne a nulla jel átalakítása állapotba elégedett / elágazásba vett jel? Nyilvánvaló, hogy az ALU és irányítása bonyolultabb lenne, úgyhogy ez csak úgy tűnik, hogy a komplexitás körül mozog – megint nem vagyok EE. (BTW, azt hiszem, néhány korai MIPS megvalósítás külön logikában végezte el az elágazás állapotának értékelését, és elvégezte az elágazási cél kiszámítását az ALU-ban.)

Válasz

A fent ábrázolt MIPS architektúra már tartalmazza a BNE utasításhoz szükséges hardvert.

A BNE utasítás részét képező két nyilvántartási szám átkerül a nyilvántartó fájlba, amely majd továbbítja az adatokat az ALU-nak. Ha egyenlőek, akkor a nulla zászló kerül beállításra. Az utasításdekódoló egység meghatározza, hogy az elágazásjelző be van-e állítva egy már meglévő vezérlőjelek sokasága alapján (a fent említett 0 jelző és egy csomó bit az utasítás opkódjában). Ezután a programszámláló következő címét a tetején lévő ALU alapján számítják ki, amely kezeli az eltolás címének hozzáadását az aktuális címhez.

Sokan implementálták ezt az utasítást a meglévő MIPS hardverben, ezért nagyon Önnek nincs szüksége további vezérlőjelekre. Részletesebb információkért tekintse meg a MIPS utasításkészletet és az architektúra megvalósítását. Itt egy ilyen példa készült a VHDL-ben.

Megjegyzések

  • Valójában ha megnézi a VHDL-t, akkor ' látni fogja, hogy a vezérlőegységnek KÉT jele van ahhoz, hogy azt továbbítsa, amit sematikusan egyetlen " elágazás " vezérlőjel: különálló " elágazás van " és egy " branch_ne " jelzések.

Válasz

Hagyja, hogy a fő vezérlője a következő ALUOp jeleket hozza létre: ALUop diagram Vegye figyelembe, hogy az ALUop kód A 11-et nem használják, így a BNE definiálható, amikor ALUop = 11, akkor az ALU vezérlő bemenet 1110 lenne, amelynek szintén kivonást kellene végeznie (ugyanaz, mint a 0110). Most a bne esetében tudjuk, hogy az ALUop 11 lesz, és a PC beállításához a “nulla” jelet el kell hárítani (vagyis nem egyenlőek). Tehát most nyilvánvalónak kell lennie, hogy használhatjuk a a következő logika alapján határozhatja meg a bne eredményét: ALUop1 ÉS ALUop2 ÉS ~ (“nulla”)

Ezt akkor állítják, amikor a PC-t egy bne művelet kimenete alapján kell beállítani. A kimenetet arra kell használni, hogy ugyanazt a muxot vezérelheti, mint az AND kapu, amely már szerepel a diagramján.

A válaszom Patterson és Hennessy “Számítógép-szervezés és -tervezés” című könyvén alapul.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük