www.pudn.com > noc.rar > brom4k.cpp


/*
 *  TU Eindhoven
 *  Eindhoven, The Netherlands
 *
 *  Name            :   brom4k.cpp
 *
 *  Author          :   A.S.Slusarczyk@tue.nl
 *
 *  Date            :   
 *
 *  Function        :   Xilinx-Block-RAM-based ROM
 *
 *
 */
 
#include "brom4k.h"

void ROM4KCONV::clock()
{
  CLK.write(memclk.read());
}

void ROM4KCONV::in()
{  
  // discard two least significant bits of the address
  sc_bv<9> a_10_2 = addr.read().range(10,2);
  sc_uint<9> addr9 = a_10_2;
  
  ADDR.write(addr9);
    
  DI.write(0); DIP.write(0);
  EN.write(en.read()[0]==1);
  WE.write(0);  
  SSR.write(0); 
}

void ROM4KCONV::out()
{
  sc_bv data;

  data = DO.read();
  
  dout.write(data);
  memwait.write(false);
}

////////////////////////////////////////////////////////////////////////////////////////////////////

void DBGBROM4KCONV::in()
{  

  bool clk = CLK.read();
  
  mCLK.write(clk);
  
  // discard two least significant bits of the address
  sc_uint<9> addr = ADDR.read().range(10,2);  
  mADDR.write(addr); 
  
  sc_int<32> dwr = DI.read();
  mDI.write(dwr);
  mDIP.write( 0 );

  bool en = EN.read(), we = WE.read();
  mEN.write(en);
  mWE.write(we);
  mSSR.write(0);
}

void DBGBROM4KCONV::out()
{
  sc_int<32> data;

  data = mDO.read();
  DO.write( data );
}

////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef VERILOG
void ROM4K::mem_init(const char *filename){
  vector* > v;
  v.push_back(bram->memory);
  init_memory(&v,ROMSIZE,filename);
}
void ROM4K::mem_dump(const char *filename){
  vector* > v;
  v.push_back(bram->memory);
  dump_memory(&v,ROMSIZE,filename);
}
#endif