diff options
Diffstat (limited to 'simple_gemac')
-rw-r--r-- | simple_gemac/simple_gemac_tb.v | 14 | ||||
-rw-r--r-- | simple_gemac/simple_gemac_tx.v | 46 |
2 files changed, 34 insertions, 26 deletions
diff --git a/simple_gemac/simple_gemac_tb.v b/simple_gemac/simple_gemac_tb.v index eacad7545..6584a1a81 100644 --- a/simple_gemac/simple_gemac_tb.v +++ b/simple_gemac/simple_gemac_tb.v @@ -123,16 +123,22 @@ module simple_gemac_tb; SendPacketFromFile(60); repeat (100) @(posedge clk); - SendPacketFromFile(59); + SendPacketFromFile(61); repeat (100) @(posedge clk); - SendPacketFromFile(58); + SendPacketFromFile(62); repeat (100) @(posedge clk); - SendPacketFromFile(61); + SendPacketFromFile(63); repeat (100) @(posedge clk); - SendPacketFromFile(62); + SendPacketFromFile(64); + repeat (100) + @(posedge clk); + SendPacketFromFile(59); + repeat (100) + @(posedge clk); + SendPacketFromFile(58); #10000 $finish; end diff --git a/simple_gemac/simple_gemac_tx.v b/simple_gemac/simple_gemac_tx.v index 783f69e45..d164d3fed 100644 --- a/simple_gemac/simple_gemac_tx.v +++ b/simple_gemac/simple_gemac_tx.v @@ -43,8 +43,9 @@ module simple_gemac_tx localparam TX_CRC_2 = TX_CRC_0 + 2; localparam TX_CRC_3 = TX_CRC_0 + 3; localparam TX_ERROR = 32; - localparam TX_PAUSE = 56; - localparam TX_PAUSE_SOF = 63; + localparam TX_PAUSE = 55; + localparam TX_PAUSE_SOF = TX_PAUSE + 7; + localparam TX_PAUSE_FIRST = TX_PAUSE_SOF + 1; localparam TX_PAUSE_END = TX_PAUSE_SOF + 18; reg send_pause; @@ -138,8 +139,7 @@ module simple_gemac_tx tx_en_pre <= 0; TX_PAD : txd_pre <= 0; - - 8'b01xx_xxxx : // In Pause Frame + TX_PAUSE_FIRST, 8'b01xx_xxxx : // In Pause Frame txd_pre <= pause_dat; endcase // case (tx_state) @@ -195,25 +195,30 @@ module simple_gemac_tx wire clear_crc = (tx_state == TX_IDLE); -// wire calc_crc_pre = (tx_state==TX_FIRSTBYTE)||(tx_state==TX_IN_FRAME)|| -// ((tx_state ==TX_IN_FRAME_2)&tx_valid )||(tx_state==TX_PAD )||(tx_state[6]); - // reg calc_crc; - // always @(posedge tx_clk) - // calc_crc <= calc_crc_pre; - wire calc_crc = 0; + wire calc_crc = + (tx_state==TX_IN_FRAME) | + (tx_state==TX_IN_FRAME_2) | + (tx_state==TX_PAD) | + (tx_state[6]); + + reg [7:0] crc_ctr; + reg calc_crc_d1; + always @(posedge tx_clk) + calc_crc_d1 <= calc_crc; + + always @(posedge tx_clk) + if(reset) + crc_ctr <= 0; + else if(calc_crc) + crc_ctr <= crc_ctr+1; + else if(calc_crc_d1) + $display("CRC COUNT = %d",crc_ctr); + else + crc_ctr <= 0; - /* - wire calc_crc = ~(tx_state==TX_IDLE) & - ~(tx_state==TX_IDLE) & - ~(tx_state==TX_IDLE) & - ~(tx_state==TX_IDLE) & - */ crc crc(.clk(tx_clk), .reset(reset), .clear(clear_crc), .data(txd_pre), .calc(calc_crc), .crc_out(crc_out)); - -// .data(txd_pre), .calc(calc_crc & ~(tx_state==TX_CRC_0)), .crc_out(crc_out)); - assign tx_ack = (tx_state == TX_FIRSTBYTE); reg tx_valid_d1; @@ -233,9 +238,6 @@ module simple_gemac_tx GMII_TXD <= crc_out[15:8]; TX_CRC_3 : GMII_TXD <= crc_out[7:0]; -// TX_IN_FRAME : -// TX_PAD : -// GMII_TXD <= tx_valid_d1 ? txd_pre : 0; default : GMII_TXD <= txd_pre; endcase // case (tx_state) |