OpenCores
URL https://opencores.org/ocsvn/turbo8051/turbo8051/trunk

Subversion Repositories turbo8051

[/] [turbo8051/] [trunk/] [verif/] [agents/] [ethernet/] [tb_eth_top.v] - Diff between revs 57 and 76

Only display areas with differences | Details | Blame | View Log

Rev 57 Rev 76
 
 
/*-----------------------------------------------------------------
/*-----------------------------------------------------------------
|           Ethernet MAC Traffic Generator Testbench                |
|           Ethernet MAC Traffic Generator Testbench                |
|                                                                   |
|                                                                   |
 ------------------------------------------------------------------*/
 ------------------------------------------------------------------*/
 
 
/*-----------------------------------------------------------------\
/*-----------------------------------------------------------------\
|  DESCRIPTION:                                                    |
|  DESCRIPTION:                                                    |
|  tb_top.v:  Top of MAC testbench hierarchy                       |
|  tb_top.v:  Top of MAC testbench hierarchy                       |
|                                                                  |
|                                                                  |
|  Instantiates the following modules:                             |
|  Instantiates the following modules:                             |
|    tb_mii.v:  MII interface                                      |
|    tb_mii.v:  MII interface                                      |
|    tb_rmii.v: Reduced MII interface                              |
|    tb_rmii.v: Reduced MII interface                              |
|    tb_smii.v: Serial MII interface (add-on module)               |
|    tb_smii.v: Serial MII interface (add-on module)               |
|    tb_gmii.v: Gigabit MII interface (add-on module)              |
|    tb_gmii.v: Gigabit MII interface (add-on module)              |
|    tb_serd.v: Gigabit SERDES 10-bit interface (add-on module)    |
|    tb_serd.v: Gigabit SERDES 10-bit interface (add-on module)    |
|                                                                  |
|                                                                  |
|  Included files:                                                 |
|  Included files:                                                 |
|    tb_conf.v                                                     |
|    tb_conf.v                                                     |
|    tb_defs.v                                                     |
|    tb_defs.v                                                     |
|    tb_objs.v                                                     |
|    tb_objs.v                                                     |
|    tb_tasks.v                                                    |
|    tb_tasks.v                                                    |
|    tb_pktgn.v                                                    |
|    tb_pktgn.v                                                    |
\-----------------------------------------------------------------*/
\-----------------------------------------------------------------*/
 
 
 
 
`timescale 1ns/100ps
 
 
 
`include "tb_eth_conf.v"
`include "tb_eth_conf.v"
`include "tb_eth_defs.v"
`include "tb_eth_defs.v"
 
 
module tb_eth_top(
module tb_eth_top(
 
 
          REFCLK_50_MHz,            // 50 MHz Reference clock input
          REFCLK_50_MHz,            // 50 MHz Reference clock input
          REFCLK_125_MHz,           // 125 MHz reference clock
          REFCLK_125_MHz,           // 125 MHz reference clock
          transmit_enable,          // transmit enable for testbench
          transmit_enable,          // transmit enable for testbench
 
 
          // Separate interfaces for each MII port type
          // Separate interfaces for each MII port type
 
 
          // Full MII, 4-bit interface
          // Full MII, 4-bit interface
          // Transmit interface
          // Transmit interface
          MII_RXD,                  // Receive data (output)
          MII_RXD,                  // Receive data (output)
          MII_RX_CLK,               // Receive clock for MII (output)
          MII_RX_CLK,               // Receive clock for MII (output)
          MII_CRS,                  // carrier sense (output)
          MII_CRS,                  // carrier sense (output)
          MII_COL,                  // Collision signal for MII (output)
          MII_COL,                  // Collision signal for MII (output)
          MII_RX_DV,                // Receive data valid for MII (output)
          MII_RX_DV,                // Receive data valid for MII (output)
          // Receive interface
          // Receive interface
          MII_TXD,                  // Transmit data (input)
          MII_TXD,                  // Transmit data (input)
          MII_TX_EN,                // Tx enable (input)
          MII_TX_EN,                // Tx enable (input)
          MII_TX_CLK,               // Transmit clock (output)
          MII_TX_CLK,               // Transmit clock (output)
 
 
          // Reduced MII, 2-bit interface
          // Reduced MII, 2-bit interface
          // Transmit interface
          // Transmit interface
          RMII_RXD,                 // Receive data (output)
          RMII_RXD,                 // Receive data (output)
          RMII_CRS_DV,              // carrier sense (output)
          RMII_CRS_DV,              // carrier sense (output)
          // Receive interface
          // Receive interface
          RMII_TXD,                 // Transmit data (input)
          RMII_TXD,                 // Transmit data (input)
          RMII_TX_EN,               // Tx enable (input)
          RMII_TX_EN,               // Tx enable (input)
 
 
          // Serial MII interface
          // Serial MII interface
          SMII_RXD,                 // Receive data (output)
          SMII_RXD,                 // Receive data (output)
          SMII_TXD,                 // Transmit data (input)
          SMII_TXD,                 // Transmit data (input)
          SMII_SYNC,                // SMII SYNC signal (input)              
          SMII_SYNC,                // SMII SYNC signal (input)              
 
 
          // GMII, 8-bit/10-bit interface
          // GMII, 8-bit/10-bit interface
          // Transmit interface
          // Transmit interface
          GMII_RXD,                 // Receive data (output)
          GMII_RXD,                 // Receive data (output)
          GMII_RX_CLK,              // Receive clock for MII (output)
          GMII_RX_CLK,              // Receive clock for MII (output)
          GMII_CRS,                 // carrier sense (output)
          GMII_CRS,                 // carrier sense (output)
          GMII_COL,                 // Collision signal for MII (output)
          GMII_COL,                 // Collision signal for MII (output)
          GMII_RX_DV,               // Receive data valid for MII (output)
          GMII_RX_DV,               // Receive data valid for MII (output)
          // Receive interface
          // Receive interface
          GMII_TXD,                 // Transmit data (input)
          GMII_TXD,                 // Transmit data (input)
          GMII_TX_EN,               // Tx enable (input)
          GMII_TX_EN,               // Tx enable (input)
          GMII_TX_CLK,              // Transmit clock (output)
          GMII_TX_CLK,              // Transmit clock (output)
          GMII_GTX_CLK,             // Gigabit Transmit clock (input), 125 MHz
          GMII_GTX_CLK,             // Gigabit Transmit clock (input), 125 MHz
 
 
              // MII management interface
              // MII management interface
          MDIO,                     // serial I/O data
          MDIO,                     // serial I/O data
          MDC                       // clock
          MDC                       // clock
                  );
                  );
 
 
 
 
   input   REFCLK_50_MHz, REFCLK_125_MHz;
   input   REFCLK_50_MHz, REFCLK_125_MHz;
 
 
   input   transmit_enable;
   input   transmit_enable;
 
 
   // Full-MII signals
   // Full-MII signals
   output [`MII_WIDTH-1: 0]              MII_RXD;
   output [`MII_WIDTH-1: 0]              MII_RXD;
   output                                MII_RX_CLK,
   output                                MII_RX_CLK,
                                                                       MII_CRS,
                                                                       MII_CRS,
                                                                       MII_COL,
                                                                       MII_COL,
                                                                       MII_RX_DV;
                                                                       MII_RX_DV;
   input  [`MII_WIDTH-1: 0]              MII_TXD;
   input  [`MII_WIDTH-1: 0]              MII_TXD;
   input                                       MII_TX_EN;
   input                                       MII_TX_EN;
   output                                      MII_TX_CLK;
   output                                      MII_TX_CLK;
 
 
   // RMII signals
   // RMII signals
   output [`RMII_WIDTH-1: 0]             RMII_RXD;
   output [`RMII_WIDTH-1: 0]             RMII_RXD;
   output                                RMII_CRS_DV;
   output                                RMII_CRS_DV;
   input  [`RMII_WIDTH-1: 0]             RMII_TXD;
   input  [`RMII_WIDTH-1: 0]             RMII_TXD;
   input                                 RMII_TX_EN;
   input                                 RMII_TX_EN;
 
 
   // Serial MII signals
   // Serial MII signals
   output                                SMII_RXD;
   output                                SMII_RXD;
   input                                 SMII_TXD;
   input                                 SMII_TXD;
   input                                 SMII_SYNC;
   input                                 SMII_SYNC;
 
 
   //Gigabit-MII signals
   //Gigabit-MII signals
   output [`GMII_WIDTH-1: 0]             GMII_RXD;
   output [`GMII_WIDTH-1: 0]             GMII_RXD;
   output                                GMII_RX_CLK,
   output                                GMII_RX_CLK,
                                                                       GMII_CRS,
                                                                       GMII_CRS,
                                                                       GMII_COL,
                                                                       GMII_COL,
                                                                       GMII_RX_DV;
                                                                       GMII_RX_DV;
   input  [`GMII_WIDTH-1: 0]             GMII_TXD;
   input  [`GMII_WIDTH-1: 0]             GMII_TXD;
   input                                 GMII_TX_EN;
   input                                 GMII_TX_EN;
   output                                GMII_TX_CLK;
   output                                GMII_TX_CLK;
   input                                 GMII_GTX_CLK;
   input                                 GMII_GTX_CLK;
 
 
 
 
   // MII Management
   // MII Management
   inout                                 MDIO;
   inout                                 MDIO;
   input                                 MDC;
   input                                 MDC;
 
 
`include "tb_eth_objs.v"
`include "tb_eth_objs.v"
 
 
   // transmit buffer
   // transmit buffer
   reg [`MAX_PKT_SIZE*8 -1:0]                   transmit_pkt;
   reg [`MAX_PKT_SIZE*8 -1:0]                   transmit_pkt;
   integer                               transmit_pkt_size;
   integer                               transmit_pkt_size;
 
 
   // receive buffer
   // receive buffer
   reg [`MAX_PKT_SIZE*8 -1:0]            receive_pkt;
   reg [`MAX_PKT_SIZE*8 -1:0]            receive_pkt;
   integer                               receive_pkt_size;
   integer                               receive_pkt_size;
 
 
   reg                                   transmit_data_valid;
   reg                                   transmit_data_valid;
   wire                                  transmit_done;
   wire                                  transmit_done;
   wire                                  receive_data_valid;
   wire                                  receive_data_valid;
   reg                                   receive_data_available;
   reg                                   receive_data_available;
 
 
   integer   transmit_packet_count, packets_sent, transmit_timer;
   integer   transmit_packet_count, packets_sent, transmit_timer;
   reg       transmit_timer_active, transmit_timer_expired, port_tx_busy;
   reg       transmit_timer_active, transmit_timer_expired, port_tx_busy;
 
 
                                        // flag set during transmission of
                                        // flag set during transmission of
                                        // a packet sequence
                                        // a packet sequence
   //Current transmit packet parameters
   //Current transmit packet parameters
   integer    current_pkt_size;
   integer    current_pkt_size;
   reg [47:0] current_src_mac, current_dstn_mac;
   reg [47:0] current_src_mac, current_dstn_mac;
   reg [15:0] current_VLAN_TCI;
   reg [15:0] current_VLAN_TCI;
   reg        user_frame; // currently transmitting
   reg        user_frame; // currently transmitting
                                                   // frame from user buffer
                                                   // frame from user buffer
   integer    user_frame_current_ifg;
   integer    user_frame_current_ifg;
                                                   // ifg for user frame
                                                   // ifg for user frame
   wire       SMII_TX_EN;
   wire       SMII_TX_EN;
 
 
   reg [1:0]   user_crc_option; // CRC generation option for user frames
   reg [1:0]   user_crc_option; // CRC generation option for user frames
   reg [31:0]  user_crc_value;  // user-supplied CRC for user-generated frames
   reg [31:0]  user_crc_value;  // user-supplied CRC for user-generated frames
 
 
   // State variables exported to  MII module
   // State variables exported to  MII module
   integer               mii_transmit_state,
   integer               mii_transmit_state,
                                       mii_receive_state,
                                       mii_receive_state,
                                       mii_collision_counter; // for normal cols
                                       mii_collision_counter; // for normal cols
   reg         mii_SFD_received;
   reg         mii_SFD_received;
 
 
//   wire [31:0] event_file;
//   wire [31:0] event_file;
   /* MII port instantiations */
   /* MII port instantiations */
   /* Comment out unnecessary interfaces to save simulation cycles */
   /* Comment out unnecessary interfaces to save simulation cycles */
 
 
   tb_mii full_mii(
   tb_mii full_mii(
                   .port_type               ({port_duplex_status, port_speed[2:0]}),
                   .port_type               ({port_duplex_status, port_speed[2:0]}),
                   .port_tx_enable          (MII_port_tx_enable),
                   .port_tx_enable          (MII_port_tx_enable),
                   .port_rx_enable          (MII_port_rx_enable),
                   .port_rx_enable          (MII_port_rx_enable),
 
 
                   .REFCLK                  (REFCLK_50_MHz),
                   .REFCLK                  (REFCLK_50_MHz),
                   .RXD                     (MII_RXD),
                   .RXD                     (MII_RXD),
                   .RX_CLK                  (MII_RX_CLK),
                   .RX_CLK                  (MII_RX_CLK),
                   .CRS                     (MII_CRS),
                   .CRS                     (MII_CRS),
                   .COL                     (MII_COL),
                   .COL                     (MII_COL),
                   .RX_DV                   (MII_RX_DV),
                   .RX_DV                   (MII_RX_DV),
                   .TXD                     (MII_TXD),
                   .TXD                     (MII_TXD),
                   .TX_EN                   (MII_TX_EN),
                   .TX_EN                   (MII_TX_EN),
                   .TX_CLK                  (MII_TX_CLK),
                   .TX_CLK                  (MII_TX_CLK),
                   .transmit_data_valid     (transmit_data_valid),
                   .transmit_data_valid     (transmit_data_valid),
                   .transmit_complete       (transmit_done),
                   .transmit_complete       (transmit_done),
                   .receive_data_valid      (receive_data_valid),
                   .receive_data_valid      (receive_data_valid),
                   .event_file              (event_file)
                   .event_file              (event_file)
 );
 );
 
 
 
 
   tb_rmii reduced_mii(
   tb_rmii reduced_mii(
                   .port_type               ({port_duplex_status, port_speed[2:0]}),
                   .port_type               ({port_duplex_status, port_speed[2:0]}),
                   .port_tx_enable          (RMII_port_tx_enable),
                   .port_tx_enable          (RMII_port_tx_enable),
                   .port_rx_enable          (RMII_port_rx_enable),
                   .port_rx_enable          (RMII_port_rx_enable),
 
 
                   .REFCLK                  (REFCLK_50_MHz),
                   .REFCLK                  (REFCLK_50_MHz),
                   .RXD                     (RMII_RXD),
                   .RXD                     (RMII_RXD),
                   .CRS_DV                  (RMII_CRS_DV),
                   .CRS_DV                  (RMII_CRS_DV),
                   .TXD                     (RMII_TXD),
                   .TXD                     (RMII_TXD),
                   .TX_EN                   (RMII_TX_EN),
                   .TX_EN                   (RMII_TX_EN),
                   .transmit_data_valid     (transmit_data_valid),
                   .transmit_data_valid     (transmit_data_valid),
                   .transmit_complete       (transmit_done),
                   .transmit_complete       (transmit_done),
                   .receive_data_valid      (receive_data_valid),
                   .receive_data_valid      (receive_data_valid),
                   .event_file              (event_file)
                   .event_file              (event_file)
                   );
                   );
 
 
 
 
   integer i;
   integer i;
 
 
   initial
   initial
    begin
    begin
       transmit_data_valid = 0;
       transmit_data_valid = 0;
       transmit_packet_count = 0;
       transmit_packet_count = 0;
       receive_data_available =0;
       receive_data_available =0;
       port_mii_type = 3'b111; // set port MII type to invalid
       port_mii_type = 3'b111; // set port MII type to invalid
       packets_sent = 0;
       packets_sent = 0;
       transmit_timer_active = 0;
       transmit_timer_active = 0;
       transmit_timer_expired = 0;
       transmit_timer_expired = 0;
       port_tx_busy = 0;
       port_tx_busy = 0;
       user_frame = 0;
       user_frame = 0;
 
 
       MII_port_tx_enable = 0;
       MII_port_tx_enable = 0;
       MII_port_rx_enable = 0;
       MII_port_rx_enable = 0;
       RMII_port_tx_enable = 0;
       RMII_port_tx_enable = 0;
       RMII_port_rx_enable = 0;
       RMII_port_rx_enable = 0;
       GMII_port_tx_enable = 0;
       GMII_port_tx_enable = 0;
       GMII_port_rx_enable = 0;
       GMII_port_rx_enable = 0;
       SMII_port_tx_enable = 0;
       SMII_port_tx_enable = 0;
       SMII_port_rx_enable = 0;
       SMII_port_rx_enable = 0;
       SERDES_tx_enable = 0;
       SERDES_tx_enable = 0;
       SERDES_rx_enable = 0;
       SERDES_rx_enable = 0;
       custom_tx_enable = 0;
       custom_tx_enable = 0;
       custom_rx_enable = 0;
       custom_rx_enable = 0;
 
 
       seqno_enable = 0; // do not insert sequence numbers in transmitted pkts
       seqno_enable = 0; // do not insert sequence numbers in transmitted pkts
       timestamp_enable = 0; // do not insert timestamps
       timestamp_enable = 0; // do not insert timestamps
       packet_seq_no = 0;  // initialize sequence number
       packet_seq_no = 0;  // initialize sequence number
       L3_sequence_number = 0; // initialize IP sequence number
       L3_sequence_number = 0; // initialize IP sequence number
       flow_type = 0; // default = Layer-2 unicast
       flow_type = 0; // default = Layer-2 unicast
 
 
       user_crc_option = 0; // enable CRC insertion for user frames, good CRC
       user_crc_option = 0; // enable CRC insertion for user frames, good CRC
       user_crc_value = 0;  // defaulr for user_generated CRC
       user_crc_value = 0;  // defaulr for user_generated CRC
 
 
       // set default backoff parameters
       // set default backoff parameters
       collision_limit = 16;
       collision_limit = 16;
       backoff_slots[1] = 32'd2;
       backoff_slots[1] = 32'd2;
       backoff_type[1] = 1; // random backoff
       backoff_type[1] = 1; // random backoff
       for (i=2; i <= `MAX_COLLISIONS; i=i+1)
       for (i=2; i <= `MAX_COLLISIONS; i=i+1)
        begin
        begin
           backoff_slots[i] = backoff_slots[i-1] *2;
           backoff_slots[i] = backoff_slots[i-1] *2;
           if (backoff_slots[i] > 1024)
           if (backoff_slots[i] > 1024)
            backoff_slots[i] = 1024;  // clamp at 1024 slots
            backoff_slots[i] = 1024;  // clamp at 1024 slots
           backoff_type[i] = 1; // random backoff
           backoff_type[i] = 1; // random backoff
        end // for (i=2; i <= `MAX_COLLISIONS; i=i+1)
        end // for (i=2; i <= `MAX_COLLISIONS; i=i+1)
 
 
       set_default_header_parameters; // initialize headers to default patterns
       set_default_header_parameters; // initialize headers to default patterns
       //outfile = $fopen(`PARAM_LOG_FILENAME); // open parameter log
       //outfile = $fopen(`PARAM_LOG_FILENAME); // open parameter log
//        while (1)
//        while (1)
//        begin 
//        begin 
//      #20;
//      #20;
//      event_file = "eth_events_log"; // open event log
//      event_file = "eth_events_log"; // open event log
//      #20;
//      #20;
//      end
//      end
    end // initial begin
    end // initial begin
 
 
 
 
 
 
`include "tb_eth_tasks.v"
`include "tb_eth_tasks.v"
 
 
   //Generate a 1MHz clock for generating transmit timeout
   //Generate a 1MHz clock for generating transmit timeout
   reg clock_1_MHz;
   reg clock_1_MHz;
   integer clk_cnt_1_MHz;
   integer clk_cnt_1_MHz;
 
 
   initial
   initial
    begin
    begin
       clock_1_MHz = 0;
       clock_1_MHz = 0;
       clk_cnt_1_MHz = 0;
       clk_cnt_1_MHz = 0;
    end // initial begin
    end // initial begin
 
 
   always @(posedge REFCLK_50_MHz)
   always @(posedge REFCLK_50_MHz)
    begin
    begin
       if (clk_cnt_1_MHz == 24)
       if (clk_cnt_1_MHz == 24)
        begin
        begin
           clock_1_MHz = ~clock_1_MHz;
           clock_1_MHz = ~clock_1_MHz;
           clk_cnt_1_MHz = 0;
           clk_cnt_1_MHz = 0;
        end
        end
       else
       else
        clk_cnt_1_MHz = clk_cnt_1_MHz +1;
        clk_cnt_1_MHz = clk_cnt_1_MHz +1;
    end
    end
 
 
   //Transmit timeout
   //Transmit timeout
   always @(posedge clock_1_MHz)
   always @(posedge clock_1_MHz)
    if (transmit_timer_active)
    if (transmit_timer_active)
     begin
     begin
        transmit_timer = transmit_timer -1;
        transmit_timer = transmit_timer -1;
        if (transmit_timer == 0)
        if (transmit_timer == 0)
         begin
         begin
            $display("%t ns: Testbench transmit timer timed out", $time);
            $display("%t ns: Testbench transmit timer timed out", $time);
            if (`TERMINATE_ON_TRANSMIT_TIMEOUT)
            if (`TERMINATE_ON_TRANSMIT_TIMEOUT)
             $finish;
             $finish;
            transmit_timer_expired= 1;
            transmit_timer_expired= 1;
            transmit_timer_active = 0;
            transmit_timer_active = 0;
         end // if (transmit_timer == 0)
         end // if (transmit_timer == 0)
     end // if (transmit_timer_active)
     end // if (transmit_timer_active)
 
 
   // Main transmit loop
   // Main transmit loop
   always @(posedge REFCLK_50_MHz)
   always @(posedge REFCLK_50_MHz)
    if ((port_tx_busy == 1) &&
    if ((port_tx_busy == 1) &&
        ((port_speed == 0) || (port_speed == 1)))
        ((port_speed == 0) || (port_speed == 1)))
     //only for 10 and 100 Mb ports
     //only for 10 and 100 Mb ports
     begin: main_transmit_block
     begin: main_transmit_block
        integer delay, i;
        integer delay, i;
 
 
        if (!user_frame)
        if (!user_frame)
         construct_frame;
         construct_frame;
        transmit_data_valid= 1; // send signal to MII to transmit
        transmit_data_valid= 1; // send signal to MII to transmit
       @(posedge REFCLK_50_MHz)
       @(posedge REFCLK_50_MHz)
        transmit_data_valid = 0;
        transmit_data_valid = 0;
        wait(transmit_done);
        wait(transmit_done);
 
 
        packets_sent = packets_sent +1;
        packets_sent = packets_sent +1;
        packet_seq_no = packet_seq_no +1; // increment sequence number;
        packet_seq_no = packet_seq_no +1; // increment sequence number;
 
 
        // update fields for next packet
        // update fields for next packet
        if (!user_frame)
        if (!user_frame)
         update_header_parameters;
         update_header_parameters;
        if ((packets_sent >= transmit_packet_count) ||
        if ((packets_sent >= transmit_packet_count) ||
           (transmit_timer_expired)) // transmit no more packets
           (transmit_timer_expired)) // transmit no more packets
         port_tx_busy = 0;
         port_tx_busy = 0;
        else
        else
         begin
         begin
            // wait for inter-packet spacing
            // wait for inter-packet spacing
            delay = current_ifg - port_min_ifg; // delay in bit times
            delay = current_ifg - port_min_ifg; // delay in bit times
            case(port_speed)
            case(port_speed)
             0: begin // 10 Mb/s = 100 ns per bit
             0: begin // 10 Mb/s = 100 ns per bit
                for (i = delay*5; i >= 0; i = i-1)
                for (i = delay*5; i >= 0; i = i-1)
                 if (!transmit_timer_expired)
                 if (!transmit_timer_expired)
                  @(posedge REFCLK_50_MHz);
                  @(posedge REFCLK_50_MHz);
             end // case: 0
             end // case: 0
 
 
             1: begin // 100 Mb/s = 10 ns per bit
             1: begin // 100 Mb/s = 10 ns per bit
                for (i = delay/2; i >= 0; i = i-1)
                for (i = delay/2; i >= 0; i = i-1)
                 if (!transmit_timer_expired)
                 if (!transmit_timer_expired)
                 @(posedge REFCLK_50_MHz);
                 @(posedge REFCLK_50_MHz);
             end // case: 1
             end // case: 1
 
 
             default: begin // we shouldn't get here
             default: begin // we shouldn't get here
             end // case: default
             end // case: default
 
 
            endcase // case(port_speed)
            endcase // case(port_speed)
            if (transmit_timer_expired)
            if (transmit_timer_expired)
             port_tx_busy = 0;
             port_tx_busy = 0;
         end // else: !if((packets_sent >= transmit_packet_count) ||...
         end // else: !if((packets_sent >= transmit_packet_count) ||...
     end // block: main_transmit_block
     end // block: main_transmit_block
 
 
   // Main loop for gigabit port
   // Main loop for gigabit port
   always @(posedge REFCLK_125_MHz)
   always @(posedge REFCLK_125_MHz)
    if ((port_tx_busy == 1) &&
    if ((port_tx_busy == 1) &&
        (port_speed == 2))
        (port_speed == 2))
     begin: main_transmit_block_gigabit
     begin: main_transmit_block_gigabit
        integer delay, i;
        integer delay, i;
 
 
        if (!user_frame)
        if (!user_frame)
         construct_frame;
         construct_frame;
        transmit_data_valid= 1; // send signal to MII to transmit
        transmit_data_valid= 1; // send signal to MII to transmit
       @(posedge REFCLK_125_MHz)
       @(posedge REFCLK_125_MHz)
        transmit_data_valid = 0;
        transmit_data_valid = 0;
        wait(transmit_done);
        wait(transmit_done);
 
 
        packets_sent = packets_sent +1;
        packets_sent = packets_sent +1;
        packet_seq_no = packet_seq_no +1; // increment sequence number;
        packet_seq_no = packet_seq_no +1; // increment sequence number;
 
 
        // update fields for next packet
        // update fields for next packet
        if (!user_frame)
        if (!user_frame)
         update_header_parameters;
         update_header_parameters;
        if ((packets_sent >= transmit_packet_count) ||
        if ((packets_sent >= transmit_packet_count) ||
            (transmit_timer_expired)) // transmit no more packets
            (transmit_timer_expired)) // transmit no more packets
         port_tx_busy = 0;
         port_tx_busy = 0;
        else
        else
         begin
         begin
            // wait for inter-packet spacing
            // wait for inter-packet spacing
            delay = current_ifg - port_min_ifg; // delay in bit times
            delay = current_ifg - port_min_ifg; // delay in bit times
            for (i = delay/8; i >= 0; i = i-1)
            for (i = delay/8; i >= 0; i = i-1)
             if (!transmit_timer_expired)
             if (!transmit_timer_expired)
              @(posedge REFCLK_125_MHz);
              @(posedge REFCLK_125_MHz);
 
 
            if (transmit_timer_expired)
            if (transmit_timer_expired)
             port_tx_busy = 0;
             port_tx_busy = 0;
         end // else: !if((packets_sent >= transmit_packet_count) ||...
         end // else: !if((packets_sent >= transmit_packet_count) ||...
     end // block: main_transmit_block_gigabit
     end // block: main_transmit_block_gigabit
 
 
`include "tb_eth_pktgn.v" // packet generation tasks
`include "tb_eth_pktgn.v" // packet generation tasks
 
 
endmodule // testbench
endmodule // testbench
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.