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

Subversion Repositories rtf65002

[/] [rtf65002/] [trunk/] [rtl/] [verilog/] [byte_irq.v] - Blame information for rev 5

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

Line No. Rev Author Line
1 5 robfinch
// IRQ processing states
2
// The high order PC[31:16] is set to zero, forcing the IRQ routine to be in bank zero.
3
//
4
BYTE_IRQ1:
5
        if (ack_i) begin
6
                cyc_o <= 1'b0;
7
                stb_o <= 1'b0;
8
                we_o <= 1'b0;
9
                sel_o <= 4'h0;
10
                sp <= sp_dec;
11
                if (dhit) begin
12
                        wrsel <= sel_o;
13
                        wr <= 1'b1;
14
                end
15
                state <= BYTE_IRQ2;
16
        end
17
BYTE_IRQ2:
18
        begin
19
                radr <= {24'h1,sp[7:2]};
20
                radr2LSB <= sp[1:0];
21
                wadr <= {24'h1,sp[7:2]};
22
                wadr2LSB <= sp[1:0];
23
                wdat <= {4{pc[23:16]}};
24
                cyc_o <= 1'b1;
25
                stb_o <= 1'b1;
26
                we_o <= 1'b1;
27
                case(sp[1:0])
28
                2'd0:   sel_o <= 4'b0001;
29
                2'd1:   sel_o <= 4'b0010;
30
                2'd2:   sel_o <= 4'b0100;
31
                2'd3:   sel_o <= 4'b1000;
32
                endcase
33
                adr_o <= {24'h1,sp[7:2],2'b00};
34
                dat_o <= {4{pc[23:16]}};
35
                state <= BYTE_IRQ3;
36
        end
37
BYTE_IRQ3:
38
        if (ack_i) begin
39
                cyc_o <= 1'b0;
40
                stb_o <= 1'b0;
41
                we_o <= 1'b0;
42
                sel_o <= 4'h0;
43
                sp <= sp_dec;
44
                if (dhit) begin
45
                        wrsel <= sel_o;
46
                        wr <= 1'b1;
47
                end
48
                state <= BYTE_IRQ4;
49
        end
50
BYTE_IRQ4:
51
        begin
52
                radr <= {24'h1,sp[7:2]};
53
                radr2LSB <= sp[1:0];
54
                wadr <= {24'h1,sp[7:2]};
55
                wadr2LSB <= sp[1:0];
56
                wdat <= {4{pc[15:8]}};
57
                cyc_o <= 1'b1;
58
                stb_o <= 1'b1;
59
                we_o <= 1'b1;
60
                case(sp[1:0])
61
                2'd0:   sel_o <= 4'b0001;
62
                2'd1:   sel_o <= 4'b0010;
63
                2'd2:   sel_o <= 4'b0100;
64
                2'd3:   sel_o <= 4'b1000;
65
                endcase
66
                adr_o <= {24'h1,sp[7:2],2'b00};
67
                dat_o <= {4{pc[15:8]}};
68
                state <= BYTE_IRQ5;
69
        end
70
BYTE_IRQ5:
71
        if (ack_i) begin
72
                cyc_o <= 1'b0;
73
                stb_o <= 1'b0;
74
                we_o <= 1'b0;
75
                sel_o <= 4'h0;
76
                sp <= sp_dec;
77
                if (dhit) begin
78
                        wrsel <= sel_o;
79
                        wr <= 1'b1;
80
                end
81
                state <= BYTE_IRQ6;
82
        end
83
BYTE_IRQ6:
84
        begin
85
                radr <= {24'h1,sp[7:2]};
86
                radr2LSB <= sp[1:0];
87
                wadr <= {24'h1,sp[7:2]};
88
                wadr2LSB <= sp[1:0];
89
                wdat <= {4{pc[7:0]}};
90
                cyc_o <= 1'b1;
91
                stb_o <= 1'b1;
92
                we_o <= 1'b1;
93
                case(sp[1:0])
94
                2'd0:   sel_o <= 4'b0001;
95
                2'd1:   sel_o <= 4'b0010;
96
                2'd2:   sel_o <= 4'b0100;
97
                2'd3:   sel_o <= 4'b1000;
98
                endcase
99
                adr_o <= {24'h1,sp[7:2],2'b00};
100
                dat_o <= {4{pc[7:0]}};
101
                state <= BYTE_IRQ7;
102
        end
103
BYTE_IRQ7:
104
        if (ack_i) begin
105
                cyc_o <= 1'b0;
106
                stb_o <= 1'b0;
107
                we_o <= 1'b0;
108
                sel_o <= 4'h0;
109
                sp <= sp_dec;
110
                if (dhit) begin
111
                        wrsel <= sel_o;
112
                        wr <= 1'b1;
113
                end
114
                state <= BYTE_IRQ8;
115
        end
116
BYTE_IRQ8:
117
        begin
118
                radr <= {24'h1,sp[7:2]};
119
                radr2LSB <= sp[1:0];
120
                wadr <= {24'h1,sp[7:2]};
121
                wadr2LSB <= sp[1:0];
122
                wdat <= {4{sr8[7:0]}};
123
                cyc_o <= 1'b1;
124
                stb_o <= 1'b1;
125
                we_o <= 1'b1;
126
                case(sp[1:0])
127
                2'd0:   sel_o <= 4'b0001;
128
                2'd1:   sel_o <= 4'b0010;
129
                2'd2:   sel_o <= 4'b0100;
130
                2'd3:   sel_o <= 4'b1000;
131
                endcase
132
                adr_o <= {24'h1,sp[7:2],2'b00};
133
                dat_o <= {4{sr8[7:0]}};
134
                state <= BYTE_IRQ9;
135
        end
136
BYTE_IRQ9:
137
        if (ack_i) begin
138
                cyc_o <= 1'b0;
139
                stb_o <= 1'b0;
140
                we_o <= 1'b0;
141
                sel_o <= 4'h0;
142
                sp <= sp_dec;
143
                if (dhit) begin
144
                        wrsel <= sel_o;
145
                        wr <= 1'b1;
146
                end
147
                pc[31:16] <= 16'h0000;
148
                radr <= vect[31:2];
149
                radr2LSB <= vect[1:0];
150
                state <= BYTE_JMP_IND1;
151
        end
152
 

powered by: WebSVN 2.1.0

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