www.pudn.com > noc.rar > benif.h



#include 
#include "mmips.h"

SC_MODULE(BENIF_WRAPPER)
{
  sc_in< bool > IFCLK;
  sc_in< bool > WRITE_STROBE;
  sc_in< bool > READ_STROBE;
  sc_in< bool > DMA_ENABLE;
  sc_in< bool > DMA_DIRECTION;
  sc_in< bool > DMA_RDY;
  sc_in< bool > DMA_DATA_AVAILABLE;
  sc_in< bool > RST;
  sc_in< bool > SYNC_RESET;
  sc_in< bool > DMA_RESET;

  sc_in< sc_uint<31> > ADDRESS;
  sc_inout_rv< 32 > DATA;

  sc_inout_rv< 32 > DMA_DATA;
  sc_in< sc_uint<32> > COUNT;
  sc_in< sc_uint<4> > DMA_SEL;

  sc_out< bool > DMA_WEN;
  sc_out< bool > DMA_REN;
  sc_out< bool > INT;

  sc_out< sc_bv<4> > LEDS;

  sc_out > memADDR;
  sc_out > memDI;
  sc_out memEN;
  sc_out memCLK;
  sc_out memRST;
  sc_in > ramDO,romDO;
  sc_out ramWE,romWE;
  sc_in > pc;
  sc_out enable;
  sc_out reset;

  sc_signal< sc_uint<32> > addr;
  sc_signal< sc_uint<32> > memsel;
  sc_signal< sc_uint<25> > cnt;
  
  sc_signal< sc_uint<32> > control;
  
  void logic();
  void count();
  void register_write();
  void register_read();
  void memory_input();
  
  SC_CTOR(BENIF_WRAPPER)
  {
    SC_METHOD(logic);
    sensitive << IFCLK << WRITE_STROBE << READ_STROBE << DMA_ENABLE 
              << DMA_DIRECTION << DMA_RDY << DMA_DATA_AVAILABLE
              << RST << SYNC_RESET << DMA_RESET
              << ADDRESS << DATA
              << DMA_DATA << COUNT << DMA_SEL
              << control << addr << memsel << cnt;

    SC_METHOD(memory_input);
    sensitive << IFCLK << DATA << addr << memsel << ADDRESS << WRITE_STROBE << control;

    SC_METHOD(count);
    sensitive_pos << IFCLK << RST;
    
    SC_METHOD(register_write);
    sensitive_pos << IFCLK << RST;
    
    SC_METHOD(register_read);
    sensitive << READ_STROBE << ADDRESS << addr << memsel;
	sensitive << pc;
	sensitive << ramDO << romDO;
  }
};

SC_MODULE(BENIF)
{
  mMIPS *mmips;
  BENIF_WRAPPER *wrapper;

  
  sc_in   MIPSCLK;
  
  sc_in< bool > IFCLK;
  sc_in< bool > WRITE_STROBE;
  sc_in< bool > READ_STROBE;
  sc_in< bool > DMA_ENABLE;
  sc_in< bool > DMA_DIRECTION;
  sc_in< bool > DMA_RDY;
  sc_in< bool > DMA_DATA_AVAILABLE;
  sc_in< bool > RST;
  sc_in< bool > SYNC_RESET;
  sc_in< bool > DMA_RESET;

  sc_in< sc_uint<31> > ADDRESS;
  sc_inout_rv< 32 > DATA;
  sc_inout_rv< 32 > DMA_DATA;
  sc_in< sc_uint<32> > COUNT;
  sc_in< sc_uint<4> > DMA_SEL;

  sc_out< bool > DMA_WEN;
  sc_out< bool > DMA_REN;
  sc_out< bool > INT;
  sc_out< sc_bv<4> > LEDS;

  sc_signal > memADDR;
  sc_signal > memDI;
  sc_signal memEN;
  sc_signal memCLK;
  sc_signal memRST;

  sc_signal > ramDO,romDO;
  sc_signal ramWE,romWE;
  sc_signal > pc;
  sc_signal enable;
  sc_signal reset;

  
  // unused device interface
  sc_signal< sc_bv > dev_dout;
  sc_signal< sc_bv > dev_din;
  sc_signal< bool > dev_r, dev_w;
  sc_signal< bool > dev_rdyr, dev_rdyw;
  sc_signal< bool > dev_wdata, dev_waddr;
  sc_signal dev_send_eop;
  sc_signal dev_rcv_eop;


  SC_CTOR(BENIF)
  {
    mmips = new mMIPS("mMIPS");
    wrapper = new BENIF_WRAPPER("wrapper");

    wrapper->reset(reset);
    wrapper->enable(enable);
    wrapper->IFCLK(IFCLK);
    wrapper->WRITE_STROBE(WRITE_STROBE);
    wrapper->READ_STROBE(READ_STROBE);
    wrapper->DMA_ENABLE(DMA_ENABLE);
    wrapper->DMA_DIRECTION(DMA_DIRECTION);
    wrapper->DMA_RDY(DMA_RDY);
    wrapper->DMA_DATA_AVAILABLE(DMA_DATA_AVAILABLE);
    wrapper->RST(RST);
    wrapper->SYNC_RESET(SYNC_RESET);
    wrapper->DMA_RESET(DMA_RESET);
    wrapper->ADDRESS(ADDRESS);
    wrapper->DATA(DATA);
    wrapper->DMA_DATA(DMA_DATA);
    wrapper->COUNT(COUNT);
    wrapper->DMA_SEL(DMA_SEL);
    wrapper->DMA_WEN(DMA_WEN);
    wrapper->DMA_REN(DMA_REN);
    wrapper->INT(INT);
    wrapper->LEDS(LEDS);

    wrapper->memADDR(memADDR);
    wrapper->memDI(memDI);
    wrapper->memEN(memEN);
    wrapper->memCLK(memCLK);
    wrapper->memRST(memRST);
    wrapper->ramDO(ramDO);
    wrapper->ramWE(ramWE);
    wrapper->romDO(romDO);
    wrapper->romWE(romWE);

	mmips->clock(MIPSCLK); mmips->reset(reset); mmips->enable(enable);

    mmips->ramADDR(memADDR); mmips->romADDR(memADDR);
    mmips->ramDI(memDI); mmips->romDI(memDI);
    mmips->ramEN(memEN); mmips->romEN(memEN);
    mmips->ramCLK(memCLK); mmips->romCLK(memCLK);
    mmips->ramRST(memRST); mmips->romRST(memRST);
    mmips->ramDO(ramDO);
    mmips->ramWE(ramWE);
    mmips->romDO(romDO);
    mmips->romWE(romWE);

    mmips->bus_pc(pc); wrapper->pc(pc);
  
  
	mmips->dev_dout(dev_dout);
	mmips->dev_din(dev_din);
	mmips->dev_r(dev_r);
	mmips->dev_w(dev_w);
	mmips->dev_rdyr(dev_rdyr);
	mmips->dev_rdyw(dev_rdyw);
	mmips->dev_wdata(dev_wdata);
	mmips->dev_waddr(dev_waddr);
	mmips->dev_send_eop(dev_send_eop);
	mmips->dev_rcv_eop(dev_rcv_eop);

  }
};