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

📄 mem_bsyn.cpp

📁 Kluwer.Academic.Pub.Systemc.From.The.Ground.Up-此全书的范例程式。
💻 CPP
字号:
//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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -