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

📄 tracing.cpp

📁 Kluwer.Academic.Pub.Systemc.From.The.Ground.Up-此全书的范例程式。
💻 CPP
字号:
//FILE:tracing.cpp (systemc)//# vim600:sw=2:tw=0:fdm=marker//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~//See tracing.h for more information//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#include <systemc.h>#include "tracing.h"#include "counter.h"#include "arbitrator.h"#include <set>extern std::set<sc_string> trace_cfg;extern sc_trace_file* tf;SC_HAS_PROCESS(tracing);tracing::tracing(sc_module_name nm,sc_clock& clock) //Constructor{{{: sc_module(nm){  // Submodule allocation  counter_i = new counter("counter_i");  arbitrator_i = new arbitrator("arbitrator_i",clock);  // Connectivity  arbitrator_i->request_ip(request_sig);  arbitrator_i->grant_op(grant_sig);  arbitrator_i->clock_ip(clock_ip);  counter_i->transact_ip(transact_sig);  counter_i->addr_ip(addr_sig);  counter_i->data_in_ip(data_snd_sig);  counter_i->data_out_op(data_rcv_sig);  // Process registration  SC_THREAD(tracing_thread);  if (trace_cfg.find(name())!=trace_cfg.end()) {    cout << "INFO: -- Tracing '" << name() << "'" << endl;    sc_trace(tf,transact_sig,"transact_sig");    sc_trace(tf,addr_sig,    "addr_sig");    sc_trace(tf,data_snd_sig,"data_snd_sig");    sc_trace(tf,data_rcv_sig,"data_rcv_sig");  }//endif}//endconstructor }}}// Processesvoid tracing::tracing_thread() { //{{{  // Initialization  unsigned addr;  int data;  write(0x1234,0xDeadBeef);  data = read(0x1234);  for (unsigned i=0;i!=10;i++) {    data = rand();    addr = rand() & 0x7FF;    write(addr,data);    data = read(addr);  }//endfor  wait(clock_ip->posedge_event());  sc_stop();}//endthread tracing::tracing_thread}}}void tracing::write(unsigned addr, int data) {//{{{  cout << "INFO(" << name() << "): write(" << hex << addr << "," << data << ")" << " @ " << dec << sc_time_stamp() << endl;  request_sig.write(false);  wait(clock_ip->negedge_event());  request_sig.write(true);  if (grant_sig.read() == false) {    wait(grant_sig.value_changed_event());  } else {    cout << "WARN: grant present before request!" << endl;  }//endif  addr_sig.write(addr);  data_snd_sig.write(data);  transact_sig.write(counter::WRITE);  wait(clock_ip->posedge_event());  transact_sig.write(counter::IDLE);  request_sig.write(false);  if (grant_sig.read() == true) {    wait(grant_sig.value_changed_event());  } else {    cout << "WARN: grant gone before wait!" << endl;  }//endif}//end tracing::write}}}int tracing::read(unsigned addr) {//{{{  int data;  wait(clock_ip->negedge_event());  request_sig.write(true);  if (grant_sig.read() == false) {    wait(grant_sig.value_changed_event());  } else {    cout << "WARN: grant present before request!" << endl;  }//endif  addr_sig.write(addr);  transact_sig.write(counter::READ);  wait(clock_ip->posedge_event());  data = data_rcv_sig.read();  transact_sig.write(counter::IDLE);  request_sig.write(false);  if (grant_sig.read() == true) {    wait(grant_sig.value_changed_event());  } else {    cout << "WARN: grant gone before wait!" << endl;  }//endif  cout << "INFO(" << name() << "): read(" << hex << addr << ") =>" << data << " @ " << dec << sc_time_stamp() << endl;  return data;}//end tracing::read}}}//Portions COPYRIGHT (C) 2004 Eklectic Ally, Inc.------------------{{{//// Permission granted for anybody to use this template provided this  //// acknowledgement of Eklectic Ally, Inc. <www.eklect.com> remains.   ////-----------------------------------------------------------------}}}////END $Id: tracing.cpp,v 1.1 2004/02/29 04:40:16 dcblack Exp $

⌨️ 快捷键说明

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