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

Subversion Repositories sardmips

[/] [sardmips/] [trunk/] [source/] [cpu/] [sc_cpu.h] - Blame information for rev 4

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 igorloi
//
2
// $Id: sc_cpu.h,v 1.1 2006-01-25 17:00:01 igorloi Exp $
3
//
4
 
5
#ifndef _SC_CPU_H
6
#define _SC_CPU_H
7
 
8
#include <systemc.h>
9
#include "../constants/config.h"
10
#include "../constants/constants.h"
11
#include "pc_stage.h"
12
#include "if_stage.h"
13
#include "id_stage.h"
14
#include "ex_stage.h"
15
#include "mem_stage.h"
16
#include "enable_stage.h"
17
#include "writeback_ctrl.h"
18
#include "mux_instaddr.h"
19
 
20
#ifdef _MULT_PIPELINE_
21
#include "or_gate.h"
22
#endif
23
 
24
SC_MODULE(sc_cpu)
25
{
26
// to CP0_STAGE
27
  sc_in<sc_lv<32> >     new_pc;
28
  sc_in<sc_logic>       load_epc;
29
  sc_out<sc_lv<32> >    pc_in;
30
  sc_out<sc_lv<32> >    pc_out;
31
  sc_out<sc_logic>      id_branch;
32
  sc_out<sc_logic>      id_ctrl;
33
  sc_out<sc_logic>      id_ex_datarw;
34
  sc_out<sc_logic>      id_ex_datareq;
35
  sc_in<sc_logic>       addr_err;
36
  sc_in<bool>           insthold;
37
  sc_out<sc_lv<4> >     cp0_inst;
38
  sc_out<sc_lv<32> >    reg_rs;
39
  sc_in<sc_lv<32> >     reg_out;
40
  sc_out<sc_uint<5> >   reg_no;
41
  sc_out<sc_logic>      reg_rw;
42
  sc_out<sc_lv<32> >    ex_id_forward;
43
 
44
 
45
  // EXCEPTION SIGNAL FROM DATAMEM AND INSTMEM
46
  //*****************************************************************************************************
47
  sc_in<sc_logic>       inst_addrl;             // disaligned address in instmem during fetch stage
48
  sc_in<sc_logic>       IBUS;                   //page fault in instmem
49
  sc_in<sc_logic>       data_addrl;             //disaligned address in datamem during  load instruction
50
  sc_in<sc_logic>       data_addrs;             //disaligned address in datamem during store instruction
51
  sc_in<sc_logic>       DBUS;                   //page fault in instmem
52
  //*****************************************************************************************************
53
 
54
  // EXCEPTION SIGNALS TO ENABLE/DISABLE PIPELINED STAGE
55
  //*****************************************************************************************************
56
  sc_signal<sc_logic>   enable_pc;
57
  sc_signal<sc_logic>   enable_fetch;
58
  sc_signal<sc_logic>   enable_decode;
59
  sc_signal<sc_logic>   enable_execute;
60
  sc_signal<sc_logic>   enable_memstage;
61
  sc_signal<sc_logic>   if_exception;
62
  sc_signal<sc_logic>   id_exception;
63
  sc_signal<sc_logic>   ex_exception;
64
  sc_signal<sc_logic>   mem_exception;
65
  sc_signal<sc_logic>   wb_exception;
66
  sc_signal<sc_logic>   interrupt_exception;
67
  //*****************************************************************************************************
68
 
69
  // INTERRUPT SIGNALS
70
  //**********************************************
71
  sc_in<bool>   interrupt_signal;
72
  sc_out<bool>  m_wb_interrupt_signal;
73
  sc_in<sc_logic>       enable_interrupt;
74
  sc_in<sc_logic>       enable_kernel_mode;
75
  //**********************************************
76
 
77
 
78
  // PIPELINED EXCEPTION SIGNALS
79
  //*****************************************************************************************************
80
        sc_signal<sc_lv<32> >   id_ex_inst;             // from id_stage  to ex_stage
81
        sc_signal<sc_lv<32> >   ex_mem_inst;            // from ex_stage  to mem_stage
82
        sc_signal<sc_lv<32> >   mem_wb_inst;            // from mem_stage to WriteBack
83
  sc_signal<sc_logic>   if_id_inst_addrl;               // from if_stage  to id_stage
84
  sc_signal<sc_logic>   if_id_IBUS;                     // from if_stage  to id_stage
85
  sc_signal<sc_logic>   id_ex_inst_addrl;               // from id_stage  to ex_stage
86
  sc_signal<sc_logic>   id_ex_IBUS;                     // from id_stage  to ex_stage
87
  sc_signal<sc_logic>   id_ex_syscall_exception;        // from id_stage  to ex_stage
88
  sc_signal<sc_logic>   id_ex_illegal_instruction;      // from id_stage  to ex_stage
89
  sc_signal<sc_logic>   ex_m_ovf_excep;                 // from ex_stage  to mem_stage
90
  sc_signal<sc_logic>   ex_m_inst_addrl;                // from ex_stage  to mem_stage
91
  sc_signal<sc_logic>   ex_m_IBUS;                      // from ex_stage  to mem_stage
92
  sc_signal<sc_logic>   ex_m_syscall_exception;         // from ex_stage  to mem_stage
93
  sc_signal<sc_logic>   ex_m_illegal_instruction;       // from ex_stage  to mem_stage
94
  sc_out<sc_logic>      m_wb_DBUS;                      // from mem_stage to cp0_cause
95
  sc_out<sc_logic>      m_wb_data_addrl;                // from mem_stage to cp0_cause
96
  sc_out<sc_logic>      m_wb_data_addrs;                // from mem_stage to cp0_cause
97
  sc_out<sc_logic>      m_wb_ovf_excep;                 // from mem_stage to cp0_cause
98
  sc_out<sc_logic>      m_wb_syscall_exception;         // from mem_stage to cp0_cause
99
  sc_out<sc_logic>      m_wb_illegal_instruction;       // from mem_stage to cp0_cause
100
  sc_out<sc_logic>      m_wb_IBUS;                      // from mem_stage to cp0_cause
101
  sc_out<sc_logic>      m_wb_inst_addrl;                // from mem_stage to cp0_cause
102
 
103
  sc_signal<sc_uint<32> >       if_id_instaddr;         // from if_stage  to id_stage  (victim address instruction)
104
  sc_signal<sc_uint<32> >       id_ex_instaddr;         // from id_stage  to ex_stage  (victim address instruction)
105
  sc_signal<sc_uint<32> >       ex_m_instaddr;          // from ex_stage  to mem_stage address for INTERRUPT EPC
106
  sc_signal<sc_uint<32> >       m_wb_instaddr;          // from mem_stage to mux_instaddr (victim address instruction)
107
  sc_out<sc_uint<32> >          m_wb_instaddr_s;        // from mux_instaddr to EPC
108
  sc_out<sc_uint<32> >          m_wb_dataaddr;          // from mem_stage to cpo_cause (victim address instruction)
109
  //*****************************************************************************************************
110
 
111
 
112
 
113
  //
114
  // Very basic signals for the CPU!
115
  //
116
  //! Main clock signal
117
  sc_in<bool> in_clk;
118
  //! Main reset signal
119
  sc_in<bool> reset;
120
 
121
  //
122
  // Instruction memory interface
123
  //
124
  //! Instruction memory input data
125
  // sc_inout_rv<32> instdata;
126
  sc_in<sc_lv<32> > instdataread;
127
  sc_out<sc_lv<32> > instdatawrite;
128
  //! Instruction memory address
129
  sc_out<sc_uint<32> > instaddr;
130
  //! Instruction memory request
131
  sc_out<sc_logic> instreq;
132
  //! Instruction memory read/write signal. 1 for write. 0 for read.
133
  sc_out<sc_logic> instrw;
134
  //! Hold signal from cp0 (Was: instruction memory)
135
 
136
 
137
  //sc_in<bool> x_insthold;  //in sc_risc!
138
 
139
  //
140
  // Data memory interface
141
  //
142
  //! Data memory in/out data
143
  // sc_inout_rv<32> data;
144
  sc_in<sc_lv<32> > dataread;
145
  sc_out<sc_lv<32> > datawrite;
146
  //! Data memory address
147
  sc_out<sc_uint<32> > dataaddr;
148
  //! Data memory request
149
  sc_out<sc_logic> datareq;
150
  //! Data memory read/write signal. 1 for write. 0 for read.
151
  sc_out<sc_logic> datarw;
152
  //! Byte select signal. Select bytes to be written. 01 for byte, 10 for halfword
153
  sc_out<sc_lv<2> > databs;
154
  //! Hold signal from data memory
155
  sc_in<bool> datahold;
156
 
157
 
158
  // Misc. signals
159
  sc_signal<sc_lv<32> > id_new_pc;
160
  sc_signal<sc_lv<32> > id_jmp_tar;
161
  sc_signal<sc_lv<32> > if_id_inst;
162
  sc_signal<sc_lv<32> > if_id_next_pc;
163
 
164
  // signal from id_stage to ex_stage
165
  sc_signal<sc_lv<32> > id_ex_alu1;
166
  sc_signal<sc_lv<32> > id_ex_alu2;
167
  sc_signal<sc_lv<32> > id_ex_datastore;
168
  sc_signal<sc_lv<6> >  id_ex_alu_ctrl;
169
  sc_signal<sc_lv<6> >  id_ex_alu_opcode;
170
  sc_signal<sc_lv<6> >  id_ex_alu_function;
171
  sc_signal<sc_logic>   id_ex_equal;
172
  sc_signal<sc_lv<2> >  id_ex_byteselect;
173
  sc_signal<sc_logic>   id_ex_bssign;
174
  sc_signal<sc_lv<5> >  id_ex_alu_sa;
175
 
176
  // signal to mem_stage through ex_stage
177
  sc_signal<sc_logic>  id_ex_memtoreg;
178
  sc_signal<sc_lv<2> > id_ex_m_byteselect;
179
  sc_signal<sc_logic>  id_ex_m_bssign;
180
 
181
  // signal to mem_stage
182
  sc_signal<sc_logic>   id_ex_m_datareq;
183
  sc_signal<sc_logic>   id_ex_m_datarw;
184
  sc_signal<sc_lv<32> > id_ex_m_datastore;
185
  sc_signal<sc_lv<32> > ex_m_alu;
186
  sc_signal<sc_logic>   id_ex_m_memtoreg;
187
  sc_signal<sc_logic>   m_ocp_cmd;
188
 
189
  // signal to control save in register
190
  sc_signal<sc_lv<5> > id_ex_writeregister_out;
191
  sc_signal<sc_logic>  id_ex_regwrite_out;
192
 
193
  // forwarding control signal
194
  sc_signal<sc_lv<5> >  id_ex_m_writeregister;
195
  sc_signal<sc_lv<5> >  id_ex_m_wb_writeregister;
196
  sc_signal<sc_logic>   id_ex_m_regwrite;
197
  sc_signal<sc_logic>   id_ex_m_wb_regwrite;
198
  //sc_signal<sc_lv<32> > ex_id_forward;
199
  sc_signal<sc_lv<32> > m_id_forward;
200
  sc_signal<sc_lv<32> > wb_id_forward;
201
 
202
 
203
  // signals between ID stage and cp0
204
 
205
  sc_signal<sc_logic>   inst_break;
206
  sc_signal<sc_logic>   inst_syscall;
207
 
208
#ifdef _MULT_PIPELINE_
209
  sc_signal<bool>       hold_pipe;
210
  sc_signal<bool>       insthold_W;
211
#endif
212
 
213
  pc_stage *pc;
214
  if_stage *if_s;
215
  id_stage *id;
216
  ex_stage *ex;
217
  mem_stage *mem;
218
  enable_stage *enable_stage1;
219
  writeback_ctrl *writeback_ctrl1;
220
  mux_instaddr *mux_instaddr1;
221
#ifdef _MULT_PIPELINE_
222
  or_gate *og1;
223
#endif  
224
 
225
  void clocktik()
226
    {
227
    };
228
 
229
  SC_HAS_PROCESS(sc_cpu);
230
  sc_cpu(const sc_module_name& name_);
231
 
232
};
233
 
234
#endif

powered by: WebSVN 2.1.0

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