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).