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