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

Subversion Repositories yacc

[/] [yacc/] [trunk/] [rtl/] [pc_module.v] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 tak.sugawa
//Jun.30.2004 NOP_DISABLE BUG FIX
2
`include "define.h"
3
module pc_module(clock,sync_reset,pc_commandD1,PCC,imm,ea_reg_source,takenD2,
4
        takenD3 ,branchQQ,jumpQ,NOP_Signal,control_state,IMMD1, PCCDD);
5
        input clock;
6
        input sync_reset;
7
        input [31:0] ea_reg_source;
8
        input [2:0] pc_commandD1;
9
        input takenD2;
10
        input [25:0] imm;
11
        input [25:0] IMMD1;
12
`ifdef RAM4K
13
        output [11:0] PCC;
14
`else
15
        output [25:0] PCC;
16
`endif
17
 
18
 
19
        input takenD3;
20
        input  branchQQ,jumpQ;
21
        input NOP_Signal;
22
        input [7:0] control_state;
23
 
24
        reg [2:0] pc_commandD2,pc_commandD3;
25
 
26
`ifdef RAM4K
27
        reg [11:0] PC;
28
        reg [11:0] pcimm1D1,pcimm2D1;
29
        reg [15:0] immD1;//
30
        reg [11:0] pcimm1D2,pcimm2D2,pcimm2D3;
31
        reg [11:0] save_pc;
32
        wire [11:0] PCC;
33
        output [11:0] PCCDD;
34
        reg [11:0] PCCD,PCCDD;
35
`else
36
        reg [25:0] PC;
37
        reg [25:0] pcimm1D1,pcimm2D1;
38
        reg [15:0] immD1;// 
39
        reg [25:0] pcimm1D2,pcimm2D2,pcimm2D3;
40
        reg [25:0] save_pc;
41
        wire [25:0] PCC;
42
        output [25:0] PCCDD;
43
        reg [25:0] PCCD,PCCDD;
44
 
45
`endif
46
 
47
        reg takenD4;
48
        reg branchQQQtakenD4;
49
 
50
 
51
 
52
//combination
53
 
54
        always@(posedge clock) PCCD<=PCC;
55
        always@(posedge clock) PCCDD<=PCCD;
56
 
57
 
58
        always @(posedge clock) begin
59
                        pc_commandD2 <=pc_commandD1;
60
 
61
        end
62
//
63
        always @(posedge clock) begin
64
                if (NOP_Signal) pc_commandD3<=3'b000;//Jun.30.2004
65
                else    pc_commandD3 <=pc_commandD2;
66
 
67
        end
68
 
69
        always @(IMMD1 ) begin
70
                pcimm1D1={IMMD1,2'b00};//Jul.7.2004 {imm[23:0],2'b00};//+{PC[25:2],2'b00};
71
 
72
        end
73
 
74
 
75
`ifdef RAM4K
76
        always @(posedge clock) begin
77
                pcimm2D1<={PC[11:2],2'b00};
78
        end
79
`else
80
 
81
        always @(posedge clock) begin
82
                pcimm2D1<={PC[25:2],2'b00};
83
        end
84
 
85
`endif
86
 
87
        always @(posedge clock) begin
88
                 pcimm1D2<=pcimm1D1;
89
 
90
        end
91
 
92
        always @(posedge clock) begin
93
 
94
                        pcimm2D2<={{8 {immD1[15]}},immD1[15:0],2'b00}+pcimm2D1;//Jul.14.2004
95
        end
96
        always @(posedge clock) begin
97
                 pcimm2D3<=pcimm2D2;
98
        end
99
 
100
 
101
        always @(posedge clock) begin
102
                 immD1<=imm[15:0];//Jul.14.2004
103
        end
104
 
105
 
106
        always @(posedge clock) begin
107
                if (control_state==8'b00_000_010) save_pc<=PCCDD;
108
        end
109
 
110
 
111
 
112
 
113
 
114
        always @(posedge clock) begin
115
                if (sync_reset) PC<=26'h0_00_0000_0000;
116
 
117
                else if (branchQQQtakenD4) PC<=pcimm2D3+4;//NOP
118
                else if (jumpQ && !NOP_Signal) PC<=pcimm1D1+4;
119
 
120
                else if (pc_commandD3==`PC_REG) PC<=ea_reg_source[25:0]+4;
121
                else if (control_state[2:0]==3'b110) PC<=save_pc+4;//mul/div     
122
                else  case(pc_commandD1)
123
                                                `PC_INC:        PC<=PC+4;
124
                                                default:        PC<=PC+4;
125
                             endcase
126
 
127
 
128
 
129
        end
130
        always @(posedge clock) begin
131
                if (sync_reset) takenD4<=1'b0;
132
                else    takenD4<=takenD3;
133
 
134
        end
135
 
136
        always @(posedge clock) begin
137
                if (sync_reset) branchQQQtakenD4<=1'b0;
138
                else            branchQQQtakenD4<=branchQQ && takenD3;
139
        end
140
 
141
        assign PCC=  branchQQQtakenD4  ? pcimm2D3 :
142
                                jumpQ  && !NOP_Signal ? pcimm1D1 :
143
                                pc_commandD3==`PC_REG ?   ea_reg_source[25:0] :
144
                                control_state[2:0] ==3'b110 ? save_pc:PC;//Jun.27.2004
145
 
146
endmodule

powered by: WebSVN 2.1.0

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