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

📄 netmemram.cpp

📁 改进的基于6个mips核的NOC网络
💻 CPP
字号:
/* *  TU Eindhoven *  Eindhoven, The Netherlands * *  Name            :   netmemram.cpp * *  Author          :   A.S.Slusarczyk@tue.nl * *  Date            :    * *  Function        :   RAM based on VirtexII 16kb BlockRAMs * * */ #include "netmemram.h"void NETMEM_RAM_WRAPPER::in(){      sc_uint<14> a = addr.read().range(15,2);    ADDR.write( a );    sc_int<16> 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<1> b0=byte.range(7,7),b1=byte.range(6,6),b2=byte.range(5,5),b3=byte.range(4,4),    b4=byte.range(3,3),b5=byte.range(2,2),b6=byte.range(1,1),b7=byte.range(0,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<1> d00=d.range(15,15),d01=d.range(14,14),d02=d.range(13,13),d03=d.range(12,12),    d04=d.range(11,11),d05=d.range(10,10),d06=d.range(9,9),d07=d.range(8,8),    d08=d.range(7,7),d09=d.range(6,6),d10=d.range(5,5),d11=d.range(4,4),    d12=d.range(3,3),d13=d.range(2,2),d14=d.range(1,1),d15=d.range(0,0);    // each block gets either own bit or a bit from the written byte  DI00.write( byte_to_0 ? b0 : d00 ); DI16.write( byte_to_2 ? b0 : d00 );  DI01.write( byte_to_0 ? b1 : d01 ); DI17.write( byte_to_2 ? b1 : d01 );  DI02.write( byte_to_0 ? b2 : d02 ); DI18.write( byte_to_2 ? b2 : d02 );  DI03.write( byte_to_0 ? b3 : d03 ); DI19.write( byte_to_2 ? b3 : d03 );  DI04.write( byte_to_0 ? b4 : d04 ); DI20.write( byte_to_2 ? b4 : d04 );  DI05.write( byte_to_0 ? b5 : d05 ); DI21.write( byte_to_2 ? b5 : d05 );  DI06.write( byte_to_0 ? b6 : d06 ); DI22.write( byte_to_2 ? b6 : d06 );  DI07.write( byte_to_0 ? b7 : d07 ); DI23.write( byte_to_2 ? b7 : d07 );  DI08.write( byte_to_1 ? b0 : d08 ); DI24.write( byte_to_3 ? b0 : d08 );  DI09.write( byte_to_1 ? b1 : d09 ); DI25.write( byte_to_3 ? b1 : d09 );  DI10.write( byte_to_1 ? b2 : d10 ); DI26.write( byte_to_3 ? b2 : d10 );  DI11.write( byte_to_1 ? b3 : d11 ); DI27.write( byte_to_3 ? b3 : d11 );  DI12.write( byte_to_1 ? b4 : d12 ); DI28.write( byte_to_3 ? b4 : d12 );  DI13.write( byte_to_1 ? b5 : d13 ); DI29.write( byte_to_3 ? b5 : d13 );  DI14.write( byte_to_1 ? b6 : d14 ); DI30.write( byte_to_3 ? b6 : d14 );  DI15.write( byte_to_1 ? b7 : d15 ); DI31.write( byte_to_3 ? b7 : d15 );    EN.write(r.read() || wh.read() || wl.read() || wb.read());  WE0.write( wh.read() || byte_to_0 );    WE1.write( wh.read() || byte_to_1 );    WE2.write( wl.read() || byte_to_2 );    WE3.write( wl.read() || byte_to_3 );  SSR.write(0);  CLK.write(clk.read());}void NETMEM_RAM_WRAPPER::out(){  sc_int<32> dout_v;  dout_v[31]=DO00.read();dout_v[30]=DO01.read();dout_v[29]=DO02.read();dout_v[28]=DO03.read();  dout_v[27]=DO04.read();dout_v[26]=DO05.read();dout_v[25]=DO06.read();dout_v[24]=DO07.read();  dout_v[23]=DO08.read();dout_v[22]=DO09.read();dout_v[21]=DO10.read();dout_v[20]=DO11.read();  dout_v[19]=DO12.read();dout_v[18]=DO13.read();dout_v[17]=DO14.read();dout_v[16]=DO15.read();  dout_v[15]=DO16.read();dout_v[14]=DO17.read();dout_v[13]=DO18.read();dout_v[12]=DO19.read();  dout_v[11]=DO20.read();dout_v[10]=DO21.read();dout_v[9]=DO22.read();dout_v[8]=DO23.read();  dout_v[7]=DO24.read();dout_v[6]=DO25.read();dout_v[5]=DO26.read();dout_v[4]=DO27.read();  dout_v[3]=DO28.read();dout_v[2]=DO29.read();dout_v[1]=DO30.read();dout_v[0]=DO31.read();  dout.write( dout_v );}////////////////////////////////////////////////////////////////////////////////////////////////////void NETMEM_RAM_DBGWRAPPER::in(){      // discard two least significant bits of the address  sc_uint<14> addr = ADDR.read().range(15,2);    dADDR.write(addr);    // split the input data between the memory blocks  sc_int<32> d = DI.read();  sc_int<1> d00=d.range(31,31),d01=d.range(30,30),d02=d.range(29,29),d03=d.range(28,28),    d04=d.range(27,27),d05=d.range(26,26),d06=d.range(25,25),    d07=d.range(24,24),d08=d.range(23,23),d09=d.range(22,22),    d10=d.range(21,21),d11=d.range(20,20),d12=d.range(19,19),    d13=d.range(18,18),d14=d.range(17,17),d15=d.range(16,16),    d16=d.range(15,15),d17=d.range(14,14),d18=d.range(13,13),    d19=d.range(12,12),d20=d.range(11,11),d21=d.range(10,10),    d22=d.range(9,9),d23=d.range(8,8),d24=d.range(7,7),    d25=d.range(6,6),d26=d.range(5,5),d27=d.range(4,4),    d28=d.range(3,3),d29=d.range(2,2),d30=d.range(1,1),d31=d.range(0,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);  dDI16.write(d16);dDI17.write(d17);dDI18.write(d18);dDI19.write(d19);  dDI20.write(d20);dDI21.write(d21);dDI22.write(d22);dDI23.write(d23);  dDI24.write(d24);dDI25.write(d25);dDI26.write(d26);dDI27.write(d27);  dDI28.write(d28);dDI29.write(d29);dDI30.write(d30);dDI31.write(d31);  dEN.write(EN.read());dWE.write(WE.read());dSSR.write(RST.read()); dCLK.write(CLK.read());}void NETMEM_RAM_DBGWRAPPER::out(){    sc_int<32> dout_v;  dout_v[31]=dDO00.read();dout_v[30]=dDO01.read();dout_v[29]=dDO02.read();dout_v[28]=dDO03.read();  dout_v[27]=dDO04.read();dout_v[26]=dDO05.read();dout_v[25]=dDO06.read();dout_v[24]=dDO07.read();  dout_v[23]=dDO08.read();dout_v[22]=dDO09.read();dout_v[21]=dDO10.read();dout_v[20]=dDO11.read();  dout_v[19]=dDO12.read();dout_v[18]=dDO13.read();dout_v[17]=dDO14.read();dout_v[16]=dDO15.read();  dout_v[15]=dDO16.read();dout_v[14]=dDO17.read();dout_v[13]=dDO18.read();dout_v[12]=dDO19.read();  dout_v[11]=dDO20.read();dout_v[10]=dDO21.read();dout_v[9]=dDO22.read();dout_v[8]=dDO23.read();  dout_v[7]=dDO24.read();dout_v[6]=dDO25.read();dout_v[5]=dDO26.read();dout_v[4]=dDO27.read();  dout_v[3]=dDO28.read();dout_v[2]=dDO29.read();dout_v[1]=dDO30.read();dout_v[0]=dDO31.read();  DO.write( dout_v );}#ifndef VERILOGvoid NETMEM_RAM::mem_init(const char *filename, int size){  vector<sc_int<1>* > 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);  v.push_back(bram16->memory);  v.push_back(bram17->memory);  v.push_back(bram18->memory);  v.push_back(bram19->memory);  v.push_back(bram20->memory);  v.push_back(bram21->memory);  v.push_back(bram22->memory);  v.push_back(bram23->memory);  v.push_back(bram24->memory);  v.push_back(bram25->memory);  v.push_back(bram26->memory);  v.push_back(bram27->memory);  v.push_back(bram28->memory);  v.push_back(bram29->memory);  v.push_back(bram30->memory);  v.push_back(bram31->memory);  init_memory(&v,size,filename);}void NETMEM_RAM::mem_dump(const char *filename, int size){  vector<sc_int<1>* > 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);  v.push_back(bram16->memory);  v.push_back(bram17->memory);  v.push_back(bram18->memory);  v.push_back(bram19->memory);  v.push_back(bram20->memory);  v.push_back(bram21->memory);  v.push_back(bram22->memory);  v.push_back(bram23->memory);  v.push_back(bram24->memory);  v.push_back(bram25->memory);  v.push_back(bram26->memory);  v.push_back(bram27->memory);  v.push_back(bram28->memory);  v.push_back(bram29->memory);  v.push_back(bram30->memory);  v.push_back(bram31->memory);  dump_memory(&v,size,filename);}#endif

⌨️ 快捷键说明

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