mem_bsyn.cpp

来自「Kluwer.Academic.Pub.Systemc.From.The.Gro」· C++ 代码 · 共 51 行

CPP
51
字号
//BEGIN: mem_bsyn.cpp (systemc)//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//See hier_chan.h for more information//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#include <systemc.h>#include "mem_bsyn.h"void mem_bsyn::mem_thread() {  bool                   reading = false;  bool                   m_rw;  unsigned long          addr;  // Reset errors & float the data bus  err.write(false);  d->write(FLOAT);  for(;;) {    // Wait for a load instruction (active high) at a clock edge    while (ld->read() == false) {      wait(ld->value_changed_event()); // wait here improves efficiency      wait(ck->posedge_event());    };    addr = a->read();    if (rw->read()) { // reading      // Allow for back-to-back reads. Verify legal addresses      while (ld->read() && m_base <= addr && addr < m_base+m_size) {        wait(ck->posedge_event());        d->write(m_mem[addr-m_base]);        addr = a->read();        if (ld->read() && !rw->read()) { // illegal write          cout << "ERROR:"<<name()<<"@"<<sc_time_stamp()               << ": Illegal write ignored immediately following read: " << addr << endl;          err.write(true);        }//endif      }//endwhile      // remove data and errors at next clock edge      wait(ck->posedge_event());      d->write(FLOAT);      err.write(false);    } else { // writing      // Validate address and write      if (m_base <= addr && addr < m_base+m_size) {        m_mem[addr-m_base] = d->read().to_long();      }//endif      wait(ck->posedge_event());    }//endif  }//endforever}//end mem_bsyn::mem_thread//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//END $Id: mem_bsyn.cpp,v 1.1 2004/02/29 04:39:35 dcblack Exp $

⌨️ 快捷键说明

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