Paso 4: Interfaz de MCU - FPGA Xilinx Spartan 6
Hemos diseñado la interfaz MCU de manera a poder compartir datos entre el microcontrolador STM32 y SDMONexys 3 FPGA. Para asegurar una tarjeta de gráficos completamente funcional, datos recibidos de los STM32 deben ser dirigidos hacia el registro correcto o hacia el controlador DMA sin ninguna discontinuidad o perdidos de datos. El STM32 también deben ser capaces de leer los datos de los registros sin poner en peligro el proceso de escritura.
El protocolo de interfaz MCU
El conector de pantalla LCD para conectar el microcontrolador STM32 SDMONexys 3 FPGA es un 17 por 2 conectores de junta a Junta.
Para poder utilizar el protocolo SRAM asincrónico de FSMC, necesitamos:
- Un bus de datos de 16 bits, directamente en el conector de pantalla LCD (D0 a D15)
- Las señales de NOE, NWE y NE4, también disponibles en el conector de pantalla LCD (RD, WR y CS)
- Una broca 26 dirección no está disponible en el conector de pantalla LCD, hay solo el A [0] bit. Este por qué tuvimos que crear nuestro propio protocolo para que podamos usar la FSMC para transferir datos desde el microcontrolador STM32.
Para cubrir la falta del autobús de dirección de 26 bits, se decidió una operación (lectura o escritura) se dividen en tres operaciones sucesivas. La primera es una operación de escritura que contiene la dirección del registro que queremos leer o escribir. La segunda es una lectura o una transacción de escritura dependiendo del tipo de operación que tenemos que hacer. En el caso de una operación de escritura, el bus de datos se que contiene los datos que queremos escribir en los registros que dirección está especificada en la operación anterior. Puesto que los registros GPU son registros de 32 bits, necesitamos dos escribir (o leer) transacción de 16 bits.
Para continuar el protocolo, para escribir en un registro, necesitamos tres de escritura de transacción. La primera de ellas sostiene la dirección y los otros dos que contiene los datos de 32 bit (LSB y MSB). Si queremos leer los datos de los registros, la primera transacción será a escribir uno que contiene la dirección. Los otros dos mantener los datos de los registros (LSB y MSB).
Gestión de bus de datos y dirección
El bloque de gestión de bus de datos y dirección
actualiza el buffer de datos de 32 bits y el búfer de dirección de 16 bits. En la primera transacción del STM32, los datos de 16 bits se transfieren al búfer de dirección. Las siguientes dos transacciones se transfieren al búfer de datos de 32 bits.
En el caso de una transferencia de datos del controlador DMA, no hay necesidad para una transacción de tres escritura ya que no hay ninguna dirección y el bus de datos es de sólo 16 bits. En ese caso, el bus de datos STM32 16 bits se transfieren al bus de datos DMA. Utilizamos el LSB del autobús de dirección de 26 bits de la FSMC, llamado RS, para identificar la ubicación de la transferencia de datos (controlador DMA o mapa registro).
Datos son transferidos de los buffers del autobús disponible según el tipo de la transferencia, detectado con el NOE, NWE señales de la FSMC, como se muestra en la sección anterior. Ya que estas señales son asíncronas, hemos añadido a la interfaz MCU un generador de señal sincrónica que puede utilizarse para sincronizar los otros bloques, pero con un retraso de 10 a 20 ns.
Gestión de petición de bus
En el caso de una transferencia de datos desde o hacia el bloque de registros de mapa, el bus de datos tiene que concederse para que la transacción sea procesada correctamente. Si el autobús está disponible, debe enviarse una solicitud a RegisterMap y el STM32 debe permanecer inactivo hasta que el autobús esté disponible.
Por esta razón utiliza uno de la fines generales entrada/salida (GPIO), en el conector de pantalla LCD, está configurado para enviar una señal de ocupado que está el nombre dice el STM32 que la FPGA está ocupada y no puede continuar la operación hasta que la señal de ocupado se pone otra vez a '0'. Este sencillo procedimiento garantiza que cada transferencia hacia o desde el mapa de registros se procesarán con éxito y sin ninguna pérdida de datos. Cuando el autobús está disponible, una habilitación de salida se envía a los registros en el caso de una transacción de lectura. Si es una operación de escritura, una señal de carga se envía a los registros en el mismo tiempo que el bus de direcciones.
Versión parcial de programa
En esta demostración verá cómo logramos encender y apagar LEDs la Junta de SDMONexys 3 de la Junta MCU.