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

Subversion Repositories xge_mac

[/] [xge_mac/] [trunk/] [tbench/] [systemc/] [sc_scoreboard.cpp] - Diff between revs 7 and 29

Show entire file | Details | Blame | View Log

Rev 7 Rev 29
Line 65... Line 65...
        //---
        //---
        // Store packet in scoreboard
        // Store packet in scoreboard
 
 
        pif_fifo.write(pkt);
        pif_fifo.write(pkt);
        pif_stats.tx_pkt_cnt++;
        pif_stats.tx_pkt_cnt++;
 
        pif_stats.tx_octets_cnt = pif_stats.tx_octets_cnt + pkt->length;
 
 
    }
    }
 
 
    if (sid == SB_XGM_ID) {
    if (sid == SB_XGM_ID) {
 
 
Line 88... Line 89...
        }
        }
        else {
        else {
 
 
            xgm_fifo.write(pkt);
            xgm_fifo.write(pkt);
            xgm_stats.tx_pkt_cnt++;
            xgm_stats.tx_pkt_cnt++;
 
            xgm_stats.tx_octets_cnt = xgm_stats.tx_octets_cnt + pkt->length;
 
 
        }
        }
 
 
    }
    }
 
 
Line 182... Line 184...
    // Calculate CRC
    // Calculate CRC
 
 
    calc_crc(pkt_tx);
    calc_crc(pkt_tx);
    calc_crc(pkt);
    calc_crc(pkt);
 
 
 
    //---
 
    // Update byte count after padding
 
 
 
    stats->rx_octets_cnt = stats->rx_octets_cnt + pkt_tx->length + 4;
 
 
    //cout << *pkt_tx << *pkt << endl;
    //cout << *pkt_tx << *pkt << endl;
 
 
    //---
    //---
    // Compare TX and RX packets
    // Compare TX and RX packets
 
 
Line 193... Line 200...
 
 
        cout << "INFO: Packet check disabled" << endl;
        cout << "INFO: Packet check disabled" << endl;
 
 
    }
    }
    else if ((pkt_tx->err_flags & PKT_FLAG_ERR_FRG) &&
    else if ((pkt_tx->err_flags & PKT_FLAG_ERR_FRG) &&
             (pkt->err_flags |= PKT_FLAG_ERR_SIG)) {
             (pkt->err_flags & PKT_FLAG_ERR_SIG)) {
 
 
        cout << "INFO: Fragment detected" << endl;
        cout << "INFO: Fragment detected" << endl;
 
 
    }
    }
 
    else if ((pkt_tx->err_flags & PKT_FLAG_ERR_LENGHT) &&
 
             (pkt->err_flags & PKT_FLAG_ERR_SIG)) {
 
 
 
        cout << "INFO: Lenght error detected" << endl;
 
 
 
    }
    else if ((pkt_tx->err_flags & PKT_FLAG_ERR_CODING) &&
    else if ((pkt_tx->err_flags & PKT_FLAG_ERR_CODING) &&
             (pkt->err_flags |= PKT_FLAG_ERR_SIG)) {
             (pkt->err_flags & PKT_FLAG_ERR_SIG)) {
 
 
        cout << "INFO: Coding error detected:" << pkt_tx->err_info << endl;
        cout << "INFO: Coding error detected:" << pkt_tx->err_info << endl;
 
 
    }
    }
    else if ((sid == SB_PIF_ID || pkt->crc == pkt->crc_rx || disable_crc_check) &&
    else if ((sid == SB_PIF_ID || pkt->crc == pkt->crc_rx || disable_crc_check) &&
Line 307... Line 320...
 
 
        pkt->err_flags &= ~PKT_FLAG_ERR_SIG;
        pkt->err_flags &= ~PKT_FLAG_ERR_SIG;
    }
    }
 
 
 
 
 
    // LENGHT ERRORS
 
 
 
    if (sid == SB_PIF_ID && (pkt_tx->err_flags & PKT_FLAG_ERR_LENGHT)) {
 
 
 
        if (pkt->err_flags & PKT_FLAG_ERR_SIG) {
 
 
 
            cout << "SCOREBOARD LENGHT ERROR CHECKED" << endl;
 
            pif_stats.lenght_error_cnt++;
 
 
 
            if (cpu_stats.lenght_error_cnt + 1 < pif_stats.lenght_error_cnt) {
 
                cout << "ERROR: LENGHT error not reported to cpu" << endl;
 
                sc_stop();
 
            }
 
        }
 
        else {
 
            cout << "ERROR: LENGHT error not detected: "
 
                 << hex << pkt->err_flags << dec << endl;
 
            sc_stop();
 
        }
 
 
 
        pkt->err_flags &= ~PKT_FLAG_ERR_SIG;
 
    }
 
 
 
 
    // CODING ERRORS
    // CODING ERRORS
 
 
    if (sid == SB_PIF_ID && (pkt_tx->err_flags & PKT_FLAG_ERR_CODING)) {
    if (sid == SB_PIF_ID && (pkt_tx->err_flags & PKT_FLAG_ERR_CODING)) {
 
 
        if (pkt->err_flags & PKT_FLAG_ERR_SIG) {
        if (pkt->err_flags & PKT_FLAG_ERR_SIG) {
Line 365... Line 402...
    if (sid == SB_CPU_ID && statusId == FRAGMENT_ERROR) {
    if (sid == SB_CPU_ID && statusId == FRAGMENT_ERROR) {
        cout << "SCOREBOARD FRAGMENT_ERROR SIGNAL" << endl;
        cout << "SCOREBOARD FRAGMENT_ERROR SIGNAL" << endl;
        cpu_stats.fragment_error_cnt++;
        cpu_stats.fragment_error_cnt++;
    }
    }
 
 
 
    if (sid == SB_CPU_ID && statusId == LENGHT_ERROR) {
 
        cout << "SCOREBOARD LENGHT_ERROR SIGNAL" << endl;
 
        cpu_stats.lenght_error_cnt++;
 
    }
 
 
    if (sid == SB_CPU_ID && statusId == LOCAL_FAULT) {
    if (sid == SB_CPU_ID && statusId == LOCAL_FAULT) {
        cout << "SCOREBOARD LOCAL_FAULT SIGNAL" << endl;
        cout << "SCOREBOARD LOCAL_FAULT SIGNAL" << endl;
        cpu_stats.local_fault_cnt++;
        cpu_stats.local_fault_cnt++;
 
 
        if (cpu_stats.local_fault_cnt != xgm_stats.inject_local_fault_cnt) {
        if (cpu_stats.local_fault_cnt != xgm_stats.inject_local_fault_cnt) {
Line 483... Line 525...
    //---
    //---
    // Clear stats
    // Clear stats
 
 
    pif_stats.tx_pkt_cnt = 0;
    pif_stats.tx_pkt_cnt = 0;
    pif_stats.rx_pkt_cnt = 0;
    pif_stats.rx_pkt_cnt = 0;
 
    pif_stats.tx_octets_cnt = 0;
 
    pif_stats.rx_octets_cnt = 0;
    pif_stats.crc_error_cnt = 0;
    pif_stats.crc_error_cnt = 0;
    pif_stats.flags_error_cnt = 0;
    pif_stats.flags_error_cnt = 0;
 
 
    xgm_stats.tx_pkt_cnt = 0;
    xgm_stats.tx_pkt_cnt = 0;
    xgm_stats.rx_pkt_cnt = 0;
    xgm_stats.rx_pkt_cnt = 0;
 
    xgm_stats.tx_octets_cnt = 0;
 
    xgm_stats.rx_octets_cnt = 0;
    xgm_stats.crc_error_cnt = 0;
    xgm_stats.crc_error_cnt = 0;
    xgm_stats.flags_error_cnt = 0;
    xgm_stats.flags_error_cnt = 0;
 
 
    pif_stats.timestamp_first_pkt = 0;
    pif_stats.timestamp_first_pkt = 0;
    pif_stats.timestamp_last_pkt = 0;
    pif_stats.timestamp_last_pkt = 0;
Line 502... Line 548...
    xgm_stats.next_ifg_length = 1000;
    xgm_stats.next_ifg_length = 1000;
    xgm_stats.deficit_idle_count = 0;
    xgm_stats.deficit_idle_count = 0;
 
 
    cpu_stats.crc_error_cnt = 0;
    cpu_stats.crc_error_cnt = 0;
    cpu_stats.fragment_error_cnt = 0;
    cpu_stats.fragment_error_cnt = 0;
 
    cpu_stats.lenght_error_cnt = 0;
    cpu_stats.rxd_fifo_ovflow_cnt = 0;
    cpu_stats.rxd_fifo_ovflow_cnt = 0;
    cpu_stats.rxd_fifo_udflow_cnt = 0;
    cpu_stats.rxd_fifo_udflow_cnt = 0;
    cpu_stats.txd_fifo_ovflow_cnt = 0;
    cpu_stats.txd_fifo_ovflow_cnt = 0;
    cpu_stats.txd_fifo_udflow_cnt = 0;
    cpu_stats.txd_fifo_udflow_cnt = 0;
}
}

powered by: WebSVN 2.1.0

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