4.1 Diseño

En esta sección se describe el diseño del generador digital de onda senoidal de frecuencia fija con interface AXI4-Stream, para observar su comportamiento se conectará su salida a un transmisor serie que enviará la salida del oscilador a un PC.

Los puertos de este módulo son los siguientes:

Puerto

Modo

PIN

Propósito

CLK

in

W5

Señal de reloj (100 MHz)

RST

in

U18

Señal de reset asíncrono activo en alto

RX

in

B18

Línea de recepción serie (19200 bps)

SS(6:0)

out

Control del display de 7 segmentos

AN(3:0)

out

Control de los ánodos del display de 7 segmentos

DATO(7:0)

out

U16…

Dato recibido y mostrado en los LEDS

DRI

out

L1

Indicador de recepción de dato

Puertos de entrada/salida del módulo lab3.vhd

Para ayudar a conceptualizar el hardware necesario para este diseño, se muestra su diagrama de bloques:

Diagrama de bloques
Diagrama de bloques.

Descripción de los bloques:

sincro:

Sincronizador de 2 biestables, sincroniza la entrada asíncrona \(\textsf{RX}\), los biestables se inicializan al valor de reposo de la línea serie. La salida del primer biestable se denomina rx_meta y la del segundo rx_sync.

reg. desp. ≫:

Registro de 8 bits que desplaza su contenido una posición hacia la derecha cada vez que la señal rd_desplaza = 1. El dato que ocupa la posición más significativa en cada desplazamiento será rx_sync.

registro salida:

Registro de 8 bits de carga en paralelo que se actualiza cada vez que rs_carga = 1, después de un reset toma el valor \(\textsf{x"20"}\).

bin a SS:

Decodificador ASCII a siete segmentos, si el código ASCII de entrada no corresponde con un número, su salida codificará el símbolo: E, se puede utilizar un alfabeto mas amplio como el mostrado en las transparencias del tema 2.

MEF:

Controla el funcionamiento del resto de los bloques y obtiene la salida \(\textsf{DRI}\), \(\textsf{DRI}\) está activa cuando el sistema está recibiendo un nuevo dato.

Diagrama de bloques.

timer:

Contador con inicialización síncrona, si timer_ini = 1timer = 0. Se utiliza para implementar las transiciones temporales en la MEF.

cont. bit:

Contador módulo 8 con control de inicialización e incremento, el contador se inicializa si la señal cntbit_ini = 1 y se incrementa si cntbit_inc = 1. Se utiliza para implementar los bucles en la MEF.

Modela este diseño en VHDL.

Utilizando biestables y lógica combinacional, dibuja el diagrama del circuito que implementa:

  • el registro de desplazamiento

  • el registro de salida

  • el contador de bit

  • el contador de tiempo de bit

A continuación, describe en VHDL la implementación del sistema completo.

Sigue el procedimiento visto en el lab1:
  • Descarga el archivo de recursos de lab4 y descomprímelo.

  • Arranca vivado y crea el proyecto utilizando el script scripts/lab.tcl.

  • Edita rtl/uart_rx.vhd para modelar la funcionalidad descrita.

    • en Vivado: Sources→Design Sources→Syntax Error Files→uart_rx.vhd.

Advertencia

En el modelo VHDL del sistema debe describirse separando claramente la lógica secuencial de la combinacional. La lógica secuencial (biestables) y las funciones de salida y de transición de estados de la MEF deben implementarse mediante procesos, mientras que el resto de la lógica combinacional puede describirse mediante asignaciones concurrentes.

Para codificar los nodos intermedios del receptor, debes utilizar los mismos nombres con los que aparecen en los diagramas. Esto facilitará la depuración y el análisis de resultados. Es especialmente importante para los registros del sincronizador utilizar los nombres: rx_meta y rx_sync. Estos registros deben ser reconocidos por las herramientas de síntesis e implementación como registros de sincronización para maximizar el MTBF (tiempo entre fallos).