Module ip_mac_hostif_rx

pi_resetlogicpi_g_clocklogicpi_f_clocklogicpi_rx_emptylogicpi_rx_last_rdlogicpi_rx_data[31:0]logicpi_rx_soflogicpi_rx_eoflogicrx_ds_addr_validlogicrx_ds_next_addr[31:0]logicrx_allowedlogicpi_host_sdvalogicpi_host_sdata[31:0]logicpi_regs_csr14_srlogicpi_config_burst_size[5:0]logicpo_en_clockregpo_rx_enable_rdlogicrx_valid_ds_readregpo_rx_ds1logic[1:0]po_rx_ds3logic[31:0]rx_reqregrx_mcmdreg[1:0]rx_maddrreg[31:0]rx_mdatareg[31:0]rx_mlastregpo_regs_csr5_riregpo_regs_csr5_ovfregpo_regs_csr5_rwtreg

Block Diagram of ip_mac_hostif_rx

Ports

Name

Direction

Type

Description

pi_reset

input

wire logic

Global interface global asynchronous pi_reset

pi_g_clock

input

wire logic

host gated clock

pi_f_clock

input

wire logic

host free clock

po_en_clock

output

var reg

enable clock condition

po_rx_enable_rd

output

wire logic

RX FIFO interface rx fifo read command

pi_rx_empty

input

wire logic

rx fifo full

pi_rx_last_rd

input

wire logic

rx fifo almost full

pi_rx_data

input

wire logic[31:0]

rx fifo data

pi_rx_sof

input

wire logic

rx fifo eof

pi_rx_eof

input

wire logic

rx fifo eof

rx_ds_addr_valid

input

wire logic

ip_mac_hostif_rxds from ip_mac_hostif_rxds (currently fetched descriptor address valid)

rx_ds_next_addr

input

wire logic[31:0]

from ip_mac_hostif_rxds (currently fetched descriptor address)

rx_valid_ds_read

output

var reg

po_rx_ds1

output

wire logic[1:0]

mapped to rx, rx_ds1[25:24]

po_rx_ds3

output

wire logic[31:0]

rx_req

output

var reg

arbiter

rx_allowed

input

wire logic

rx_mcmd

output

var reg[1:0]

rx_maddr

output

var reg[31:0]

rx_mdata

output

var reg[31:0]

rx_mlast

output

var reg

pi_host_sdva

input

wire logic

host interface

pi_host_sdata

input

wire logic[31:0]

pi_regs_csr14_sr

input

wire logic

ip_mac_regs_bank (config)

pi_config_burst_size

input

wire logic[5:0]

limit for the rx,tx burst transfers

po_regs_csr5_ri

output

var reg

po_regs_csr5_ovf

output

var reg

po_regs_csr5_rwt

output

var reg

Always Blocks

always @ ( posedge pi_f_clock or negedge pi_reset )

Gated Clock Enable

`RX_IDLE `RX_IDLE = 3'b000 `RX_READ_DS `RX_READ_DS = 3'b001 `RX_WRITE_PAUSE `RX_WRITE_PAUSE = 3'b010 `RX_WRITE `RX_WRITE = 3'b011 `RX_STAT `RX_STAT = 3'b101 `RX_WRITE_DS `RX_WRITE_DS = 3'b110 DEFAULT default 1 [(!(~ pi_reset) && !(! rx_ds_addr_valid) && !(rx_ds_addr_valid && ! rx_req) && (rx_allowed))] 2 [(!(~ pi_reset) && (pi_host_sdva) && !(rx_burst_cnt == 0) && !(rx_burst_cnt == 1) && (rx_burst_cnt == 2))] 4 [(!(~ pi_reset) && !(! rx_ds_valid) && !(! pi_rx_empty && ! pi_rx_last_rd && ! rx_req) && (rx_allowed))] 3 [(!(~ pi_reset) && (! rx_ds_valid))] 5 [(!(~ pi_reset) && !(rx_first_word_in_burst) && !(! pi_host_sdva) && (rx_mlast) && (rx_frame_complete))] 6 [(!(~ pi_reset) && !(rx_first_word_in_burst) && !(! pi_host_sdva) && (rx_mlast) && !(rx_frame_complete) && (rx_buff_complete) && !(! rx_cur_buff && ! rx_ds1[24] && rx_ds1[21 : 11] != 0))] 7 [(!(~ pi_reset) && !(rx_first_word_in_burst) && !(! pi_host_sdva) && (rx_mlast) && !(rx_frame_complete) && !(rx_buff_complete) && (rx_burst_complete)), (!(~ pi_reset) && !(rx_first_word_in_burst) && !(! pi_host_sdva) && (rx_mlast) && !(rx_frame_complete) && !(rx_buff_complete) && !(rx_burst_complete)), (!(~ pi_reset) && !(rx_first_word_in_burst) && !(! pi_host_sdva) && (rx_mlast) && !(rx_frame_complete) && (rx_buff_complete) && (! rx_cur_buff && ! rx_ds1[24] && rx_ds1[21 : 11] != 0))] 8 [(!(~ pi_reset) && (! pi_rx_empty))] 9 [(!(~ pi_reset) && (rx_allowed && pi_host_sdva))]
FSM Transitions for rx_state

#

Current State

Next State

Condition

1

`RX_IDLE

`RX_READ_DS

[(!(~ pi_reset) && !(! rx_ds_addr_valid) && !(rx_ds_addr_valid && ! rx_req) && (rx_allowed))]

2

`RX_READ_DS

`RX_WRITE_PAUSE

[(!(~ pi_reset) && (pi_host_sdva) && !(rx_burst_cnt == 0) && !(rx_burst_cnt == 1) && (rx_burst_cnt == 2))]

3

`RX_WRITE_PAUSE

`RX_IDLE

[(!(~ pi_reset) && (! rx_ds_valid))]

4

`RX_WRITE_PAUSE

`RX_WRITE

[(!(~ pi_reset) && !(! rx_ds_valid) && !(! pi_rx_empty && ! pi_rx_last_rd && ! rx_req) && (rx_allowed))]

5

`RX_WRITE

`RX_STAT

[(!(~ pi_reset) && !(rx_first_word_in_burst) && !(! pi_host_sdva) && (rx_mlast) && (rx_frame_complete))]

6

`RX_WRITE

`RX_WRITE_DS

[(!(~ pi_reset) && !(rx_first_word_in_burst) && !(! pi_host_sdva) && (rx_mlast) && !(rx_frame_complete) && (rx_buff_complete) && !(! rx_cur_buff && ! rx_ds1[24] && rx_ds1[21 : 11] != 0))]

7

`RX_WRITE

`RX_WRITE_PAUSE

[(!(~ pi_reset) && !(rx_first_word_in_burst) && !(! pi_host_sdva) && (rx_mlast) && !(rx_frame_complete) && !(rx_buff_complete) && (rx_burst_complete)), (!(~ pi_reset) && !(rx_first_word_in_burst) && !(! pi_host_sdva) && (rx_mlast) && !(rx_frame_complete) && !(rx_buff_complete) && !(rx_burst_complete)), (!(~ pi_reset) && !(rx_first_word_in_burst) && !(! pi_host_sdva) && (rx_mlast) && !(rx_frame_complete) && (rx_buff_complete) && (! rx_cur_buff && ! rx_ds1[24] && rx_ds1[21 : 11] != 0))]

8

`RX_STAT

`RX_WRITE_DS

[(!(~ pi_reset) && (! pi_rx_empty))]

9

`RX_WRITE_DS

`RX_IDLE

[(!(~ pi_reset) && (rx_allowed && pi_host_sdva))]

Instances