OpenCores
URL https://opencores.org/ocsvn/wbddr3/wbddr3/trunk

Subversion Repositories wbddr3

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /wbddr3/trunk/bench/cpp
    from Rev 6 to Rev 7
    Reverse comparison

Rev 6 → Rev 7

/ddrsdram_tb.cpp
83,6 → 83,7
m_core->o_ddr_data);
 
bool writeout = (!m_core->v__DOT__reset_override);
writeout = true;
 
if (writeout) {
int cmd;
122,7 → 123,21
(m_core->i_ddr_data),
(m_core->o_ddr_data));
 
/*
printf(" FIFO[%x,%x](%d,%d,%08x-%08x-%08x)",
m_core->v__DOT__bus_fifo_head,
m_core->v__DOT__bus_fifo_tail,
m_core->v__DOT__bus_fifo_new[m_core->v__DOT__bus_fifo_tail],
m_core->v__DOT__bus_fifo_sub[m_core->v__DOT__bus_fifo_tail],
m_core->v__DOT__r_data,
m_core->v__DOT__bus_fifo_data[(m_core->v__DOT__bus_fifo_head-1)&15],
m_core->v__DOT__bus_fifo_data[m_core->v__DOT__bus_fifo_tail]);
 
printf(" BUS[%03x/%03x/%03x/%d]",
(m_core->v__DOT__bus_active),
(m_core->v__DOT__bus_read),
(m_core->v__DOT__bus_new),
(m_core->v__DOT__bus_subaddr[8]));
 
// Reset logic
printf(" RST(%06x%s[%d] - %08x->%08x)",
m_core->v__DOT__reset_timer,
130,7 → 145,6
(m_core->v__DOT__reset_address),
(m_core->v__DOT__reset_instruction),
(m_core->v__DOT__reset_cmd));
*/
 
printf(" %s%03x[%d]%04x:%d",
(m_core->v__DOT__r_pending)?"R":" ",
139,13 → 153,14
(m_core->v__DOT__r_col),0);
// (m_core->v__DOT__r_sub));
printf(" %s%s%s",
(m_core->v__DOT__all_banks_closed)?"b":"B",
"B",
// (m_core->v__DOT__all_banks_closed)?"b":"B",
(m_core->v__DOT__need_close_bank)?"C":"N",
//:(m_core->v__DOT__maybe_close_next_bank)?"c":"N",
(m_core->v__DOT__need_open_bank)?"O":"K");
// :(m_core->v__DOT__maybe_open_next_bank)?"o":"K");
for(int i=0; i<8; i++) {
printf("%s%x@%05x%s",
printf("%s%x@%x%s",
(m_core->v__DOT__r_bank==i)?"R":"[",
m_core->v__DOT__bank_status[i],
m_core->v__DOT__bank_address[i],
156,22 → 171,22
extern int gbl_state, gbl_counts;
printf(" %2d:%08x ", gbl_state, gbl_counts);
 
printf(" %s%s%s%s%s:%08x:%08x",
printf(" %s%s%s%s%s%s%s:%08x:%08x",
(m_core->v__DOT__reset_override)?"R":" ",
(m_core->v__DOT__need_refresh)?"N":" ",
(m_core->v__DOT__need_close_bank)?"C":" ",
(m_core->v__DOT__need_open_bank)?"O":" ",
(m_core->v__DOT__valid_bank)?"V":" ",
(m_core->v__DOT__r_move)?"R":" ",
(m_core->v__DOT__m_move)?"M":" ",
m_core->v__DOT__activate_bank_cmd,
m_core->v__DOT__cmd);
 
printf(" F%05x:%d%d%d:%d:%08x",
m_core->v__DOT__refresh_clk,
m_core->v__DOT__need_refresh,
m_core->v__DOT__midrefresh,
m_core->v__DOT__endrefresh,
m_core->v__DOT__midrefresh_hctr,
m_core->v__DOT__midrefresh_lctr);
printf(" F%s%05x:%x/%s",
(m_core->v__DOT__refresh_ztimer)?"Z":" ",
m_core->v__DOT__refresh_counter,
m_core->v__DOT__refresh_addr,
(m_core->v__DOT__need_refresh)?"N":" ");
 
if (m_core->v__DOT__reset_override)
printf(" OVERRIDE");
413,7 → 428,7
printf("Giving the core 140k cycles to start up\n");
// Before testing, let's give the unit time enough to warm up
tb->reset();
for(int i=0; i<140850; i++)
for(int i=0; i<141195; i++)
tb->wb_tick();
 
printf("Getting some memory ...\n");
/ddrsdramsim.cpp
193,6 → 193,7
gbl_state = m_reset_state;
gbl_counts= m_reset_counts;
m_nrefresh_issued = nREF;
m_clocks_since_refresh++;
} else if (!cke) {
assert(0&&"Clock not enabled!");
} else if ((cmd == DDR_REFRESH)||(m_nrefresh_issued < (int)nREF)) {
199,7 → 200,7
if (DDR_REFRESH == cmd) {
m_clocks_since_refresh = 0;
if (m_nrefresh_issued >= (int)nREF)
m_nrefresh_issued = 0;
m_nrefresh_issued = 1;
else
m_nrefresh_issued++;
} else {
208,11 → 209,18
}
for(int i=0; i<NBANKS; i++)
m_bank[i].tick(DDR_REFRESH,0);
 
if (m_nrefresh_issued == nREF)
printf("DDRSDRAM::Refresh cycle complete\n");
} else {
// In operational mode!!
 
m_clocks_since_refresh++;
assert(m_clocks_since_refresh < (int)ckREFIn);
printf("Clocks to refresh should be %4d-%4d = %4d = 0x%04x\n",
ckREFIn, m_clocks_since_refresh,
ckREFIn- m_clocks_since_refresh,
ckREFIn- m_clocks_since_refresh);
switch(cmd) {
case DDR_MRSET:
assert(0&&"Modes should only be set in reset startup");
238,6 → 246,8
}
break;
case DDR_ACTIVATE:
printf("DDRSIM::ACTIVE, clocks_since_refresh = %d >= %d\n", m_clocks_since_refresh, ckRFC);
assert(m_clocks_since_refresh >= (int)ckRFC);
m_bank[ba].tick(DDR_ACTIVATE,addr);
for(int i=0; i<NBANKS; i++)
if (i!=ba) m_bank[i].tick(DDR_NOOP,0);
249,32 → 259,38
m_bank[ba].tick(DDR_WRITE, addr);
for(int i=0; i<NBANKS; i++)
if (i!=ba)m_bank[i].tick(DDR_NOOP,addr);
unsigned addr = m_bank[ba].m_row;
addr <<= 13;
addr |= ba;
addr <<= 10;
addr |= addr;
addr &= ~3;
unsigned caddr = m_bank[ba].m_row;
caddr <<= 13;
caddr |= ba;
caddr <<= 10;
caddr |= addr;
caddr &= ~7;
caddr >>= 1;
 
printf("DDRSDRAM::WRITE ADDR = %04x|%d|%04x|%d -> %06x\n",
m_bank[ba].m_row, ba, addr, 0, caddr);
 
BUSTIMESLOT *tp;
int offset = m_busloc+ckCL+1;
 
tp = &m_bus[(m_busloc+ckCL+0)&(NTIMESLOTS-1)];
tp->m_addr = addr ;
tp = &m_bus[(offset+0)&(NTIMESLOTS-1)];
printf("Setting bus timeslots from (now=%d)+%d=%d to now+%d+3\n", m_busloc, ckCL,(m_busloc+ckCL)&(NTIMESLOTS-1), ckCL);
tp->m_addr = caddr ;
tp->m_used = 1;
tp->m_read = 0;
 
tp = &m_bus[(m_busloc+ckCL+1)&(NTIMESLOTS-1)];
tp->m_addr = addr+1;
tp = &m_bus[(offset+1)&(NTIMESLOTS-1)];
tp->m_addr = caddr+1;
tp->m_used = 1;
tp->m_read = 0;
 
tp = &m_bus[(m_busloc+ckCL+2)&(NTIMESLOTS-1)];
tp->m_addr = addr+2;
tp = &m_bus[(offset+2)&(NTIMESLOTS-1)];
tp->m_addr = caddr+2;
tp->m_used = 1;
tp->m_read = 0;
 
tp = &m_bus[(m_busloc+ckCL+3)&(NTIMESLOTS-1)];
tp->m_addr = addr+3;
tp = &m_bus[(offset+3)&(NTIMESLOTS-1)];
tp->m_addr = caddr+3;
tp->m_used = 1;
tp->m_read = 0;
} break;
285,36 → 301,37
m_bank[ba].tick(DDR_READ, addr);
for(int i=0; i<NBANKS; i++)
if (i!=ba)m_bank[i].tick(DDR_NOOP,addr);
unsigned addr = m_bank[ba].m_row;
addr <<= 13;
addr |= ba;
addr <<= 10;
addr |= addr;
addr &= ~3;
unsigned caddr = m_bank[ba].m_row;
caddr <<= 13;
caddr |= ba;
caddr <<= 10;
caddr |= addr;
caddr &= ~7;
caddr >>= 1;
 
BUSTIMESLOT *tp;
tp = &m_bus[(m_busloc+ckCL+0)&(NTIMESLOTS-1)];
tp->m_data = m_mem[addr];
tp->m_addr = addr;
tp->m_data = m_mem[caddr];
tp->m_addr = caddr;
tp->m_used = 1;
tp->m_read = 1;
tp = &m_bus[(m_busloc+ckCL+1)&(NTIMESLOTS-1)];
tp->m_data = m_mem[addr+1];
tp->m_addr = addr+1;
tp->m_data = m_mem[caddr+1];
tp->m_addr = caddr+1;
tp->m_used = 1;
tp->m_read = 1;
 
tp = &m_bus[(m_busloc+ckCL+2)&(NTIMESLOTS-1)];
tp->m_data = m_mem[addr+2];
tp->m_addr = addr+2;
tp->m_data = m_mem[caddr+2];
tp->m_addr = caddr+2;
tp->m_used = 1;
tp->m_read = 1;
 
tp = &m_bus[(m_busloc+ckCL+3)&(NTIMESLOTS-1)];
tp->m_data = m_mem[addr+3];
tp->m_addr = addr+3;
tp->m_data = m_mem[caddr+3];
tp->m_addr = caddr+3;
tp->m_used = 1;
tp->m_read = 1;
} break;
335,13 → 352,21
m_busloc = (m_busloc+1)&(NTIMESLOTS-1);
 
BUSTIMESLOT *ts = &m_bus[m_busloc];
if (ts->m_used) {
printf("Current timeslot = %2d, used", m_busloc);
if (ts->m_read)
printf(", read");
printf("\n");
}
unsigned vl = ts->m_data;
assert( ((!ts->m_used)||(busoe))
|| ((ts->m_used)&&(ts->m_read)));
 
assert((!ts->m_used)||(ts->m_addr < (unsigned)m_memlen));
if ((ts->m_used)&&(!ts->m_read)&&(!dm))
if ((ts->m_used)&&(!ts->m_read)&&(!dm)) {
printf("Setting MEM[%08x] = %08x\n", ts->m_addr, data);
m_mem[ts->m_addr] = data;
}
ts->m_used = 0;
ts->m_read = 0;
ts->m_addr = -1;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.