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

Subversion Repositories wbddr3

[/] [wbddr3/] [trunk/] [bench/] [cpp/] [ddrsdramsim.cpp] - Diff between revs 12 and 13

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 12 Rev 13
Line 93... Line 93...
        m_reset_state = 0;
        m_reset_state = 0;
        m_reset_counts= 0;
        m_reset_counts= 0;
        m_bus = new BUSTIMESLOT[NTIMESLOTS];
        m_bus = new BUSTIMESLOT[NTIMESLOTS];
        for(int i=0; i<NTIMESLOTS; i++)
        for(int i=0; i<NTIMESLOTS; i++)
                m_bus[i].m_used = 0;
                m_bus[i].m_used = 0;
 
        for(int i=0; i<NTIMESLOTS; i++)
 
                m_bus[i].m_rtt = 0;
        m_busloc = 0;
        m_busloc = 0;
}
}
 
 
unsigned DDRSDRAMSIM::operator()(int reset_n, int cke,
unsigned DDRSDRAMSIM::operator()(int reset_n, int cke,
                int csn, int rasn, int casn, int wen,
                int csn, int rasn, int casn, int wen,
                int dqs, int dm, int odt, int busoe,
                int dqs, int dm, int odt, int busoe,
                int addr, int ba, int data) {
                int addr, int ba, int data) {
 
        BUSTIMESLOT     *ts, *nxtts;
        int     cmd = (reset_n?0:32)|(cke?0:16)|(csn?8:0)
        int     cmd = (reset_n?0:32)|(cke?0:16)|(csn?8:0)
                        |(rasn?4:0)|(casn?2:0)|(wen?1:0);
                        |(rasn?4:0)|(casn?2:0)|(wen?1:0);
 
 
        if ((m_reset_state!=0)&&(reset_n==0)) {
        if ((m_reset_state!=0)&&(reset_n==0)) {
                m_reset_state = 0;
                m_reset_state = 0;
                m_reset_counts = 0;
                m_reset_counts = 0;
        } else if (m_reset_state < 16) {
        } else if (m_reset_state < 16) {
                switch(m_reset_state) {
                switch(m_reset_state) {
Line 352... Line 355...
                default: // We are deselecteda
                default: // We are deselecteda
                        for(int i=0; i<NBANKS; i++)
                        for(int i=0; i<NBANKS; i++)
                                m_bank[i].tick(DDR_NOOP,addr);
                                m_bank[i].tick(DDR_NOOP,addr);
                        break;
                        break;
                }
                }
 
 
 
                if (true) {
 
                        bool flag = false;
 
                        for(int i=0; i<5; i++) {
 
                                int bl = (m_busloc+1+i)&(NTIMESLOTS-1);
 
                                nxtts = &m_bus[bl];
 
                                if (nxtts->m_used) {
 
                                        flag = true;
 
                                        break;
 
                                }
 
                        } if (flag) {
 
                        printf("DQS = %d BUSLOC = %d\n", dqs, (m_busloc+1)&(NTIMESLOTS-1));
 
                        for(int i=0; i<5; i++) {
 
                                int bl = (m_busloc+1+i)&(NTIMESLOTS-1);
 
                                nxtts = &m_bus[bl];
 
                                printf("BUS[%2d] ", bl);
 
                                if (nxtts->m_used)
 
                                        printf(" USED");
 
                                if (nxtts->m_read)
 
                                        printf(" READ");
 
                                if (nxtts->m_rtt)
 
                                        printf(" RTT");
 
                                printf("\n");
 
                        }}
 
                }
 
 
 
                ts = &m_bus[(m_busloc+1)&(NTIMESLOTS-1)];
 
                if (dqs)
 
                        assert((ts->m_rtt)&&(m_last_rtt));
 
                else if (!m_last_dqs)
 
                        assert(!m_last_rtt);
        }
        }
 
 
        m_busloc = (m_busloc+1)&(NTIMESLOTS-1);
        m_busloc = (m_busloc+1)&(NTIMESLOTS-1);
 
 
        BUSTIMESLOT     *ts = &m_bus[m_busloc];
        ts = &m_bus[m_busloc];
 
        nxtts = &m_bus[(m_busloc+1)&(NTIMESLOTS-1)];
        unsigned vl = ts->m_data;
        unsigned vl = ts->m_data;
        assert( ((!ts->m_used)||(busoe))
        assert( ((!ts->m_used)||(busoe))
                || ((ts->m_used)&&(ts->m_read)));
                || ((ts->m_used)&&(ts->m_read)&&(!busoe))
 
                || ((ts->m_used)&&(!ts->m_read)&&(busoe))
 
                );
 
 
 
        m_last_dqs = dqs;
 
        m_last_rtt = ts->m_rtt;
 
 
 
        if (ts->m_used) {
 
                if (ts->m_read)
 
                        assert((!dqs)&&(!m_last_dqs));
 
                else
 
                        assert((dqs) && (m_last_dqs));
 
        } else if (!nxtts->m_used)
 
                assert(!dqs);
 
 
        assert((!ts->m_used)||(ts->m_addr < (unsigned)m_memlen));
        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(PREFIX "::Setting MEM[%08x] = %08x\n", ts->m_addr, data);
                printf(PREFIX "::Setting MEM[%08x] = %08x\n", ts->m_addr, data);
                m_mem[ts->m_addr] = data;
                m_mem[ts->m_addr] = data;
        }
        }
 
 
 
        m_bus[(m_busloc+3)&(NTIMESLOTS-1)].m_rtt = (odt)&&(reset_n);
        ts->m_used = 0;
        ts->m_used = 0;
        ts->m_read = 0;
        ts->m_read = 0;
        ts->m_addr = -1;
        ts->m_addr = -1;
 
        ts->m_rtt  = 0;
        return (!busoe)?vl:data;
        return (!busoe)?vl:data;
}
}
 
 
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

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