mac_ctrl_rx
- File: mac_ctrl_rx_code
Diagram
Description
Bloque que se encarga de controlar la recepción MAC.
- La información de la interfaz AXI pasa sin ser modificada excepto los datos.
Interfaz MCF (MAC Control Frame) - Valid: cuando se está en el último bit del paquete, se activa la flag
- Se crea un registro valid temporal, para que, en caso de que la salida no se encuentre lista, se coloque la información del registro de entrada en el registro temporal.
- Las señales eth_dst, eth_src, eth_type y opcode corresponden al header, con la siguiente disposición:
dst | dst | dst | dst | dst | dst | src | src | src | src | src | src | type | type | opcode | opcode |
---|
- id, dest y src usan los valores de la interfaz AXI.
Interfaz CFG(configuration) - Verifica si es recepción Multicast o Unicast, mediante una comparación con el parámetro dest.
- Usa las variables check para realizar otras comparaciones.
- Verifica si el src coincide con el scr del dato siguiente.
- Realiza lo mismo con type.
- Verifica si el código de operación, es decir, opcode, corresponde al PFC o LFC.
Estado - Si está en el último bit del paquete, marca el estado como listo.
Generics
Generic name | Type | Value | Description |
---|---|---|---|
DATA_WIDTH | 8 | Ancho de datos en bits | |
KEEP_ENABLE | DATA_WIDTH > 8 | Flag para habilitar señal de keep | |
KEEP_WIDTH | DATA_WIDTH / 8 | Ancho de la señal keep | |
ID_ENABLE | 0 | Flag para habilitar ID | |
ID_WIDTH | 8 | Ancho de la señal ID | |
DEST_ENABLE | 0 | Flag para habilitar el destino | |
DEST_WIDTH | 8 | Ancho de la señal de destino | |
USER_ENABLE | 1 | Flag para habilitar el usuario | |
USER_WIDTH | 1 | Ancho de la señal de usuario | |
USE_READY | 0 | Uso de señal de ready | |
MCF_PARAMS_SIZE | 18 | Tamaño de los parámetros del marco de control MAC |
Ports
Port name | Direction | Type | Description |
---|---|---|---|
clk | input | wire | Señal de clock |
rst | input | wire | Señal de reset |
s_axis_tdata | input | wire [DATA_WIDTH-1:0] | Datos de entrada |
s_axis_tkeep | input | wire [KEEP_WIDTH-1:0] | Señal keep de entrada |
s_axis_tvalid | input | wire | Señal de datos de entrada validos |
s_axis_tready | output | wire | Señal de ready para datos de entrada |
s_axis_tlast | input | wire | Señal last para datos de entrada |
s_axis_tid | input | wire [ID_WIDTH-1:0] | ID de entrada |
s_axis_tdest | input | wire [DEST_WIDTH-1:0] | Destino de entrada |
s_axis_tuser | input | wire [USER_WIDTH-1:0] | Usuario de entrada |
m_axis_tdata | output | wire [DATA_WIDTH-1:0] | Datos de salida |
m_axis_tkeep | output | wire [KEEP_WIDTH-1:0] | Señal keep de salida |
m_axis_tvalid | output | wire | Señal de válida para datos de salida |
m_axis_tready | input | wire | Señal de ready para datos de salida |
m_axis_tlast | output | wire | Señal last para datos de salida |
m_axis_tid | output | wire [ID_WIDTH-1:0] | ID de salida |
m_axis_tdest | output | wire [DEST_WIDTH-1:0] | Destino de salida |
m_axis_tuser | output | wire [USER_WIDTH-1:0] | Usuario de salida |
mcf_valid | output | wire | Señal de marco de control MAC valido |
mcf_eth_dst | output | wire [47:0] | Dirección MAC de destino para el marco de control MAC |
mcf_eth_src | output | wire [47:0] | Dirección MAC de origen para el marco de control MAC |
mcf_eth_type | output | wire [15:0] | Tipo Ethernet para el marco de control MAC |
mcf_opcode | output | wire [15:0] | Opcode para el marco de control MAC |
mcf_params | output | wire [MCF_PARAMS_SIZE*8-1:0] | Parámetros para el marco de control MAC |
mcf_id | output | wire [ID_WIDTH-1:0] | ID para el marco de control MAC |
mcf_dest | output | wire [DEST_WIDTH-1:0] | Destino para el marco de control MAC |
mcf_user | output | wire [USER_WIDTH-1:0] | Campo de usuario para el marco de control MAC |
cfg_mcf_rx_eth_dst_mcast | input | wire [47:0] | Configuración de dirección MAC de destino multicast |
cfg_mcf_rx_check_eth_dst_mcast | input | wire | Verificación de dirección MAC de destino multicast |
cfg_mcf_rx_eth_dst_ucast | input | wire [47:0] | Configuración de dirección MAC de destino unicast |
cfg_mcf_rx_check_eth_dst_ucast | input | wire | Verificación de dirección MAC de destino unicast |
cfg_mcf_rx_eth_src | input | wire [47:0] | Configuración de dirección MAC de origen |
cfg_mcf_rx_check_eth_src | input | wire | Verificación de dirección MAC de origen |
cfg_mcf_rx_eth_type | input | wire [15:0] | Configuración de tipo Ethernet |
cfg_mcf_rx_opcode_lfc | input | wire [15:0] | Opcode para Control de Flujo de Enlace (LFC) |
cfg_mcf_rx_check_opcode_lfc | input | wire | Verificación de opcode de Control de Flujo de Enlace (LFC) |
cfg_mcf_rx_opcode_pfc | input | wire [15:0] | Opcode para Control de Flujo de Prioridad (PFC) |
cfg_mcf_rx_check_opcode_pfc | input | wire | Verificación de opcode de Control de Flujo de Prioridad (PFC) |
cfg_mcf_rx_forward | input | wire | Configuración de habilitación de reenvío |
cfg_mcf_rx_enable | input | wire | Configuración de habilitación de recepción de marco de control MAC |
stat_rx_mcf | output | wire | Salida de estado para el marco de control MAC |
Signals
Name | Type | Description |
---|---|---|
read_mcf_reg = 1'b1 | reg | Registro de lectura de MCF |
read_mcf_next | reg | Registro de lectura de MCF |
mcf_frame_reg = 1'b0 | reg | Registro de marco de MCF |
mcf_frame_next | reg | Registro de marco de MCF |
ptr_reg = 0 | reg [PTR_WIDTH-1:0] | Registro de puntero |
ptr_next | reg [PTR_WIDTH-1:0] | Registro de puntero |
s_axis_tready_reg = 1'b0 | reg | Registro de listo para la salida |
s_axis_tready_next | reg | Registro de listo para la salida |
m_axis_tdata_int | reg [DATA_WIDTH-1:0] | Registro para almacenar datos en el camino de datos interno |
m_axis_tkeep_int | reg [KEEP_WIDTH-1:0] | Registro para almacenar señales de keep en el camino de datos interno |
m_axis_tvalid_int | reg | Registro para almacenar la señal de validez en el camino de datos interno |
m_axis_tready_int_reg = 1'b0 | reg | Registro para almacenar la señal de preparado en el camino de datos interno |
m_axis_tlast_int | reg | Registro para almacenar la señal de último en el camino de datos interno |
m_axis_tid_int | reg [ID_WIDTH-1:0] | Registro para almacenar el ID en el camino de datos interno |
m_axis_tdest_int | reg [DEST_WIDTH-1:0] | Registro para almacenar el destino en el camino de datos interno |
m_axis_tuser_int | reg [USER_WIDTH-1:0] | Registro para almacenar la información de usuario en el camino de datos interno |
m_axis_tready_int_early | wire | Wire para la señal temprana de preparado en el camino de datos interno |
mcf_valid_reg = 0 | reg | Válido de MCF |
mcf_valid_next | reg | Válido de MCF |
mcf_eth_dst_reg = 0 | reg [47:0] | Destino Ethernet de MCF |
mcf_eth_dst_next | reg [47:0] | Destino Ethernet de MCF |
mcf_eth_src_reg = 0 | reg [47:0] | Origen Ethernet de MCF |
mcf_eth_src_next | reg [47:0] | Origen Ethernet de MCF |
mcf_eth_type_reg = 0 | reg [15:0] | Tipo Ethernet de MCF |
mcf_eth_type_next | reg [15:0] | Tipo Ethernet de MCF |
mcf_opcode_reg = 0 | reg [15:0] | Opcode de MCF |
mcf_opcode_next | reg [15:0] | Opcode de MCF |
mcf_params_reg = 0 | reg [MCF_PARAMS_SIZE*8-1:0] | Parámetros de MCF |
mcf_params_next | reg [MCF_PARAMS_SIZE*8-1:0] | Parámetros de MCF |
mcf_id_reg = 0 | reg [ID_WIDTH-1:0] | ID de MCF |
mcf_id_next | reg [ID_WIDTH-1:0] | ID de MCF |
mcf_dest_reg = 0 | reg [DEST_WIDTH-1:0] | Destino de MCF |
mcf_dest_next | reg [DEST_WIDTH-1:0] | Destino de MCF |
mcf_user_reg = 0 | reg [USER_WIDTH-1:0] | Usuario de MCF |
mcf_user_next | reg [USER_WIDTH-1:0] | Usuario de MCF |
stat_rx_mcf_reg = 1'b0 | reg | |
stat_rx_mcf_next | reg | |
mcf_eth_dst_mcast_match = mcf_eth_dst_next == cfg_mcf_rx_eth_dst_mcast | wire | |
mcf_eth_dst_ucast_match = mcf_eth_dst_next == cfg_mcf_rx_eth_dst_ucast | wire | |
mcf_eth_src_match = mcf_eth_src_next == cfg_mcf_rx_eth_src | wire | |
mcf_eth_type_match = mcf_eth_type_next == cfg_mcf_rx_eth_type | wire | |
mcf_opcode_lfc_match = mcf_opcode_next == cfg_mcf_rx_opcode_lfc | wire | |
mcf_opcode_pfc_match = mcf_opcode_next == cfg_mcf_rx_opcode_pfc | wire | |
mcf_eth_dst_match = ((mcf_eth_dst_mcast_match && cfg_mcf_rx_check_et | wire | |
mcf_opcode_match = ((mcf_opcode_lfc_match && cfg_mcf_rx_check_ | wire | |
mcf_match = (mcf_eth_dst_match && | wire | |
k | integer | |
m_axis_tdata_reg = {DATA_WIDTH{1'b0}} | reg [DATA_WIDTH-1:0] | Registro para datos de salida |
m_axis_tkeep_reg = {KEEP_WIDTH{1'b0}} | reg [KEEP_WIDTH-1:0] | Registro para mantener bits de datos de salida válidos |
m_axis_tvalid_reg = 1'b0 | reg | Registro de señal de validez actual y siguiente |
m_axis_tvalid_next | reg | Registro de señal de validez actual y siguiente |
m_axis_tlast_reg = 1'b0 | reg | Registro de señal de último dato de salida |
m_axis_tid_reg = {ID_WIDTH{1'b0}} | reg [ID_WIDTH-1:0] | Registro de identificador de transacción de salida |
m_axis_tdest_reg = {DEST_WIDTH{1'b0}} | reg [DEST_WIDTH-1:0] | Registro de destino de transacción de salida |
m_axis_tuser_reg = {USER_WIDTH{1'b0}} | reg [USER_WIDTH-1:0] | Registro de datos de usuario de salida |
temp_m_axis_tdata_reg = {DATA_WIDTH{1'b0}} | reg [DATA_WIDTH-1:0] | Registro temporal para datos de salida |
temp_m_axis_tkeep_reg = {KEEP_WIDTH{1'b0}} | reg [KEEP_WIDTH-1:0] | Registro temporal para mantener bits de datos de salida válidos |
temp_m_axis_tvalid_reg = 1'b0 | reg | Registro temporal de señal de validez actual y siguiente |
temp_m_axis_tvalid_next | reg | Registro temporal de señal de validez actual y siguiente |
temp_m_axis_tlast_reg = 1'b0 | reg | Registro temporal de señal de último dato de salida |
temp_m_axis_tid_reg = {ID_WIDTH{1'b0}} | reg [ID_WIDTH-1:0] | Registro temporal de identificador de transacción de salida |
temp_m_axis_tdest_reg = {DEST_WIDTH{1'b0}} | reg [DEST_WIDTH-1:0] | Registro temporal de destino de transacción de salida |
temp_m_axis_tuser_reg = {USER_WIDTH{1'b0}} | reg [USER_WIDTH-1:0] | Registro temporal de datos de usuario de salida |
store_axis_int_to_output | reg | Señal para almacenar datos internos en la salida |
store_axis_int_to_temp | reg | Señal para almacenar datos internos en el registro temporal |
store_axis_temp_to_output | reg | Señal para almacenar datos temporales en la salida |
Constants
Name | Type | Value | Description |
---|---|---|---|
BYTE_LANES | KEEP_ENABLE ? KEEP_WIDTH : 1 | Ancho de carriles de bytes | |
HDR_SIZE | 60 | Tamaño del encabezado en bytes | |
CYCLE_COUNT | (HDR_SIZE + BYTE_LANES - 1) / BYTE_LANES | Cantidad de ciclos necesarios para el encabezado | |
PTR_WIDTH | $ | Ancho del puntero para el número de ciclos | |
OFFSET | HDR_SIZE % BYTE_LANES | Desplazamiento del tamaño del encabezado en bytes |
Processes
- unnamed: ( @* )
- unnamed: ( @(posedge clk) )
- Type: always
- Description
Actualiza datos con la señal del clock
- unnamed: ( @* )
- Type: always
- Description
Gestiona la transferencia del estado listo del destino hacia la fuente de datos
- unnamed: ( @(posedge clk) )
- Type: always
- Description
Maneja la lógica de transferencia de datos entre diferentes etapas, asegurando que los datos sean correctamente almacenados y transferidos conforme a las condiciones de listo y a las señales de control disponibles