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

Subversion Repositories sardmips

[/] [sardmips/] [trunk/] [source/] [cpu/] [if_stage.h] - Blame information for rev 18

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 igorloi
// Instruction Fetch Stage
2
 
3
 
4
#ifndef _IF_STAGE_H
5
#define _IF_STAGE_H
6
 
7
#include <systemc.h>
8
#include "./if_stage/add.h"
9
#include "./if_stage/reg_if.h"
10
#include "./if_stage/select_next_pc.h"
11
#include "./if_stage/if_ctrl.h"
12
 
13
SC_MODULE(if_stage)
14
{
15
        sc_in<bool> in_clk;
16
        sc_in<bool> reset;
17
 
18
        sc_in<bool> insthold;
19
        sc_in<bool> datahold;
20
 
21
        sc_in<sc_lv<32> > pc_out;
22
        sc_in<sc_lv<32> > id_new_pc;
23
        sc_in<sc_lv<32> > id_jmp_tar;
24
        sc_in<sc_logic> id_ctrl;
25
        sc_in<sc_logic> id_branch;
26
 
27
        sc_out<sc_lv<32> > pc_in;
28
 
29
        sc_in<sc_lv<32> > instdataread;
30
 
31
        //Used when interupt occur during MFLO, MFHI istruction
32
        //******************************************************
33
        //sc_out<sc_lv<32> > if_id_instdataread;
34
        //******************************************************
35
 
36
        sc_out<sc_lv<32> > if_id_inst;
37
        sc_out<sc_lv<32> > if_id_next_pc;
38
 
39
        // cp0 connections
40
        sc_in<sc_lv<32> >       new_pc;
41
        sc_in<sc_logic>         load_epc;
42
 
43
        // exception signals
44
        sc_in<sc_logic>         IBUS;
45
        sc_in<sc_logic>         inst_addrl;
46
        sc_out<sc_logic>        if_id_IBUS;
47
        sc_out<sc_logic>        if_id_inst_addrl;
48
        sc_in<sc_uint<32> >     pc_if_instaddr;
49
        sc_out<sc_uint<32> >    if_id_instaddr;
50
 
51
        sc_out<sc_logic>        if_exception;
52
        sc_in<sc_logic>         enable_fetch;
53
 
54
        // Signals
55
        sc_signal<sc_lv<32> > if_pc_add;
56
 
57
        reg_if *reg_if1;
58
        add *add1;
59
        select_next_pc *select_next_pc1;
60
        if_ctrl *if_ctrl1;
61
 
62
 
63
        SC_CTOR(if_stage)
64
        {
65
                reg_if1 = new reg_if("reg_if");
66
                reg_if1->in_clk(in_clk);
67
                reg_if1->reset(reset);
68
                reg_if1->insthold(insthold);
69
                reg_if1->datahold(datahold);
70
                reg_if1->instdataread(instdataread);
71
                reg_if1->if_pc_add(if_pc_add);
72
                reg_if1->if_id_inst(if_id_inst);
73
                reg_if1->if_id_next_pc(if_id_next_pc);
74
                //exception signals
75
                reg_if1->IBUS(IBUS);
76
                reg_if1->inst_addrl(inst_addrl);
77
                reg_if1->if_id_IBUS(if_id_IBUS);
78
                reg_if1->if_id_inst_addrl(if_id_inst_addrl);
79
                reg_if1->pc_if_instaddr(pc_if_instaddr);
80
                reg_if1->if_id_instaddr(if_id_instaddr);
81
                reg_if1->enable_fetch(enable_fetch);
82
 
83
                add1 = new add("add");
84
                add1->if_pc_add(if_pc_add);
85
                add1->pc_out(pc_out);
86
 
87
                select_next_pc1 = new select_next_pc("select_next_pc");
88
                select_next_pc1->new_pc(new_pc);
89
                select_next_pc1->load_epc(load_epc);
90
                select_next_pc1->id_ctrl(id_ctrl);
91
                select_next_pc1->id_branch(id_branch);
92
                select_next_pc1->if_pc_add(if_pc_add);
93
                select_next_pc1->id_new_pc(id_new_pc);
94
                select_next_pc1->id_jmp_tar(id_jmp_tar);
95
                select_next_pc1->pc_in(pc_in);
96
 
97
                if_ctrl1 = new if_ctrl("if_ctrl");
98
                if_ctrl1->IBUS(IBUS);
99
                if_ctrl1->inst_addrl(inst_addrl);
100
                if_ctrl1->if_exception(if_exception);
101
        }
102
};
103
 
104
#endif

powered by: WebSVN 2.1.0

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