1 |
4 |
igorloi |
//
|
2 |
|
|
// $Id: sc_risc.cpp,v 1.1 2006-01-25 17:00:01 igorloi Exp $
|
3 |
|
|
//
|
4 |
|
|
#include "sc_risc.h"
|
5 |
|
|
|
6 |
|
|
sc_risc::sc_risc(const sc_module_name& name_)
|
7 |
|
|
{
|
8 |
|
|
cpu = new sc_cpu("cpu-processor");
|
9 |
|
|
|
10 |
|
|
cpu->in_clk(in_clk);
|
11 |
|
|
cpu->reset(reset);
|
12 |
|
|
cpu->instdataread(instdataread);
|
13 |
|
|
cpu->instdatawrite(instdatawrite);
|
14 |
|
|
cpu->instaddr(instaddr);
|
15 |
|
|
cpu->instreq(instreq);
|
16 |
|
|
cpu->instrw(instrw);
|
17 |
|
|
cpu->insthold(x_insthold);
|
18 |
|
|
cpu->dataread(dataread);
|
19 |
|
|
cpu->datawrite(datawrite);
|
20 |
|
|
cpu->dataaddr(dataaddr);
|
21 |
|
|
cpu->datareq(datareq);
|
22 |
|
|
cpu->datarw(datarw);
|
23 |
|
|
cpu->databs(databs);
|
24 |
|
|
cpu->datahold(datahold);
|
25 |
|
|
cpu->new_pc(new_pc);
|
26 |
|
|
cpu->load_epc(load_epc);
|
27 |
|
|
cpu->pc_in(pc_in);
|
28 |
|
|
cpu->pc_out(pc_out);
|
29 |
|
|
cpu->id_branch(id_branch);
|
30 |
|
|
cpu->id_ctrl(id_ctrl);
|
31 |
|
|
cpu->id_ex_datarw(id_ex_datarw);
|
32 |
|
|
cpu->id_ex_datareq(id_ex_datareq);
|
33 |
|
|
cpu->addr_err(addr_err);
|
34 |
|
|
cpu->cp0_inst(cp0_inst);
|
35 |
|
|
cpu->reg_rs(reg_rs);
|
36 |
|
|
cpu->reg_out(reg_out);
|
37 |
|
|
cpu->reg_no(reg_no);
|
38 |
|
|
cpu->reg_rw(reg_rw);
|
39 |
|
|
cpu->ex_id_forward(ex_id_forward);
|
40 |
|
|
|
41 |
|
|
// EXCEPTION SIGNALS FROM DATAMEM AND INSTMEM
|
42 |
|
|
cpu->IBUS(IBUS);
|
43 |
|
|
cpu->inst_addrl(inst_addrl);
|
44 |
|
|
cpu->DBUS(DBUS);
|
45 |
|
|
cpu->data_addrl(data_addrl);
|
46 |
|
|
cpu->data_addrs(data_addrs);
|
47 |
|
|
|
48 |
|
|
// EXCEPTION STATUS VECTOR FROM CPU TO CP0
|
49 |
|
|
cpu->m_wb_ovf_excep(m_wb_ovf_excep);
|
50 |
|
|
cpu->m_wb_syscall_exception(m_wb_syscall_exception);
|
51 |
|
|
cpu->m_wb_illegal_instruction(m_wb_illegal_instruction);
|
52 |
|
|
cpu->m_wb_inst_addrl(m_wb_inst_addrl); // disaligned address in instmem during fetch stage
|
53 |
|
|
cpu->m_wb_IBUS(m_wb_IBUS); //page fault in instmem
|
54 |
|
|
cpu->m_wb_data_addrl(m_wb_data_addrl); //disaligned address in datamem during load instruction
|
55 |
|
|
cpu->m_wb_data_addrs(m_wb_data_addrs); //disaligned address in datamem during store instruction
|
56 |
|
|
cpu->m_wb_DBUS(m_wb_DBUS); //page fault in instmem
|
57 |
|
|
cpu->m_wb_dataaddr(m_wb_dataaddr);
|
58 |
|
|
cpu->m_wb_instaddr_s(m_wb_instaddr);
|
59 |
|
|
cpu->interrupt_signal(interrupt_signal);
|
60 |
|
|
cpu->m_wb_interrupt_signal(m_wb_interrupt_signal);
|
61 |
|
|
cpu->enable_interrupt(enable_interrupt);
|
62 |
|
|
cpu->enable_kernel_mode(enable_kernel_mode);
|
63 |
|
|
|
64 |
|
|
co0 = new cp0("cp0_module");
|
65 |
|
|
co0->in_clk(in_clk);
|
66 |
|
|
co0->reset(reset);
|
67 |
|
|
// to IF stage
|
68 |
|
|
co0->new_pc(new_pc);
|
69 |
|
|
co0->load_epc(load_epc);
|
70 |
|
|
// to/from ID stage
|
71 |
|
|
co0->pc_out(pc_out);
|
72 |
|
|
co0->pc_in(pc_in);
|
73 |
|
|
co0->id_ex_datarw(id_ex_datarw);
|
74 |
|
|
co0->id_ex_datareq(id_ex_datareq);
|
75 |
|
|
co0->id_branch(id_branch);
|
76 |
|
|
co0->id_ctrl(id_ctrl);
|
77 |
|
|
// co0->inst_break(inst_break);
|
78 |
|
|
// co0->inst_syscall(inst_syscall);
|
79 |
|
|
// to ID stage
|
80 |
|
|
co0->cp0_inst(cp0_inst);
|
81 |
|
|
co0->reg_no(reg_no);
|
82 |
|
|
co0->reg_rw(reg_rw);
|
83 |
|
|
co0->reg_out(reg_out);
|
84 |
|
|
// from ID stage
|
85 |
|
|
co0->reg_rs(reg_rs);
|
86 |
|
|
// from EX stage
|
87 |
|
|
co0->ex_alu(ex_id_forward);
|
88 |
|
|
|
89 |
|
|
// to EX stage
|
90 |
|
|
co0->addr_err(addr_err);
|
91 |
|
|
// to all stages
|
92 |
|
|
co0->x_insthold(insthold); // input to cp0
|
93 |
|
|
co0->insthold(x_insthold); // output from cp0*/
|
94 |
|
|
|
95 |
|
|
// EXCEPTION STATUS VECTOR FROM CPU TO CP0
|
96 |
|
|
co0->m_wb_inst_addrl(m_wb_inst_addrl); // disaligned address in instmem during fetch stage
|
97 |
|
|
co0->m_wb_IBUS(m_wb_IBUS); //page fault in instmem
|
98 |
|
|
co0->m_wb_data_addrl(m_wb_data_addrl); //disaligned address in datamem during load instruction
|
99 |
|
|
co0->m_wb_data_addrs(m_wb_data_addrs); //disaligned address in datamem during store instruction
|
100 |
|
|
co0->m_wb_DBUS(m_wb_DBUS); //page fault in instmem
|
101 |
|
|
co0->m_wb_syscall_exception(m_wb_syscall_exception);
|
102 |
|
|
co0->m_wb_illegal_instruction(m_wb_illegal_instruction);
|
103 |
|
|
co0->m_wb_ovf_excep(m_wb_ovf_excep);
|
104 |
|
|
co0->m_wb_dataaddr(m_wb_dataaddr);
|
105 |
|
|
co0->m_wb_instaddr(m_wb_instaddr);
|
106 |
|
|
co0->m_wb_interrupt_signal(m_wb_interrupt_signal);
|
107 |
|
|
co0->enable_interrupt(enable_interrupt);
|
108 |
|
|
co0->enable_kernel_mode(enable_kernel_mode);
|
109 |
|
|
|
110 |
|
|
}
|
111 |
|
|
|