Bärbar spelkonsol (GPU Team) (3 / 10 steg)
Steg 3: Memory Controller
RAM-minnet innehåller alla grafiska bitmappar krävs av de olika modulerna i GPU samt vissa dummy-minne zoner används av vissa algoritmer. Det är viktigt att alla moduler kan komma åt det, när så krävs, utan att orsaka alltför mycket distraktion mellan varandra. Speciellt, rambuffert behöver åtkomst till RAM med jämna mellanrum att ladda en linje från varje plan för att visa och tidpunkten är kritisk.
Specialiserade grafikmaskinvaran äger vanligt VideoRAMs (VRAM) med flera Läs/skriv-portar för att underlätta dessa frågor, men den 16 MB Micron cellulära RAM har bara en enda port PSRAM gränssnitt och är helt besvärlig med dess datakollisioner uppdatera cykeln. Det är därför klart behöver för en domänkontrollant för att underlätta användningen av enheten och göra det mer passande för en grafikaccelerator.
Kärnfunktioner
Minneskontrollern ger antingen:
- asynkron läsbehörighet,
- asynkron skrivåtkomst,
- burst läsbehörighet,
- burst skrivåtkomst.
Dessa instruktioner transporteras ut genom att generera signaler som anges i databladet för cellulära RAM (se timing grafik).
Minne buss- och Arbitraton
Vi har genomfört en förebyggande buss skiljedom logik för controller-enhetens minne buss. Detta skulle tillåta tidskritiska moduler för att få tillgång till obligatoriska uppgifter med lätthet, men det kommer att kräva att alla lägre prioritet moduler måste vara redo att blir avbruten under en tillgång. Det kan finnas upp till 5 externa moduler som kan kopplas till denna skiljedom logik.
RAM styrekonomens kontroll och data bussar delas av följande komponenter (med ordningstalet prioriterade minskningar):
- FrameBuffer;
- DMAController;
- BlockProcessingUnit
- PrimitiveGeneratorUnit
Var och en av dessa moduler är ansluten till RAM Controller-enhetens minne buss och multiplexering av bussen sker genom skiljedom logiken runt registeransvarige. Minne bussen göras av följande signaler:
- INSTR [3:0]: minne instruktion
- DATA_I [15:0]: data från modul till RAM
- DATA_O [15:0]: data från RAM till modulen
- ADDR [22:0]: basadress i bilden,
- HCNT [15:0]: horisontell offset counter,
- VCNT [15:0]: vertikal förskjutning counter,
- PICLEN [15:0]: vågräta storleken på bilden,
- HLEN [15:0]: horisontella storlek inlogerat blocket (del av bilden som ska läsas/skrivas),
Om INSTR är en asynkron instruktion (läsa och skriva), sedan HCNT, VCNT, används PICLEN och HLEN signaler inte. Dessa signaler används tillsammans med burst instruktioner, för att läsa/skriva från en linje eller en rektangulär del av en bild.
Mer exakt, under en korrekt konfigurerad burst tillträde ges läst adress sekvensen av följande formel:
ADDR + HCNT + VCNT × PICLEN, med HCNT: 0 till HLEN − 1, VCNT: 0 till VLEN − 1
(Se bilden ovan).
Denna visserligen komplicerade minnet buss är nödvändigt att säkerställa förköp av en operation som utförs av den åtkomst till modulen; dessa HCNT och VCNT räknare kan moduler att omplanera sin verksamhet om de få avbryts eller om CRAM förfriskning krävs. Kan också klippning av bitmappar helt enkelt som grundligt används av Block bearbetningen enhet (detta kommer att ses över i BPU avsnitt).
Men på grund av dess komplexitet, alla komponent ansluten till minne bussen måste genomföra en ganska komplex algoritm (några räknare, en multiplikation för att kontrollera uppdatera kollisioner). Vi arbetar för närvarande på en ny lösning baserad på buffert synkroniseringen att förenkla gränssnittet minne.