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:
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: 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.