⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cache_fetch.cpp

📁 国外开源的一个片上网络系统的源代码
💻 CPP
字号:
/* *  TU Eindhoven *  Eindhoven, The Netherlands * *  Name            :   cache_fetch.cpp * *  Author          :   A.S.Slusarczyk@tue.nl * *  Date            :    * *  Function        :   Cache fetch/store unit * * */#include "cache_fetch.h"void CACHE_FETCH::update_state(){  //busy = (next_state != IDLE);  current_state = next_state;  storing = n_storing;}void CACHE_FETCH::word_latch(){  if( word_clr.read() ) { word = 0; word_out = 0; }  else if( word_inc.read() ) { word_out = word.read(); word = word.read()+1; }}void CACHE_FETCH::store_latch(){  if( storew.read() || storeb.read() || fetch.read() ){    din_reg.write( din.read() );    addr_reg.write( addr.read() );  }}void CACHE_FETCH::logic(){  sc_bv<28> ma;  sc_bv<2> off;  sc_bv<2> byte;  bool store_byte, store_word;  store_byte = storeb.read();  store_word = storew.read();  if( current_state == IDLE ){    ma = addr.read().range(31,4);    off = addr.read().range(3,2);    byte = addr.read().range(1,0);    mem_din.write( din.read() );  }  else{    ma = addr_reg.read().range(31,4);    off = addr_reg.read().range(3,2);    byte = addr_reg.read().range(1,0);    mem_din.write( din_reg.read() );  }      if( store_word ) byte = 0;  // storing word - ignore byte number  else if( !store_byte ) { byte=0; off = word; } // fetching word - replace word offset  mem_addr.write( (ma,off,byte) );  dout.write(mem_dout.read());    word_rdy.write(false);  mem_ww.write(false);  mem_wb.write(false);  mem_r.write(false);  busy.write(false);    word_inc=false; word_clr=true;  next_state = current_state.read();  n_storing = 0;    switch( current_state.read() )    {    case IDLE :       if( fetch.read() ){        next_state = WAIT_MEM;        mem_r.write(true);        word_clr = false;        word_inc = true;        busy.write(true);      }      else if( storing.read()!=0 && !mem_rdy.read() ){        mem_ww.write( storing.read()[0]==true );        mem_wb.write( storing.read()[1]==true );        next_state = IDLE;        n_storing = storing.read();        busy.write(true);      }      else if( storew.read() || storeb.read() ){        next_state = IDLE;                mem_ww.write( storew.read() );        mem_wb.write( storeb.read() );        sc_bv<2> s;        s[0] = storew.read();        s[1] = storeb.read();        n_storing = s;      }      else {        next_state = IDLE;      }      break;          case WAIT_MEM :       word_clr = false;      busy.write(true);      n_storing = storing.read();            if( mem_rdy.read() ){        if( storing.read()==0 ) word_rdy.write(true);                if( storing.read() != 0 || word.read() == 0 ){                    mem_ww.write( false );          mem_wb.write( false );          mem_r.write( false );          n_storing = 0;          next_state = IDLE;          word_clr = true;          busy.write(false);//           if( storing.read()!=0 ){ //             mem_ww.write( false );//             mem_wb.write( false );//             mem_r.write( false );//             n_storing = 0;//             next_state = IDLE;//             busy.write(false);//           }//           else {//             next_state = LAST_WORD;//           }        }        else {          mem_r.write( storing.read()==0 );          mem_ww.write( storing.read()[0]==true );          mem_wb.write( storing.read()[1]==true );          word_inc = true;        }      }      else {        next_state = WAIT_MEM;      }      break;         case LAST_WORD :      word_rdy.write(true);      busy.write(true);      n_storing = 0;      next_state = IDLE;      break;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -