Comunicación serie PC con FPGA

0

Estoy diseñando un circuito sumador de 16 bits simple en Xilinx Spartan 6 FPGA de Digilent. El diseño de Verilog acepta dos entradas de 16 bits A y B y devuelve la suma de 16 bits C = A + B. Estoy ignorando llevar y llevar a cabo.

Quiero enviar A y B desde la PC a FPGA usando el puerto serial, así como enviar la suma C desde la FPGA a la PC usando el puerto serial. No estoy seguro de cómo hacer esto. He buscado en Google pero no pude encontrar algo simple. ¿Puedo enviar A y B como decimales como A = 5, B = 3? ¿O tengo que enviarlo como ASCII? ¿Cómo distingo A de B si A = 255 y B = 512 (es decir, tanto A como B tienen varios dígitos)? ¿Cómo trata FPGA con ASCII?

Algunos punteros o explicaciones serán realmente apreciados

    
pregunta user2979872

2 respuestas

2

Yo sugeriría escribir un módulo UART desde cero o encontrar uno en línea. Entonces todo lo que necesita hacer es escribir un contenedor que interconecte el UART con sus registros. Aquí hay un posible módulo de código abierto de UART Verilog que escribí hace un tiempo:

enlace

Este módulo en particular usa la interfaz de flujo AXI, por lo que no debería ser muy difícil interactuar con su diseño.

La interfaz de flujo AXI tiene tres señales: tdata, tvalid y tready. tvalid indica que tdata contiene datos válidos, y tready indica que el receptor está listo para recibir los datos. Los bytes de datos se transfieren solo cuando tvalid y tready son altos.

Lo que recomendaría hacer es definir un protocolo en serie simple que admita algunos marcos básicos. Por ejemplo, para enviar A y B al FPGA, enviaría algún tipo de indicación de inicio (por ejemplo, 0 o tal vez ASCII S o W), luego el MSB de A, luego el LSB de A, luego el MSB de B, luego el LSB de B. Luego, puede escribir una máquina de estado que busque la indicación de inicio y luego cargar los siguientes cuatro bytes en los registros correspondientes. Luego, una vez que se completa la operación, la máquina de estado puede enviar el resultado a la computadora. Si quieres usar ASCII en lugar de binario, puedes hacerlo también, pero es un poco más complicado convertir todo. Recomendaría usar hexadecimal si desea algo legible por humanos, ya que es mucho más fácil dividirlo por 16 que dividirlo por 10 (desplazamiento de bit / segmento de bit en lugar de una operación de división real).

    
respondido por el alex.forencich
0

Ken Chapman (empleado de Xilinx) proporciona un módulo UART simple y liviano como dispositivo de E / S externo para su procesador de 8 bits (PicoBlaze). Estos módulos UART (RX y TX) se pueden usar en cada FPGA Xilinx. Cada módulo tiene una interfaz de bytes simple. Este procesador y su periferia vienen con una gran cantidad de documentación y ejemplos :)

= > Busque "PicoBlaze" en el sitio web de Xilinx.

Para la transmisión solicitada de 2x 16 bits, necesitará una máquina de estado simple que reciba 4 bytes en 4 ciclos, por ejemplo. Codificado como A0, A1, B0, B1. Yo recomendaría enviar todos los bytes codificados en binario al FPGA, para que no haya ascii o BCD a la necesidad de decodificación binaria.

    
respondido por el Paebbels

Lea otras preguntas en las etiquetas