axis_xgmii_rx_64

File: axis_xgmii_rx_64_code

Diagram

DATA_WIDTH KEEP_WIDTH CTRL_WIDTH PTP_TS_ENABLE PTP_TS_FMT_TOD PTP_TS_WIDTH USER_WIDTH wire clk wire rst wire [DATA_WIDTH-1:0] xgmii_rxd wire [CTRL_WIDTH-1:0] xgmii_rxc wire [PTP_TS_WIDTH-1:0] ptp_ts wire cfg_rx_enable wire [DATA_WIDTH-1:0] m_axis_tdata wire [KEEP_WIDTH-1:0] m_axis_tkeep wire m_axis_tvalid wire m_axis_tlast wire [USER_WIDTH-1:0] m_axis_tuser wire [1:0] start_packet wire error_bad_frame wire error_bad_fcs

Hierarchical structure

axis_xgmii_rx_compuesto.png

Description

Modulo que convierte interfaz XGMII a AXI.
Verifica el estado en el que se encuentra. En caso de que sea IDLE, verifica si está el receptor habilitado (rx_enable), y si se está en el inicio de paquete, si es así, define el estado siguiente como PAYLOAD.
Cuando el estado es PAYLOAD, transfiere los datos XGMII a AXI, además, desactiva a flag de tlast, y verifica los errores de framing; en caso de que se presenten, activa la flag de bad_frame y bad_fcs, reinicia el CRC y coloca el siguiente estado como IDLE; en caso de que no se presenten y este activa la flag de caracter de finalización, verifica la validez del CRC. Si este es válido define el próximo estado como LAST, en caso de que no lo sea, define el próximo estado como IDLE. Si no está presente el bit de finalización, el siguiente estado es PAYLOAD.
Cuando el estado es LAST, verifica la validez del CRC, si este no es válido, activa las flags de bad_frame y bad_fcs, si es válido, verifica si el siguiente dato corresponde al inicio de un paquete, en cuyo caso, define el estado siguiente como PAYLOAD, y en caso contrario lo define como IDLE.
Por otra parte, verifica si hay o no un intercambio de carriles y en base a eso busca el caracter de finalización, cuando lo encuentra, coloca el bit como uno.
Además, realiza una búsqueda del carácter de inicio, cuando lo encuentra señala si deben o no invertirse los lanes, y activa la flag de caracter de inicio encontrado.

Generics

Generic name Type Value Description
DATA_WIDTH 64 Parametro que define el tamaño de los datos
KEEP_WIDTH (DATA_WIDTH/8) Cantidad de bytes de datos que deben ser validos
CTRL_WIDTH (DATA_WIDTH/8) Cantidad de bits de control
PTP_TS_ENABLE 0 Flag para habilitar protocolo PTP
PTP_TS_FMT_TOD 1 Flag para cambiar el formato de la marca de tiempo según "Time of day"
PTP_TS_WIDTH PTP_TS_FMT_TOD ? 96 : 64 Parametro del ancho de la marca del tiempo
USER_WIDTH (PTP_TS_ENABLE ? PTP_TS_WIDTH : 0) + 1 Parametro que define el ancho de los datos de usuario

Ports

Port name Direction Type Description
clk input wire Señal de clock
rst input wire Señal de reset
xgmii_rxd input wire [DATA_WIDTH-1:0] Entrada de datos de interfaz XGMII
xgmii_rxc input wire [CTRL_WIDTH-1:0] Entrada de control de interfaz XGMII
m_axis_tdata output wire [DATA_WIDTH-1:0] Salida de datos de la interfaz AXI
m_axis_tkeep output wire [KEEP_WIDTH-1:0] Salida de bits válidos de la interfaz AXI
m_axis_tvalid output wire Señal de datos válidos de la interfaz AXI
m_axis_tlast output wire Señal de fin de trama de la interfaz AXI
m_axis_tuser output wire [USER_WIDTH-1:0] Salida de datos de usuario de la interfaz AXI
ptp_ts input wire [PTP_TS_WIDTH-1:0] Entrada de marca de tiempo PTP
cfg_rx_enable input wire Señal de configuración para habilitar recepción
start_packet output wire [1:0] Estado indicando inicio de paquete
error_bad_frame output wire Señal de error para trama incorrecta
error_bad_fcs output wire Señal de error para FCS incorrecto

Signals

Name Type Description
state_reg = STATE_IDLE reg [1:0] Registro de estado actual y siguiente
state_next reg [1:0] Registro de estado actual y siguiente
reset_crc reg Señal para resetear el cálculo de CRC
lanes_swapped = 1'b0 reg Flag que indica de si los lanes están intercambiados
swap_rxd = 32'd0 reg [31:0] Registro para el intercambio de datos RXD
swap_rxc = 4'd0 reg [3:0] Registro para el intercambio de control RXC
swap_rxc_term = 4'd0 reg [3:0] Registro para el intercambio de control RXC para término de trama
xgmii_rxd_masked = {DATA_WIDTH{1'b0}} reg [DATA_WIDTH-1:0] Datos XGMIIcon máscara de bits
xgmii_term = {CTRL_WIDTH{1'b0}} reg [CTRL_WIDTH-1:0] Control XGMII para el final de trama
term_lane_reg = 0 reg [2:0] Registro para el lane del final y el lane del final del ciclo anterior
term_lane_d0_reg = 0 reg [2:0] Registro para el lane del final y el lane del final del ciclo anterior
term_present_reg = 1'b0 reg Registro para indicar la presencia del final de trama
framing_error_reg = 1'b0 reg Registro para indicar error de frame
framing_error_d0_reg = 1'b0 reg Registro para indicar error de frame
xgmii_rxd_d0 = {DATA_WIDTH{1'b0}} reg [DATA_WIDTH-1:0] Registro de datos XGMII del ciclo anterior
xgmii_rxd_d1 = {DATA_WIDTH{1'b0}} reg [DATA_WIDTH-1:0] Registro de datos XGMII del ciclo anterior (1 ciclo atrás)
xgmii_rxc_d0 = {CTRL_WIDTH{1'b0}} reg [CTRL_WIDTH-1:0] Registro de control XGMII del ciclo anterior
xgmii_start_swap = 1'b0 reg Flag para indicar inicio de trama con swap
xgmii_start_d0 = 1'b0 reg Flag para indicar inicio de trama en el ciclo anterior
xgmii_start_d1 = 1'b0 reg Flag para indicar inicio de trama en el ciclo anterior (1 ciclo atrás)
m_axis_tdata_reg = {DATA_WIDTH{1'b0}} reg [DATA_WIDTH-1:0] Registro de datos de salida AXI
m_axis_tdata_next reg [DATA_WIDTH-1:0] Registro de datos de salida AXI
m_axis_tkeep_reg = {KEEP_WIDTH{1'b0}} reg [KEEP_WIDTH-1:0] Registro de bits válidos de salida AXI
m_axis_tkeep_next reg [KEEP_WIDTH-1:0] Registro de bits válidos de salida AXI
m_axis_tvalid_reg = 1'b0 reg Registro de señal de datos válidos de salida AXI
m_axis_tvalid_next reg Registro de señal de datos válidos de salida AXI
m_axis_tlast_reg = 1'b0 reg Registro de señal de fin de trama de salida AXI
m_axis_tlast_next reg Registro de señal de fin de trama de salida AXI
m_axis_tuser_reg = {USER_WIDTH{1'b0}} reg [USER_WIDTH-1:0] Registro de datos de usuario de salida AXI
m_axis_tuser_next reg [USER_WIDTH-1:0] Registro de datos de usuario de salida AXI
start_packet_reg = 2'b00 reg [1:0] Registro de estado indicando inicio de paquete
error_bad_frame_reg = 1'b0 reg Registro de señal de error para trama incorrecta
error_bad_frame_next reg Registro de señal de error para trama incorrecta
error_bad_fcs_reg = 1'b0 reg Registro de señal de error para FCS incorrecto
error_bad_fcs_next reg Registro de señal de error para FCS incorrecto
ptp_ts_reg = 0 reg [PTP_TS_WIDTH-1:0] Registro de marca de tiempo PTP
ptp_ts_adj_reg = 0 reg [PTP_TS_WIDTH-1:0] Registro de marca de tiempo PTP ajustada
ptp_ts_borrow_reg = 0 reg Registro de deuda de marca de tiempo PTP
crc_state = 32'hFFFFFFFF reg [31:0] Estado del CRC
crc_next wire [31:0] Próximo estado del CRC
crc_valid wire [7:0] Señales de validación del CRC
crc_valid_save reg [7:0] Registro de señales de validación del CRC
last_ts_reg = 0 reg [4+16-1:0] Registro para el último timestamp
ts_inc_reg = 0 reg [4+16-1:0] Registro para el incremento del timestamp
j integer
i integer

Constants

Name Type Value Description
ETH_PRE 8'h55 Preambulo de Ethernet
ETH_SFD 8'hD5 Delimitador de inicio de paquete
XGMII_IDLE 8'h07 Estado de Idle en la interfaz XGMII
XGMII_START 8'hfb Inicio de trama en la interfaz XGMII
XGMII_TERM 8'hfd Fin de trama en la interfaz XGMII
XGMII_ERROR 8'hfe Error en la interfaz XGMII
STATE_IDLE 2'd0 Estado IDLE
STATE_PAYLOAD 2'd1 Estado PAYLOAD
STATE_LAST 2'd2 Estado LAST

Processes

Instantiations

State machines

state transitionscluster_state_nextstate_nextSTATE_IDLESTATE_IDLESTATE_IDLE->STATE_IDLEnot (xgmii_start_d1 && cfg_rx_enable)   STATE_PAYLOADSTATE_PAYLOADSTATE_IDLE->STATE_PAYLOADxgmii_start_d1 && cfg_rx_enable   STATE_PAYLOAD->STATE_IDLEframing_error_reg || framing_error_d0_reg   STATE_PAYLOAD->STATE_IDLEterm_lane_reg <= 4   term_present_reg   STATE_PAYLOAD->STATE_PAYLOADnot (framing_error_reg || framing_error_d0_reg)   not (term_present_reg)   STATE_LASTSTATE_LASTSTATE_PAYLOAD->STATE_LASTnot (term_lane_reg <= 4)   term_present_reg   STATE_LAST->STATE_IDLEnot (xgmii_start_d1 && cfg_rx_enable)   STATE_LAST->STATE_PAYLOADxgmii_start_d1 && cfg_rx_enable