Documento de referencia — se conserva íntegro
Este es el plan de implementación y testing sobre ZedBoard tal como se escribió, sin editar. Las páginas de Alcance, Plataforma, Implementación, Verificación y Portabilidad derivan de él y mandan sobre él cuando discrepan. Se conserva aquí para poder auditar de dónde sale cada decisión.
LAMULA DRx — Plan de implementación y testing sobre ZedBoard¶
Plataforma: Digilent ZedBoard (Xilinx XC7Z020-CLG484-1) Rol: plataforma de desarrollo primaria mientras no exista hardware ZU9 + FMC213 Horizonte propuesto: 28 semanas (Z0–Z5), en paralelo al plan original de 34 semanas Fecha: 30 de agosto de 2026
0. Supuestos y advertencia de entorno¶
Este plan se escribe sin acceso a tu repositorio, a tu instalación de Vivado ni a la placa. Todo número de recursos, de temporización o de ancho de banda que aparece marcado como estimación es una inferencia mía a partir de las hojas de datos y debe verificarse en banco antes de comprometerse a él.
Supuestos que asumo y que hay que confirmar:
| # | Supuesto | Cómo verificarlo |
|---|---|---|
| A1 | ZedBoard rev. D o posterior, XC7Z020-CLG484-1, 512 MB DDR3 | Serigrafía de la placa |
| A2 | Vivado/Vitis con licencia para DDS/CIC/FIR Compiler y AXI DMA | report_ip_status sobre un proyecto de prueba |
| A3 | El proyecto DSP aún no ha congelado el contrato DRx↔DSP | Preguntar al equipo DSP |
| A4 | El RTL custom se puede escribir en SystemVerilog (no hay mandato VHDL) | Decisión de equipo — ver §6.1 |
| A5 | La placa/MCU auxiliar para SSI tiene al menos un periférico SPI esclavo o PIO a ≥2 MHz | Hoja de datos del MCU |
| A6 | Hay acceso a un osciloscopio de ≥100 MHz para medir jitter de trigger | Inventario de laboratorio |
Fact vs. inferencia: los límites de la ZedBoard (§1) son hechos verificables en la documentación del dispositivo. El plan de fases, los presupuestos de recursos y la estimación de cobertura son inferencias mías.
1. Frontera dura: lo que la ZedBoard no puede cubrir¶
El XC7Z020 en empaquetado CLG484 no expone transceptores gigabit. Sin MGTs no hay JESD204B en ninguna forma: ni PHY, ni establecimiento de link, ni alineación de lanes, ni SYSREF, ni latencia determinista, ni sincronización multi-dispositivo. Adicionalmente el conector FMC de la ZedBoard es LPC y la VadaTech FMC213 requiere HPC con lanes de transceptor, de modo que la mezzanine tampoco es acoplable físicamente.
La consecuencia hay que decirla sin adornos: el riesgo #1 de tu registro original — bring-up de JESD204B y clocking — recibe cero mitigación con esta placa, y seguirá sin retirarse durante todo el tiempo que la ZU9 no exista. Ese riesgo no se reduce con trabajo de software; es hardware-bound. Todo lo demás que sigue en este documento es real y valioso, pero no compra ni un punto porcentual de ese riesgo concreto.
Tampoco quedan cubiertos: la tasa de 250 MSPS, el IF analógico real de 60 MHz, el DAC AD9129, el loopback DAC→ADC como oráculo de a bordo, y la capa física RS-422 de los encoders.
2. Cobertura alcanzable¶
Del §4.4 del plan original (13 componentes), la ZedBoard permite construir y validar 10 completos y 2 parciales. Estimación: ~70 % de las líneas del WBS, con la salvedad de que el 30 % excluido contiene el elemento de mayor riesgo.
| Componente (§4.4 original) | Cobertura | Sustituto en ZedBoard |
|---|---|---|
| Clocking & SYSREF | Ninguna | — |
| JESD204B RX | Ninguna | Reproductor de vectores desde DDR/BRAM |
| Cadena DDC | Completa | Idéntica; solo cambia el reloj |
| Range Gating | Completa | Idéntica, tiempo dilatado |
| Motor de timing/trigger | Completa | Idéntica, tiempo dilatado |
| Lectores SSI | Alta (lógica sí, PHY no) | Emulador en fabric + MCU vía Pmod LVCMOS |
| Camino AXI DMA | Completa | Mismo IP, mismo flujo |
| Ray Assembler (PS) | Alta | FreeRTOS sobre A9 en lugar de R5 |
| Transporte DRx↔DSP | Completa | GEM0 + lwIP, 1GbE real |
| Control/Config Handler | Completa | Portable línea por línea |
| Camino DAC / Tx-reference | Parcial | Síntesis NCO sí; interfaz AD9129 no |
| Status & BITE | Completa | Con catálogo de fallos adaptado |
| Diagnósticos (captura raw) | Completa | Idéntica |
3. Las tres decisiones de arquitectura que hay que tomar antes de escribir RTL¶
3.1 Capa de abstracción de fuente de muestras (SSA)¶
Sin esto, el trabajo en ZedBoard es desechable. Con esto, es transferible.
Se define un único interfaz AXI4-Stream de muestras con backpressure:
sample_stream: TDATA[N*16-1:0] (N canales entrelazados o N streams paralelos)
TVALID / TREADY
TUSER = {channel_id, sample_valid_mask, source_tag}
TLAST = fin de ventana de captura
Del que existen dos implementaciones intercambiables:
jesd204b_source— solo en ZU9. IP Xilinx + GTH.vector_source— reproductor. Es la implementación que existe hoy y la que sobrevive en la placa real como inyector de vectores digitales.
Todo lo que está aguas abajo (DDC, gating, DMA, PS) se desarrolla y se valida contra la SSA, nunca contra la fuente concreta. Esto convierte la inyección de vectores digitales en ciudadano de primera clase en lugar de un hack de bring-up, lo cual también es correcto para la placa final.
3.2 Dilatación temporal uniforme mediante un único parámetro FS_HZ¶
El reloj de fabric objetivo en ZedBoard es 100 MHz (grado -1; 250 MHz no cierra con un datapath DSP no trivial).
La regla es: se dilata todo por igual, nunca solo una parte. Un solo genérico/paquete de parámetros define FS_HZ, y todos los divisores, anchos de contador, palabras de fase del NCO, factores de diezmado y valores de registro se derivan de él o se mantienen literalmente idénticos.
Preservando la frecuencia normalizada del IF (60/250 = 0,24):
| Parámetro | ZU9 (real) | ZedBoard | Relación |
|---|---|---|---|
| Reloj de fabric / fs | 250 MHz | 100 MHz | ÷2,5 |
| IF de entrada | 60 MHz | 24 MHz | ÷2,5 |
| IF normalizado | 0,24 | 0,24 | idéntico |
| Palabra de fase del NCO | X | X | idéntica |
| Factor de diezmado | R | R | idéntico |
| Coeficientes FIR | C[] | C[] | idénticos |
| Valor de registro de PRF | P | P | idéntico |
| PRF en tiempo de pared | 200–1200 Hz | 80–480 Hz | ÷2,5 |
| Ancho de pulso (registro) | 200 clk | 200 clk | idéntico |
| Ancho de pulso real | 0,8 µs | 2,0 µs | ×2,5 |
El resultado es que los testbenches, los vectores de estímulo y los valores esperados son bit a bit los mismos en ambas plataformas. La migración a la ZU9 consiste en cambiar FS_HZ y volver a cerrar timing.
Plan de contingencia: si el 7Z020-1 no cierra a 100 MHz con 4 canales, se baja a 62,5 MHz (dilatación 4×) o se reduce a 2 canales. Numéricamente sigue siendo idéntico.
Lo que la dilatación rompe: los ensayos de throughput ya no son representativos (§7.4). Hay que tratarlos como una campaña aparte.
3.3 Modelo dorado en Python como oráculo principal¶
La ZedBoard no tiene loopback DAC→ADC, que era el oráculo del plan original. El sustituto es mejor en precisión y peor en realismo: un modelo de referencia en NumPy de toda la cadena DDC (NCO → mixer → CIC → FIR → gating), bit-exacto en aritmética de punto fijo.
Sustitución de oráculos:
| Oráculo del plan original | Sustituto en ZedBoard | Qué se pierde |
|---|---|---|
| Loopback DAC→ADC | Modelo NumPy + inyección de vectores | Realismo analógico, ruido, no linealidades |
| IF real de 60 MHz | Vectores sintéticos con ruido, offset DC, clipping y desbalance I/Q inyectados a propósito | Comportamiento del frontal real |
| Encoders reales | Emulador SSI en fabric + MCU independiente | Capa física RS-422, dinámica de antena |
| DSP como par de red | Stub consumidor + simulador de señal del DSP | Semántica real de consumo |
4. Hallazgos técnicos del plan original que hay que resolver ahora¶
Estos son problemas del plan de la ZU9 que la ZedBoard permite descubrir y cerrar barato, antes de comprar hardware. Los marco como inferencia mía, pendientes de confirmación por los especialistas de dominio.
4.1 Los factores de diezmado no son enteros para 125 m / 250 m a 250 MSPS¶
A 250 MSPS, cada muestra cubre c/2 × 4 ns = 0,5996 m de rango.
- 125 m → 208,48 muestras → R = 208 da 124,71 m, R = 209 da 125,31 m
- 250 m → 416,95 muestras → R = 417 da 250,03 m
No existe un R entero que dé exactamente 125 m ni 250 m, y además R(250 m) ≠ 2 × R(125 m) si se busca el más cercano en cada caso (208 vs 417). Esto importa porque la arquitectura natural es una cadena CIC/FIR donde el modo de 250 m añade una etapa ÷2 sobre el de 125 m.
Recomendación: R₁ = 208, R₂ = 416 → celdas de 124,71 m y 249,41 m (error −0,24 %, unos 0,6 m en la celda grande). Esto mantiene R₂ = 2·R₁ y una sola cadena con etapa conmutable.
Consecuencia sobre el conteo de bins: 460 km / 249,41 m = 1844 bins (el plan dice 1840) y 460 km / 124,71 m = 3689 bins (el plan dice 3680). La diferencia proviene de asumir celdas exactas.
Decisión requerida de los especialistas: ¿el producto ORPG admite un error de celda del 0,24 %, o exige 125/250 m exactos? Si exige exactitud hay que ir a remuestreo fraccionario (Farrow) o a otra fs, y eso cambia el presupuesto de DSPs y la arquitectura. Es mucho más barato descubrirlo ahora en ZedBoard que en la ZU9.
4.2 El rango máximo y la PRF están acoplados, y el plan no lo dice¶
El rango no ambiguo es c / (2·PRF):
| PRF | Rango máximo no ambiguo |
|---|---|
| 200 Hz | 749,5 km |
| 326 Hz | 460 km ← límite para el modo de reflectividad |
| 651 Hz | 230 km |
| 999 Hz | 150 km |
| 1200 Hz | 124,9 km |
Es decir: 460 km @ 1200 Hz es físicamente imposible. El plan enumera "PRF 200–1200 Hz" y "alcance hasta 460 km" como si fueran independientes. No lo son.
Esto genera un requisito que no está en el plan original: el manejador de configuración debe validar y rechazar combinaciones ilegales de PRF × extensión de rango, y reportarlo por el plano de status/BITE. Es un caso de prueba de aceptación y una entrada en el contrato DRx↔DSP (código de error de configuración rechazada). Se implementa y se prueba entero en ZedBoard.
4.3 El presupuesto de 1GbE se confirma, pero solo bajo un supuesto¶
Con R = 208, 4 canales Rx, I/Q de 16+16 bits:
tasa por canal = 250e6 / 208 = 1,2019 MSPS complejas
bytes por canal = 1,2019e6 × 4 B = 4,81 MB/s
4 canales = 19,23 MB/s = 153,8 Mbps
+ overhead Ethernet (MTU 1500, ~2,8 %) ≈ 158 Mbps
Encaja con holgura 6× en 1GbE, y coincide con el «~20 MB/s» del plan. Pero ese número asume ciclo de trabajo del ~100 % en el gating, que es exactamente el peor caso cuando la PRF se lleva al límite del rango (§4.2). Así que 19,23 MB/s es el techo, no un promedio. El plan puede afirmarlo con confianza.
4.4 El plan no especifica la capa física de los encoders SSI¶
El §12 dice que «los dos encoders SSI son accesibles» pero nunca dice a través de qué. SSI en instrumentación industrial es habitualmente RS-422 diferencial, no LVCMOS. Si la portadora ZU9 no lleva transceptores RS-422, falta hardware. Hay que resolverlo antes de comprar.
5. Corrección al orden de prioridades¶
Ordenaste: DDC+gating → timing → SSI → camino de datos → CI. Acepto los cuatro primeros. El quinto está mal colocado, y hay una parte del cuarto que también.
CI y flujo Tcl no van los últimos: son precondición. El §7.2 de tu propio plan hace del modelo de entrega acelerado por agentes el argumento central de viabilidad para un equipo de tres personas. Ese modelo no funciona si el diseño vive en un proyecto GUI de Vivado: los agentes no pueden operar sobre él, las builds no son reproducibles y la regresión no existe. Cuesta unas dos semanas hacerlo bien al principio; cuesta un mes de reconstrucción hacerlo al final. Va en Z0.
El congelado del esquema DRx↔DSP tampoco va cuarto. Hay que separar dos cosas que el plan mezcla: definir el esquema (semana 1–2, coste bajo, dependencia externa alta) e implementar el transporte (más tarde, coste medio, dependencia nula). El esquema es un punto de sincronización entre proyectos; cuanto más tarde se congele, más caro es el rebote. Si el equipo DSP no está listo, se congela unilateralmente una v0.1 versionada y se negocia sobre algo concreto en lugar de sobre nada.
El resto de tu orden queda intacto.
6. Stack técnico en ZedBoard¶
6.1 Decisión de lenguaje y simulador (bloqueante para Z0)¶
El plan original dice «VHDL/Verilog» y «Verilator + cocotb». Verilator no soporta VHDL. Hay que elegir:
| Opción | Ventaja | Coste |
|---|---|---|
| SystemVerilog + Verilator + cocotb (recomendada) | Simulación gratis, rápida, sin licencia en el runner de CI | El equipo debe estar cómodo en SV |
| VHDL + GHDL + cocotb | Gratis, sin licencia | GHDL con cocotb vía VPI es más frágil; menos soporte |
| Cualquiera + Vivado xsim | Un solo toolchain | Requiere licencia en el runner de CI; lento |
Recomendación: SystemVerilog para el RTL custom, con Verilator para las unidades (motor de timing, SSI, gating, framing, reproductor de vectores) y xsim para la integración con IP de Xilinx, porque los cores del DDC son cajas negras que Verilator no puede elaborar. Dos niveles de simulación, dos herramientas, con un único runner cocotb por encima.
6.2 Reproductor de vectores: tres modos¶
El ancho de banda de DDR3 de la ZedBoard (32 bits @ 533 MT/s ≈ 2133 MB/s de pico, estimo ~1400 MB/s sostenidos) limita lo que se puede reproducir en tiempo real dilatado.
| Modo | Fuente | Canales | Tasa | Uso |
|---|---|---|---|---|
| RT | DDR vía MM2S DMA | 1–2 | 100 MSPS (≈200–400 MB/s) | Fidelidad temporal, señales largas |
| BRAM-loop | BRAM, forma de onda repetitiva | 4 | 100 MSPS | Ensayos de tasa sostenida y de timing |
| Throttled | DDR con backpressure AXIS | 4 | < tiempo real | Corrección funcional, bit-exacta |
BRAM disponible: 4,9 Mb ≈ 613 KB. A 16 bits × 4 canales → ~76 k muestras/canal → 766 µs de señal a 100 MSPS. Suficiente para varias PRIs a PRF alta.
El modo Throttled produce salida bit a bit idéntica al modo RT; solo tarda más. Es el modo de referencia para corrección.
6.3 Presupuesto de recursos (estimación, ±40 %)¶
Para 4 canales de DDC + gating + timing + SSI + DMA sobre XC7Z020:
| Bloque | DSP48 | LUT | BRAM36 |
|---|---|---|---|
| DDS ×4 (NCO 16 bit) | 8 | 1 200 | 4 |
| Mixer complejo ×4 | 16 | 800 | 0 |
| CIC ×8 (N=5, R=52) | 0 | 4 000 | 0 |
| FIR compensador + final (time-shared, 8 streams) | 10 | 2 500 | 4 |
| Range gating + framing | 0 | 2 000 | 4 |
| Reproductor de vectores + infra AXIS | 0 | 1 500 | 6 |
| AXI DMA SG + interconnect | 0 | 2 500 | 4 |
| Motor de timing | 0 | 800 | 0 |
| SSI ×2 + emulador | 0 | 600 | 0 |
| Total estimado | ~34 | ~16 000 | ~22 |
| Disponible en 7Z020 | 220 | 53 200 | 140 |
| Ocupación | 15 % | 30 % | 16 % |
Veredicto: cabe con holgura. Queda margen para 8 canales o para instrumentación en fabric. El cuello de botella no será área sino cierre de timing a 100 MHz en grado -1 y ancho de banda de DDR.
7. Plan de fases¶
Z0 — Substrato (semanas 1–2)¶
Objetivo: que exista un repositorio del que CI produzca un bitstream y un ejecutable de forma determinista, y un banco de simulación en verde. Nada de funcionalidad.
Trabajo:
- Estructura de repo: rtl/, ip/ (XCI versionados), tcl/, fw/, sim/, model/, contract/, docs/.
- Flujo Vivado no-project en Tcl: create_project -in_memory, read_verilog, read_xdc, create_ip/generate_target, synth_design, opt/place/route, write_bitstream. Cero clicks.
- Paquete de parámetros único con FS_HZ, IF_NORM, R1, R2, N_CH, anchos de bus. Fuente única de verdad.
- Runner cocotb con doble backend (Verilator + xsim).
- Modelo dorado NumPy de la cadena DDC, con aritmética de punto fijo bit-exacta y un generador de vectores.
- Congelado del esquema DRx↔DSP v0.1 con codegen para C (lado DRx) y para el lenguaje del DSP.
- Gates de CI: lint HDL, regresión de simulación, build de firmware, ensamblado de BOOT.BIN, tests de contrato.
- Decisión §6.1 tomada y documentada.
Hito Z0: CI verde sobre un diseño vacío. Un git push produce BOOT.BIN reproducible byte a byte.
Z1 — DDC + range gating (semanas 3–8) — tu prioridad 1¶
Trabajo:
- Interfaz SSA definido y vector_source implementado en sus tres modos (§6.2).
- Cadena DDC: DDS Compiler + mixer complejo + CIC Compiler (N=5, R=52) + FIR Compiler (compensador de droop CIC + diezmado final ÷4).
- Conmutación de modo 125/250 m mediante etapa ÷2 adicional.
- Escalado de ganancia y saturación con reporte de overflow.
- Range gating: ensamblado de bins hasta 3689 (125 m) / 1844 (250 m), ping-pong, TLAST por rayo.
- Mapa de registros AXI-Lite (congelado en este punto).
- Resolución del hallazgo §4.1 con los especialistas.
Hito ZM1 (fin S8): vector de IF conocido inyectado → I/Q diezmada en salida que coincide bit a bit con el modelo NumPy, en los cuatro canales y en ambos tamaños de celda. Equivalente en ZedBoard del M1 original, menos JESD y menos DMA.
Z2 — Motor de timing, triggers y PRF (semanas 9–13) — tu prioridad 2¶
Trabajo: - Generador de 4 triggers configurables con retardo y ancho independientes. - PRF programable en todo el rango (valores de registro idénticos a la ZU9). - Selección de ancho de pulso 0,8 / 1,66 / 3,3 µs (200 / 415 / 825 ciclos a 250 MHz). - Manejo de modos de pulso y encuadre por PRI. - Validador de configuración PRF × rango (§4.2) con código de error hacia el contrato. - Sincronización determinista trigger ↔ inicio de gating. - Instrumentación en fabric: contador libre en un dominio de reloj distinto para auto-medir jitter y periodo. - Salida de los 4 triggers a Pmod para medida con osciloscopio.
Hito ZM2 (fin S13): matriz completa PRF × ancho de pulso × modo × 4 triggers verde en simulación y en placa; jitter medido y caracterizado; combinaciones ilegales rechazadas con el código correcto.
Z3 — Lectores SSI + tagging az/el (semanas 14–18) — tu prioridad 3¶
Estrategia de tres capas, porque una sola no da confianza:
- Modelo cocotb del encoder (Gray, longitudes de palabra 13/25 bits, monoflop, timeout, errores de trama).
- Emulador SSI en fabric en la propia ZedBoard, cableado físicamente Pmod JA → Pmod JB. Valida I/O real, niveles y temporización.
- MCU externo como implementación independiente. Su valor no es la cobertura sino la independencia: detecta errores de interpretación compartida que un emulador escrito por la misma persona que el lector nunca detectaría.
Trabajo: - Lector SSI ×2 (azimut, elevación), reloj configurable 100 kHz–2 MHz, decodificación Gray, detección de timeout y de trama corta/larga. - Marcado temporal de la lectura y asociación al rayo correcto (esta es la parte sutil: la latencia de la lectura SSI frente al instante del trigger). - Perfiles de movimiento de antena en el MCU: rotación constante, aceleración, wrap de 360°, parada, glitch. - Entrada en el registro delta: capa física LVCMOS 3.3 V vs RS-422 (§4.4).
Hito ZM3 (fin S18): cada rayo llega etiquetado con az/el correctos y con error temporal acotado y medido, bajo los cinco perfiles de movimiento, contra dos emuladores independientes.
Z4 — Camino de datos, firmware y contrato (semanas 19–24) — tu prioridad 4¶
Trabajo: - AXI DMA scatter-gather S2MM → buffers circulares en DDR del PS. - FreeRTOS sobre Cortex-A9 (ver delta D4). Ensamblado de rayos: I/Q diezmada + metadatos (az/el, PRF, modo de pulso, ancho, contador de trigger, timestamps, mapeo de canales). - Framing DRx↔DSP contra el esquema congelado en Z0. - lwIP raw API sobre GEM0 (PHY Marvell 88E1518, RGMII). - Plano de control/config completo, incluyendo aplicación de constantes de calibración. - Actuación AFC: retune del NCO a partir de la estimación suministrada, verificado contra el modelo NumPy. - Encuadre por modo de barrido: Split Cut, Batch Cut, Doppler Cut. - Status y BITE con el catálogo de fallos adaptado (§8.4). - Captura raw ventaneada a DDR como diagnóstico.
Hito ZM4 (fin S24): rayos completos consumidos por un stub de DSP sobre 1GbE, con configuración íntegra desde el par remoto y lazo AFC cerrado. Equivalente en ZedBoard de M2 + M3.
Z5 — Endurecimiento y dossier de portabilidad (semanas 25–28)¶
Trabajo: - Campañas de inyección de fallos (§8.4) y soak de 72 h. - Campaña de throughput sintético (§7.4). - Cierre del registro delta de portabilidad (§9) con evidencia por entrada. - Dossier de migración: qué cambia exactamente al pasar a ZU9, fichero por fichero, con la lista de regeneraciones de IP. - BOOT.BIN + procedimiento de provisionado de placa limpia, probado desde cero. - Documentación.
Hito ZM5 (fin S28): todo lo construible sin JESD está construido, validado y documentado, y existe un plan de migración ejecutable.
7.4 La campaña de throughput es un ensayo aparte¶
Consecuencia incómoda de la dilatación: a 100 MHz la salida es 100e6/208 × 4 B × 4 ch = 7,69 MB/s = 61,5 Mbps, muy por debajo de los 154 Mbps reales. Los ensayos de throughput sobre el camino de fabric no son representativos.
Solución: desacoplarlos. Una campaña específica en la que el PS genera rayos sintéticos a la tasa real de 19,23 MB/s (y a 1,5× y 2× como margen) y los transmite por GEM/lwIP con el framing real. Eso valida lo que hay que validar — pila de red, framing, gestión de buffers, latencia — sin depender del fabric dilatado.
En paralelo, un ensayo de DMA S2MM con un generador de patrones en fabric a la tasa real, para caracterizar el camino AXI-HP → DDR independientemente del DDC.
8. Plan de testing¶
8.1 Niveles¶
| Nivel | Qué | Herramienta | Cuándo corre |
|---|---|---|---|
| L0 | Unidades RTL custom | cocotb + Verilator | Cada push |
| L1 | Integración con IP de Xilinx | cocotb + xsim | Cada push (nocturno si es lento) |
| L2 | Hardware-in-the-loop: vector → placa → comparación bit-exacta con NumPy | Runner sobre ZedBoard | Cada merge a main |
| L3 | Subsistema: matriz de timing, perfiles SSI, throughput | Scripts + osciloscopio | Por hito |
| L4 | Sistema: rayos end-to-end a stub de DSP | Banco completo | Por hito |
8.2 Suite de aceptación del DDC (autoría de los especialistas)¶
Cada caso se ejecuta en L0/L1 (simulación) y en L2 (placa), y ambos deben coincidir con el modelo NumPy bit a bit.
- Tono puro en el centro de banda: amplitud, fase y frecuencia de salida dentro de tolerancia.
- Barrido de tono a lo largo de toda la banda de Nyquist, incluyendo bordes y el punto de aliasing.
- Dos tonos: verificación de rechazo de imagen y de productos de intermodulación.
- Respuesta al impulso y respuesta escalón de la cadena completa.
- Verificación de la respuesta de banda de paso y de la atenuación de banda eliminada frente a la plantilla.
- Compensación de droop del CIC dentro de tolerancia.
- Comportamiento en saturación: entrada a fondo de escala, entrada sobre-escala, reporte de overflow.
- Robustez: offset DC, desbalance I/Q inyectado, ruido gaussiano a varios SNR.
- Conmutación 125 ↔ 250 m: continuidad y ausencia de artefactos en el rayo de transición.
- Retune del NCO en caliente (camino AFC): amplitud del transitorio y tiempo de asentamiento.
- Conteo de bins correcto en ambos modos y en todas las extensiones de rango.
8.3 Suite de timing¶
- Producto cartesiano: 4 triggers × 3 anchos de pulso × PRF {200, 326, 500, 651, 999, 1200} × modos de pulso.
- Jitter de trigger medido en fabric y con osciloscopio; ambos deben concordar.
- Estabilidad del periodo sobre 10⁶ PRIs.
- Alineación trigger ↔ primer bin de rango.
- Cambio de PRF en caliente: sin PRI corta ni larga espuria.
- Rechazo de combinaciones ilegales PRF × rango con el código de error correcto.
8.4 Catálogo de inyección de fallos (adaptado)¶
El original lista pérdida de link JESD, que aquí no existe. Sustitutos con la misma forma de fallo:
| Fallo del plan original | Sustituto en ZedBoard | Comportamiento esperado |
|---|---|---|
| Pérdida de link JESD204B | Underrun de la fuente de muestras (SSA) | BITE lo reporta, gating se detiene limpiamente, recuperación sin reset |
| Overrun de DMA | Idéntico: consumidor del PS ralentizado a propósito | Descarte contabilizado, sin corrupción, BITE |
| Glitch de encoder | Timeout SSI, trama corta, salto de Gray | Rayo marcado como az/el inválido, no descartado |
| Pérdida de reloj | Pérdida de lock de MMCM | BITE, parada segura |
| — | Pérdida de link Ethernet y reconexión | Reconexión sin reset de la placa |
| — | Configuración inválida desde el par remoto | Rechazo con código, estado anterior preservado |
8.5 Métrica de rigor¶
Ninguna prueba pasa por «se ve razonable». Toda salida del DDC se compara bit a bit con el modelo NumPy. Si hay discrepancia, o el RTL está mal o el modelo está mal; en ambos casos hay un bug real y hay que encontrarlo. Este es el beneficio concreto de sustituir el loopback analógico por un modelo dorado: el oráculo es exacto, no estadístico.
9. Registro delta de portabilidad (documento vivo desde Z0)¶
Análogo al «bench-vs-radar delta register» del plan original, pero para el salto ZedBoard → ZU9. Se actualiza en cada PR; nada se cierra sin una entrada aquí.
| # | Delta | Severidad | Compensación |
|---|---|---|---|
| D1 | JESD204B / GTH / SYSREF / latencia determinista / sync multi-dispositivo | Crítica | Ninguna posible. Requiere hardware con MGTs |
| D2 | Cierre de timing a 250 MHz vs 100 MHz | Alta | Diseño con margen; ejecutar reportes de timing con FS_HZ real en CI aunque no haya placa |
| D3 | Artix-7 vs UltraScale+: DSP48E1 vs E2, BRAM vs URAM, versiones de IP | Media | XCI versionados, regeneración guionizada, revisión de parámetros de IP en el dossier |
| D4 | R5 + TCM vs A9 + OCM: latencia de interrupción, arranque AMP, coherencia | Media | El PS no está en el camino del trigger (principio del plan original). Las latencias medidas en A9 no transfieren |
| D5 | AXI HP 64 bits vs 128 bits; sin CCI | Media | Parametrizar anchos de bus; no asumir ancho de banda |
| D6 | SSI: LVCMOS 3,3 V vs RS-422 diferencial | Media | Aislar la capa PHY tras un wrapper; confirmar transceptores en la portadora ZU9 |
| D7 | Drivers de salida de trigger, skew y jitter reales | Media | Caracterizar en ZedBoard como cota inferior; recaracterizar en ZU9 |
| D8 | Camino DAC AD9129 / referencia Tx | Media | Solo la síntesis NCO es portable; la interfaz del DAC es trabajo nuevo |
| D9 | Frontal analógico: ruido, offset, desbalance I/Q, nivel de IF, clipping | Alta | Inyectar estas degradaciones sintéticamente en los vectores desde Z1 |
| D10 | DDR 512 MB vs varios GB, y ancho de banda | Baja | Dimensionar buffers por parámetro, no por constante |
| D11 | Throughput no representativo por dilatación | Media | Campaña sintética separada (§7.4) |
10. Riesgos propios de esta estrategia¶
| Riesgo | L | I | Mitigación |
|---|---|---|---|
| El riesgo #1 (JESD) queda sin retirar por tiempo indefinido | Alta | Alta | Decisión de compra (§11). No hay mitigación técnica |
Deuda de portabilidad por relajar la disciplina de FS_HZ/SSA |
Media | Alta | Revisión de portabilidad obligatoria en cada PR; registro delta vivo; CI falla si aparece una constante de reloj hardcodeada |
| El contrato DRx↔DSP no se congela porque el proyecto DSP va a otro ritmo | Media | Alta | Congelar v0.1 unilateralmente y versionar; negociar sobre algo concreto |
| El 7Z020-1 no cierra a 100 MHz con 4 canales | Media | Baja | Bajar a 62,5 MHz o a 2 canales; numéricamente idéntico |
| Ancho de banda de DDR insuficiente para reproducción de 4 canales | Media | Baja | Modos BRAM-loop y Throttled ya lo cubren |
| El equipo confunde «validado en ZedBoard» con «validado» | Media | Alta | El registro delta se lee en cada demo de sprint; ningún hito se declara sin él |
11. Una observación sobre la compra de hardware¶
Como la ZU9 + FMC213 aún no está comprada, hay una ventana que probablemente no vuelva: la arquitectura de hardware todavía es una decisión abierta, no una restricción. Dos cosas que valdría la pena resolver antes de firmar:
Retirar el riesgo JESD barato y pronto. Una plataforma con MGTs y FMC HPC de segunda mano (ZC706 con XC7Z045, o ZCU104/ZCU102 en la familia UltraScale+) permite hacer el spike de JESD204B + clocking + SYSREF de la Fase 0 con un FMC de ADC modesto, muy por debajo del coste del hardware final. Descubrir a los seis meses que el árbol de clocking elegido no da latencia determinista es el escenario que arruina el mes 8. La ZedBoard, por buena que sea para todo lo demás, no compra ni un gramo de esta tranquilidad.
Confirmar los dos huecos del §4. El error de celda del 0,24 % (§4.1) y la capa física de los encoders (§4.4) son ambos cuestiones que afectan a qué hardware hay que comprar. Ninguna cuesta más de una tarde de análisis. Las dos cuestan mucho después.
12. Definición de terminado (semana 28)¶
El firmware LAMULA DRx, sobre una ZedBoard provisionada desde cero por un BOOT.BIN construido por CI de forma reproducible, reproduce vectores de IF conocidos a través de la capa de abstracción de fuente de muestras, los baja a banda base y los diezma en la PL a I/Q compleja enrejada en rango para ambos tamaños de celda con concordancia bit a bit contra el modelo dorado, genera los cuatro triggers a la PRF y anchos de pulso configurados con jitter caracterizado, rechaza las combinaciones ilegales de PRF y rango, lee dos encoders SSI contra dos emuladores independientes y etiqueta cada rayo con azimut y elevación con error temporal acotado, ensambla los rayos bajo FreeRTOS y los transmite a un consumidor de DSP sobre GEM 1GbE conforme al esquema DRx↔DSP congelado, aplica la corrección AFC suministrada, encuadra los tres modos de barrido, reporta status y BITE bajo todas las inyecciones de fallo del catálogo, sostiene la tasa real de 19,23 MB/s en la campaña sintética de throughput, y sobrevive 72 horas de soak.
Y, explícitamente, no valida: el enlace JESD204B, el árbol de clocking y SYSREF, la sincronización multi-dispositivo, la tasa de 250 MSPS, el frontal analógico real, la interfaz del DAC AD9129 ni la capa física RS-422. Esos siete elementos siguen abiertos y son el contenido del trabajo sobre la ZU9.