📄 netmemif.cpp
字号:
#include "netmemif.h"void NETMEMIF::buffers_process(){ if( rst.read() ) { write_address.write(0); read_address.write(0); read_counter.write(0); write_counter.write(0); byte.write(0); operation.write(0); read_return_address.write(0); write_return_address.write(0); memory_buffer.write(0); } else { sc_int<16> data = sc_bv<16>(data_in.read().range(15,0)); sc_int<16> wah = write_address.read().range(31,16), wal = write_address.read().range(15,0); sc_int<16> rah = read_address.read().range(31,16), ral = read_address.read().range(15,0); if( wr_wah.read() || wr_wal.read() ) { if( wr_wah.read() ) write_address.write( (data,wal) ); if( wr_wal.read() ) write_address.write( (wah,data) ); } else if( inc_wa.read() ) write_address.write( write_address.read()+4 ); if( wr_rah.read() || wr_ral.read() ){ if( wr_rah.read() ) read_address.write( (data,ral) ); if( wr_ral.read() ) read_address.write( (rah,data) ); } else if( inc_ra.read() ) read_address.write( read_address.read()+4 ); sc_int<8> d70 = data.range(7,0); sc_uint<2> d1514 = data.range(15,14); if( wr_rc.read() ) read_counter.write( d70 ); else if( dec_rc.read() ) read_counter.write( read_counter.read()-1 ); if( wr_wc.read() ) write_counter.write( d70 ); else if( dec_wc.read() ) write_counter.write( write_counter.read()-1 ); if( wr_b.read() ) byte.write( d70 ); if( wr_op.read() ) operation.write( d1514.read() ); if( wr_rra.read() ) read_return_address.write( data ); if( wr_wra.read() ) write_return_address.write( data ); if( wr_mb.read() ) memory_buffer.write( mem_dout.read() ); } }void NETMEMIF::rcv_change_state(){ if( rst.read() ){ rcv_current_state.write( RCV ); rcv_current_flit.write( HEADER ); } else { rcv_current_state.write( rcv_next_state ); rcv_current_flit.write( rcv_next_flit ); }}void NETMEMIF::rcv_logic(){ sc_bv<FLIT_LEN> data_out_v; bool ack_out_v=false; bool mem_wh_v=false, mem_wl_v=false, mem_wb_v=false, mem_r_v=false; bool wr_wah_v=false,wr_wal_v=false,wr_rah_v=false,wr_ral_v=false; bool inc_wa_v=false; bool wr_rc_v=false, wr_wc_v=false; bool dec_wc_v=false,wr_rra_v=false,wr_wra_v=false,wr_b_v=false,wr_op_v=false; data_out.write(data_out_v); ack_out.write(ack_out_v); mem_wh.write(mem_wh_v); mem_wl.write(mem_wl_v); mem_wb.write(mem_wb_v); mem_r.write(mem_r_v); wr_wah.write(wr_wah_v); wr_wal.write(wr_wal_v); wr_rah.write(wr_rah_v); wr_ral.write(wr_ral_v); inc_wa.write(inc_wa_v); wr_rc.write(wr_rc_v); wr_wc.write(wr_wc_v); dec_wc.write(dec_wc_v); wr_rra.write(wr_rra_v); wr_wra.write(wr_wra_v); wr_b.write(wr_b_v); wr_op.write(wr_op_v);}void NETMEMIF::send_change_state(){ if( rst.read() ){ send_current_state.write( SEND ); send_current_flit.write( HEADER ); } else { send_current_state.write( send_next_state ); send_current_flit.write( send_next_flit ); }}void NETMEMIF::memory_input(){ sc_uint<2> mem_partition; sc_uint<32> addr = (mem_r.read() ? read_address.read() : write_address.read()); sc_uint<14> addr14 = addr.range(13,0); sc_uint<16> zero16(0); sc_uint<16> return_address = (mem_r.read() ? read_return_address.read() : write_return_address.read()); switch(return_address){ case 0x0001 : mem_partition = 0; break; case 0x0100 : mem_partition = 1; break; case 0x0101 : mem_partition = 2; break; default : mem_partition = 0; break; }; mem_addr.write( (zero16, mem_partition, addr14) ); sc_bv<8> din = data_in.read().range(7,0); sc_int<8> d = din; mem_din.write( mem_wb.read() ? byte.read() : d ); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -