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

📄 cache.h

📁 改进的基于6个mips核的NOC网络
💻 H
字号:
#ifndef CACHE_H_INCLUDED#define CACHE_H_INCLUDED#include <systemc.h>#include "cache_dim.h"//#include "cache_memory.h"#include "cache_bram.h"#include "cache_ctrl.h"SC_MODULE(DWORD_REG_SEL){  sc_in<bool> clk, disable, select;  sc_in< sc_bv<DWORD> > din;  sc_out< sc_bv<DWORD> > dout;  sc_out< sc_bv<DWORD> > dout_select;    sc_signal< sc_bv<DWORD> > data;    void reg(){	if( !disable.read() ) 	  data.write(din.read());  }  void out(){	dout.write( data.read() );	dout_select.write( select.read() ? data.read() : din.read() );  }  SC_CTOR(DWORD_REG_SEL){	SC_METHOD(reg);	sensitive_pos << clk;	SC_METHOD(out);	sensitive << select << data << din;  }};SC_MODULE(REG2_SEL){  sc_in<bool> clk, disable, select;  sc_in< sc_bv<2> > din;  sc_out< sc_bv<2> > dout;  sc_out< sc_bv<2> > dout_select;    sc_signal< sc_bv<2> > data;    void reg(){	if( !disable.read() ) 	  data.write(din.read());  }  void out(){	dout.write( data.read() );	dout_select.write( select.read() ? data.read() : din.read() );  }  SC_CTOR(REG2_SEL){	SC_METHOD(reg);	sensitive_pos << clk;	SC_METHOD(out);	sensitive << select << data << din;  }};SC_MODULE(MEM_BUFFER){  sc_in< sc_bv<32> > din, addrin;  sc_out< sc_bv<32> > dout, addrout;    void out(){	dout.write( din.read() );	addrout.write( addrin.read() );  }  SC_CTOR(MEM_BUFFER){	SC_METHOD(out);	sensitive << din << addrin;  }};SC_MODULE(REG_DISABLE){  sc_in< bool > memwait;  sc_in< sc_bv<1> > en;  sc_out< bool > disable;    SC_CTOR(REG_DISABLE){	SC_METHOD(out);	sensitive << memwait << en;  }    void out(){	disable.write( memwait.read() || (en.read()[0]==false) );  }};SC_MODULE(DATA_CACHE){    sc_in < sc_bv<DWORD> > addr;  sc_in< sc_bv<DWORD> > din;  sc_out< sc_bv<DWORD> > dout;  sc_out< bool > memwait;  sc_in< sc_bv<W_MEMWRITE> > w;  sc_in< sc_bv<W_MEMREAD> > r;  sc_in< bool > clk;  sc_in< sc_bv<1> > en;    sc_out< sc_bv<32> > mem_addr, mem_din;  sc_in< sc_bv<32> > mem_dout;  sc_out< bool > mem_ww, mem_wb, mem_r;  sc_in< bool > mem_rdy;  CACHE_MEMORY *cache_memory;  CACHE_DIN_SELECT *din_select;  CACHE_ADDR_SPLIT *addr_split;  CACHE_BYTE_SELECT *byte_select;  CACHE_MISS_CTRL *miss_ctrl;    DWORD_REG_SEL *addr_register, *data_register;  REG2_SEL *r_register, *w_register;  REG_DISABLE *register_disable;    sc_signal< sc_bv<32> > din_reg, addr_reg;  sc_signal< bool > current_reg;  sc_signal< sc_bv<32> > data_current, addr_current;    sc_signal< sc_bv<32> > data_mem_in, data_fetch_out, data_mem_out;    sc_signal< sc_bv<TAG_BITS> > tag_in, tag_out, tag_reg;  sc_signal< sc_bv<INDEX_BITS> > index, index_reg;  sc_signal< sc_bv<OFFSET_BITS> > offset, offset_reg;  sc_signal< sc_uint<2> > byte, byte_reg;  sc_signal< bool > cache_en, cache_we;  sc_signal< bool > valid, valid_select;  sc_signal< bool > fetch, storew, storeb, fetch_busy;  sc_signal< sc_uint<2> > fetch_word;  sc_signal< bool > fetch_word_rdy;  sc_signal< bool > rewrite, byte_rpl;  sc_signal< sc_bv<W_MEMWRITE> > w_reg, w_current;  sc_signal< sc_bv<W_MEMREAD> > r_reg, r_current;  sc_signal< bool > reg_disable;    SC_CTOR(DATA_CACHE)	{	  cache_memory = new CACHE_MEMORY("cache_memory");	  din_select = new CACHE_DIN_SELECT("din_select");	  addr_split = new CACHE_ADDR_SPLIT("addr_split");	  byte_select = new CACHE_BYTE_SELECT("byte_select");	  miss_ctrl = new CACHE_MISS_CTRL("miss_ctrl");	  addr_register = new DWORD_REG_SEL("addr_register");	  data_register = new DWORD_REG_SEL("data_register");	  r_register = new REG2_SEL("r_register");	  w_register = new REG2_SEL("w_register");	  register_disable = new REG_DISABLE("register_disable");	  	  register_disable->en(en);	  register_disable->memwait(memwait);	  register_disable->disable(reg_disable);	  	  addr_register->din(addr);	  addr_register->dout(addr_reg);	  addr_register->dout_select(addr_current);	  addr_register->clk(clk);	  addr_register->disable(reg_disable);	  addr_register->select(current_reg);	  data_register->din(din);	  data_register->dout(din_reg);	  data_register->dout_select(data_current);	  data_register->clk(clk);	  data_register->disable(reg_disable);	  data_register->select(current_reg);	  r_register->din(r);	  r_register->dout(r_reg);	  r_register->dout_select(r_current);	  r_register->clk(clk);	  r_register->disable(reg_disable);	  r_register->select(current_reg);	  w_register->din(w);	  w_register->dout(w_reg);	  w_register->dout_select(w_current);	  w_register->clk(clk);	  w_register->disable(reg_disable);	  w_register->select(current_reg);	  cache_memory->clk(clk);	  cache_memory->din(data_mem_in);	  cache_memory->valid_in(valid_select);	  cache_memory->tagi(tag_in);	  cache_memory->index(index);	  cache_memory->offset(offset);	  cache_memory->en(cache_en);	  cache_memory->we(cache_we);	  cache_memory->tago(tag_out);	  cache_memory->dout(data_mem_out);	  cache_memory->valid(valid);	  	  	  din_select->din_data(data_current);	  din_select->din_data_reg(din_reg);	  // din_select->din_fetch(data_fetch_out);	  din_select->din_fetch(mem_dout);	  din_select->din_out(data_mem_out);	  din_select->w(w);	  din_select->byte(byte);	  din_select->fetch_word_rdy(fetch_word_rdy);	  din_select->rewrite(rewrite);	  din_select->byte_rpl(byte_rpl);	  din_select->data(data_mem_in);	  din_select->valid(valid_select);	  din_select->rewrite_valid(valid);	  	  addr_split->addr(addr_current);	  	 	  addr_split->addr_reg(addr_reg);	  	 	  addr_split->tag(tag_in);	  addr_split->index(index);	  addr_split->offset(offset);	  addr_split->byte(byte);	  addr_split->tag_reg(tag_reg);	  addr_split->index_reg(index_reg);	  addr_split->offset_reg(offset_reg);	  addr_split->byte_reg(byte_reg);	  addr_split->fetch_word( fetch_word );	  addr_split->fetch_word_rdy( fetch_word_rdy );	  addr_split->rewrite(rewrite);	  addr_split->tag_rewrite(tag_out);			  byte_select->din(data_mem_out);	  byte_select->byte(byte_reg);	  byte_select->r(r_reg);	  byte_select->dout(dout);	  	  miss_ctrl->clk(clk);	  miss_ctrl->en(en);	  miss_ctrl->cache_valid(valid);	  miss_ctrl->cache_tag(tag_out);	  miss_ctrl->addr_tag(tag_reg);	  miss_ctrl->miss_wait(memwait);	  miss_ctrl->fetch_word(fetch_word);	  miss_ctrl->fetch_word_rdy(fetch_word_rdy);	  miss_ctrl->w(w);	  miss_ctrl->r(r);	  miss_ctrl->cache_we(cache_we);	  miss_ctrl->cache_en(cache_en);	  miss_ctrl->rewrite(rewrite);	  miss_ctrl->byte_rpl(byte_rpl);	  miss_ctrl->current_reg(current_reg);	  miss_ctrl->mem_wb(mem_wb);	  miss_ctrl->mem_ww(mem_ww);	  miss_ctrl->mem_r(mem_r);	  miss_ctrl->mem_rdy(mem_rdy);	  miss_ctrl->din( data_current );	  miss_ctrl->addr( addr_current );	  miss_ctrl->mem_din( mem_din );	  miss_ctrl->mem_addr( mem_addr );	  	}};#endif

⌨️ 快捷键说明

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