Dossier de migración ZedBoard → ZU9¶
Borrador del 8-oct-2026, para completar en Z5. Lista qué cambia al pasar a la ZU9, fichero por fichero, y qué IP hay que regenerar. Complementa al registro delta: el registro dice qué se comporta distinto; este documento dice dónde hay que tocar.
Cómo se construyó, y su límite. El mapa de ficheros sale de una búsqueda por grep sobre el
repositorio, no de una migración real. Se comprobaron a mano tres afirmaciones (guarda de
tcl/build.tcl:69, bootgen -arch zynq en tools/make_boot.sh:67,71, ps7_cortexa9_0 en
tcl/gen_bsp.tcl:55,58); el resto son citas de la búsqueda y las líneas pueden haberse movido. Las
columnas «Cambio en ZU9» que dependen de cómo se comporta Vivado o Vitis con zynq_ultra_ps_e son
inferencias, no medidas: este Vivado 2022.2 no tiene instalado el device pack de UltraScale+
(A11 en pendientes), así que nada de esto se ha podido sintetizar.
Requisito previo: decidir fs¶
Casi todo lo de abajo se mueve de golpe si ADR-001 se firma
(fs = 143,9 MHz en la ZU9). Migrar a ZU9 con el fs de D-04 (250 MHz) es posible, pero repite
la migración después. Léase la sección «Revisión del 8-oct-2026» del ADR antes de planificar.
Qué no cambia¶
El camino de parámetros ya está preparado para las dos plataformas. config/params.toml tiene
[platform.zu9] con fs_hz y part; tools/gen_params.py emite los bloques ifdef
DRX_PLATFORM_ZU9 (rtl/generated/drx_params_pkg.sv, fw/include/drx_params.h,
tcl/generated/drx_params.tcl); fw/Makefile ya acepta PLATFORM=zu9; tcl/build.tcl ya pasa
-verilog_define DRX_PLATFORM_ZU9; gen_stimulus_catalog.py ya conoce zu9. El RTL del datapath
(DDC, range-gate, motor de timing, packer) no nombra ninguna primitiva de 7-series: no hay ningún
DSP48E1 escrito a mano en rtl/. Lo que cambia ahí es el presupuesto, no el código.
Qué cambia, por directorio¶
Bloque de PS y arranque (trabajo nuevo, el grueso)¶
| Fichero | Hoy | En ZU9 |
|---|---|---|
tcl/gen_zynq_bd.tcl |
processing_system7:5.5, claves PCW_* (VREF interno de DDR, MDIO en MIO 52–53, S_AXI_HP0, ancho 32) |
zynq_ultra_ps_e, claves PSU__* distintas; nombres y anchos de puertos HP/HPC distintos. Reescritura, no renombrado. Los dos bugs de placa de la ZedBoard (VREF de DDR, MDIO del PHY) son específicos del preset de Digilent y no se transfieren; el equivalente en la ZU9 depende de la portadora, que no existe |
rtl/drx_zynq_top.sv |
envoltorio del BD con PS7 | envoltorio nuevo para el PS de UltraScale+ |
tcl/build.tcl:69-73 |
error si -top zynq y plataforma ≠ zedboard |
quitar la guarda, añadir el envoltorio de ZU9 |
tcl/gen_bsp.tcl:55,58 |
dominios sobre ps7_cortexa9_0 |
psu_cortexa53_0 (o R5, decisión abierta; D4 del registro delta) y revisar el dominio FreeRTOS |
tools/make_boot.sh:67,71 |
bootgen -arch zynq, FSBL de Zynq-7000 |
-arch zynqmp, BIF y FSBL/PMUFW distintos (inferencia) |
tools/build_vitis.sh:13-14 |
platform=zedboard por defecto, XSA *_zynq |
pasar zu9 y el XSA nuevo |
fw/src/app/drx_ray.c:42-43 |
XPAR_FABRIC_DMA_S2MM_INTROUT_INTR (61 en ZedBoard) |
el ID de interrupción cambia; sale del BSP regenerado |
fw/src/app/drx_dma.c, drx_regs_hw.c |
XPAR_* del BSP |
regenerar BSP; no se edita a mano |
fw/src/app/main.c:183,189 |
EMAC de Zynq-7000 | GEM de la ZU9 (inferencia) |
fw/include/drx_ray.h, drx_ray.c |
comentario sobre Xil_DCacheInvalidateRange; no hay llamada viva en fw/ |
verificar coherencia de caché en A53: el A9 no tiene CCI y el A53 sí (D5). No se verificó que la ruta DMA→DDR→CPU siga siendo coherente sin invalidar |
rtl/drx_ray_packer.sv:12-13 |
restricción del ancho de TDATA del AXI DMA S2MM | revisar contra el ancho de HP de la ZU9 (128 bits, D5) |
Restricciones y pines¶
| Fichero | Hoy | En ZU9 |
|---|---|---|
tcl/xdc/zedboard.xdc, zedboard_zynq.xdc |
PACKAGE_PIN de reloj (Y9), reset (P16), LED (T22) y trig_out sobre Pmod JA (Y11/AA11/Y10/AA9) |
XDC nuevo: pines salen de la portadora y del FMC213, que no están elegidos (P-02, P-03) |
rtl/drx_top.sv:61 |
comentario: sin Pmod mapeado | mapa de pines de la ZU9; el SSI pasa de LVCMOS 3,3 V a RS-422 (D6) |
Regeneración de IP¶
Las cuatro IP versionadas como XCI se regeneran contra xczu9eg-ffvb1156-2-e con tcl/gen_ip.tcl
-platform zu9. Antes hay que instalar el device pack de UltraScale+; sin él la regeneración
falla.
| IP | Versión | Notas para la regeneración |
|---|---|---|
ip/cic_compiler_ddc |
cic_compiler 4.0 | si ADR-001 se firma, cic_rate 52 → 30 |
ip/dds_compiler_nco |
dds_compiler 6.0 | Phase_Increment programable (Z4.5). Reverificar NCO_LUT_OFFSET_K = 655 (tcl/gen_ip.tcl:180) con la matriz de D-12 |
ip/fir_compiler_droop |
fir_compiler 7.2 | coeficientes dependen de cic_rate; salen de make gen |
ip/fir_compiler_halfband |
fir_compiler 7.2 | 6 instancias. El recuento de DSP48 de la ZedBoard (111/220) no predice el de la ZU9 (DSP48E2) |
ip_debug/drx_debug_ila |
ila 6.2 | tcl/gen_ip_debug.tcl, regenerar o retirar |
Los bloques del BD (axi_dma:7.1, axi_interconnect:2.1, proc_sys_reset:5.0,
axi_protocol_converter:2.1) son los mismos IP, pero hay que releer sus parámetros: anchos de HP y
c_include_sg se fijaron contra el PS7.
CI¶
.github/workflows/ci.yml:85-88 tiene platform: [zedboard]; zu9 se sacó de la matriz por falta
del device pack. Volver a añadirla es lo último, tras instalarlo. Las etapas XSA/BSP/BOOT.BIN
(ci.yml:116-130) están condicionadas a zedboard y necesitan su variante.
Throwaway: bringup/¶
La escalera de bring-up está atada a la ZedBoard de arriba abajo (xc7z020, ps7_init,
ps7_cortexa9_0, pines Y9/T22, consola /dev/ttyACM0). No se porta; se reescribe cuando llegue
la portadora, y las lecciones de xsct/JTAG no se transfieren sin
reverificar (psu_init en vez de ps7_init).
Lo que ninguna migración de ficheros cubre¶
D1 (JESD204B, MGT, SYSREF), D8 (DAC AD9129) y D6 (SSI diferencial) son trabajo nuevo sin equivalente en la ZedBoard; ver el registro delta. Este dossier no los estima: no hay fichero que cambiar porque todavía no existe el fichero.
Lo que falta para cerrar este dossier en Z5¶
- Instalar el device pack de UltraScale+ y comprobar que
gen_ip.tcl -platform zu9regenera las cuatro IP. Hoy es una suposición. - Decidir A53 o R5 para el firmware (D4) antes de reescribir
gen_bsp.tcl. - Anotar evidencia por entrada del registro delta (D1–D12), como pide ese documento.
- Repetir la búsqueda de ficheros específicos de plataforma tras ADR-001, que añade las constantes de PRF y ancho de pulso a la lista.