www.pudn.com > noc.rar > brom4k.h
/*
* TU Eindhoven
* Eindhoven, The Netherlands
*
* Name : brom4k.h
*
* Author : A.S.Slusarczyk@tue.nl
*
* Date :
*
* Function : Xilinx-Block-RAM-based ROM
*
*
*/
#ifndef BROM4K_H_INCLUDED
#define BROM4K_H_INCLUDED
#include "mips.h"
#include "xlxram.h"
// wrapper around BlockRAM memory
SC_MODULE(ROM4KCONV) {
sc_in < sc_bv > addr;
sc_out< sc_bv > dout;
sc_out< bool > memwait;
sc_in< bool > memclk;
sc_in< sc_bv<1> > en;
sc_in > DO;
sc_in > DOP;
sc_out > ADDR;
sc_out > DI;
sc_out > DIP;
sc_out EN;
sc_out CLK;
sc_out WE;
sc_out SSR;
void clock();
void in();
void out();
SC_CTOR(ROM4KCONV) {
SC_METHOD(in);
sensitive << addr << en;
SC_METHOD(out);
sensitive << DO << DOP;
SC_METHOD(clock);
sensitive << memclk;
};
};
// Converter for the debugging access
SC_MODULE(DBGBROM4KCONV) {
sc_out > DO;
sc_in > ADDR;
sc_in > DI;
sc_in EN;
sc_in CLK;
sc_in WE;
sc_in RST;
sc_in > mDO;
sc_in > mDOP;
sc_out > mADDR;
sc_out > mDI;
sc_out > mDIP;
sc_out mEN;
sc_out mCLK;
sc_out mWE;
sc_out mSSR;
void in();
void out();
SC_CTOR(DBGBROM4KCONV) {
SC_METHOD(in);
sensitive << ADDR << DI << EN << WE << RST << CLK;
SC_METHOD(out);
sensitive << mDO << mDOP;
};
};
SC_MODULE(ROM4K) {
sc_in < sc_bv > addr;
sc_out< sc_bv > dout;
sc_in< bool > clk;
sc_out< bool > memwait;
sc_in< sc_bv<1> > en;
RAMB16_S36_S36 *bram;
ROM4KCONV *conv;
sc_signal > DO;
sc_signal > DOP, DIP;
sc_signal > ADDR;
sc_signal > DI;
sc_signal EN;
sc_signal CLK;
sc_signal WE;
sc_signal SSR;
DBGBROM4KCONV *dbgconv;
sc_out > dbgDO;
sc_in > dbgADDR;
sc_in > dbgDI;
sc_in dbgEN;
sc_in dbgCLK;
sc_in dbgWE;
sc_in dbgRST;
sc_signal > dDO;
sc_signal > dDOP, dDIP;
sc_signal > dADDR;
sc_signal > dDI;
sc_signal dEN;
sc_signal dCLK;
sc_signal dWE;
sc_signal dSSR;
#ifndef VERILOG
void mem_init(const char *filename);
void mem_dump(const char *filename);
#endif
SC_CTOR(ROM4K) {
bram = new RAMB16_S36_S36("bram");
conv = new ROM4KCONV("conv");
bram->DOA(DO);
conv->DO(DO);
bram->DOPA(DOP);
conv->DOP(DOP);
bram->ADDRA(ADDR);
conv->ADDR(ADDR);
bram->DIA(DI);
conv->DI(DI);
bram->DIPA(DIP);
conv->DIP(DIP);
bram->ENA(EN);
conv->EN(EN);
bram->CLKA(CLK);
conv->CLK(CLK);
bram->WEA(WE);
conv->WE(WE);
bram->SSRA(SSR);
conv->SSR(SSR);
conv->addr(addr);
conv->dout(dout);
conv->memwait(memwait);
conv->memclk(clk);
conv->en(en);
dbgconv = new DBGBROM4KCONV("dbgconv");
dbgconv->DO(dbgDO);
dbgconv->ADDR(dbgADDR);
dbgconv->DI(dbgDI);
dbgconv->EN(dbgEN);
dbgconv->CLK(dbgCLK);
dbgconv->WE(dbgWE);
dbgconv->RST(dbgRST);
bram->DOB(dDO); dbgconv->mDO(dDO);
bram->DOPB(dDOP); dbgconv->mDOP(dDOP);
bram->ADDRB(dADDR); dbgconv->mADDR(dADDR);
bram->DIB(dDI); dbgconv->mDI(dDI);
bram->DIPB(dDIP); dbgconv->mDIP(dDIP);
bram->ENB(dEN); dbgconv->mEN(dEN);
bram->CLKB(dCLK); dbgconv->mCLK(dCLK);
bram->WEB(dWE); dbgconv->mWE(dWE);
bram->SSRB(dSSR); dbgconv->mSSR(dSSR);
};
};
#endif