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

Subversion Repositories xgate

[/] [xgate/] [trunk/] [rtl/] [verilog/] [xgate_regs.v] - Blame information for rev 2

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

Line No. Rev Author Line
1 2 rehayes
////////////////////////////////////////////////////////////////////////////////
2
//
3
//  Computer Operating Properly - Control registers
4
//
5
//  Author: Bob Hayes
6
//          rehayes@opencores.org
7
//
8
//  Downloaded from: http://www.opencores.org/projects/xgate.....
9
//
10
////////////////////////////////////////////////////////////////////////////////
11
// Copyright (c) 2009, Robert Hayes
12
//
13
// This source file is free software: you can redistribute it and/or modify
14
// it under the terms of the GNU Lesser General Public License as published
15
// by the Free Software Foundation, either version 3 of the License, or
16
// (at your option) any later version.
17
//
18
// Supplemental terms.
19
//     * Redistributions of source code must retain the above copyright
20
//       notice, this list of conditions and the following disclaimer.
21
//     * Neither the name of the <organization> nor the
22
//       names of its contributors may be used to endorse or promote products
23
//       derived from this software without specific prior written permission.
24
//
25
// THIS SOFTWARE IS PROVIDED BY Robert Hayes ''AS IS'' AND ANY
26
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
27
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
28
// DISCLAIMED. IN NO EVENT SHALL Robert Hayes BE LIABLE FOR ANY
29
// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
30
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
31
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
32
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
34
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35
//
36
// You should have received a copy of the GNU General Public License
37
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
38
////////////////////////////////////////////////////////////////////////////////
39
// 45678901234567890123456789012345678901234567890123456789012345678901234567890
40
 
41
module xgate_regs #(parameter ARST_LVL = 1'b0,    // asynchronous reset level
42
                    parameter MAX_CHANNEL = 127)  // Max XGATE Interrupt Channel Number
43
  (
44
  output reg                  xge,          // XGATE Module Enable
45
  output reg                  xgfrz,        // Stop XGATE in Freeze Mode
46
  output reg                  xgdbg,        // XGATE Debug Mode
47
  output reg                  xgss,         // XGATE Single Step
48
  output reg                  xgfact,       // XGATE Flag Activity
49
  output reg                  xgsweif_c,    // Clear XGATE Software Error Interrupt FLag
50
  output reg                  xgie,         // XGATE Interrupt Enable
51
  output reg           [15:1] xgvbr,        // XGATE vector Base Address Register
52
  output reg           [ 7:0] xgswt,        // XGATE Software Trigger Register for host
53
  output reg           [15:0] xgisp74,      // XGATE Interrupt level 7-4 stack pointer
54
  output reg           [15:0] xgisp30,      // XGATE Interrupt level 3-0 stack pointer
55
  output reg                  clear_xgif_7,    // Strobe for decode to clear interrupt flag bank 7
56
  output reg                  clear_xgif_6,    // Strobe for decode to clear interrupt flag bank 6
57
  output reg                  clear_xgif_5,    // Strobe for decode to clear interrupt flag bank 5
58
  output reg                  clear_xgif_4,    // Strobe for decode to clear interrupt flag bank 4
59
  output reg                  clear_xgif_3,    // Strobe for decode to clear interrupt flag bank 3
60
  output reg                  clear_xgif_2,    // Strobe for decode to clear interrupt flag bank 2
61
  output reg                  clear_xgif_1,    // Strobe for decode to clear interrupt flag bank 1
62
  output reg                  clear_xgif_0,    // Strobe for decode to clear interrupt flag bank 0
63
  output reg           [15:0] clear_xgif_data, // Data for decode to clear interrupt flag
64
  output                      semaph_stat,     // Return Status of Semaphore bit
65
 
66
  input                       bus_clk,       // Control register bus clock
67
  input                       async_rst_b,   // Async reset signal
68
  input                       sync_reset,    // Syncronous reset signal
69
  input                       cop_flag,      // COP Rollover Flag
70
  input                [15:0] write_bus,     // Write Data Bus
71
  input                       write_xgmctl,  // Write Strobe for XGMCTL register
72
  input                       write_xgisp74, // Write Strobe for XGISP74 register
73
  input                       write_xgisp30, // Write Strobe for XGISP30 register
74
  input                       write_xgvbr,   // Write Strobe for XGVBR register
75
  input                       write_xgif_7,  // Write Strobe for Interrupt Flag Register 7
76
  input                       write_xgif_6,  // Write Strobe for Interrupt Flag Register 6
77
  input                       write_xgif_5,  // Write Strobe for Interrupt Flag Register 5
78
  input                       write_xgif_4,  // Write Strobe for Interrupt Flag Register 4
79
  input                       write_xgif_3,  // Write Strobe for Interrupt Flag Register 3
80
  input                       write_xgif_2,  // Write Strobe for Interrupt Flag Register 2
81
  input                       write_xgif_1,  // Write Strobe for Interrupt Flag Register 1
82
  input                       write_xgif_0,  // Write Strobe for Interrupt Flag Register 0
83
  input                       write_xgswt,   // Write Strobe for XGSWT register
84
  input                       access_semaph, // Semaphore strobe
85
  input                [ 2:0] semaph_risc    // Semaphore register select from RISC
86
  );
87
 
88
 
89
  // registers
90
 
91
  // Wires
92
  wire write_any_xgif;
93
 
94
  //
95
  // module body
96
  //
97
 
98
 
99
  // generate wishbone write registers
100
  // XGMCTL Register
101
  //  xgdbgm;    // XGATE Debug Mode Mask
102
  always @(posedge bus_clk or negedge async_rst_b)
103
    if (!async_rst_b)
104
      begin
105
        xge        <= 1'b0;
106
        xgfrz      <= 1'b0;
107
        xgdbg      <= 1'b0;
108
        xgss       <= 1'b0;
109
        xgfact     <= 1'b0;
110
        xgsweif_c  <= 1'b0;
111
        xgie       <= 1'b0;
112
       end
113
    else if (sync_reset)
114
      begin
115
        xge        <= 1'b0;
116
        xgfrz      <= 1'b0;
117
        xgdbg      <= 1'b0;
118
        xgss       <= 1'b0;
119
        xgfact     <= 1'b0;
120
        xgsweif_c  <= 1'b0;
121
        xgie       <= 1'b0;
122
     end
123
    else if (write_xgmctl)
124
      begin
125
        xge        <= write_bus[15] ? write_bus[7] : xge;
126
        xgfrz      <= write_bus[14] ? write_bus[6] : xgfrz;
127
        xgdbg      <= write_bus[13] ? write_bus[5] : xgdbg;
128
        xgss       <= write_bus[13] ? write_bus[4] : xgss;
129
        xgfact     <= write_bus[12] ? write_bus[3] : xgfact;
130
        xgsweif_c  <= write_bus[10] ? write_bus[1] : xgsweif_c;
131
        xgie       <= write_bus[ 9] ? write_bus[0] : xgie;
132
      end
133
    else
134
      begin
135
        xgss       <= 1'b0;
136
        xgsweif_c  <= 1'b0;
137
      end
138
 
139
  // XGVBR Register
140
  always @(posedge bus_clk or negedge async_rst_b)
141
    if (!async_rst_b)
142
      begin
143
        xgvbr  <= 15'b1111_1110_0000_000;
144
       end
145
    else if (sync_reset)
146
      begin
147
        xgvbr  <= 15'b1111_1110_0000_000;
148
      end
149
    else if (write_xgvbr)
150
      begin
151
        xgvbr[15: 1]  <= xge ? 15'b0 : write_bus[15:1];
152
      end
153
 
154
  // XGISP74 Register
155
  always @(posedge bus_clk or negedge async_rst_b)
156
    if (!async_rst_b)
157
      xgisp74  <= 16'b0;
158
    else if (sync_reset)
159
      xgisp74  <= 16'b0;
160
    else if (write_xgisp74)
161
      xgisp74  <= xge ? xgisp74 : write_bus;
162
 
163
  // XGISP30 Register
164
  always @(posedge bus_clk or negedge async_rst_b)
165
    if (!async_rst_b)
166
      xgisp30  <= 16'b0;
167
    else if (sync_reset)
168
      xgisp30  <= 16'b0;
169
    else if (write_xgisp30)
170
      xgisp30  <= xge ? xgisp30 : write_bus;
171
 
172
  // XGIF 7-0 Registers
173
  assign write_any_xgif = write_xgif_7 || write_xgif_6 || write_xgif_5 || write_xgif_4 ||
174
                          write_xgif_3 || write_xgif_2 || write_xgif_1 || write_xgif_0;
175
 
176
  // Registers to clear the interrupt flags. Decode a specific interrupt to
177
  //  clear by ANDing the clear_xgif_x signal with the clear_xgif_data.
178
  always @(posedge bus_clk or negedge async_rst_b)
179
    if (!async_rst_b)
180
      begin
181
        clear_xgif_7    <= 1'b0;
182
        clear_xgif_6    <= 1'b0;
183
        clear_xgif_5    <= 1'b0;
184
        clear_xgif_4    <= 1'b0;
185
        clear_xgif_3    <= 1'b0;
186
        clear_xgif_2    <= 1'b0;
187
        clear_xgif_1    <= 1'b0;
188
        clear_xgif_0    <= 1'b0;
189
        clear_xgif_data <= 16'b0;
190
      end
191
    else if (sync_reset)
192
      begin
193
        clear_xgif_7    <= 1'b0;
194
        clear_xgif_6    <= 1'b0;
195
        clear_xgif_5    <= 1'b0;
196
        clear_xgif_4    <= 1'b0;
197
        clear_xgif_3    <= 1'b0;
198
        clear_xgif_2    <= 1'b0;
199
        clear_xgif_1    <= 1'b0;
200
        clear_xgif_0    <= 1'b0;
201
        clear_xgif_data <= 16'b0;
202
      end
203
    else
204
      begin
205
        clear_xgif_7    <= write_xgif_7 && (MAX_CHANNEL > 111);
206
        clear_xgif_6    <= write_xgif_6 && (MAX_CHANNEL > 95);
207
        clear_xgif_5    <= write_xgif_5 && (MAX_CHANNEL > 79);
208
        clear_xgif_4    <= write_xgif_4 && (MAX_CHANNEL > 63);
209
        clear_xgif_3    <= write_xgif_3 && (MAX_CHANNEL > 47);
210
        clear_xgif_2    <= write_xgif_2 && (MAX_CHANNEL > 31);
211
        clear_xgif_1    <= write_xgif_1 && (MAX_CHANNEL > 15);
212
        clear_xgif_0    <= write_xgif_0;
213
        clear_xgif_data <= write_any_xgif ? write_bus : clear_xgif_data;
214
      end
215
 
216
 
217
  // XGSWT - XGATE Software Trigger Register
218
  always @(posedge bus_clk or negedge async_rst_b)
219
    if (!async_rst_b)
220
      xgswt <= 8'h00;
221
    else if (sync_reset)
222
      xgswt <= 8'h00;
223
    else if (write_xgswt)
224
      begin
225
        xgswt[7] <= write_bus[15] ? write_bus[7] : xgswt[7];
226
        xgswt[6] <= write_bus[14] ? write_bus[6] : xgswt[6];
227
        xgswt[5] <= write_bus[13] ? write_bus[5] : xgswt[5];
228
        xgswt[4] <= write_bus[11] ? write_bus[4] : xgswt[4];
229
        xgswt[3] <= write_bus[12] ? write_bus[3] : xgswt[3];
230
        xgswt[2] <= write_bus[10] ? write_bus[2] : xgswt[2];
231
        xgswt[1] <= write_bus[ 9] ? write_bus[1] : xgswt[1];
232
        xgswt[0] <= write_bus[ 8] ? write_bus[0] : xgswt[0];
233
      end
234
 
235
 
236
endmodule  // xgate_regs
237
 
238
 

powered by: WebSVN 2.1.0

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