Diseño de la PL (Block Design, IPs y Conexiones)¶
La Lógica Programable (PL) alberga la cadena completa de procesamiento digital de señales (DSP) del radar y la infraestructura de aceleración de transferencia de datos. Esta página describe la organización del Block Design generado por script, la jerarquía de código SystemVerilog en rtl/, y las restricciones físicas de pines.
Diagrama del Block Design de la PL¶
El Block Design drx_zynq_bd (generado automáticamente mediante tcl/gen_zynq_bd.tcl) encapsula el bloque del procesador PS7 y las IP de interconexión AXI de Xilinx. El datapath propio de radar vive en rtl/drx_top.sv, instanciado junto al wrapper del BD dentro de rtl/drx_zynq_top.sv.
flowchart TB
subgraph ZYNQ_TOP["rtl/drx_zynq_top.sv (Top Level)"]
direction TB
subgraph BD["drx_zynq_bd (Vivado Block Design)"]
PS7["processing_system7:5.5<br/>(PS7 Core)"]
IC_GP0["axi_interconnect:2.1<br/>(GP0 1x2)"]
PC_REGS["axi_protocol_converter<br/>(AXI4 -> AXI4-Lite)"]
PC_DMA["axi_protocol_converter<br/>(AXI4 -> AXI4-Lite)"]
DMA["axi_dma:7.1<br/>(AXI DMA S2MM SG)"]
IC_HP0["axi_interconnect:2.1<br/>(HP0 2x1)"]
RST["proc_sys_reset:5.0"]
end
subgraph DRX_TOP["rtl/drx_top.sv (Datapath Radar)"]
AXIL["drx_axil_regs v11<br/>(Mapa Registros AXI-Lite)"]
STIM["vector_source<br/>(BRAM Estímulo v11)"]
DDC["drx_ddc_quad_top<br/>(Cadena DDC x3 Ch)"]
GATE["drx_range_gate_quad_top<br/>(Range Gate x3 Ch)"]
PACKER["drx_ray_packer<br/>(Empaquetador de Rayos)"]
TIMING["drx_timing_engine<br/>(Motor PRF & Triggers)"]
end
end
%% BD Connections
PS7 -- "M_AXI_GP0" --> IC_GP0
IC_GP0 -- "M00_AXI" --> PC_REGS
IC_GP0 -- "M01_AXI" --> PC_DMA
PC_DMA -- "S_AXI_LITE" --> DMA
DMA -- "M_AXI_SG" --> IC_HP0
DMA -- "M_AXI_S2MM" --> IC_HP0
IC_HP0 -- "S_AXI_HP0" --> PS7
DMA -- "s2mm_introut" --> PS7
%% BD to Datapath
PC_REGS -- "m_axi_regs (AXI-Lite)" --> AXIL
PACKER -- "m_ray_* (AXI4-Stream)" --> DMA
%% Datapath Internal
AXIL -- "NCO_PINC" --> DDC
AXIL -- "VEC_ADDR/DATA/LEN" --> STIM
AXIL -- "Timing Cfg" --> TIMING
TIMING -- "pulse_trig / ray_start" --> GATE
STIM -- "m_axis_samp" --> DDC
DDC -- "m_axis_iq" --> GATE
GATE -- "m_axis_gate" --> PACKER
%% External Pins
TIMING -- "trig_out[3:0]" --> PMOD["Pmod JA Pins (JA1..JA4)"]
PS7 -- "MIO / DDR" --> EXT_MEM["DDR3 / Ethernet PHY / UART"]
Explicación del flujo en el Block Design¶
- Ruta de Control (PS7 → AXI GP0):
- El puerto
M_AXI_GP0del PS7 se conecta a unaxi_interconnectcon dos salidas maestras. - La salida
M00_AXIse convierte a AXI4-Lite medianteaxi_protocol_convertery sale del BD como la interfazm_axi_regshacia el módulodrx_axil_regsdentro dedrx_top.sv. -
La salida
M01_AXIse convierte a AXI4-Lite y alimenta el puertoS_AXI_LITEdel coreaxi_dma. -
Ruta de Datos de Rayos (PL → PS7 AXI HP0):
drx_ray_packeremite un AXI4-Stream de 32 bits de ancho (pareja I/Q de 16 bits) con señalTLASTmarcando el final del rayo.- La interfaz ingresa al puerto
S_AXIS_S2MMdel AXI DMA. -
El AXI DMA realiza transferencias Scatter-Gather hacia la memoria DDR3 mediante el puerto
S_AXI_HP0a través deaxi_ic_hp. -
Manejo del Ancho de Descriptor DMA (
c_sg_length_width = 23): - En
tcl/gen_zynq_bd.tcl, el parámetroc_sg_length_widthse fijó en 23 bits (8 MiB - 1). Un rayo completo en modo fino (3689 bins × 3 canales × 4 B + 16 B cabecera = 44,284 B) supera el límite de 16 KB por defecto. Con 23 bits, un rayo entero cabe en un solo descriptor de memoria, simplificando el procesamiento en firmware.
Módulos HDL en rtl/¶
El datapath en rtl/drx_top.sv incluye las siguientes IP:
| Módulo SystemVerilog | Función Principal | Archivo Fuente |
|---|---|---|
vector_source.sv |
Generador de estímulo con BRAM de 8192 muestras por canal, cargables vía AXI-Lite en tiempo de ejecución (mapa v11). | rtl/vector_source.sv |
drx_ddc_quad_top.sv |
Instancia N_CH canales de la cadena DDC (NCO, mezclador, decimador CIC, filtros FIR halfband y módulos de saturación/redondeo). |
rtl/drx_ddc_quad_top.sv |
drx_range_gate_quad_top.sv |
Agrupación de celdas de distancia (range gating) usando memorias BRAM en configuración ping-pong. | rtl/drx_range_gate_quad_top.sv |
drx_ray_packer.sv |
Formatea el rayo agregando una cabecera en banda de 4 palabras (0x52415931 magic, trig_count, ray_index, banderas) y genera la señal TLAST. |
rtl/drx_ray_packer.sv |
drx_timing_engine.sv |
Generador de base de tiempos radar (motor de PRF, secuenciador de lotes de 2 PRF, y 4 salidas de disparo ajustables en retardo y ancho). | rtl/drx_timing_engine.sv |
drx_axil_regs.sv |
Banco de registros AXI-Lite v11 que expone el control y estado de todo el sistema hacia el procesador. | rtl/drx_axil_regs.sv |
Relojes y Restricciones de Pines (XDC)¶
Relojes del Sistema¶
FCLK0(62.5 MHz): Generado por la PLL del PS7, actúa como reloj principal de todo el fabric de la PL. Las restricciones de tiempo entcl/xdc/zedboard_zynq.xdcderivan automáticamente del modelo del PS7.
Pines de E/S Físicos de la ZedBoard¶
El archivo tcl/xdc/zedboard_zynq.xdc asigna los pines del puerto Pmod JA para monitoreo externo con osciloscopio o analizador lógico:
| Señal RTL | Pin Físico ZedBoard | Ubicación / Puerto | Descripción |
|---|---|---|---|
led_heartbeat |
T22 |
LED LD0 |
Destello de presencia de reloj y vida de la PL. |
debug_probe |
Y11 |
Pmod JA - Pin 1 | Sonda de depuración combinacional. |
trig_out[0] |
AA11 |
Pmod JA - Pin 2 | Disparo de transmisión radar (Pulse Trig). |
trig_out[1] |
Y10 |
Pmod JA - Pin 3 | Disparo auxiliar 1. |
trig_out[2] |
AA9 |
Pmod JA - Pin 4 | Disparo auxiliar 2. |
trig_out[3] |
AB11 |
Pmod JA - Pin 7 | Disparo auxiliar 3. |
Pines MIO dedicados del PS7
Los pines de Ethernet (RGMII/MDIO), DDR3 y UART no requieren asignaciones en el archivo .xdc. Xilinx Vivado los rutea automáticamente mediante el bonding físico del integrado Zynq-7000 según el preset aplicado en tcl/gen_zynq_bd.tcl.