Está en la página 1de 12

Trabajo Sistemas

Digitales I
Curso 2021/2022
Objetivo del trabajo
El personal de limpieza de la Escuela Universitaria Politécnica, ha encontrado en el laboratorio
de Electrónica II una antigua memoria USB de 4 MB. Ésta fue en su día propiedad de un
profesor ya retirado y contiene, entre otras cosas, un audio con información privilegiada
sobre dónde se encuentra el dinero de su herencia. El contenido del dispositivo se puede ver
a continuación:

Figura 1 – Contenido de la memoria USB del profesor

• mensaje_importante.mat: contiene todas las muestras del mensaje de audio que hay
que descifrar para encontrar el dinero.
• script_envio_mensaje.m: script de matlab que sirve para enviar desde el PC a la FPGA,
a través del puerto RS232, mediante el protocolo UART, la señal contenida en
mensaje_importante.mat.
• modelo_UART.vhd: circuito que se puede instanciar en un Test Bench para simular el
envío de datos a través del protocolo UART y el puerto RS232. Puedes modificarlo a
tu gusto para simular distintos escenarios.
• modelo_MT45W.vhd: modelo que se comporta como la memoria MT45W8MW16BGX
para operaciones de lectura y escritura asíncronas.
• UART_recepcion.vhd: módulo que se encarga de que la FPGA reciba los datos por el
puerto RS232 desde el ordenador.
Además, en el pendrive aparece un boceto con los componentes que habría que utilizar para
resolverlo:

Spartan3E Artix7

RS232 RAM
UART Agrupa2 Controlador Controlador
MT45W8M Filtro
Recepcion Bytes Memoria PWM
W16BGX

NEXYS2 NEXYS4

Figura 2 – Boceto con el esquema general del circuito

El fin de este trabajo es claro, debes conseguir escuchar el archivo de audio que el antiguo
profesor tenía almacenado, todo ello mediante la ayuda de circuitos en VHDL en la placa
Nexys2 y Nexys4, siguiendo su esquema.
Etapas de diseño del circuito
En base al contenido del boceto y al material disponible, se plantean las distintas etapas para
llegar al objetivo.

Recepción de datos
Las muestras que forman parte del archivo de audio se van a enviar desde el PC a la FPGA
Spartan3E mediante el protocolo UART y el puerto RS232. Este protocolo sirve para enviar en
serie tramas de datos de 8 bits siguiendo la secuencia indicada a continuación:
1. Inicialmente, ha de esperarse a que la entrada RXD se ponga a nivel bajo (bit de Start),
lo cual indica que comienza la transmisión.
2. A partir de ese instante, aparecen bit a bit, los 8 bits del dato a recibir, empezando por
el menos significativo. Es importante guardar el nuevo bit en la mitad del ciclo, como
se muestra en la Figura 3.
3. Finalmente, se recibe un ‘1’ a través de RXD, lo que indica que la comunicación ha
finalizado (Bit de Stop).

RXD start D0 D1 D2 D3 D4 D5 D6 D7 stop

Figura 3 – Secuencia de recepción de bits mediante el protocolo UART

Por suerte, el bloque encargado de realizar dicha función a 115200 baudios


(UART_Recepción.vhd) se encuentra ya entre los archivos almacenados en el pendrive del
profesor. Sin embargo, cada una de las muestras del audio tienen 16 bits, pero el bloque UART
Recepción sólo recibe bytes. Es necesario diseñar un bloque Agrupa 2 Bytes que sea capaz de
servir para concatenar de dos en dos los bytes recibidos.

Salida Salida2B
RXD UART Agrupa2
Recepcion Fin_Recepcion Bytes Fin_Recepcion2B

Figura 4 – Diagrama de bloques de recepción de datos

Tareas a realizar
a) Instancia únicamente el bloque UART Recepción, compruébalo en un TB(*) y verifica
su funcionamiento mediante el display 7 segmentos.
b) Diseña el bloque Agrupa2 Bytes, que debe constar de unidad de control y operativa,
compruébalo en un TB(*) y verifica su funcionamiento mediante el display de 7
segmentos.
(*) Puedes simular el envío de datos instanciando en el TB el módulo modelo_UART.vhd.
Controlador de memoria RAM
Ya estarías en una situación en la que dispones de un dato de 16 bits en “Salida2B”, junto con
un flag “Fin_Recepcion2B”, que indica la aparición de una nueva muestra. Ahora necesitas
realizar la siguiente secuencia de operación: tendrás guardar en una memoria RAM, muestra
a muestra, toda la información recibida mediante el bloque del apartado anterior y,
posteriormente, tendrás que leerla para poder reproducirla a la velocidad adecuada. Una
posible propuesta sobre el funcionamiento de este bloque sería la siguiente, en el que se
omiten las señales que comunican la Unidad de Control y la Unidad Operativa:

Escribiendo
Leyendo
AudioDisp
Fin_Recepcion2B UC NuevaMuestra
Controlador
ControlRAM
AltaImp

Salida2B DQ
MT45W8MW16BGX

A
UO
InicioRec Controlador
InicioRep Muestra
Generic:
frec
n_muestra

Controlador_memoria_RAM

Figura 5 – Bloque general del controlador de memoria RAM

Se describen, a continuación, las señales representadas en el esquema de la Figura 5:

− Fin_Recepcion2B: flag que indica de la disponibilidad de una muestra completa (2


bytes) recibida por el puerto RS232.
− Salida2B: entrada con muestra recibida, ésta se debe almacenar en la memoria RAM,
que se encuentra dentro de la placa de desarrollo Nexys 2, pero fuera de la FPGA
Spartan 3E.
− InicioRec: entrada que estará asociada a un botón y que indica que se debe realizar la
recepción del archivo de audio.
− InicioRep: entrada que estará asociada a otro botón y que indica que se debe realizar
la reproducción del archivo de audio.
− Escribiendo, Leyendo, AudioDisp: salidas que indican que se está escribiendo el audio
en la RAM, o leyéndolo, o que está disponible para ser leído, respectivamente. Será
conveniente asociarlas a los LEDs de la placa.
− AltaImp: señal interna que servirá para habilitar el buffer triestado que conecta con el
bus de datos de la RAM. Habilitará el buffer en un proceso de escritura de la RAM, y
lo pondrá en alta impedancia cuando se quieran leer los datos que provienen de la
RAM.
− A: salida que irá conectada al bus de direcciones de la memoria.
− Muestra: salida con la muestra leída de la RAM en una operación de lectura.
− NuevaMuestra: flag de salida que indica que se ha terminado el proceso de lectura de
una nueva muestra de la RAM.
Además, en líneas generales se describe el comportamiento de la Unidad de Control y la
Unidad Operativa:
Unidad de Control del controlador de memoria
Debes tener en cuenta la siguiente secuencia de operación en esta la Unidad de Control:
1. Esperar a que el usuario indique que quiere recibir el mensaje (InicioRec).
2. Gestionar la Unidad Operativa y las entradas de control de la RAM para que se vayan
almacenando todas las muestras del mensaje, activando la salida Escribiendo mientras
tanto.
3. Al terminar, activar la salida AudioDisp para indicar que el ya se puede reproducir el
audio, a la espera que el usuario pulse el botón InicioRep.
4. Una vez se accione InicioRep, gestionar la Unidad Operativa y las entradas de control
de la RAM para que se vayan leyendo de la RAM todas las muestras, activando
mientras tanto la salida Leyendo y la salida NuevaMuestra cada vez que se lea y guarde
un nuevo dato. Al terminar, volver al apartado 3.
Unidad Operativa del controlador de memoria
Debe tener, al menos el siguiente contenido:
1. Detectores de flanco para botones.
2. Un contador de direcciones. Éste indicará, además, cuando haya llegado a la última
dirección. El número de direcciones vendrá por una entrada genérica n_muestras.
3. Un divisor de frecuencia que indique, durante todo el proceso de lectura, cada cuánto
tiempo se va a leer una muestra de la RAM. Se considerará una frecuencia de, como
mínimo 1Hz y mucho 16 kHz.
4. Un registro que guarde el valor leído de la RAM, cuya salida se conectará a la salida
Muestra.
Tareas a realizar
c) Dado que vas a utilizar la memoria MT45W8MW16BGX, analiza e indica la
funcionalidad de cada entrada y salida. Estudia cómo son los procesos de lectura y
escritura asíncronos, especificando los tiempos que has de cumplir.
d) Diseña las unidades de control y operativa para implementar el circuito con las
funcionalidades especificadas, compruébalas en sendos TB.
e) Implementa el bloque Controlador_memoria_RAM siguiendo el esquema de la Figura
5. Compruébalo en un TB(*).
f) Cuando tengas claro que el bloque simula correctamente, para descargar en la placa,
añade las modificaciones necesarias para realizar la escritura de 4 datos, los cuales se
leerán de la RAM con 1 Hz de frecuencia. Representa todo en el display de 7
segmentos.
(*) Puedes simular el conexionado de la memoria instanciando en el TB el módulo
modelo_MT45W.vhd.
Circuito PWM
Para poder convertir la señal digital almacenada en la RAM en una señal analógica audible,
debes diseñar un circuito que lleva a cabo una modulación por ancho de pulso (PWM) y,
posteriormente, filtrar la señal modulada. Dado que el viejo profesor no quiere vender barata
su herencia, propone el empleo de una segunda placa de desarrollo (Nexys 4), tal y como se
muestra en la Figura 6, en la que las salidas del bloque Controlador de Memoria, que
contienen el valor de cada muestra (señal Muestra), se envían en paralelo junto con su flag
(NuevaMuestra), para convertirlos a una señal PWM.

Spartan3E Artix7
RAM
MT45W8M
W16BGX
UART Agrupa2 Controlador Controlador
Recepcion Bytes Memoria Filtro
NuevaMuestra PWM

Muestra

NEXYS2 NEXYS4
Figura 6 – Conexionado entre Nexys 2 y Nexys 4DDR

Para ejemplificar el funcionamiento de este circuito, supongamos una señal digital que se
muestrea a 1 kHz, la cual se quiere convertir en analógica mediante una PWM de 10 kHz,
como se ve en la Figura 7. La aparición de una nueva muestra se produce cada ms (señal a
trazos), mientras que el ciclo de trabajo de la PWM (período de 0.1 ms) debe ser proporcional
al valor de la muestra a convertir a analógico.

1 ms 1 ms

0.1 ms

Figura 7 – Ejemplo de PWM de 10 kHz

El contenido en frecuencia de esa señal PWM, que será necesario filtrar, se aprecia en la
Figura 8.

Mensaje ♫

1 kHz 10 kHz 30 kHz 50 kHz

Figura 8 – Descomposición en armónicos de la señal de la Figura 7


Como puedes observar, la propia Nexys4DDR contiene un filtro analógico para filtrar la PWM
y quedarse sólo con la señal de audio, atenuando todos los armónicos no deseados. Puedes
encontrar más información sobre cómo funciona este circuito en el punto 16 del manual de
referencia.
Tareas a realizar
g) Diseña el circuito PWM para generar la señal modulada y simúlalo en un TB. La
frecuencia de la señal modulada será de 200 kHz. Selecciona una frecuencia adecuada
si el audio a reproducir es de 8 kHz. Debes tener en cuenta que:
- La señal de reloj de esta placa de desarrollo es 100 MHz.
- Debes analizar el manual de referencia y el esquemático de la placa para hacer
que el audio se escuche en su terminal jack 3.5 mm.
- Aunque exista una nueva muestra en la entrada, la PWM no debe cambiar de
ciclo de trabajo hasta que termine su periodo actual.
Circuito final
Ya tienes todo para escuchar el ansiado audio. Configura una frecuencia de muestreo de 8
kHz y una PWM de 200 kHz. Conecta los circuitos diseñados en los apartados anteriores. El
envío del audio a través del puerto RS232 se realiza mediante el archivo Script_UART_RX.m
ejecutado desde matlab.
Tareas a realizar
h. Descubre dónde está el dinero y disfruta de él.

Aspectos a tener en cuenta en el diseño


Se deben tener en cuenta las siguientes pautas que, de no cumplirse, serán motivo de
penalización:
▪ El diseño se realizará síncrono por flanco de subida con la señal de reloj de 50 MHz y 100
MHz para la primera y la segunda FPGA, respectivamente. No se permitirá el uso de
circuitos activos por flanco de bajada.
▪ Los circuitos contarán con un reset asíncrono, asociado a uno de los botones de sendas
placas. Si se desea resetear cualquier circuito mediante “software”, este reset ha de ser
síncrono.
▪ Se utilizarán de manera eficiente los recursos de la placa: evitar registros repetidos, en
caso de querer generar distintas frecuencias, obtenerlas del mismo contador siempre que
sea posible, no se utilizan tiempos de espera innecesarios, utilizar genéricos…
▪ Se realizan y demuestran las simulaciones funcionales de cada bloque y del circuito final.
Se debe contemplar un número de casos lo suficientemente representativo para asegurar
el correcto funcionamiento del circuito.
▪ Se presentan evidencias del funcionamiento del circuito de prueba.
Memoria
Es necesario entregar una Memoria de 10 páginas como mínimo y 35 como máximo,
organizada siguiendo los apartados propuestos en el diseño. Se debe explicar detalladamente
para cada uno en qué consiste la solución adoptada y el razonamiento de por qué funciona
correctamente, incluyendo Test Bench representativos. En el caso de las máquinas de estados
se debe dibujar el diagrama de estados, así como los esquemas de conexionado de cada
circuito. Se deben incluir capturas de pantalla con los resultados de las simulaciones
funcionales que permitan comprobar que cada módulo funciona correctamente. Para ello los
test bench deben incluir los estímulos necesarios, y en las capturas de pantalla de las
simulaciones se deben mostrar con claridad los puntos de interés.
La información de este documento debe permitir comprender en su totalidad el diseño. En
ella se valora:
▪ Estructura clara y ordenada.
▪ Explicaciones claras y suficientes para comprender el trabajo realizado.
▪ Uso de lenguaje técnico apropiado y sin faltas de ortografía.
▪ Inclusión de figuras y fotos de montaje adecuadas.
▪ Inclusión de datos relevantes.
Defensa de la práctica
La defensa de la práctica constará de dos partes:

Presentación oral
La presentación estará limitada a un máximo de 10 minutos de exposición (se pueden usar las
mismas figuras de la memoria siempre que se vean con claridad al proyectarlas).
Criterios de corrección presentación oral:
▪ La estructura de la presentación es correcta (se explican los apartados en el orden
indicado en el enunciado de la tarea, las explicaciones van de lo general a los detalles
particulares y son claras, se resume adecuadamente la información...).
▪ Los recursos visuales son pertinentes y eficaces (todo lo que se proyecta es perfectamente
visible para toda la clase, y es información relevante).
▪ Se presentan conclusiones.
▪ Se respeta estrictamente el tiempo establecido (se penalizará el exceso).
▪ Se establece contacto visual con la audiencia.
▪ Se varía la entonación para resaltar puntos importantes.

Defensa de la práctica
El profesor tendrá la opción descargar el programa a la FPGA para comprobar el
funcionamiento del circuito, preguntando a los alumnos sobre diversos aspectos de su
trabajo, tales como criterios de diseño, conexionado de los circuitos integrados, etc.
Entrega y puntuación
Entrega
La entrega de trabajos tiene como fecha límite el domingo 1 de mayo a las 23:55, no
aceptándose ninguna demora respecto a la misma. La entrega constará un único archivo zip
que incluirá los siguientes archivos:
▪ Un documento PDF con la memoria.
▪ Un proyecto ISE para el apartado de recepción de datos con sus correspondientes TB.
▪ Un proyecto ISE para el apartado del controlador de memoria y sus correspondientes TB.
▪ Un proyecto ISE con el circuito PWM y sus correspondientes TB.
▪ Un proyecto ISE para el circuito final que hayas empleado para escuchar el audio.
El archivo de entrega ha de seguir la siguiente nomenclatura:
“NombreAlumno1_Apellido1Alumno1_NombreAlumno2_Apellido1Alumno2.zip”.

Puntuación del trabajo


Este trabajo tiene un peso del 40% sobre la nota final de la asignatura. La puntuación de cada
etapa del mismo se distribuye de la siguiente manera:
Recepción
10 %
Datos

Funcionalidad y Controlador
30 %
de Memoria
corrección del diseño
PWM 15 %

Circuito Final 5%

Documentación 10 %

Presentación 5%
Presentación
Defensa 25 %

Total 100 %
Tabla 1 – Distribución de la puntuación

También podría gustarte