Si venís leyendo como generé el hardware y software para tener que la CPU del zynq-7020 de la PYNQ tuviera una terminal serial primero y luego un acelerador criptográfico de juguete luego y más si leiste la intro, no te sorprenderá que ahora quiera mezclar la cosas.
En este paso lo que haré será dejar el sistema, llamemoslo "legítimo" funcionando. Esto es, desde la PC me comunico por serial con la PYNQ que hace el cifrado y me lo devuelve. Vendría a ser un acelerador criptográfico remoto.
Para darle más sabor, en lugar de hacer todo a la vez, voy a agregar primero el puerto serial y luego el acelerador, pero en lugar de ir haciendo proyectos separados, los voy a ir modificando asi vemos como cambiar un proyecto. Es más, en la primera versión ya va hacer el cifrado, pero por software.
Creo el proyecto y lo pongo una uartlite, eso está suficientemente explicado o al menos relatado en las entradas anteriores pero me gusta escribir, la repetición forma parte del aprendizaje.
El serial
- File -> Project -> New
- IP INTEGRATOR -> Create Block Design
- Add IP -> ZYNQ -> Run Block Automation
- Add IP -> Uartlite -> Run Connection Automation -> S_AXI
- axi_uartlite_0 -> UART -> expand
- rx -> botón derecho -> make external (tomar nota del nombre del pin)
- tx -> botón derecho -> make external (tomar nota del nombre del pin)
- Sources -> + -> Add or create constraints -> pynq-z2_v1.0.xdc
- Usar los nombres anotados en el xdc
##Arduino Digital I/O
set_property -dict { PACKAGE_PIN T14 IOSTANDARD LVCMOS33 } [get_ports { tx_0 }]; #IO_L5P_T0_34 Sch=ar[0]
set_property -dict { PACKAGE_PIN U12 IOSTANDARD LVCMOS33 } [get_ports { rx_0 }]; #IO_L2N_T0_34 Sch=ar[1]
- File -> Save Block Design
- Tools -> Validate
- Sources -> Design Sources -> remote accelerator -> botón derecho -> Create HDL Wrapper
- PROGRAM AND DEBUG -> Generate Bitstream
- File -> Export -> Export Hardware -> include bitstream
- File -> Launch SDK
- File -> New -> Application Project
- Templates -> Empty Application
- Project Explorer -> remote_accelerator -> src -> new -> file -> main.c
A main.c le pegamos el código de lo hecho en una terminal serial y le agregamos la aceleración por software, o sea, data ^= 3;
Aceleración por software |
Si te preguntás de dónde sale XPAR_UARTLITE_0_BASEADDR, es de
/remote_accelerator_bsp/ps7_cortexa9_0/include/xparameters.h
y debe coincidir con axi_uartlite_0 de system.hdf
Volvés un momento a Vivado
- PROGRAM AND DEBUG
- Open Hardware Manager
- Open Target
- Auto Connect
- Program Device
Regresás a SDK
- Project Explorer -> botón derecho -> Run As -> Launch on Hardware (GDB)
Abrís una terminal a un adaptador USB-UART/TTL que esté correctamente conectado a los puertos Arduino de la PYNQ, tipeas "abcd " y te va respondiendo:
Aceleración por software |
Lista una parte, es un buen momento para cerrar todo y versionar.
El acelerador
Ahora tendría que abrir el diseño del bloque (Open Block Design) para agregar el acelerador, pero es parte de otro proyecto, no se vé desde acá, antes hay que descubrir como traspasarlo.
Settings -> IP -> Repository -> buscar la carpeta "IP Repo"
Repositorio de usuario agregado |
Luego arrastrás accelerator_xor al Diagrama, "Run Connection Automation", es casi vergonzoso lo fácil que resulta.
Diagrama completo |
- File -> Save Block Design
- Tools -> Validate Design
- PROGRAM AND DEBUG -> Generate Bitstream
- File -> Export Hardware -> include bitstream
- File -> Launch SDK
Si miramos el system.hdf, veremos ahora dos direcciones para nuestros dispositivos:
Los dos dispositivos |
El código final |
La interacción con el acelerador:
Interacción con acelerador |
a b c d caracter entrada
61 62 63 64 código ascii entrada
05 05 05 05 exor
64 67 66 61 código ascii salida
d g f a caracter salida
0 1 2 3 caracter entrada
30 31 32 33 código ascii entrada
05 05 05 05 exor
35 34 37 36 código ascii salida
5 4 7 6 caracter salida
Y las cuentas comprobadas:
La cuentas |
Notarás que aunque de alguna manera está haciendo cifrado por bloques, como puse 0x05050505 como key es como si hiciera cifrado por caracteres.
No hay comentarios:
Publicar un comentario