7 input [31:0] Rx_mac_data,
13 output [31:0] wr_dat_o,
21 output [15:0] fifo_occupied,
26 // Write side of short FIFO
27 // Inputs: full, Rx_mac_empty, Rx_mac_sop, Rx_mac_eop, Rx_mac_err, Rx_mac_data/BE
28 // Controls: write, datain, Rx_mac_rd
30 wire write, full, read, empty, sop_o, eop_o, error_o;
32 // Write side of short FIFO
33 assign write = ~full & ~Rx_mac_empty;
34 assign Rx_mac_rd = write;
39 cascadefifo2 #(.WIDTH(35),.SIZE(10)) mac_rx_longfifo
40 (.clk(clk),.rst(rst),.clear(0),
41 .datain({Rx_mac_sop,Rx_mac_eop,Rx_mac_err,Rx_mac_data}),.write(write),.full(full),
42 .dataout({sop_o,eop_o,error_o,wr_dat_o}),.read(read),.empty(empty),
43 .space(), .occupied(fifo_occupied) );
45 shortfifo #(.WIDTH(35)) mac_rx_sfifo
46 (.clk(clk),.rst(rst),.clear(0),
47 .datain({Rx_mac_sop,Rx_mac_eop,Rx_mac_err,Rx_mac_data}),.write(write),.full(full),
48 .dataout({sop_o,eop_o,error_o,wr_dat_o}),.read(read),.empty(empty),
49 .space(), .occupied(fifo_occupied[4:0]) );
50 assign fifo_occupied[15:5] = 0;
53 assign fifo_full = full;
54 assign fifo_empty = empty;
56 // Read side of short FIFO
57 // Inputs: empty, dataout, wr_ready_i, wr_full_i
58 // Controls: read, wr_dat_o, wr_write_o, wr_done_o, wr_error_o
61 localparam RD_IDLE = 0;
62 localparam RD_HAVEPKT = 1;
63 localparam RD_XFER = 2;
64 localparam RD_ERROR = 3;
73 rd_state <= RD_HAVEPKT;
81 rd_state <= RD_HAVEPKT;
84 endcase // case(rd_state)
86 assign read = ~empty & ((rd_state == RD_XFER) | ((rd_state==RD_IDLE)&~sop_o));
87 assign wr_write_o = ~empty & (rd_state == RD_XFER);
88 assign wr_done_o = ~empty & (rd_state == RD_XFER) & eop_o;
89 assign wr_error_o = ~empty & (rd_state == RD_XFER) & error_o;
91 endmodule // mac_rxfifo_int