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

📄 brom8k.cpp

📁 改进的基于6个mips核的NOC网络
💻 CPP
字号:
/* *  TU Eindhoven *  Eindhoven, The Netherlands * *  Name            :   brom8k.cpp * *  Author          :   A.S.Slusarczyk@tue.nl * *  Date            :    * *  Function        :   ROM based on VirtexII 16kb BlockRAMs * * */ #include "brom8k.h"void BROM8KCONV::in(){    sc_bv<DWORD> a = addr.read();    sc_bv<11> a_12_2 = a.range(12,2);  sc_uint<11> addr11 = a_12_2;    ADDR1.write(addr11); ADDR0.write(addr11); ADDR2.write(addr11); ADDR3.write(addr11);       DI0.write(0);   DI1.write(0);   DI2.write(0);   DI3.write(0);   DIP0.write(0); DIP1.write(0); DIP2.write(0); DIP3.write(0);     bool e = (en.read()[0]!=0);  EN0.write(e);  EN1.write(e); EN2.write(e);  EN3.write(e);  WE0.write(0);    WE1.write(0);   WE2.write(0);    WE3.write(0);  SSR0.write(0); SSR1.write(0); SSR2.write(0); SSR3.write(0);  CLK0.write(clk.read()); CLK1.write(clk.read()); CLK2.write(clk.read()); CLK3.write(clk.read()); }void BROM8KCONV::out(){  sc_bv<32> data32;  sc_bv<8> d0, d1, d2, d3;   // gather bytes of the word from memory blocks  d0 = DO0.read();  d1 = DO1.read();  d2 = DO2.read();  d3 = DO3.read();    // 3 LS bytes go straight to the output, regardless of mode#ifdef MIPS_BIG_ENDIAN  data32 = (d0, d1, d2, d3);#else  data32 = (d3, d2, d1, d0);#endif    dout.write( data32 );  memwait.write( false );}////////////////////////////////////////////////////////////////////////////////////////////////////void DBGBROM8KCONV::in(){    bool clk = CLK.read();    CLK0.write(clk); CLK1.write(clk); CLK2.write(clk); CLK3.write(clk);    // discard two least significant bits of the address  sc_uint<11> addr = ADDR.read().range(12,2);    ADDR1.write(addr); ADDR0.write(addr); ADDR2.write(addr); ADDR3.write(addr);     // split the input data between the memory blocks  sc_int<32> dwr = DI.read();#ifdef MIPS_BIG_ENDIAN  sc_int<8> dwr0 = dwr.range(31,24), dwr1 = dwr.range(23,16), dwr2 = dwr.range(15,8), dwr3 = dwr.range(7,0);#else  sc_int<8> dwr3 = dwr.range(31,24), dwr2 = dwr.range(23,16), dwr1 = dwr.range(15,8), dwr0 = dwr.range(7,0);#endif  DI0.write(dwr0); DI1.write(dwr1); DI2.write(dwr2); DI3.write(dwr3);   bool en = EN.read(), we = WE.read();  EN0.write(en); EN1.write(en); EN2.write(en); EN3.write(en);  WE0.write(we); WE1.write(we); WE2.write(we); WE3.write(we);  SSR0.write(0); SSR1.write(0); SSR2.write(0); SSR3.write(0);  DIP0.write(1); DIP1.write(1); DIP2.write(1); DIP3.write(1); }void DBGBROM8KCONV::out(){  sc_int<32> data;  sc_int<8> d0, d1, d2, d3;    // gather bytes of the word from memory blocks  d0 = DO0.read();  d1 = DO1.read();  d2 = DO2.read();  d3 = DO3.read();#ifdef MIPS_BIG_ENDIAN  data = (d0, d1, d2, d3);#else  data = (d3, d2, d1, d0);#endif    DO.write( data );}#ifndef VERILOGvoid ROM8K::mem_init(const char *filename, int size){  vector<sc_int<8>* > v;  v.push_back(bram0->memory);  v.push_back(bram1->memory);  v.push_back(bram2->memory);  v.push_back(bram3->memory);  init_memory(&v,size,filename);}void ROM8K::mem_dump(const char *filename, int size){  vector<sc_int<8>* > v;  v.push_back(bram0->memory);  v.push_back(bram1->memory);  v.push_back(bram2->memory);  v.push_back(bram3->memory);  dump_memory(&v,size,filename);}#endif

⌨️ 快捷键说明

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