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

Subversion Repositories scarm

[/] [scarm/] [trunk/] [src/] [components/] [Registers/] [scRegisterFile.cpp] - Blame information for rev 8

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 zhong
// scRegisterFile.cpp: implementation of the scRegisterFile class.
2
//
3
//////////////////////////////////////////////////////////////////////
4
 
5
#include "scRegisterFile.h"
6
 
7
//////////////////////////////////////////////////////////////////////
8
// Construction/Destruction
9
//////////////////////////////////////////////////////////////////////
10
 
11
 
12
 
13
scRegisterFile::~scRegisterFile()
14
{
15
 
16
}
17
 
18
void scRegisterFile::set_mode(MODE m)
19
{
20
        m_Mode=m;
21
        r[0]=m_r0=0;
22
    r[1]=m_r1=0x11;
23
        r[2]=m_r2=0x22;
24
        r[3]=m_r3=0x33;
25
        r[4]=m_r4=0x44;
26
        r[5]=m_r5=5;
27
        r[6]=m_r6=6;
28
        r[7]=m_r7=7;
29
        r[8]=m_r8=8;
30
        r[9]=m_r9=9;
31
        r[10]=m_r10=10;
32
        r[11]=m_r11;
33
        r[12]=m_r12;
34
        r[13]=m_r13;
35
        r[14]=m_r14;
36
        r[15]=m_r15;
37
switch(m_Mode)
38
{
39
 
40
case M_USER:
41
        {
42
                //16 general register   
43
          printf("M_USER Mode \n");
44
          break;
45
 
46
    }
47
case M_FIQ://7 reg for FIQ mode 
48
        {
49
        r[8]=m_r8_fiq;
50
        r[9]=m_r9_fiq;
51
        r[10]=m_r10_fiq;
52
        r[11]=m_r11_fiq;
53
        r[12]=m_r12_fiq;
54
        r[13]=m_r13_fiq;
55
        r[14]=m_r14_fiq;
56
        r[17]=m_spsr_fiq;
57
        printf("M_FIQ\n");
58
        break;
59
        }
60
case M_SVC : //2 reg for supervisor mode
61
        {
62
        r[13]=m_r13_svc;
63
        r[14]=m_r14_svc;
64
        r[17]=m_spsr_svc;
65
        break;
66
        }
67
 
68
case M_ABORT://2 reg for abort mode
69
        {
70
        r[13]=m_r13_abt;
71
        r[14]=m_r14_abt;
72
        r[17]=m_spsr_abt;
73
        break;
74
        }
75
case M_IRQ://2 m_reg for IRQ mode
76
        {
77
                r[13]=m_r13_irq;
78
                r[14]=m_r14_irq;
79
                r[17]=m_spsr_irq;
80
                break;
81
        }
82
case M_UNDEF://2 m_reg undefined instruction mode
83
        {
84
        r[13]=m_r13_und;
85
        r[14]=m_r14_und;
86
        r[17]=m_spsr_und;
87
        break;
88
        }
89
default:
90
        {
91
      cout<<"error in Regsiger File"<<endl;
92
        }
93
}//end of switch (m_Mode)
94
 
95
}
96
 
97
void scRegisterFile::entry()
98
{
99
        uint32_t i=in_REG;
100
        if(in_b_RW==0)
101
    {
102
                inout_n_Data=r[i];
103
        }else
104
        {
105
                r[i]=inout_n_Data;
106
        }
107
}
108
 
109
void scRegisterFile::change_mode()
110
{
111
   MODE temp;
112
   temp=in_MODE;
113
   set_mode(temp);
114
}

powered by: WebSVN 2.1.0

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