IP Core: drx_timing_engine (Motor de Timing y Generador de Triggers)¶
1. Resumen¶
La IP drx_timing_engine es el corazón de sincronismo, temporización y generación de pulsos de disparo del radar. Es el responsable de orquestar el tiempo real duro en la lógica programable (PL) sin intervención del procesador durante el barrido de un radial.
Integra tres submódulos principales:
1. drx_prf_batch_seq: Secuenciador de lotes PRF duales (lote bajo y lote alto para entrelazado de frecuencia de repetición de pulso en patrones VCP de radar weather).
2. drx_trigger_gen: Generador de hasta \(N_{TRIGGERS} = 4\) salidas de disparo independientes con retardo y ancho totalmente programables en ciclos de reloj.
3. drx_timing_config_valid (D-09): Unidad de verificación de consistencia en hardware que valida que los parámetros de disparo no violen las limitaciones físicas (ancho de pulso, cabida dentro del PRI, piso de rango no ambiguo y techo de memoria de bins).
2. Características Principales¶
- Secuenciador PRF Dual (D-13): Conmutación automática o programada entre un lote bajo (
prf_div_low,pulse_width_low,n_pulses_low) y un lote alto (prf_div_high,pulse_width_high,n_pulses_high). - Sincronización Transmisor/Receptor: Emisión del pulso
pulse_trigpara iniciar la captura de cada rayo endrx_range_gatey control de compuerta de transmisióntx_gate. - 4 Salidas de Trigger Independientes: Módulos de temporización
trig_out[0..3]armados secuencialmente tras cadapulse_trigcon contadores dedicados de retardo y ancho. - Validación Automática en Hardware (D-09 & D-15): Detección instantánea de configuraciones inválidas. Congela la ejecución y activa banderas de estado
config_invalid_low/config_invalid_highsi: - El ancho de pulso supera el PRI.
- El valor de
prf_divviola el piso de rango no ambiguo del lote. - El conteo de bins
bin_countexcede la capacidad física de la BRAM (BINS_MODE_FINE).
3. Diagrama de Bloques Interno¶
graph TD
subgraph Inputs ["Configuración AXI-Lite (drx_axil_regs)"]
ENABLE["enable (TIMING_CTRL)"]
LOW_CFG["prf_div_low, pulse_width_low, n_pulses_low, bins_low"]
HIGH_CFG["prf_div_high, pulse_width_high, n_pulses_high, bins_high"]
TRIG_CFG["trig_delay[0..3], trig_width[0..3]"]
end
subgraph Config_Checkers ["Verificación de Parámetros (D-09/D-15)"]
CHK_LOW["drx_timing_config_valid (Lote Bajo)"]
CHK_HIGH["drx_timing_config_valid (Lote Alto)"]
end
subgraph Gate_Enable ["Gating de Habilitación"]
AND_GATE["AND Gate<br/>(enable && valid_low && valid_high)"]
end
subgraph Batch_Sequencer ["Secuenciador PRF Dual (drx_prf_batch_seq)"]
SEQ_FSM["FSM de Radial & Lotes PRF"]
PRI_CNT["Contador de PRI (prf_cnt)"]
PULSE_CNT["Contador de Pulsos (pulse_cnt)"]
end
subgraph Trigger_Generator ["Generador de Triggers (drx_trigger_gen)"]
TRIG_MODULES["4x Generadores de Disparo Independientes"]
end
subgraph Outputs ["Salidas a Planta y Registros"]
PULSE_TRIG["pulse_trig (hacia Range Gate & Ray Packer)"]
BATCH_SEL["batch_sel (Lote Activo: 0=Low, 1=High)"]
BIN_COUNT["bin_count (Bins del Lote Activo)"]
TX_GATE["tx_gate (Compuerta Transmisión)"]
RADIAL_DONE["radial_done (Fin de Radial)"]
TRIG_OUT["trig_out[0..3] (Pines de Disparo / Osciloscopio)"]
INV_LOW["config_invalid_low"]
INV_HIGH["config_invalid_high"]
end
LOW_CFG --> CHK_LOW
HIGH_CFG --> CHK_HIGH
CHK_LOW -->|valid_low| AND_GATE
CHK_HIGH -->|valid_high| AND_GATE
CHK_LOW -->|~valid_low| INV_LOW
CHK_HIGH -->|~valid_high| INV_HIGH
ENABLE --> AND_GATE
AND_GATE -->|enable_gated| SEQ_FSM
LOW_CFG & HIGH_CFG --> SEQ_FSM
TRIG_CFG --> TRIG_MODULES
SEQ_FSM --> PRI_CNT
PRI_CNT --> PULSE_CNT
SEQ_FSM --> PULSE_TRIG
SEQ_FSM --> BATCH_SEL
SEQ_FSM --> BIN_COUNT
SEQ_FSM --> TX_GATE
SEQ_FSM --> RADIAL_DONE
PULSE_TRIG -->|arm| TRIG_MODULES
TRIG_MODULES --> TRIG_OUT
4. Descripción de Interfaces y Señales¶
4.1. Entradas de Configuración y Control¶
| Nombre de Puerto | Dirección | Ancho (bits) | Protocolo | Descripción |
|---|---|---|---|---|
clk |
Entrada | 1 | Clock | Reloj del sistema (FS_HZ). |
rst_n |
Entrada | 1 | Reset | Reset asíncrono activo en bajo. |
enable |
Entrada | 1 | Control | Habilitación principal del motor de timing (TIMING_CTRL.bit0). |
prf_div_low / high |
Entrada | 32 | Valor Entero | Divisor del PRI en ciclos de reloj (\(PRI = \text{prf\_div} / F_s\)) para lotes Bajo y Alto. |
pulse_width_low / high |
Entrada | 16 | Valor Entero | Ancho de la compuerta de transmisión tx_gate en ciclos de reloj. |
n_pulses_low / high |
Entrada | 16 | Valor Entero | Cantidad de pulsos/disparos a emitir en el lote correspondiente antes de conmutar. |
bins_low / high |
Entrada | 32 | Valor Entero | Cantidad de celdas/bins de rango a procesar en el rayo del lote activo (D-15). |
trig_delay[4] |
Entrada | \(4 \times 32\) | Valor Entero | Retardo de activación del trigger \(i\) en ciclos de reloj tras pulse_trig. |
trig_width[4] |
Entrada | \(4 \times 32\) | Valor Entero | Ancho de pulso activo en alto del trigger \(i\) en ciclos de reloj. |
4.2. Salidas de Sincronismo y Estado¶
| Nombre de Puerto | Dirección | Ancho (bits) | Protocolo | Descripción |
|---|---|---|---|---|
pulse_trig |
Salida | 1 | Pulso (1 ciclo) | Disparo principal de inicio de pulso PRF. Inicia la captura del rayo en drx_range_gate. |
batch_sel |
Salida | 1 | Nivel | Lote activo: 0 = Lote Bajo, 1 = Lote Alto. |
pulse_width |
Salida | 16 | Nivel | Ancho de pulso del lote actualmente activo. |
bin_count |
Salida | 32 | Nivel | Conteo de bins de rango del lote actualmente activo. |
tx_gate |
Salida | 1 | Nivel | Señal de habilitación de transmisión/amplificador RF. |
radial_done |
Salida | 1 | Pulso (1 ciclo) | Indica la finalización completa de la secuencia de lotes del radial. |
config_invalid_low / high |
Salida | 1 | Nivel Sticky | Banderas de error de configuración en lotes Bajo/Alto (D-09). |
trig_out[4] |
Salida | 4 | Pulsos | Líneas físicas de disparo para instrumentación u osciloscopio. |
5. Parámetros de Configuración (Generics)¶
| Parámetro | Tipo | Valor por Defecto | Descripción |
|---|---|---|---|
PrfDivBits |
integer |
32 |
Ancho de bits para el contador de divisor de PRF. |
PulseWidthBits |
integer |
16 |
Ancho de bits para el contador de ancho de pulso. |
NPulsesBits |
integer |
16 |
Ancho de bits para el número de pulsos por lote. |
BinsBits |
integer |
32 |
Ancho de bits para la cantidad de bins de rango. |
NTriggers |
integer |
4 |
Número de canales de trigger independientes. |
PrfDivMinRangeLow |
integer |
PRF_DIV_MIN_LOW (460 km) |
Piso mínimo de PRI en ciclos para el lote bajo. |
PrfDivMinRangeHigh |
integer |
PRF_DIV_MIN_HIGH (115 km) |
Piso mínimo de PRI en ciclos para el lote alto. |
BinsMaxLow / High |
logic [31:0] |
BINS_MODE_FINE |
Techo máximo de bins permitido por la capacidad física de la BRAM. |
6. Secuencia Operativa y Verificación (D-09 / D-13)¶
6.1. Diagrama de Tiempos del Radial¶
gantt
title Secuencia de Lotes PRF y Triggers de Radar (drx_timing_engine)
dateFormat X
axisFormat %s
section Pulso PRF
pulse_trig :active, p1, 0, 1
pulse_trig :active, p2, 10, 11
section Compuerta TX
tx_gate :crit, tx1, 0, 3
tx_gate :crit, tx2, 10, 13
section Triggers
trig_out[0] (Delay 1, Width 2) :done, t0, 1, 3
trig_out[1] (Delay 4, Width 3) :done, t1, 4, 7
section Conmutación Lote
batch_sel (0=Low, 1=High) :0, 0, 10
batch_sel (High Batch) :1, 10, 20
6.2. Reglas de Validación Autocontenida (D-09 / D-15)¶
El bloque drx_timing_config_valid evalúa en lógica combinacional pura la siguiente ecuación de validez:
Si cualquiera de las condiciones falla, la señal enable_gated se fuerza a 0, congelando la FSM del secuenciador en un estado seguro con tx_gate = 0 y notificando el fallo al mapa de registros AXI-Lite.