VHDL - Enviar cadena usando una función o similar

0

He estado jugando durante unos meses con la GO board para comenzar a obtener algunas bases sobre cómo programar la lógica funciona.

Me las arreglé para superar las cosas bastante fáciles y el UART básico de un byte, aquí es donde comienzan mi dilema y frustración. ¿Cómo diablos puedo implementar una función simple en mi módulo UART para enviar un flujo multibyte?

Sería bueno (quizás no sea la forma en que se supone que debes trabajar con los FPGA) poder tener una función y pasar el texto / valor a la salida a través de UART como parámetro.

¿Es posible (por supuesto, casi todo es posible) hacer tal cosa de una manera agradable y práctica? ¿Estoy demasiado envuelto en la mentalidad del microcontrolador y esto no es factible?

¿Puede alguien delinearme la estructura para hacerlo?

Gracias,

    
pregunta Aleix

1 respuesta

2

Hay muchos conceptos de diseño digital que necesitarás saber para hacer esto. Supongo que un esquema sería:

  1. Diseñe una máquina de estados finitos que desplace una única trama en serie de 10 bits (suponiendo 8-N-1, entonces un bit de inicio, 8 bits de datos, 1 bit de parada). El módulo acepta un reloj (su velocidad en baudios) y algunos datos de 8 bits, así como una entrada "ir" (empezar a cambiar datos) y un indicador de salida "hecho" (todos los bits cambiados).

  2. Diseñe un módulo generador de velocidad de transmisión que produzca su reloj de, por ejemplo, 9600 baudios. Probablemente este sea un tipo de contador que comparará con un valor para saber cuándo alternar la salida del reloj en baudios y restablecer el contador. Su entrada será cualquier fuente de reloj disponible en su placa FPGA, probablemente algo en el rango de MHz.

  3. Diseñe un módulo FIFO para almacenar los datos que se transmitirán en serie. FIFO tiene datos de entrada, salida de datos, reloj y reinicio, y banderas de estado para completar y vaciar.

  4. Diseñe otra máquina de estado que descargue datos de la FIFO y transfiera ese byte único al módulo de desplazamiento que desarrolló anteriormente. De esta manera, cuando la FIFO está llena, enviará nuevos caracteres hasta que esté vacío. Será necesario que examine el indicador vacío FIFO para saber cuándo comenzar y parar.

  5. Cree un módulo de nivel superior que cargue algunos datos en el FIFO. Tal vez su placa de desarrollo tenga botones o interruptores para lograr esto, puede cargar una palabra binaria a la vez en FIFO y luego presionar un botón para que el FSM comience a emitir bytes de bytes a byte.

En cada paso, debe escribir un módulo de banco de pruebas y validar todos los aspectos del módulo que está probando. Es una parte crítica del desarrollo, aunque algunas personas lo pospongan hasta el final.

Leí el diseño del estado de la máquina para obtener más información. Debe conocer las máquinas de estado de tipo Mealy y Moore, cómo la unidad de control (FSM) controla una ruta de datos que funciona con datos, etc.

    
respondido por el user171804

Lea otras preguntas en las etiquetas