Ignore:
Timestamp:
Sep 10, 2013, 6:16:32 PM (11 years ago)
Author:
bouyer
Message:

We can't read wdata after we sent cmdack, so read and store wdata when
we get the command, and use the this saved value when we need it later.
While there, add a few SOCLIB_MODULE_DEBUG outputs.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/modules/vci_block_device_tsar/caba/source/src/vci_block_device_tsar.cpp

    r514 r522  
    6565            r_trdid = p_vci_target.trdid.read();
    6666            r_pktid = p_vci_target.pktid.read();
     67            r_tdata = p_vci_target.wdata.read();
    6768            sc_dt::sc_uint<vci_param::N> address = p_vci_target.address.read();
    6869
     
    101102    case T_WRITE_BUFFER:
    102103    {
    103         if ( (r_initiator_fsm.read() == M_IDLE) and p_vci_target.rspack.read() ) 
    104         {
    105             r_buf_address = (uint64_t)p_vci_target.wdata.read();
    106             r_target_fsm  = T_IDLE;
     104        if (p_vci_target.rspack.read() ) {
     105#ifdef SOCLIB_MODULE_DEBUG
     106            std::cout << "vci_bd WRITE_BUFFER " << r_tdata.read()
     107                << " status " << r_initiator_fsm.read() << std::endl;
     108#endif
     109            if (r_initiator_fsm.read() == M_IDLE)
     110            {
     111                r_buf_address = (uint64_t)r_tdata.read();
     112                r_target_fsm  = T_IDLE;
     113            }
    107114        }
    108115        break;
     
    111118    case T_WRITE_BUFFER_EXT:
    112119    {
    113         if ( (r_initiator_fsm.read() == M_IDLE) and p_vci_target.rspack.read() ) 
    114         {
    115             r_buf_address = r_buf_address.read() +
    116                             (((uint64_t)p_vci_target.wdata.read())<<32);
    117             r_target_fsm  = T_IDLE;
     120        if (p_vci_target.rspack.read() ) {
     121#ifdef SOCLIB_MODULE_DEBUG
     122            std::cout << "vci_bd WRITE_BUFFER_EXT " << r_tdata.read()
     123                << " status " << r_initiator_fsm.read() << std::endl;
     124#endif
     125            if (r_initiator_fsm.read() == M_IDLE)
     126            {
     127                r_buf_address = r_buf_address.read() +
     128                            (((uint64_t)r_tdata.read())<<32);
     129                r_target_fsm  = T_IDLE;
     130            }
    118131        }
    119132        break;
     
    122135    case T_WRITE_COUNT:
    123136    {
    124         if ( (r_initiator_fsm.read() == M_IDLE) and p_vci_target.rspack.read() ) 
    125         {
    126             r_nblocks    = (uint32_t)p_vci_target.wdata.read();
    127             r_target_fsm = T_IDLE;
    128         }
     137        if (p_vci_target.rspack.read() ) {
     138#ifdef SOCLIB_MODULE_DEBUG
     139            std::cout << "vci_bd WRITE_COUNT " << r_tdata.read() <<
     140                " status " << r_initiator_fsm.read() << std::endl;
     141#endif
     142            if (r_initiator_fsm.read() == M_IDLE)
     143            {
     144                r_nblocks    = (uint32_t)r_tdata.read();
     145                r_target_fsm = T_IDLE;
     146            }
     147        }
    129148        break;
    130149    }
     
    132151    case T_WRITE_LBA:
    133152    {
    134         if ( (r_initiator_fsm.read() == M_IDLE) and p_vci_target.rspack.read() ) 
    135         {
    136             r_lba        = (uint32_t)p_vci_target.wdata.read();
    137             r_target_fsm = T_IDLE;
    138         }
     153        if (p_vci_target.rspack.read() ) {
     154#ifdef SOCLIB_MODULE_DEBUG
     155            std::cout << "vci_bd WRITE_LBA " << r_tdata.read() <<
     156                " status " << r_initiator_fsm.read() << std::endl;
     157#endif
     158            if (r_initiator_fsm.read() == M_IDLE) {
     159                r_lba        = (uint32_t)r_tdata.read();
     160                r_target_fsm = T_IDLE;
     161            }
     162        }
    139163        break;
    140164    }
     
    144168        if ( p_vci_target.rspack.read() ) 
    145169        {
    146             if ( ((uint32_t)p_vci_target.wdata.read() == BLOCK_DEVICE_READ) and
     170#ifdef SOCLIB_MODULE_DEBUG
     171            std::cout << "vci_bd WRITE_OP " << r_tdata.read() <<
     172                " status " << r_initiator_fsm.read();
     173#endif
     174            if ( ((uint32_t)r_tdata.read() == BLOCK_DEVICE_READ) and
    147175                 (r_initiator_fsm.read() == M_IDLE) )
    148176            {
    149177                r_read = true;
    150178                r_go   = true;
    151             }
    152             else if ( ((uint32_t)p_vci_target.wdata.read() == BLOCK_DEVICE_WRITE) and
     179#ifdef SOCLIB_MODULE_DEBUG
     180                std::cout << " READ";
     181#endif
     182            }
     183            else if ( ((uint32_t)r_tdata.read() == BLOCK_DEVICE_WRITE) and
    153184                      (r_initiator_fsm.read() == M_IDLE) )
    154185            {
    155186                r_read = false;
    156187                r_go   = true;
     188#ifdef SOCLIB_MODULE_DEBUG
     189                std::cout << " WRITE";
     190#endif
    157191            }
    158192            else
     
    161195            }
    162196            r_target_fsm = T_IDLE;
     197#ifdef SOCLIB_MODULE_DEBUG
     198            std::cout << std::endl;
     199#endif
    163200        }
    164201        break;
     
    169206        if ( p_vci_target.rspack.read() )
    170207        {
     208#ifdef SOCLIB_MODULE_DEBUG
     209            std::cout << "vci_bd WRITE_IRQEN " << r_tdata.read()
     210                << " status " << r_initiator_fsm.read() << std::endl;
     211#endif
    171212            r_target_fsm = T_IDLE;
    172             r_irq_enable = (p_vci_target.wdata.read() != 0);
     213            r_irq_enable = (r_tdata.read() != 0);
    173214        }
    174215        break;
     
    248289            {
    249290                r_initiator_fsm = M_READ_ERROR;
     291#ifdef SOCLIB_MODULE_DEBUG
     292                std::cout << "vci_bd M_READ_ERROR" << std::endl;
     293#endif
    250294            }
    251295            else   
     
    345389            {
    346390                r_initiator_fsm = M_READ_ERROR;
     391#ifdef SOCLIB_MODULE_DEBUG
     392                std::cout << "vci_bd M_READ_ERROR" << std::endl;
     393#endif
    347394            }
    348395            else if ( (not aligned and (r_burst_count.read() == m_bursts_per_block)) or
     
    352399                {
    353400                    r_initiator_fsm = M_READ_SUCCESS;
     401#ifdef SOCLIB_MODULE_DEBUG
     402                    std::cout << "vci_bd M_READ_SUCCESS" << std::endl;
     403#endif
    354404                }
    355405                else                                              // last burst not last block
     
    430480                {
    431481                    r_initiator_fsm = M_WRITE_ERROR;
     482#ifdef SOCLIB_MODULE_DEBUG
     483                    std::cout << "vci_bd M_WRITE_ERROR" << std::endl;
     484#endif
    432485                }
    433486                else if ( (not aligned and (r_burst_count.read() == m_bursts_per_block)) or
     
    459512            {
    460513                r_initiator_fsm = M_WRITE_ERROR;
     514#ifdef SOCLIB_MODULE_DEBUG
     515                std::cout << "vci_bd M_WRITE_ERROR" << std::endl;
     516#endif
    461517            }
    462518            else if ( r_block_count.read() == r_nblocks.read() - 1 )
    463519            {
    464520                r_initiator_fsm = M_WRITE_SUCCESS;
     521#ifdef SOCLIB_MODULE_DEBUG
     522                std::cout << "vci_bd M_WRITE_SUCCESS" << std::endl;
     523#endif
    465524            }
    466525            else
     
    634693          (r_initiator_fsm == M_READ_ERROR)    ||
    635694          (r_initiator_fsm == M_WRITE_ERROR) ) && 
    636          r_irq_enable.read() ) p_irq = true;
    637     else                                   p_irq = false;
     695         r_irq_enable.read() ) {
     696#ifdef SOCLIB_MODULE_DEBUG
     697                std::cout << "vci_bd send IRQ" << std::endl;
     698#endif
     699                p_irq = true;
     700    } else                                 p_irq = false;
    638701} // end GenMoore()
    639702
Note: See TracChangeset for help on using the changeset viewer.