⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mem32k.cpp

📁 改进的基于6个mips核的NOC网络
💻 CPP
字号:
/* *  TU Eindhoven *  Eindhoven, The Netherlands * *  Name            :   mem32k.cpp * *  Author          :   A.S.Slusarczyk@tue.nl * *  Date            :    * *  Function        :   32kB RAM based on VirtexII 16kb BlockRAMs * * */ #include "mem32k.h"void MEM32K_WRAPPER::in(){      sc_uint<13> a = addr.read().range(14,2);  ADDR.write( a );    sc_int<32> d = din.read();  // if wb == true, we're writing the LSByte of the input word to the appropriate address  sc_uint<2> byteno = addr.read().range(1,0);  sc_int<8> byte = d.range(7,0);  sc_int<2> b0=byte.range(7,6),b1=byte.range(5,4),b2=byte.range(3,2),b3=byte.range(1,0);  bool byte_to_0 = (wb.read() && byteno==0),	byte_to_1 = (wb.read() && byteno==1),	byte_to_2 = (wb.read() && byteno==2),	byte_to_3 = (wb.read() && byteno==3);    // split the input data between the memory blocks  sc_int<2> d00=d.range(31,30),d01=d.range(29,28),d02=d.range(27,26),d03=d.range(25,24),    d04=d.range(23,22),d05=d.range(21,20),d06=d.range(19,18),d07=d.range(17,16),    d08=d.range(15,14),d09=d.range(13,12),d10=d.range(11,10),d11=d.range(9,8),    d12=d.range(7,6),d13=d.range(5,4),d14=d.range(3,2),d15=d.range(1,0);  // each block gets either own bit or a bit from the written byte  DI00.write( byte_to_0 ? b0 : d00 );   DI01.write( byte_to_0 ? b1 : d01 );   DI02.write( byte_to_0 ? b2 : d02 );   DI03.write( byte_to_0 ? b3 : d03 );   DI04.write( byte_to_1 ? b0 : d04 );   DI05.write( byte_to_1 ? b1 : d05 );   DI06.write( byte_to_1 ? b2 : d06 );   DI07.write( byte_to_1 ? b3 : d07 );   DI08.write( byte_to_2 ? b0 : d08 );   DI09.write( byte_to_2 ? b1 : d09 );   DI10.write( byte_to_2 ? b2 : d10 );   DI11.write( byte_to_2 ? b3 : d11 );   DI12.write( byte_to_3 ? b0 : d12 );   DI13.write( byte_to_3 ? b1 : d13 );   DI14.write( byte_to_3 ? b2 : d14 );   DI15.write( byte_to_3 ? b3 : d15 );     EN.write(r.read() || ww.read() || wb.read());  WE0.write( ww.read() || byte_to_0 );    WE1.write( ww.read() || byte_to_1 );    WE2.write( ww.read() || byte_to_2 );    WE3.write( ww.read() || byte_to_3 );  SSR.write(0);  CLK.write(clk.read());}void MEM32K_WRAPPER::out(){  sc_int<32> dout_v;  dout_v.range(31,30)=DO00.read();dout_v.range(29,28)=DO01.read();  dout_v.range(27,26)=DO02.read();dout_v.range(25,24)=DO03.read();  dout_v.range(23,22)=DO04.read();dout_v.range(21,20)=DO05.read();  dout_v.range(19,18)=DO06.read();dout_v.range(17,16)=DO07.read();  dout_v.range(15,14)=DO08.read();dout_v.range(13,12)=DO09.read();  dout_v.range(11,10)=DO10.read();dout_v.range(9,8)=DO11.read();  dout_v.range(7,6)=DO12.read();dout_v.range(5,4)=DO13.read();  dout_v.range(3,2)=DO14.read();dout_v.range(1,0)=DO15.read();  dout.write( dout_v );}////////////////////////////////////////////////////////////////////////////////////////////////////void MEM32K_DBGWRAPPER::in(){      // discard two least significant bits of the address  sc_uint<13> addr = ADDR.read().range(14,2);    dADDR.write(addr);    // split the input data between the memory blocks  sc_int<32> d = DI.read();  sc_int<2> d00=d.range(31,30),d01=d.range(29,28),d02=d.range(27,26),d03=d.range(25,24),    d04=d.range(23,22),d05=d.range(21,20),d06=d.range(19,18),d07=d.range(17,16),    d08=d.range(15,14),d09=d.range(13,12),d10=d.range(11,10),d11=d.range(9,8),    d12=d.range(7,6),d13=d.range(5,4),d14=d.range(3,2),d15=d.range(1,0);  dDI00.write(d00);dDI01.write(d01);dDI02.write(d02);dDI03.write(d03);  dDI04.write(d04);dDI05.write(d05);dDI06.write(d06);dDI07.write(d07);  dDI08.write(d08);dDI09.write(d09);dDI10.write(d10);dDI11.write(d11);  dDI12.write(d12);dDI13.write(d13);dDI14.write(d14);dDI15.write(d15);  dEN.write(EN.read());dWE.write(WE.read());dSSR.write(RST.read()); dCLK.write(CLK.read());}void MEM32K_DBGWRAPPER::out(){    sc_int<32> dout_v;  dout_v.range(31,30)=dDO00.read();dout_v.range(29,28)=dDO01.read();  dout_v.range(27,26)=dDO02.read();dout_v.range(25,24)=dDO03.read();  dout_v.range(23,22)=dDO04.read();dout_v.range(21,20)=dDO05.read();  dout_v.range(19,18)=dDO06.read();dout_v.range(17,16)=dDO07.read();  dout_v.range(15,14)=dDO08.read();dout_v.range(13,12)=dDO09.read();  dout_v.range(11,10)=dDO10.read();dout_v.range(9,8)=dDO11.read();  dout_v.range(7,6)=dDO12.read();dout_v.range(5,4)=dDO13.read();  dout_v.range(3,2)=dDO14.read();dout_v.range(1,0)=dDO15.read();  DO.write( dout_v );}#ifndef VERILOGvoid MEM32K::mem_init(const char *filename, int size){  vector<sc_int<2>* > 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);  v.push_back(bram08->memory);  v.push_back(bram09->memory);  v.push_back(bram10->memory);  v.push_back(bram11->memory);  v.push_back(bram12->memory);  v.push_back(bram13->memory);  v.push_back(bram14->memory);  v.push_back(bram15->memory);  init_memory(&v,size,filename);}void MEM32K::mem_dump(const char *filename, int size){  vector<sc_int<2>* > 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);  v.push_back(bram08->memory);  v.push_back(bram09->memory);  v.push_back(bram10->memory);  v.push_back(bram11->memory);  v.push_back(bram12->memory);  v.push_back(bram13->memory);  v.push_back(bram14->memory);  v.push_back(bram15->memory);  dump_memory(&v,size,filename);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -