📄 brom16k.cpp
字号:
/* * TU Eindhoven * Eindhoven, The Netherlands * * Name : brom16k.cpp * * Author : A.S.Slusarczyk@tue.nl * * Date : * * Function : ROM based on VirtexII 16kb BlockRAMs * * */ #include "brom16k.h"void BROM16K_WRAPPER::in(){ sc_bv<DWORD> a = addr.read(); sc_bv<12> a_13_2 = a.range(13,2); sc_uint<12> addr12 = a_13_2; ADDR.write(addr12); DI00.write(0); DI01.write(0); DI02.write(0); DI03.write(0); DI04.write(0); DI05.write(0); DI06.write(0); DI07.write(0); bool e = (en.read()[0]!=0); EN.write(e); WE.write(0); SSR.write(0); CLK.write(clk.read());}void BROM16K_WRAPPER::out(){ sc_bv<32> data32; sc_bv<4> d0, d1, d2, d3, d4, d5, d6, d7; // gather bytes of the word from memory blocks d0 = DO00.read(); d1 = DO01.read(); d2 = DO02.read(); d3 = DO03.read(); d4 = DO04.read(); d5 = DO05.read(); d6 = DO06.read(); d7 = DO07.read(); data32 = (d0, d1, d2, d3, d4, d5, d6, d7); dout.write( data32 ); memwait.write( false );}////////////////////////////////////////////////////////////////////////////////////////////////////void BROM16K_DBGWRAPPER::in(){ bool clk = CLK.read(); dCLK.write(clk); // discard two least significant bits of the address sc_uint<12> addr = ADDR.read().range(13,2); dADDR.write(addr); // split the input data between the memory blocks sc_int<32> dwr = DI.read(); sc_int<4> dwr0 = dwr.range(31,28), dwr1 = dwr.range(28,24), dwr2 = dwr.range(23,20), dwr3 = dwr.range(19,16), dwr4 = dwr.range(15,12), dwr5 = dwr.range(11,8), dwr6 = dwr.range(7,4), dwr7 = dwr.range(3,0); dDI00.write(dwr0); dDI01.write(dwr1); dDI02.write(dwr2); dDI03.write(dwr3); dDI04.write(dwr4); dDI05.write(dwr5); dDI06.write(dwr6); dDI07.write(dwr7); bool en = EN.read(), we = WE.read(); dEN.write(en); dWE.write(we); dSSR.write(0);}void BROM16K_DBGWRAPPER::out(){ sc_int<32> data32; sc_int<4> d0, d1, d2, d3, d4, d5, d6, d7; // gather bytes of the word from memory blocks d0 = dDO00.read(); d1 = dDO01.read(); d2 = dDO02.read(); d3 = dDO03.read(); d4 = dDO04.read(); d5 = dDO05.read(); d6 = dDO06.read(); d7 = dDO07.read(); data32 = (d0, d1, d2, d3, d4, d5, d6, d7); DO.write( data32 );}#ifndef VERILOGvoid BROM16K::mem_init(const char *filename, int size){ vector<sc_int<4>* > v; v.push_back(bram00->memory); v.push_back(bram01->memory); v.push_back(bram02->memory); v.push_back(bram03->memory); v.push_back(bram04->memory); v.push_back(bram05->memory); v.push_back(bram06->memory); v.push_back(bram07->memory); init_memory(&v,size,filename);}void BROM16K::mem_dump(const char *filename, int size){ vector<sc_int<4>* > v; v.push_back(bram00->memory); v.push_back(bram01->memory); v.push_back(bram02->memory); v.push_back(bram03->memory); v.push_back(bram04->memory); v.push_back(bram05->memory); v.push_back(bram06->memory); v.push_back(bram07->memory); dump_memory(&v,size,filename);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -