CT17: Periféricos PMOD - Obijuan/Cuadernos-tecnicos-FPGAs-libres GitHub Wiki

Descripción

Contenido

Introducción

Para conectar placas periféricas sencillas a nuestra FPGA podemos utilizar cables dupont (los vimos en el cuaderno técnico 16), para unir los pines de ambas placas, o para conectar directamente componentes discretos pinchados en una breadboard. Esto nos permite conectar fácilmente LEDs, pantallas LCDs, displays de 7 segmentos, etc.

En este ejemplo vemos cómo está conectada una placa con 4 pulsadores a los pines D0-D3 de la Alhambra-II, utilizando 5 cables dupont hembra-hembra (4 para los pulsadores y 1 para GND)

Sin embargo, aunque esta conexión es muy sencilla, nos podemos confundir al conectar los cables. O puede ocurrir que algún cable se suelte o que haga mal contacto. O que queramos probarlo en otra placa, por lo que hay que desconectar todo y conectarlo en la nueva placa.

En estos casos nos interesa que la placa periférica se conecte directamente a nuestra FPGA, sin necesidad de clables. Un ejemplo es la placa AP-LED8-THT que está diseñada para conectarse directamente a la Alhambra-II, y facilitar muchísimo las pruebas

Sin embargo, esto presenta otro problema. Cada fabricante define su propio conector y sólo se puede usar con sus propias placas. Lo ideal sería tener una INTERFAZ UNIVERSAL que permita, dentro de lo posible, utilizar una misma placa periférica para diferenes FPGAs

Ese es el objeto de la INTERFAZ PMOD: Peripheral MODules. Es un estándar abierto para construir placas periféricas, con pocos pines de datos y baja velocidad, que se pueda conectar a diferentes placas de FPGAs

Interfaz PMOD

La especifición oficial del PMOD está disponible en este documento PDF: pmod-interface-specification-1_3_1.pdf. En él se definen todos los tipos de conector a usar, las dimensiones, la disposición de los pines (pinout), etc.

En este cuaderno técnico lo resumiremos y presentaremos las ideas más imporantes

Terminología

Partimos de una placa principal con una FPGA, a la que llamaremos placa base. Queremos conectarle diferentes periféricos, que denominaremos PMODs

La conexión se realiza a través de 2 conectores, uno en la placa base y otro en el PDMO. El conector de la placa base es HEMBRA mientras que el conector del PMOD es MACHO

En esta foto se tiene la placa base Nandland go-board que tiene un conector hembra en su derecha, y una placa periférica de 8 LEDs, que tiene un conector macho

En esta otra figura está la placa periférica conectada a la go-board

La idea que hay detrás de todo esto es que los PMODS se puedan utilizar desde diferentes placas bases. Así por ejemplo, un PMOD de 8 leds lo podemos usar con la placa Icestick, o bien con la NandLand Go-board. El mismo PMOD lo reutilizamos entre dos placas diferentes:

En esta foto vemos el PMOD anterior conectado a una placa icestick

Y en esta otra foto está conectado a una placa icebreaker

Esta es la clave: el mismo periférico puede conectarse a diferentes placas, gracias a que la interfaz es abierta

Tipos de conectores para PMODs

Se estándard de PMOD se definen dos interfaces: una formada por conectores de 6 pines y la otra de 12 pines. El conector de la placa base SIEMPRE es una HEMBRA, mientras que el conector del periférico (PMOD) siempre es MACHO

Interfaz de 6 pines

Esta es la interfaz mínima. Consta sólo de 6 pines, de los cuales uno es GND, otro VCC y los 4 pines restantes para datos. Se numeran desde el 1 hasta el 6. El pin 5 SIEMPRE es GND, y el 6 SIEMPRE es VCC

Pin Descripcion
1 Dato
2 Dato
3 Dato
4 Dato
5 GND
6 VCC

La numeración de los conectores de la placa base y el periférico tienen SIMETRIA DE ESPEJO. Esto es así para que al conectarse queden unidos los pines con el mismo número

En esta figura se resume el pinout de los conectores PMOD de 6 vías

Interfaz de 12 pines

Esta es la interfaz más común. Consta sólo de 12 pines divididos en dos filas de 6 pines (2x6), una encima de la otra. La fila superior es similar a la interfaz de 6, con la misma numeración: Pines 1-4 de datos, Pin 5 es GND y Pin 6 es VCC

En la segunda fila los pines 7-10 son de datos, el Pin 11 es GND y el Pin 12 de VCC

Pin Descripcion Pin Descripcion
1 Dato 7 Dato
2 Dato 8 Dato
3 Dato 9 Dato
4 Dato 10 Dato
5 GND 11 GND
6 VCC 12 VCC

En esta interfaz en total hay 8 pines de datos, dos de GND y dos de VCC. La idea es que ambas filas pueden ser independientes, y son compatibles con interfaces de 6 vías. Es decir, que el interfaz de 12 pines se puede ver en realidad como 2 interfaces de 6 pines apilados (y se podrían usar de manera independiente)

Los pines 5 y 11 SIEMPRE son de GND. Los pines 6 y 12 SIEMPRE son de VCC


La numeración de los conectores de la placa base y el periférico tienen SIMETRIA DE ESPEJO. Esto es así para que al conectarse queden unidos los pines con el mismo número

En esta figura se resume el pinout de los conectores PMOD de 12 vías

Algunos PMODs

En esta sección se muestran algunos módulos PMODs, mostrando sus detalles y haciendo circuitos de ejemplo de conexión a la placa IceBreaker

Digilent PMOD 8LD: 8 LEDs

La placa PMOD 8LD de Digilent tiene 8 LEDs verdes. Utiliza una interfaz de 12 pines (2x06)

Este es su pinout:

PMOD pin Señal PMOD pin Señal
1 LD0: LED 0 7 LD4: LED 4
2 LD1: LED 1 8 LD5: LED 5
3 LD2: LED 2 9 LD6: LED 6
4 LD3: LED 3 10 LD7: LED 7
5 GND 11 GND
6 VCC 12 VCC

En esta foto se muestra el PMOD 8LD conectado a la placa Icebreaker (al conector PMOD1A)

Ejemplo 1: Patrón 0xAA en LEDs

Este es el circuito para probar la placa PMOD 8LD en la icebreaker: se muestra el patrón 0xAA (10101010) en los LEDs
Los LEDs se activan mediante Lógica positiva por lo que basta con enviar el valor 0xAA directamente:

Y esto es lo que se muestra en los LEDs:

Icebreaker DIP Switch: 8 switches

La placa PMOD DIP-Switch de 1BitSqueare tiene 8 micro Switches. Utiliza una interfaz de 12 pines (2x06)

Este es su pinout:

PMOD pin Señal PMOD pin Señal
1 SW1 7 SW5
2 SW2 8 SW6
3 SW3 9 SW7
4 SW4 10 SW8
5 GND 11 GND
6 VCC 12 VCC

En esta foto se muestra el PMOD Switch-Dip conectado a la placa Icebreaker (al conector PMOD1B)

Ejemplo 2: Mostrar los switches en los LEDs

Circuito de prueba del PMOD DIP-SWITCHES. Está conectado al PMOD1B de la Icebreaker. El estado de los switches se muestra directamente en los 8 leds del PMOD 8LDs, que se encuentra conectado al conector PMOD1A

Este es el resultado. En los switches se ha metido el valor 11100011, que es justo lo que se muestra en los LEDs:

Icebreaker: PMOD de Test

La placa icebreaker viene por defecto con un PMOD de test, integrado en la propia placa, en la parte de la derecha. Dispone de 3 pulsadores (B1, B2, B3) y 5 LEDs (L1, L2, L3, L4, L5)

Opcionalmente este PMOD se puede separar del PCB principal (partiendo la icebreaker como si fuese una galleta), obteniendo la placa base icebreaker por un lado y el PMOD de test por otro. Hay que soldar el conector hembra a la icebreaker y el macho a al PMOD de test. Este es el resultado:

Este es el aspecto del PMOD de test

El LED 1 (L1) es rojo, y el resto de LEDs verdes (L2, L3, L4 y L5)

La ventaja de tener el PMOD de Test separado es que se puede usar como cualquier otro PMOD, y conectarlo a cualquier otra placa que tenga interfaces PMOD

Este es su pinout:

PMOD pin Señal PMOD pin Señal
1 L2 7 L1
2 L3 8 L4
3 L5 9 B1
4 B2 10 B3
5 GND 11 GND
6 VCC 12 VCC

Ejemplo 3: Botones en LEDs

En este ejemplo se encienden los LEDs L1 (rojo) y L5 (verde). Los botones B1, B2 y B3 controlan los LEDs L2, L3 y L4 respectivamente

Este es el escenario, una vez cargado el circuito y sin ningún botón apretado:

El LED L1 (rojo) y el L5 (verde) están encenidos. El resto están apagados porque no hay ningún botón pulsador

En este vídeo de youtube se muestra el funcionamiento cuando se aprietan los botones:

Click to see the youtube video

Icebreaker: Dos Displays de 7 segmentos

La placa 7segment de 1bitsqueared dispone de 2 displays de 7 segmentos. Utiliza una interfaz de 12 pines (2x06)

Los displays de 7 segmentos de cátodo común, por lo que trabaja en lógica negativa (1=Segmento apagado. 0: Segmento encendido). La señal CAT es la que selecciona qué display usar:

  • CAT = 1: Display derecho
  • CAT = 0: Display izquiedo

Este es su pinout:

PMOD pin Señal PMOD pin Señal
1 Segmento A (AA) 7 Segmento E (AE)
2 Segmento B (AB) 8 Segmento F (AF)
3 Segmento C (AC) 9 Segmento G (AG)
4 Segmento D (AD) 10 Selección de display (CAT)
5 GND 11 GND
6 VCC 12 VCC

Esta es la denominación de los segmentos:

Ejemplo 4: Encender todos los segmentos de un display

En este ejemplo se comprueban todos los segmentos de uno de los displays. Se encienden todos los segmentos del display seleccionado. La selección se hace con el botón 1 (Del PMOD2, el que está integrado en la Icebreaker)

Este es el resultado, cuando no está apretado el botón 1. Todos los segmentos del display izquierdo están encendidos

En este vídeo de youtube se muestra su funcionamiento:

Click to see the youtube video

Ejemplo 5: Mostrando un número en cada display (modo manual)

En este ejemplo se muestran dos dígitos, uno en cada display. En el display izquierdo se muestra el dígito 0, y en el derecho el dígito 1. Con el pulsador B1 se muestra manualmente qué display activar

Este es el resultado al cargar el circuito:

En este vídeo de youtube se muestra su funcionamiento:

Click to see the youtube video

Ejemplo 6: Mostrando un número de dos dígitos (modo automático)

Este circuito muestra el dígito 01 en los dos displays. Para lograr que se vea correctamente hay que activar alternativamente el display izquierdo y el derecho alternativamente, a una frecuencia elevada para que no lo perciba el ojo humano

En cada instante de tiempo sólo hay un display activo, pero como se activan a la suficiente velocidad, el ojo humano NO lo percibe, y lo ve todo como si estuviesen los dos displays activados a la vez

Esto permite mostrar dos dígitos utilizando menos bits que si tenemos dos displays en paralelo (8 bits frente a 14)

Este es el circuito:

Y esto es lo que se muestra en los displays de 7 segmentos:

PMOD-Audio

La placa PMOD-Audio de MuseLab dispone de 2 canales de audio (izquierdo y derecho) con volumen ajustable, que se sacan por un altavoz o salida de cascos. Utiliza una interfaz de 12 pines (2x06) aunque sólo usa 2 pines

Este es su pinout:

PMOD pin Señal PMOD pin Señal
1 No usado 7 Canal izquierdo (Altavoz)
2 No usado 8 Canal derecho
3 No usado 9 No usado
4 No usado 10 No usado
5 GND 11 GND
6 VCC 12 VCC

Ejemplo 7: Pitido de 100Hz con pulsador

Este circuito emite un pitido de 100Hz por ambos canales. Se oye tanto por el altavoz como por los cascos (por ambos canales)

Este es el escenario. El periférico de Audio está conectado al PMOD1A de la placa Icebreaker:

En este vídeo de youtube se muestra su funcionamiento:

Click to see the youtube video

QQSPI PSRAM Pmod (32MB)

La placa QQSPI PSRAM de Machdyne es un PMOD con memoria RAM de 32MBytes accesible por SPI. Utiliza una interfaz de 12 pines (2x06)

Este es su pinout:

PMOD pin Señal PMOD pin Señal
1 SS 7 SIO2
2 MOSI (SIO0) 8 SIO3
3 MISO (SIO1 9 CS0
4 SCLK 10 CS1
5 GND 11 GND
6 VCC 12 VCC

El periférico está formado por 4 bloques de 8MB (32MB en total). La selección de cada bloque se hace con las señales CS0 y CS1 según la siguiente tabla:

CS0 CS1 Bloque
0 0 Bloque 0 (8MB)
0 1 Bloque 1 (8MB)
1 0 Bloque 2 (8MB)
1 1 Bloque 3 (8MB)

Para la transferencia de datos entre la memoria y la FPGA se pueden utilizar dos modos:

  • Modo SPI: Transmisión sería síncrona, típica del SPI. Se usan las señales MOSI y MISO. Se transfiere un bit por cada señal de reloj. Es el modo por defecto
  • Modo QPI: La transferencia se hace en grupos de 4 bits, por los pines SIO0, SIO1, SIO2 y SIO3

En estas hojas de datos se puede encontrar más información:

Para la utilización de este módulo se requiere de un controlador específico, que diseñaremos en un cuaderno técnico futuro. Como ejemplo se utilizará un circuito tomado del cuaderno técnico 15: Memoria Flash para leer el identificador de la memoria

Ejemplo 8: Lectura del identificador de la memoria

Este circuito comprueba el funcionamiento del PMOD, leyendo el identificador de la RAM. Al apretar el pulsador B1 se leen 4 bytes del identificador de la RAM y se muestran en los LEDs. Primero se muestra el byte 0, que es 0x0D. Con el botón B2 se muestran los 3 bytes restantes, cuyos valores son 0x5D,0x52, 0xF6

El módulo de la RAM está conectado al PMOD1A, y los LEDs en el PMOD1B. Este es el escenario:

En este vídeo de Youtube se muestra su funcionamiento. Al apretar el botón B2 se muestran en los LEDs los bytes consecutivos del identificador

Click to see the youtube video

Placas FPGA con conexión directa de PMOD

Muchas de las placas con FPGAs libres disponen de uno o varios conectores PMOD, de 12 vías, para enchufar diferentes periféricos. Y esto es algo muy cómodo: Poder usar el mismo periférico en diferentes placas, de distintos fabricantes y con FPGAs diferentes

En este apartado vamos a mostrar ejemplo de prueba de conexión de PMODs en diferentes placas base

Icestick

La placa Icestick tiene un único conector para PMODs de 12 vías. Este es su pinout:

Ejemplo 9: Animación en los LEDs

Ejemplo de uso del PMOD de 8 LEDs en la Icestick. Movimiento de un LED desplazándose de izquierda a derecha

Este es el escenario:

En este vídeo de Youtube se muestra en acción:

Click to see the youtube video

Ejemplo 10: Switches en LEDs

En este ejemplo se conecta el PMOD de 8 switches a la Icestick. El estado de los switches de 1 a 5 se muestran en los 5 LEDs integrados de la icestick

Este es el escenario. Para hacer las pruebas se han activado los switches 1,2 y 5:

Aquí se muestra en otro ángulo. Los LEDs 1,2 y 5 están encendidos. Los otros dos apagados

Ejemplo 11: Botones en LEDs

En este ejemplo se prueba el PMOD de Test de 3 pulsadores y 5 LEDs en la Icestick. Los LEDs L1 y L5 están encendidos. Los botones B1, B2 y B3 se conectan a los LEDs L2, L3 y L4

Este es el escenario:

En este vídeo de Youtube se muestra su funcionamiento:

Click to see the youtube video

Ejemplo 12: Displays de 7 segmentos

Ejemplo de uso del PMOD con 2 displays de 7 segmentos en la Icestick. Se muestran los dígitos 01 en los displays

Este es el escenario:

Ejemplo 13: Sirena

Ejemplo de uso del PMOD de Audio. Se emite una sirena compuesta por dos tonos alternantes de 100 y 200 Hz. Se alternan a la frecuencia de 2 Hz

Este es el escenario:

En este vídeo de youtube se muestra el funcionamiento:

Click to see the youtube video

Ejemplo 14: QQSPI RAM

Ejemplo del uso del PMOD de RAM serie en la Icestick. Se leen 5 bits del identificador del chip de RAM y se muestran en los LEDs de la Icestick. El primer byte leido dege ser 0x0D por lo que si el acceso es correcto se deben encender los LEDs D4, D3 Y D1

Este es el escenario:

Si la lectura del identificador es correcta, se deben ver los 3 LEDs rojos encendidos: D1, D3 y D4:

Icebreaker

La placa icebreaker dispone de 3 conectores de PMODs: PMOD1A, PMOD1B y PMOD2. Es la placa que hemos usado para mostrar el funcionamient de los PMODs, por lo que todos los ejemplos se pueden encontrar en la sección Algunos PMODs

Nandland Go-Board

La placa Go-Board tiene un único conector para PMODs de 12 vías. Este es su pinout:

Ejemplo 15: Animación en los LEDs

Ejemplo de uso del PMOD de 8 LEDs en la Go-board. Movimiento de un LED desplazándose de izquierda a derecha

Este es el escenario:

En este vídeo de Youtube se muestra en acción:

Click to see the youtube video

Ejemplo 16: Switches en LEDs

En este ejemplo se conecta el PMOD de 8 switches a la Go-Board. El estado de los switches de 1 a 4 se muestran en los 4 LEDs integrados de la Go-board

Este es el escenario. Para hacer las pruebas se han activado los switches 1,2 y 4, y por tanto se encienden los LEDs D1,D2 y D4:

Ejemplo 17: Botones en LEDs

En este ejemplo se prueba el PMOD de Test de 3 pulsadores y 5 LEDs en la Go-board. Los LEDs L1 y L5 están encendidos. Los botones B1, B2 y B3 se conectan a los LEDs L2, L3 y L4

Este es el escenario:

En este vídeo de Youtube se muestra su funcionamiento:

Click to see the youtube video

Ejemplo 18: Displays de 7 segmentos

Ejemplo de uso del PMOD con 2 displays de 7 segmentos en la Go-Board. Se muestran los dígitos 01 en los displays

Este es el escenario:

Ejemplo 19: Sirena

Ejemplo de uso del PMOD de Audio. Se emite una sirena compuesta por dos tonos alternantes de 100 y 200 Hz. Se alternan a la frecuencia de 2 Hz

Este es el escenario:

En este vídeo de youtube se muestra el funcionamiento:

Click to see the youtube video

Ejemplo 20: QQSPI RAM

Ejemplo del uso del PMOD de RAM serie en la Go-Board. Se leen 5 bits del identificador del chip de RAM y se muestran en los LEDs de la Go-board. El primer byte leido dege ser 0x0D por lo que si el acceso es correcto se deben encender los LEDs D1, D2 y D4

Este es el escenario. Si la lectura del identificador es correcta, se deben ver los 3 LEDs encendidos: D1, D2 y D4

Icesugar

La placa Icesugar tiene tres conectores para PMODs de 12 vías, denominados PMOD1, PMOD2 y PMOD3.

El PMOD1 es especial, y tiene pines compartidos con otros recursos de la icesugar: El puerto serie (TX, RX) y dos pines del usb superior. Para que el puerto serie no interfiera hay que quitar los jumpers J5

En el lateral derecho de la placa hay un único conector hembra. La parte superior es el PMOD2 y la parte inferior el PMOD3. En la parte central hay 7 pines disponibles de propósito general (J7)

Este es el pinout del PMOD1:

La notación Px se refiere al número de pin de la FPGA, y está marcado en la parte inferior de las serigrafías de la placa

[!Note] En Icestudio se utiliza esta misma notación, PERO es mejor cambiarlo en versiones futuras. La notación correcta sería Px_y, donde x se refiere al número de PMOD (1,2,3) e y el pin del pmod (1,2,3,4,7,8,9,10)

Este es el pinout del PMOD2 y PMOD3:

En esta tabla se resumen los pines de los PMODs de la Icesugar:

Pin PMOD PMOD1 PMOD2 PMOD3
1 P10 P46 P34
2 P6 P44 P31
3 P3 P42 P27
4 P48 P37 P25
5 GND GND GND
6 VCC VCC VCC
7 P9 P45 P32
8 P4 P43 P28
9 P7 P38 P26
10 P47 P36 P23
11 GND GND GND
12 VCC VCC VCC

Ejemplo 21: Animación en los LEDs

Ejemplo de uso del PMOD de 8 LEDs en la icesugar. Movimiento de un LED desplazándose de izquierda a derecha. La misma secuencia del LED se saca por TODOS los PMODS: PMOD1, PMOD2 y PMOD3

En este escenario está la isugar a la que se le han conectado 2 placas de 8 leds, en el PMOD1 y PMOD2:

Y en este otro escenario las mismas placas de LEDs están conectadas en el PMOD2 y PMOD3:

En este vídeo de Youtube se muestra en acción:

Click to see the youtube video

Ejemplo 22: Switches y botones en LEDs

TODO

TODO

  • ULX3S Radiona
  • MyStrom blackIce

Conexión de placas PMOD en la Alhambra II

TODO

Información para procesar de los PMODS:

https://en.wikipedia.org/wiki/Pmod_Interface