Stap 4: MCU Interface - FPGA Xilinx Spartan 6
We ontwierpen de MCU-interface op een manier kunnen gegevens worden gedeeld tussen de STM32 microcontroller en de Nexys 3 FPGA. Om te verzekeren van een volledig functionele grafische kaart, moeten de gegevens ontvangen van de STM32 gericht naar het juiste register of naar de DMA-controller zonder elke discontinuïteit of verloren gegane gegevens. De STM32 moet ook kunnen lezen van de gegevens uit de registers zonder het schrijven proces in gevaar te brengen.
De MCU Interface Protocol
De LCD connector gebruikt de STM32 microcontroller verbinden met het Nexys 3 FPGA is een 17 door 2 Raad van bestuur tot bestuur connectoren.
Om de FSMC asynchrone SRAM protocol gebruiken, moeten we:
- Een 16-bits gegevensbus, direct beschikbaar via de LCD connector (D0 aan D15)
- De NOE, NWE en NE4 signalen, ook beschikbaar vanaf de LCD connector (RD, WR en CS)
- Een 26-bits adres niet beschikbaar op de LCD connector, daar alleen de A [0] bit. Deze waarom moesten we maken onze eigen protocol zodat we de FSMC gebruiken kunnen om gegevens van de STM32 microcontroller.
Dekking van de onbeschikbaarheid van de 26 bits adresbus, besloten we te verdelen van een transactie (lezen of schrijven) in drie opeenvolgende transacties. De eerste is een schrijven transactie met daarin het adres van het register die we willen lezen of schrijven. De tweede is een lees- of een transactie schrijven afhankelijk van het soort operatie dat we moeten doen. In het geval van een transactie schrijven de databus zal worden dat de gegevens bevat die we willen schrijven in de registers welk adres is opgegeven in de vorige transactie. Aangezien de GPU registers 32-bits registers zijn, moeten we twee schrijven (of lezen) 16 bit transactie.
Als u wilt hervatten het protocol om te schrijven in een register, moeten we drie schrijven transactie. Het ene bedrijf het adres en de twee anderen met de gegevens van de 32-bits (LSB en MSB). In het geval dat we willen lezen van de gegevens uit de registers, zal de eerste transactie worden een schrijven met het adres. De andere twee houden de gegevens uit de registers (LSB en MSB).
Gegevens- en bus-beheer
Het gegevens- en bus beheer blok
de gegevensbuffer van 32-bits en de 16-bits adres buffer bijgewerkt. Op de eerste transactie van de STM32, worden de 16-bits gegevens doorgegeven aan de buffer adres. De volgende twee transacties worden overgebracht naar de buffer van de gegevens van de 32-bits.
In geval van een DMA-controller gegevensoverdracht is er geen behoefte aan een transactie drie schrijven want er geen adres is en de databus alleen 16-bits is. In dat geval de STM32 16 bits gegevensbus worden overgebracht naar de DMA-databus. We gebruikten de LSB van de 26 bits adresbus van de FSMC, genaamd RS, ten behoeve van het identificeren van de locatie van de data-overdracht (DMA-controller of kaart registreren).
Gegevens worden overgebracht van de buffers naar de beschikbare bus afhankelijk van het type van de overdracht, opgespoord met behulp van de NOE, NWE signalen van de FSMC, zoals in de vorige sectie. Aangezien deze signalen asynchrone zijn, wij toegevoegd aan de MCU-interface een synchrone signaalgenerator die kan worden gebruikt voor het synchroniseren van de andere blokken, maar met een vertraging van 10 tot 20 ns.
Bus verzoek beheer
In het geval van een overdracht van de gegevens van of naar het blok kaart registreert heeft de databus te verlenen voor de transactie met succes worden verwerkt. Als de bus niet beschikbaar is, een verzoek moet worden verzonden naar RegisterMap en de STM32 inactief moet blijven totdat de bus beschikbaar.
Daarom gebruikte een van de algemene doel input/output (GPIO), beschikbaar vanaf de LCD connector, is geconfigureerd voor het verzenden van een signaal genaamd bezet thats de STM32 vertelt dat de FPGA bezig is en niet kan de transactie voortzetten totdat de bezettoon is weer op '0'. Deze eenvoudige procedure waarborgen dat elke overdracht naar of van de kaart registreert met succes en zonder enig gegevensverlies worden verwerkt. Wanneer de bus beschikbaar is, is het inschakelen van een uitgang naar registers in het geval van een lees transactie gestuurd. Als er een schrijf-transactie, wordt een belasting-signaal verzonden naar registers in dezelfde tijd als de adresbus.
Demo
In deze demo ziet u hoe we erin geslaagd beurt in- en uitschakelen LEDs op het bord Nexys 3 van het MCU-bord.