wire [15:0] rx_fifo_space;\r
wire pause_apply, pause_quanta_sub;\r
wire xon_gen, xoff_gen, xon_gen_complete, xoff_gen_complete;\r
- wire [15:0] fc_hwmark, fc_lwmark;\r
+ wire [15:0] fc_hwmark, fc_lwmark, fc_padtime;\r
\r
//PHY interface\r
wire [7:0] MTxD;\r
.pause_quanta_set ( pause_quanta_set ),\r
.fc_hwmark (fc_hwmark),\r
.fc_lwmark (fc_lwmark),\r
+ .fc_padtime (fc_padtime),\r
// From RX side\r
.rx_clk(MAC_rx_clk_div),\r
.rx_fifo_space (rx_fifo_space), // Decide if we need to send a PAUSE\r
.xoff_gen_complete (xoff_gen_complete), \r
.xon_gen_complete(xon_gen_complete)\r
);\r
-/* \r
+\r
RMON U_RMON(\r
.Clk ( CLK_I ),\r
.Reset ( RST_I ),\r
.CPU_rd_grant ( CPU_rd_grant ),\r
.CPU_rd_dout ( CPU_rd_dout )\r
);\r
-*/\r
+\r
Phy_int U_Phy_int(\r
.rst_mac_rx ( rst_mac_rx ),\r
.rst_mac_tx ( rst_mac_tx ),\r
.tx_pause_en ( tx_pause_en ),\r
.fc_hwmark ( fc_hwmark ),\r
.fc_lwmark ( fc_lwmark ),\r
+ .fc_padtime ( fc_padtime ),\r
\r
// RMON host interface\r
.CPU_rd_addr ( CPU_rd_addr ),\r
.UpdateMIIRX_DATAReg ( UpdateMIIRX_DATAReg )\r
);\r
\r
- assign debug0 = {xon_gen, xoff_gen, Tx_en, Rx_dv};\r
+ assign debug0 = {xon_gen, xoff_gen, xon_gen_complete, xoff_gen_complete, debug_rx[3:0]};\r
//assign debug0 = {{debug_rx[3:0], xon_gen, xon_gen_complete, xoff_gen, xoff_gen_complete},\r
// {1'b0,Rx_mac_err,Rx_mac_empty,Rx_mac_rd,Rx_mac_sop,Rx_mac_eop,Rx_mac_BE[1:0]},\r
// {rx_fifo_space}};\r
output tx_pause_en,\r
output [15:0] fc_hwmark,\r
output [15:0] fc_lwmark,\r
+ output [15:0] fc_padtime,\r
\r
// RMON host interface\r
output [5:0] CPU_rd_addr,\r
RegCPUData #( 13 ) U_0_037( MIIADDRESS , 7'd037, 13'h0000, RST_I, CLK_I, Wr, ADR_I, DAT_I[12:0] );\r
RegCPUData #( 16 ) U_0_038( MIITX_DATA , 7'd038, 16'h0000, RST_I, CLK_I, Wr, ADR_I, DAT_I[15:0] );\r
\r
+ // New FC register\r
+ RegCPUData #( 16 ) U_0_041( fc_padtime , 7'd041, 1'h0, RST_I, CLK_I, Wr, ADR_I, DAT_I[15:0] );\r
+\r
// Asserted in first clock of 2-cycle access, negated otherwise\r
wire Access = ~ACK_O & STB_I & CYC_I;\r
\r
7'd38: DAT_O <= MIITX_DATA;\r
7'd39: DAT_O <= MIIRX_DATA;\r
7'd40: DAT_O <= MIISTATUS;\r
+ 7'd41: DAT_O <= fc_padtime;\r
endcase\r
end\r
\r
input [15:0] pause_quanta_set,\r
input [15:0] fc_hwmark,\r
input [15:0] fc_lwmark,\r
+ input [15:0] fc_padtime,\r
// From MAC_rx_ctrl\r
input rx_clk,\r
input [15:0] rx_fifo_space,\r
else if (xon_int | xon_int_d1)\r
xon_gen <=1; \r
\r
- wire [15:0] pq_reduced = pause_quanta_set - 2;\r
+ wire [21:0] pq_reduced = {pause_quanta_set,6'd0} - {6'd0,fc_padtime};\r
\r
always @(posedge tx_clk or posedge rst)\r
if(rst)\r
countdown <= 0;\r
else if(xoff_gen)\r
- countdown <= {pq_reduced,6'd0};\r
+ countdown <= pq_reduced;\r
else if(xon_gen)\r
countdown <= 0;\r
else if(countdown != 0)\r