OpenCores
URL https://opencores.org/ocsvn/sdhc-sc-core/sdhc-sc-core/trunk

Subversion Repositories sdhc-sc-core

[/] [sdhc-sc-core/] [trunk/] [grpSdVerification/] [unitSdCardModel/] [src/] [SdCardModel.sv] - Diff between revs 104 and 105

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

Rev 104 Rev 105
Line 30... Line 30...
                this.CmdReceived = CmdReceived;
                this.CmdReceived = CmdReceived;
                this.InitDone = InitDone;
                this.InitDone = InitDone;
                this.CCS = 1;
                this.CCS = 1;
                rca = 0;
                rca = 0;
                mode = standard;
                mode = standard;
                ICmd.cb.Data <= 'z;
                ICmd.cbcard.Data <= 'z;
        endfunction
        endfunction
 
 
        task reset();
        task reset();
        endtask
        endtask
 
 
        // Receive a command token and handle it
        // Receive a command token and handle it
        task recv();
        task recv();
                ICmd.cb.Cmd <= 'z;
                ICmd.cbcard.Cmd <= 'z;
 
 
                repeat(8) @ICmd.cb;
                repeat(8) @ICmd.cbcard;
 
 
                recvcmd = new();
                recvcmd = new();
 
 
                wait(ICmd.cb.Cmd == 0);
                wait(ICmd.cbcard.Cmd == 0);
                // Startbit
                // Startbit
                recvcmd.startbit = ICmd.cb.Cmd;
                recvcmd.startbit = ICmd.cbcard.Cmd;
 
 
                @ICmd.cb;
                @ICmd.cbcard;
                // Transbit
                // Transbit
                recvcmd.transbit = ICmd.cb.Cmd;
                recvcmd.transbit = ICmd.cbcard.Cmd;
 
 
                // CmdID
                // CmdID
                for (int i = 5; i >= 0; i--) begin
                for (int i = 5; i >= 0; i--) begin
                        @ICmd.cb;
                        @ICmd.cbcard;
                        recvcmd.id[i] = ICmd.cb.Cmd;
                        recvcmd.id[i] = ICmd.cbcard.Cmd;
                end
                end
 
 
                // Arg
                // Arg
                for (int i = 31; i >= 0; i--) begin
                for (int i = 31; i >= 0; i--) begin
                        @ICmd.cb;
                        @ICmd.cbcard;
                        recvcmd.arg[i] = ICmd.cb.Cmd;
                        recvcmd.arg[i] = ICmd.cbcard.Cmd;
                end
                end
 
 
                // CRC
                // CRC
                for (int i = 6; i >= 0; i--) begin
                for (int i = 6; i >= 0; i--) begin
                        @ICmd.cb;
                        @ICmd.cbcard;
                        recvcmd.crc7[i] = ICmd.cb.Cmd;
                        recvcmd.crc7[i] = ICmd.cbcard.Cmd;
                end
                end
 
 
                // Endbit
                // Endbit
                @ICmd.cb;
                @ICmd.cbcard;
                recvcmd.endbit = ICmd.cb.Cmd;
                recvcmd.endbit = ICmd.cbcard.Cmd;
 
 
                recvcmd.checkFromHost();
                recvcmd.checkFromHost();
                -> CmdReceived;
                -> CmdReceived;
        endtask
        endtask
 
 
Line 162... Line 162...
 
 
                // respond with R1
                // respond with R1
                response = new(cSdCmdSendSCR, state);
                response = new(cSdCmdSendSCR, state);
                response.send(ICmd);
                response.send(ICmd);
 
 
                repeat(2) @ICmd.cb;
                repeat(2) @ICmd.cbcard;
 
 
                // send dummy SCR
                // send dummy SCR
                for (int i = 0; i < 64; i++)
                for (int i = 0; i < 64; i++)
                        data.push_back(0);
                        data.push_back(0);
 
 
Line 218... Line 218...
                data[511-400] = 1;
                data[511-400] = 1;
                data[511-376] = 1;
                data[511-376] = 1;
                sddata.send(ICmd, data);
                sddata.send(ICmd, data);
 
 
                // switch to 50MHz
                // switch to 50MHz
 
                // expect CMD13
 
                recv();
 
                assert(recvcmd.id == cSdCmdSendStatus);
 
                assert(recvcmd.arg == rca);
 
                response = new(cSdCmdSendStatus, state);
 
                response.send(ICmd);
 
 
                -> InitDone;
                -> InitDone;
 
 
        endtask
        endtask
 
 

powered by: WebSVN 2.1.0

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