Module ip_mac_tx_dsplit_g

MEM_ADDRpi_resetlogicpi_g_clocklogicpi_f_clocklogicpi_data[31:0]logicpi_soplogicpi_eoplogicpi_errlogicpi_padlogicpi_crclogicpi_byte[1:0]logicpi_wr_addr[MEM_ADDR:0]logicpi_half_duplexlogicpi_fc_acklogicpi_data_acklogicpi_fc_data[31:0]logicpi_fc_readylogicpi_fc_tx_offlogicpi_fc_soplogicpi_fc_eoplogicpi_readlogicpi_removelogicpi_reloadlogicpi_updatelogicpi_en_highlogicpo_en_clockregpo_fc_addrreg[2:0]po_rd_ptrlogic[MEM_ADDR-1:0]po_rd_addrreg[MEM_ADDR:0]po_fc_reqregpo_data_reqregpo_datareg[7:0]po_sopregpo_eopregpo_errregpo_padregpo_crcregpo_validreg

Block Diagram of ip_mac_tx_dsplit_g

Parameters

Name

Default

Description

MEM_ADDR

6

Transmit memory address width (9 -> 512 locations, 10->1024)

Ports

Name

Type

Direction

Description

pi_reset

wire logic

input

Global Software/Hardware Reset (transmit clock domain)

pi_g_clock

wire logic

input

Transmit GMII/MII 125/25/2.5 MHz clock (from Clock Manager, gated clock)

pi_f_clock

wire logic

input

Transmit GMII/MII 125/25/2.5 MHz clock (from Clock Manager, free clock)

po_en_clock

reg

output

Transmit GMII/MII 125/25/2.5 MHz clock gated clock enable

pi_data

wire logic [31 : 0]

input

Signals comming in from the data FIFO related to data transfer FIFO Data bus (frame data 32-bit word)

pi_sop

wire logic

input

Start of data frame indication

pi_eop

wire logic

input

End of data frame indication

pi_err

wire logic

input

Error frame indication

pi_pad

wire logic

input

Pad append command, valid only when end of frame (When padding enable

pi_crc

wire logic

input

and frame has less than 64 bytes the CRC is appended regardless of the CRC append setting CRC append command, valid only when end of frame

pi_byte

wire logic [1 : 0]

input

Byte enable information

pi_wr_addr

wire logic [MEM_ADDR : 0]

input

Read & Write pointers TX FIFO write address information (used by tx state to determine the

po_fc_addr

reg [2 : 0]

output

FIFO condition full/empty/ready) Flow control read address

pi_half_duplex

wire logic

input

Half duplex flow control enable Half duplex operating mode

po_rd_ptr

wire logic [MEM_ADDR - 1 : 0]

output

Output Signals to buffer manager related to data transfer Memory read address

po_rd_addr

reg [MEM_ADDR : 0]

output

Used by TX FIFO to compute the memory state (full/empty/ready)

po_fc_req

reg

output

Request & Acknowledge Flow control frame transmit request

po_data_req

reg

output

Data frame transmit request

pi_fc_ack

wire logic

input

Flow control frame transmit acknowledge

pi_data_ack

wire logic

input

Data frame transmit acknowledge

pi_fc_data

wire logic [31 : 0]

input

Flow control generator interface Flow control frame data

pi_fc_ready

wire logic

input

New flow control frame ready

pi_fc_tx_off

wire logic

input

Flow control (pause frame was received, stop transmit command)

pi_fc_sop

wire logic

input

Flow control frame end

pi_fc_eop

wire logic

input

Flow control frame start

pi_read

wire logic

input

Read next data

pi_remove

wire logic

input

Remove current frame (drop frame)

pi_reload

wire logic

input

Reload current frame (retransmit)

pi_update

wire logic

input

Update read pointers (collision window out)

pi_en_high

wire logic

input

Enable High (MSB)

po_data

reg [7 : 0]

output

Signals comming in from the data FIFO related to data transfer Output 8-bit data

po_sop

reg

output

Start of data frame indication

po_eop

reg

output

End of data frame indication

po_err

reg

output

Error frame indication

po_pad

reg

output

Pad append command, valid only when end of frame (When padding enable

po_crc

reg

output

and frame has less than 64 bytes the CRC is appended regardless of the CRC append setting CRC append command, valid only when end of frame

po_valid

reg

output

Valid output data

Always Blocks

always @ ( read_ptr or pi_wr_addr )

Synchronous write, asynchronous read memory (FIFO output available)

always @ ( posedge pi_g_clock or negedge pi_reset )

Split Data Counter

always @ ( posedge pi_g_clock or negedge pi_reset )

Data Output Management

always @ ( pi_fc_tx_off or pi_sop or prev_valid or pi_fc_ready or pi_fc_sop or unlock_sop )

Data or Flow Control Frame Request (Available)

always @ ( posedge pi_g_clock or negedge pi_reset )

Delay And Unlock Signal Process

always @ ( posedge pi_g_clock or negedge pi_reset )
`DATA_DROP `DATA_DROP = 3'h2 `FC_READ `FC_READ = 3'h4 `SPLIT_IDLE `SPLIT_IDLE = 3'h0 `SPLIT_WAIT `SPLIT_WAIT = 3'h3 `DATA_READ `DATA_READ = 3'h1 1 [(!(~ pi_reset) && (pi_fc_ack == 1'b1))] 3 [(!(~ pi_reset) && !(pi_fc_ack == 1'b1) && !(reload_frame == 1'b1) && !(valid_data == 1'b1 && pi_sop == 1'b0 || unlock_sop == 1'b0) && (valid_data == 1'b1 && pi_sop == 1'b1 && unlock_sop == 1'b1))] 2 [(!(~ pi_reset) && !(pi_fc_ack == 1'b1) && (reload_frame == 1'b1)), (!(~ pi_reset) && !(pi_fc_ack == 1'b1) && !(reload_frame == 1'b1) && (valid_data == 1'b1 && pi_sop == 1'b0 || unlock_sop == 1'b0))] 4 [(!(~ pi_reset) && (remove_frame == 1'b1)), (!(~ pi_reset) && !(remove_frame == 1'b1) && (reload_frame == 1'b1)), (!(~ pi_reset) && !(remove_frame == 1'b1) && !(reload_frame == 1'b1) && (po_eop == 1'b1 && pi_read == 1'b1))] 7 [(!(~ pi_reset) && !(reload_frame == 1'b1) && (pi_fc_ack == 1'b1))] 8 [(!(~ pi_reset) && !(reload_frame == 1'b1) && !(pi_fc_ack == 1'b1) && (pi_data_ack == 1'b1))] 6 [(!(~ pi_reset) && (reload_frame == 1'b1))] 5 [(!(~ pi_reset) && !(reload_frame == 1'b1))] 9 [(!(~ pi_reset) && (remove_frame == 1'b1)), (!(~ pi_reset) && !(remove_frame == 1'b1) && (reload_frame == 1'b1)), (!(~ pi_reset) && !(remove_frame == 1'b1) && !(reload_frame == 1'b1) && (po_eop == 1'b1 && valid_data == 1'b1 && pi_read == 1'b1)), (!(~ pi_reset) && !(remove_frame == 1'b1) && !(reload_frame == 1'b1) && !(po_eop == 1'b1 && valid_data == 1'b1 && pi_read == 1'b1) && !(split_cnt == 2'd0 && valid_data == 1'b1 && pi_read == 1'b1) && (po_eop == 1'b1 && valid_data == 1'b0 && pi_read == 1'b1))]
FSM Transitions for split_state

#

Current State

Next State

Condition

Comment

1

`DATA_DROP

`FC_READ

[(!(~ pi_reset) && (pi_fc_ack == 1'b1))]

2

`DATA_DROP

`SPLIT_WAIT

[(!(~ pi_reset) && !(pi_fc_ack == 1'b1) && (reload_frame == 1'b1)), (!(~ pi_reset) && !(pi_fc_ack == 1'b1) && !(reload_frame == 1'b1) && (valid_data == 1'b1 && pi_sop == 1'b0 || unlock_sop == 1'b0))]

3

`DATA_DROP

`SPLIT_IDLE

[(!(~ pi_reset) && !(pi_fc_ack == 1'b1) && !(reload_frame == 1'b1) && !(valid_data == 1'b1 && pi_sop == 1'b0 || unlock_sop == 1'b0) && (valid_data == 1'b1 && pi_sop == 1'b1 && unlock_sop == 1'b1))]

4

`FC_READ

`DATA_DROP

[(!(~ pi_reset) && (remove_frame == 1'b1)), (!(~ pi_reset) && !(remove_frame == 1'b1) && (reload_frame == 1'b1)), (!(~ pi_reset) && !(remove_frame == 1'b1) && !(reload_frame == 1'b1) && (po_eop == 1'b1 && pi_read == 1'b1))]

5

`SPLIT_WAIT

`DATA_DROP

[(!(~ pi_reset) && !(reload_frame == 1'b1))]

6

`SPLIT_IDLE

`SPLIT_WAIT

[(!(~ pi_reset) && (reload_frame == 1'b1))]

7

`SPLIT_IDLE

`FC_READ

[(!(~ pi_reset) && !(reload_frame == 1'b1) && (pi_fc_ack == 1'b1))]

8

`SPLIT_IDLE

`DATA_READ

[(!(~ pi_reset) && !(reload_frame == 1'b1) && !(pi_fc_ack == 1'b1) && (pi_data_ack == 1'b1))]

9

`DATA_READ

`SPLIT_WAIT

[(!(~ pi_reset) && (remove_frame == 1'b1)), (!(~ pi_reset) && !(remove_frame == 1'b1) && (reload_frame == 1'b1)), (!(~ pi_reset) && !(remove_frame == 1'b1) && !(reload_frame == 1'b1) && (po_eop == 1'b1 && valid_data == 1'b1 && pi_read == 1'b1)), (!(~ pi_reset) && !(remove_frame == 1'b1) && !(reload_frame == 1'b1) && !(po_eop == 1'b1 && valid_data == 1'b1 && pi_read == 1'b1) && !(split_cnt == 2'd0 && valid_data == 1'b1 && pi_read == 1'b1) && (po_eop == 1'b1 && valid_data == 1'b0 && pi_read == 1'b1))]

always @ ( posedge pi_f_clock or negedge pi_reset )

Data or Flow Control Frame Request (Available)

Instances