VHDLwhiz-logo

Xerador de interfaces de proba VHDLwhiz UART

VHDLwhiz-UART-Test-Interface-Generator-PRODUCT

Información do produto

Especificacións:

  • Nome do produto: VHDL rexistra o xerador de interfaces de proba UART
  • Versión: 1.0.4
  • Data: 18 de agosto de 2024
  • Autor: Jonas Julian Jensen
  • Produto URL: Ligazón ao produto
  • Correo electrónico de contacto: jonas@vhdlwhiz.com

Descrición

Este produto permítelle xerar interfaces personalizadas para ler e escribir valores de rexistro FPGA usando UART. O módulo VHDL xerado e o script Python ofrecen a posibilidade de interactuar con varios tipos de rexistros no seu deseño FPGA.

Requisitos

  • Intérprete de Python 3
  • paquete pyserial

Protocolo

O produto usa un protocolo de marco de datos con catro caracteres de control:

  • Nome: READ_REQ, Valor: 0x0A: comando do host ao FPGA para iniciar unha secuencia de escritura para enviar todos os rexistros de volta a través de UART
  • Nome: START_WRITE, Valor: 0x0B: marca o inicio dunha secuencia de escritura en calquera dirección
  • Nome: END_WRITE, Valor: 0x0C: marca o final dunha secuencia de escritura en calquera dirección
  • Nome: ESCAPAR, Valor: 0x0D: carácter de escape usado para escapar de palabras de control

Instrucións de uso do produto

Execución dos scripts

Para usar o produto, asegúrate de ter instalado Python 3 e o paquete Pyserial. Execute os scripts a través dun intérprete de Python 3.

Xeración de interfaces personalizadas

Use o script gen_uart_regs.py para xerar interfaces personalizadas para ler e escribir valores de rexistro FPGA. Pode especificar a composición dos rexistros e tipos de entrada e saída ao xerar a saída files.

Interacción cos rexistros

Podes ler ou escribir en calquera número de rexistros do teu deseño FPGA usando o módulo VHDL xerado e o script Python. Os rexistros accesibles poden ter tipos como std_logic, std_logic_vector, signed ou unsigned.

Licenza

  • A licenza MIT cobre os requisitos de copyright e as condicións de uso do código fonte. Consulte o LICENSE.txt file no Zip file para os detalles.

Rexistro de cambios

  • Estes cambios refírense ao proxecto files, e este documento actualízase en consecuencia
Versión Observacións
1.0.0 Lanzamento inicial
1.0.1 Corrixiuse un erro de referencia «auto» ao importar como uart_regs.py como módulo de Python. Cambiouse a impresión de erros de escritura a excepción a

evite imprimir na consola cando se execute como módulo importado.

1.0.2 Corrixiuse o erro de Vivado [Synth 8-248] cando non hai rexistros de modo de saída.
1.0.3 Corrixir o aviso de Vivado Linter: o rexistro ten habilitado dirixido por

reinicio sincrónico

1.0.4 Corrixe o caso da esquina ao recibir unha palabra mal formada co carácter de escape como último byte. A seguinte palabra tamén se perdería porque non borramos recv_data_prev_is_escape ao volver a IDLE.

O script gen_uart_regs.py agora só permite nomes de rexistro únicos.

Descrición

  • Este documento describe o seguinte files e cartafoles:
  • gen_uart_regs.py
  • generated/uart_regs.vhd
  • generated/uart_regs.py
  • generated/instantiation_template.vho
  • rtl/uart_regs_backend.vhd
  • rtl/uart_rx.vhd
  • rtl/uart_tx.vhd
  • demo/lattice_icestick/
  • demo/xilinx_arty_a7_35/
  • demo/xilinx_arty_s7_50/
  • O script gen_uart_regs.py e VHDL compatible files deste proxecto permítenche xerar interfaces personalizadas para ler e escribir valores de rexistro FPGA de varios tipos e anchos usando UART.
  • Podes usar o módulo VHDL xerado e o script Python para ler ou escribir en calquera número de rexistros do teu deseño. Os rexistros accesibles UART poden ter os tipos std_logic, std_logic_vector, signed ou unsigned.
  • Pode decidir sobre a composición precisa dos rexistros e tipos de entrada e saída ao xerar a saída files usando o script gen_uart_regs.py.
  • Os scripts de Python creáronse parcialmente coa axuda da ferramenta de intelixencia artificial ChatGPT, mentres que o código VHDL está feito a man.

Requisitos

  • Os scripts deste proxecto deben executarse a través dun intérprete Python 3 e debe estar instalado o paquete Pyserial.
  • Podes instalar pyserial a través de Pip usando este comando: pip install pyserial

Protocolo

  • O VHDL files e o script Python usan un protocolo de marco de datos con catro controles
Nome Valor Comenta
READ_REQ 0x0A Comando do host ao FPGA para iniciar unha escritura

secuencia para enviar todos os rexistros de volta a través de UART

START_ESCRIBIR 0x0B Marca o inicio dunha secuencia de escritura en calquera

dirección

END_WRITE 0x0C Marca o final dunha secuencia de escritura en calquera dirección
ESCAPAR 0x0D Carácter de escape usado para escapar de calquera das palabras de control, incluído o propio carácter de escape, cando aparecen como datos entre os marcadores START_WRITE e END_WRITE.

Calquera byte READ_REQ sen escape enviado á FPGA é unha instrución para enviar todos os seus rexistros accesibles por UART (entradas e saídas) de volta ao host a través de UART. Este comando adoita ser emitido só polo script uart_regs.py.
Ao recibir este comando, a FPGA responderá enviando o contido de todos os rexistros de volta ao host. Primeiro, os sinais de entrada, despois os sinais de saída. Se as súas lonxitudes non suman un múltiplo de 8 bits, os bits inferiores do último byte serán ceros acolchados.
Unha secuencia de escritura sempre comeza co START_WRITE byte e remata co END_WRITE byte. Calquera byte entre eles considérase como bytes de datos. Se algún byte de datos ten o mesmo valor que un carácter de control, o byte de datos debe escaparse. Isto significa enviar un carácter ESCAPE extra antes do byte de datos para indicar que en realidade se trata de datos.
Se un START_WRITE sen escape chega a calquera parte do fluxo de bytes, considérase o inicio dunha secuencia de escritura. O módulo uart_regs_backend usa esta información para resincronizarse no caso de que a comunicación non se sincronice.

gen_uart_regs.py

  • Este é o script co que debes comezar para xerar a interface. A continuación móstrase unha captura de pantalla do menú de axuda que pode obter executando: python gen_uart_regs.py -hVHDLwhiz-UART-Test-Interface-Generator-FIG-1
  • Para xerar unha interface personalizada, debes executar o script con cada un dos rexistros controlables UART que desexes listados como argumentos. Os tipos dispoñibles son std_logic, std_logic_vector, unsigned e signed.
  • O modo predeterminado (dirección) está en e o tipo predeterminado é std_logic_vector a non ser que o rexistro sexa de lonxitude: 1. Entón, por defecto será std_logic.
  • Así, se queres crear un sinal de entrada std_logic, podes usar calquera destes argumentos:
  • meu_sl=1
  • my_sl=1:in
  • my_sl=1:in:std_logic
  • Todas as variantes anteriores farán que o script xere este sinal accesible por UART:VHDLwhiz-UART-Test-Interface-Generator-FIG-2
  • Imos executar o script con argumentos para xerar unha interface con varios rexistros de diferentes direccións, lonxitudes e tiposVHDLwhiz-UART-Test-Interface-Generator-FIG-3

Xerado files

  • Unha execución exitosa do script gen_uart_regs.py producirá un cartafol de saída chamado xerado cos tres files listados a continuación. Se xa existen, sobrescribiranse.
  • generated/uart_regs.vhd
  • generated/uart_regs.py
  • generated/instantiation_template.vho
  • uart_regs.vhd
  • Este é o módulo de interface personalizado xerado polo script. Debes crealo no teu deseño, onde pode acceder aos rexistros que queres controlar mediante UART.
  • Todo o que está enriba da sección "– Rexistros accesibles UART" será idéntico para todos os módulos uart_regs, mentres que a composición dos sinais de porto debaixo desa liña depende dos argumentos dados ao script xerador.
  • A lista a continuación mostra a entidade para o módulo uart_regs resultante do comando generar, por exemploample mostrado na sección gen_uart_regs.pyVHDLwhiz-UART-Test-Interface-Generator-FIG-4
  • Non precisa sincronizar o sinal uart_rx, xa que se xestiona no uart_rx. módulo.
  • Cando o módulo recibe unha solicitude de lectura, capturará os valores de todos os sinais de entrada e saída dentro do ciclo de reloxo actual. A instantánea envíase entón ao host a través de UART.
  • Cando se produce unha escritura, todos os rexistros de saída actualízanse cos novos valores dentro do mesmo ciclo de reloxo. Non é posible cambiar individualmente os valores do sinal de saída.
  • Non obstante, o script uart_regs.py permite ao usuario actualizar só as saídas seleccionadas lendo primeiro os valores actuais de todos os rexistros. Despois escribe de novo todos os valores, incluídos os actualizados.
  • uart_regs.py
  • O ficheiro generated/uart_regs.py file xérase xunto co módulo VHDL uart_regs e contén a información do rexistro personalizado na cabeceira do file. Con este script, podes ler ou escribir nos teus rexistros personalizados con facilidade.

Menú de axuda

  • Escriba python uart_regs.py -h para imprimir o menú de axuda:VHDLwhiz-UART-Test-Interface-Generator-FIG-5

Configurando o porto UART

  • O script ten opcións para configurar o porto UART usando o interruptor -c. Isto funciona en Windows e Linux. Estableceo nun dos portos dispoñibles que aparecen no menú de axuda. Para establecer un porto predeterminado, tamén pode editar a variable UART_PORT no script uart_regs.py.

Listaxe de rexistros

  • A información sobre a asignación do rexistro colócase na cabeceira do script uart_regs.py mediante o script gen_uart_regs.py. Podes listar os rexistros dispoñibles co interruptor -l, como se ve a continuación. Este é un comando local e non interactuará co FPGA de destinoVHDLwhiz-UART-Test-Interface-Generator-FIG-6

Escritura aos rexistros

  • Podes escribir en calquera dos rexistros do modo de saída usando o interruptor -w. Introduza o nome do rexistro seguido de "=" e o valor indicado como un valor binario, hexadecimal ou decimal, como se mostra a continuación.VHDLwhiz-UART-Test-Interface-Generator-FIG-7
  • Teña en conta que a implementación de VHDL require que o script escriba todos os rexistros de saída simultaneamente. Polo tanto, se non especifica un conxunto completo de rexistros de saída, o script realizará primeiro unha lectura desde o FPGA de destino e despois utilizará eses valores para os que faltan. O resultado será que só cambien os rexistros especificados
  • Cando realizas unha escritura, todos os rexistros especificados cambiarán durante o mesmo ciclo de reloxo, non tan pronto como se reciban a través de UART.

Lectura de rexistros

  • Use o interruptor -r para ler todos os valores do rexistro, como se mostra a continuación. Os valores marcados en amarelo son os que cambiamos na escritura anterior exampleVHDLwhiz-UART-Test-Interface-Generator-FIG-8
  • Cada lectura mostra unha instantánea instantánea de todos os rexistros de entrada e saída. Todos son sampconducido durante o mesmo ciclo de reloxo

Depuración

Use o interruptor -d con calquera dos outros interruptores se precisa depurar o protocolo de comunicación. A continuación, o script imprimirá todos os bytes enviados e recibidos e tag se son personaxes de control, como se mostra a continuación.VHDLwhiz-UART-Test-Interface-Generator-FIG-9

Usando a interface noutros scripts de Python

  • O script uart_regs.py contén unha clase UartRegs que pode usar facilmente como interface de comunicación noutros scripts de Python personalizados. Simplemente importe a clase, cree un obxecto dela e comece a usar os métodos, como se mostra a continuación.VHDLwhiz-UART-Test-Interface-Generator-FIG-10
  • Consulte as docstrings do código de Python para ver métodos e descricións e tipos de valores de retorno.

instanciación_template.vho

  • O modelo de instanciación xérase xunto co módulo uart_regs para a súa comodidade. Para aforrar tempo de codificación, pode copiar a instanciación do módulo e as declaracións de sinal no seu deseño.VHDLwhiz-UART-Test-Interface-Generator-FIG-11VHDLwhiz-UART-Test-Interface-Generator-FIG-12

RTL estático files

  • Debe incluír o seguinte files no seu proxecto VHDL para que se compilen na mesma biblioteca que o módulo uart_regs:
  • rtl/uart_regs_backend.vhd
  • rtl/uart_rx.vhd
  • rtl/uart_tx.vhd
  • O módulo uart_regs_backend implementa as máquinas de estado finito que rexistran e saen os datos do rexistro. Usa os módulos uart_rx e uart_tx para xestionar a comunicación UART co host.

Proxectos de demostración

  • Hai tres proxectos de demostración incluídos no Zip file. Permítenche controlar os periféricos das diferentes placas, así como algúns rexistros internos máis grandes.
  • Os cartafoles de demostración inclúen uart_regs.vhd e uart_regs.py xerados previamente fileestá feito específicamente para eses deseños.

Lattice ICEstick

  • O cartafol demo/icecube2_icestick contén unha implementación de demostración de acceso ao rexistro para a placa FPGA Lattice iCEstick.
  • Para executar o proceso de implementación, abra o demo/lattice_icestick/icecube2_proj/uart_regs_sbt.project file no software de deseño Lattice iCEcube2.
  • Despois de cargar o proxecto na GUI de iCEcube2, prema en Ferramentas → Executar todo para xerar o mapa de bits de programación. file.
  • Podes usar a ferramenta Lattice Diamond Programmer Standalone para configurar o FPGA co mapa de bits xerado file. Cando se abra Diamond Programmer, faga clic en Abrir un proxecto de programador existente na caixa de diálogo de benvida.
  • Seleccione proxecto file atopado no Zip: demo/lattice_icestick/diamond_programmer_project.xcf e fai clic en Aceptar.VHDLwhiz-UART-Test-Interface-Generator-FIG-13
  • Despois de que se cargue o proxecto, fai clic nos tres puntos File Columna de nome, como se mostra arriba. Navega para seleccionar o mapa de bits file que xeraches en iCEcube2
  • demo/lattice_icestick/icecube2_proj/uart_regs_Implmnt/sbt/outputs/bitmap/top_icestick_bitmap.bin
  • Finalmente, coa placa iCEstick conectada a un porto USB do teu ordenador, selecciona Deseño→Programa para programar o flash SPI e configurar a FPGA.
  • Agora podes proceder a ler e escribir rexistros utilizando o script demo/lattice_icestick/uart_regs.py tal e como se describe na sección uart_regs.py.

Xilinx Digilent Arty A7-35T

  • Podes atopar a implementación de demostración para o kit de avaliación Artix-7 35T Arty FPGA no cartafol demo/arty_a7_35.
  • Abra Vivado e navegue ata o extraído files usando a consola Tcl que se atopa na parte inferior da interface GUI. Escriba este comando para entrar no cartafol do proxecto de demostración:
  • cd /demo/arty_a7_35/vivado_proj/
  • Execute o script create_vivado_proj.tcl Tcl para rexenerar o proxecto Vivado:
  • fonte ./create_vivado_proj.tcl
  • Fai clic en Xerar bitstream na barra lateral para realizar todos os pasos de implementación e xerar o bitstream de programación file.
  • Finalmente, fai clic en Abrir Xestor de hardware e programa o FPGA a través da GUI.
  • Agora podes proceder a ler e escribir rexistros usando o script demo/arty_a7_35/uart_regs.py tal e como se describe na sección uart_regs.py.

Xilinx Digilent Arty S7-50

  • Podes atopar a implementación de demostración para a tarxeta de desenvolvemento Arty S7: Spartan-7 FPGA no cartafol demo/arty_s7_50.
  • Abra Vivado e navegue ata o extraído files usando a consola Tcl que se atopa na parte inferior da interface GUI. Escriba este comando para entrar no cartafol do proxecto de demostración:
  • cd /demo/arty_s7_50/vivado_proj/
  • Execute o script create_vivado_proj.tcl Tcl para rexenerar o proxecto Vivado:
  • fonte ./create_vivado_proj.tcl
  • Fai clic en Xerar bitstream na barra lateral para realizar todos os pasos de implementación e xerar o bitstream de programación file.
  • Finalmente, fai clic en Abrir Xestor de hardware e programa o FPGA a través da GUI.
  • Agora podes proceder a ler e escribir rexistros usando o script demo/arty_s7_50/uart_regs.py tal e como se describe na sección uart_regs.py.

Implementación

  • Non hai requisitos específicos de implementación.

Restricións

  • Non se necesitan restricións de tempo específicas para este deseño porque a interface UART é lenta e trátase como unha interface asíncrona.
  • A entrada uart_rx para o módulo uart_regs está sincronizada dentro do módulo uart_rx. Polo tanto, non é necesario sincronizalo no módulo de nivel superior.

Problemas coñecidos

  • É posible que necesites restablecer o módulo antes de poder utilizalo, dependendo de se a túa arquitectura FPGA admite valores de rexistro predeterminados.

Máis información

Preguntas frecuentes

P: Cal é o propósito do xerador de interfaces de proba UART?

R: O xerador de interfaces de proba UART permite a creación de interfaces personalizadas para interactuar cos valores de rexistro FPGA mediante a comunicación UART.

P: Como instalo o paquete Pyserial?

R: Podes instalar Pyserial a través de Pip usando o comando: pip install pyserial

Documentos/Recursos

Xerador de interfaces de proba VHDLwhiz UART [pdfManual do usuario
Xerador de interfaces de proba UART, xerador de interfaces de proba, xerador de interfaces, xerador

Referencias

Deixa un comentario

O teu enderezo de correo electrónico non será publicado. Os campos obrigatorios están marcados *