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

Subversion Repositories xulalx25soc

[/] [xulalx25soc/] [trunk/] [sw/] [ziprun.cpp] - Diff between revs 53 and 91

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

Rev 53 Rev 91
Line 21... Line 21...
// Creator:     Dan Gisselquist, Ph.D.
// Creator:     Dan Gisselquist, Ph.D.
//              Gisselquist Technology, LLC
//              Gisselquist Technology, LLC
//
//
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//
//
// Copyright (C) 2015, Gisselquist Technology, LLC
// Copyright (C) 2015-2016, Gisselquist Technology, LLC
//
//
// This program is free software (firmware): you can redistribute it and/or
// This program is free software (firmware): you can redistribute it and/or
// modify it under the terms of  the GNU General Public License as published
// modify it under the terms of  the GNU General Public License as published
// by the Free Software Foundation, either version 3 of the License, or (at
// by the Free Software Foundation, either version 3 of the License, or (at
// your option) any later version.
// your option) any later version.
Line 509... Line 509...
                                        m_fpga->writei(a, 128, zbuf);
                                        m_fpga->writei(a, 128, zbuf);
                                break;
                                break;
                        }
                        }
                } m_fpga->readio(R_VERSION); // Check for buserrors
                } m_fpga->readio(R_VERSION); // Check for buserrors
 
 
 
                printf("Loading memory\n");
                for(int i=0; secpp[i]->m_len; i++) {
                for(int i=0; secpp[i]->m_len; i++) {
                        bool    inflash=false;
                        bool    inflash=false;
 
 
                        secp = secpp[i];
                        secp = secpp[i];
                        if ((secp->m_start >= SPIFLASH)
                        if ((secp->m_start >= SPIFLASH)
Line 521... Line 522...
                                inflash = true;
                                inflash = true;
                        if (inflash) {
                        if (inflash) {
                                if (!flash)
                                if (!flash)
                                        flash = new FLASHDRVR(m_fpga);
                                        flash = new FLASHDRVR(m_fpga);
                                flash->write(secp->m_start, secp->m_len, secp->m_data, true);
                                flash->write(secp->m_start, secp->m_len, secp->m_data, true);
                        } else
                        } else if (secp->m_len < (1<<16)) {
                                m_fpga->writei(secp->m_start, secp->m_len, secp->m_data);
                                m_fpga->writei(secp->m_start, secp->m_len, secp->m_data);
 
                        } else {
 
                                // The load amount is so big, we'd like to let
 
                                // the user know where we're at along the way.
 
                                for(unsigned k=0; k<secp->m_len; k+=(1<<16)) {
 
                                        unsigned ln = (1<<16),
 
                                                st = secp->m_start+k;
 
                                        if (st+ln > secp->m_start+secp->m_len)
 
                                                ln = (secp->m_start+secp->m_len-st);
 
                                        if (ln <= 0) break;
 
                                        printf("Loading MEM[%08x]-MEM[%08x] ...\r",
 
                                                st,st+ln-1); fflush(stdout);
 
                                        m_fpga->writei(st, ln, &secp->m_data[k]);
 
                                        m_fpga->readio(R_VERSION); // Check for buserrors
 
                                } printf("Loaded  MEM[%08x]-MEM[%08x]      \n",
 
                                        secp->m_start,
 
                                        secp->m_start+secp->m_len-1);
 
                                fflush(stdout);
 
                        }
 
                        printf("%08x - %08x\n", secp->m_start, secp->m_start+secp->m_len);
                }
                }
                m_fpga->readio(R_ZIPCTRL); // Check for bus errors
                m_fpga->readio(R_ZIPCTRL); // Check for bus errors
 
 
                // Clear any buffers
                // Clear any buffers
                printf("Clearing the cache\n");
                printf("Clearing the cache\n");
Line 551... Line 571...
                m_fpga->writeio(R_ZIPDATA, entry);
                m_fpga->writeio(R_ZIPDATA, entry);
 
 
                printf("The CPU should be fully loaded, you may now start\n");
                printf("The CPU should be fully loaded, you may now start\n");
                printf("it.  To start the CPU, type wbregs cpu 0\n");
                printf("it.  To start the CPU, type wbregs cpu 0\n");
        } catch(BUSERR a) {
        } catch(BUSERR a) {
                fprintf(stderr, "XULA-BUS error\n");
                fprintf(stderr, "\nXULA-BUS error @0x%08x\n", a.addr);
                m_fpga->writeio(R_ZIPCTRL, CPU_RESET|CPU_HALT|CPU_CLRCACHE);
                m_fpga->writeio(R_ZIPCTRL, CPU_RESET|CPU_HALT|CPU_CLRCACHE);
                exit(-2);
                exit(-2);
        }
        }
 
 
        delete  m_fpga;
        delete  m_fpga;

powered by: WebSVN 2.1.0

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