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

Subversion Repositories aemb

[/] [aemb/] [tags/] [AEMB_7_05/] [rtl/] [verilog/] [aeMB_regfile.v] - Blame information for rev 4

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

Line No. Rev Author Line
1 3 sybreon
//                              -*- Mode: Verilog -*-
2
// Filename        : aeMB_regfile.v
3
// Description     : AEMB Register File
4
// Author          : Shawn Tan Ser Ngiap <shawn.tan@aeste.net>
5
// Created On      : Fri Dec 29 16:17:31 2006
6
// Last Modified By: Shawn Tan
7
// Last Modified On: 2006-12-29
8
// Update Count    : 0
9
// Status          : Unknown, Use with caution!
10
 
11
/*
12 4 sybreon
 * $Id: aeMB_regfile.v,v 1.2 2007-03-26 12:21:31 sybreon Exp $
13 3 sybreon
 *
14
 * Copyright (C) 2006 Shawn Tan Ser Ngiap <shawn.tan@aeste.net>
15
 *
16
 * This library is free software; you can redistribute it and/or modify it
17
 * under the terms of the GNU Lesser General Public License as published by
18
 * the Free Software Foundation; either version 2.1 of the License,
19
 * or (at your option) any later version.
20
 *
21
 * This library is distributed in the hope that it will be useful, but
22
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
23
 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
24
 * License for more details.
25
 *
26
 * You should have received a copy of the GNU Lesser General Public License
27
 * along with this library; if not, write to the Free Software Foundation, Inc.,
28
 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
29
 *
30
 * DESCRIPTION
31
 * Implements the 32 registers as registers. Some registers require
32
 * special actions during hardware exception/interrupts. Data forwarding
33
 * is also taken care of inside here to simplify decode logic.
34
 *
35
 * HISTORY
36
 * $Log: not supported by cvs2svn $
37 4 sybreon
 * Revision 1.1  2007/03/09 17:52:17  sybreon
38
 * initial import
39 3 sybreon
 *
40 4 sybreon
 *
41 3 sybreon
 */
42
 
43
module aeMB_regfile(/*AUTOARG*/
44
   // Outputs
45
   dwb_dat_o, rREGA, rREGB,
46
   // Inputs
47
   dwb_dat_i, rDWBSTB, rDWBWE, rRA, rRB, rRD, rRD_, rRESULT, rFSM,
48
   rPC, rPCNXT, rLNK, rRWE, nclk, nrst, drun, drst
49
   );
50
   // Data WB bus width
51
   parameter DSIZ = 32;
52
 
53
   // Data WB I/F
54
   output [31:0] dwb_dat_o;
55
   input [31:0]  dwb_dat_i;
56
 
57
   // Internal I/F
58
   output [31:0] rREGA, rREGB;
59
   input         rDWBSTB, rDWBWE;
60
   input [4:0]    rRA, rRB, rRD, rRD_;
61
   input [31:0]  rRESULT;
62
   input [1:0]    rFSM;
63
   input [31:0]  rPC, rPCNXT;
64
   input         rLNK, rRWE;
65
   input         nclk, nrst, drun, drst;
66
 
67
   // Register File
68
   reg [31:0]     r00,r01,r02,r03,r04,r05,r06,r07;
69
   reg [31:0]     r08,r09,r0A,r0B,r0C,r0D,r0E,r0F;
70
   reg [31:0]     r10,r11,r12,r13,r14,r15,r16,r17;
71
   reg [31:0]     r18,r19,r1A,r1B,r1C,r1D,r1E,r1F;
72
 
73
   // FLAGS
74 4 sybreon
   wire fWE = rRWE & ~rDWBWE;
75 3 sybreon
   wire fLNK = rLNK;
76
   wire fLD = rDWBSTB ^ rDWBWE;
77 4 sybreon
 
78 3 sybreon
   // PC Latch
79
   reg [31:0]     rPC_;
80
   always @(negedge nclk or negedge nrst)
81
     if (!nrst) begin
82
        /*AUTORESET*/
83
        // Beginning of autoreset for uninitialized flops
84
        rPC_ <= 32'h0;
85
        // End of automatics
86
     end else begin
87
        rPC_ <= #1 rPC;
88
     end
89
 
90
   // DWB data - Endian Correction
91
   wire [31:0]    wDWBDAT = dwb_dat_i;
92
 
93
   reg [31:0]     rDWBDAT;
94
   wire          fDFWD = (rRD == rRD_) & fWE;
95
   assign        dwb_dat_o = rDWBDAT;
96
 
97
   always @(negedge nclk or negedge nrst)
98
     if (!nrst) begin
99
        /*AUTORESET*/
100
        // Beginning of autoreset for uninitialized flops
101
        rDWBDAT <= 32'h0;
102
        // End of automatics
103
     end else if (drun) begin
104
        case (rRD)
105
          5'h00: rDWBDAT <= #1 (fDFWD) ? rRESULT : r00;
106
          5'h01: rDWBDAT <= #1 (fDFWD) ? rRESULT : r01;
107
          5'h02: rDWBDAT <= #1 (fDFWD) ? rRESULT : r02;
108
          5'h03: rDWBDAT <= #1 (fDFWD) ? rRESULT : r03;
109
          5'h04: rDWBDAT <= #1 (fDFWD) ? rRESULT : r04;
110
          5'h05: rDWBDAT <= #1 (fDFWD) ? rRESULT : r05;
111
          5'h06: rDWBDAT <= #1 (fDFWD) ? rRESULT : r06;
112
          5'h07: rDWBDAT <= #1 (fDFWD) ? rRESULT : r07;
113
          5'h08: rDWBDAT <= #1 (fDFWD) ? rRESULT : r08;
114
          5'h09: rDWBDAT <= #1 (fDFWD) ? rRESULT : r09;
115
          5'h0A: rDWBDAT <= #1 (fDFWD) ? rRESULT : r0A;
116
          5'h0B: rDWBDAT <= #1 (fDFWD) ? rRESULT : r0B;
117
          5'h0C: rDWBDAT <= #1 (fDFWD) ? rRESULT : r0C;
118
          5'h0D: rDWBDAT <= #1 (fDFWD) ? rRESULT : r0D;
119
          5'h0E: rDWBDAT <= #1 (fDFWD) ? rRESULT : r0E;
120
          5'h0F: rDWBDAT <= #1 (fDFWD) ? rRESULT : r0F;
121
          5'h10: rDWBDAT <= #1 (fDFWD) ? rRESULT : r10;
122
          5'h11: rDWBDAT <= #1 (fDFWD) ? rRESULT : r11;
123
          5'h12: rDWBDAT <= #1 (fDFWD) ? rRESULT : r12;
124
          5'h13: rDWBDAT <= #1 (fDFWD) ? rRESULT : r13;
125
          5'h14: rDWBDAT <= #1 (fDFWD) ? rRESULT : r14;
126
          5'h15: rDWBDAT <= #1 (fDFWD) ? rRESULT : r15;
127
          5'h16: rDWBDAT <= #1 (fDFWD) ? rRESULT : r16;
128
          5'h17: rDWBDAT <= #1 (fDFWD) ? rRESULT : r17;
129
          5'h18: rDWBDAT <= #1 (fDFWD) ? rRESULT : r18;
130
          5'h19: rDWBDAT <= #1 (fDFWD) ? rRESULT : r19;
131
          5'h1A: rDWBDAT <= #1 (fDFWD) ? rRESULT : r1A;
132
          5'h1B: rDWBDAT <= #1 (fDFWD) ? rRESULT : r1B;
133
          5'h1C: rDWBDAT <= #1 (fDFWD) ? rRESULT : r1C;
134
          5'h1D: rDWBDAT <= #1 (fDFWD) ? rRESULT : r1D;
135
          5'h1E: rDWBDAT <= #1 (fDFWD) ? rRESULT : r1E;
136
          5'h1F: rDWBDAT <= #1 (fDFWD) ? rRESULT : r1F;
137 4 sybreon
        endcase // case (rRD)
138 3 sybreon
     end else begin // if (drun)
139
        /*AUTORESET*/
140
        // Beginning of autoreset for uninitialized flops
141
        rDWBDAT <= 32'h0;
142
        // End of automatics
143 4 sybreon
     end // else: !if(drun)
144 3 sybreon
 
145
   // Load Registers
146
   reg [31:0]         rREGA, rREGB;
147
   always @(posedge nclk or negedge nrst)
148
     if (!nrst) begin
149
        /*AUTORESET*/
150
        // Beginning of autoreset for uninitialized flops
151
        rREGA <= 32'h0;
152
        rREGB <= 32'h0;
153
        // End of automatics
154
     end else if (drun) begin
155
        case (rRA)
156
          5'h1F: rREGA <= #1 r1F;
157
          5'h1E: rREGA <= #1 r1E;
158
          5'h1D: rREGA <= #1 r1D;
159
          5'h1C: rREGA <= #1 r1C;
160
          5'h1B: rREGA <= #1 r1B;
161
          5'h1A: rREGA <= #1 r1A;
162
          5'h19: rREGA <= #1 r19;
163
          5'h18: rREGA <= #1 r18;
164
          5'h17: rREGA <= #1 r17;
165
          5'h16: rREGA <= #1 r16;
166
          5'h15: rREGA <= #1 r15;
167
          5'h14: rREGA <= #1 r14;
168
          5'h13: rREGA <= #1 r13;
169
          5'h12: rREGA <= #1 r12;
170
          5'h11: rREGA <= #1 r11;
171
          5'h10: rREGA <= #1 r10;
172
          5'h0F: rREGA <= #1 r0F;
173
          5'h0E: rREGA <= #1 r0E;
174
          5'h0D: rREGA <= #1 r0D;
175
          5'h0C: rREGA <= #1 r0C;
176
          5'h0B: rREGA <= #1 r0B;
177
          5'h0A: rREGA <= #1 r0A;
178
          5'h09: rREGA <= #1 r09;
179
          5'h08: rREGA <= #1 r08;
180
          5'h07: rREGA <= #1 r07;
181
          5'h06: rREGA <= #1 r06;
182
          5'h05: rREGA <= #1 r05;
183
          5'h04: rREGA <= #1 r04;
184
          5'h03: rREGA <= #1 r03;
185
          5'h02: rREGA <= #1 r02;
186
          5'h01: rREGA <= #1 r01;
187
          5'h00: rREGA <= #1 r00;
188 4 sybreon
        endcase // case (rRA)
189 3 sybreon
 
190
        case (rRB)
191
          5'h1F: rREGB <= #1 r1F;
192
          5'h1E: rREGB <= #1 r1E;
193
          5'h1D: rREGB <= #1 r1D;
194
          5'h1C: rREGB <= #1 r1C;
195
          5'h1B: rREGB <= #1 r1B;
196
          5'h1A: rREGB <= #1 r1A;
197
          5'h19: rREGB <= #1 r19;
198
          5'h18: rREGB <= #1 r18;
199
          5'h17: rREGB <= #1 r17;
200
          5'h16: rREGB <= #1 r16;
201
          5'h15: rREGB <= #1 r15;
202
          5'h14: rREGB <= #1 r14;
203
          5'h13: rREGB <= #1 r13;
204
          5'h12: rREGB <= #1 r12;
205
          5'h11: rREGB <= #1 r11;
206
          5'h10: rREGB <= #1 r10;
207
          5'h0F: rREGB <= #1 r0F;
208
          5'h0E: rREGB <= #1 r0E;
209
          5'h0D: rREGB <= #1 r0D;
210
          5'h0C: rREGB <= #1 r0C;
211
          5'h0B: rREGB <= #1 r0B;
212
          5'h0A: rREGB <= #1 r0A;
213
          5'h09: rREGB <= #1 r09;
214
          5'h08: rREGB <= #1 r08;
215
          5'h07: rREGB <= #1 r07;
216
          5'h06: rREGB <= #1 r06;
217
          5'h05: rREGB <= #1 r05;
218
          5'h04: rREGB <= #1 r04;
219
          5'h03: rREGB <= #1 r03;
220
          5'h02: rREGB <= #1 r02;
221
          5'h01: rREGB <= #1 r01;
222
          5'h00: rREGB <= #1 r00;
223 4 sybreon
        endcase // case (rRB)
224 3 sybreon
     end else begin // if (drun)
225
        /*AUTORESET*/
226
        // Beginning of autoreset for uninitialized flops
227
        rREGA <= 32'h0;
228
        rREGB <= 32'h0;
229
        // End of automatics
230 4 sybreon
     end // else: !if(drun)
231 3 sybreon
 
232
 
233
   // Normal Registers
234
   wire fR00 = (rRD_ == 5'h00);
235
   wire fR01 = (rRD_ == 5'h01);
236
   wire fR02 = (rRD_ == 5'h02);
237
   wire fR03 = (rRD_ == 5'h03);
238
   wire fR04 = (rRD_ == 5'h04);
239
   wire fR05 = (rRD_ == 5'h05);
240
   wire fR06 = (rRD_ == 5'h06);
241
   wire fR07 = (rRD_ == 5'h07);
242
   wire fR08 = (rRD_ == 5'h08);
243
   wire fR09 = (rRD_ == 5'h09);
244
   wire fR0A = (rRD_ == 5'h0A);
245
   wire fR0B = (rRD_ == 5'h0B);
246
   wire fR0C = (rRD_ == 5'h0C);
247
   wire fR0D = (rRD_ == 5'h0D);
248
   wire fR0E = (rRD_ == 5'h0E);
249
   wire fR0F = (rRD_ == 5'h0F);
250
   wire fR10 = (rRD_ == 5'h10);
251
   wire fR11 = (rRD_ == 5'h11);
252
   wire fR12 = (rRD_ == 5'h12);
253
   wire fR13 = (rRD_ == 5'h13);
254
   wire fR14 = (rRD_ == 5'h14);
255
   wire fR15 = (rRD_ == 5'h15);
256
   wire fR16 = (rRD_ == 5'h16);
257
   wire fR17 = (rRD_ == 5'h17);
258
   wire fR18 = (rRD_ == 5'h18);
259
   wire fR19 = (rRD_ == 5'h19);
260
   wire fR1A = (rRD_ == 5'h1A);
261
   wire fR1B = (rRD_ == 5'h1B);
262
   wire fR1C = (rRD_ == 5'h1C);
263
   wire fR1D = (rRD_ == 5'h1D);
264
   wire fR1E = (rRD_ == 5'h1E);
265
   wire fR1F = (rRD_ == 5'h1F);
266
 
267
   always @(negedge nclk or negedge nrst)
268
     if (!nrst) begin
269
        /*AUTORESET*/
270
        // Beginning of autoreset for uninitialized flops
271
        r01 <= 32'h0;
272
        r02 <= 32'h0;
273
        r03 <= 32'h0;
274
        r04 <= 32'h0;
275
        r05 <= 32'h0;
276
        r06 <= 32'h0;
277
        r07 <= 32'h0;
278
        r08 <= 32'h0;
279
        r09 <= 32'h0;
280
        r0A <= 32'h0;
281
        r0B <= 32'h0;
282
        r0C <= 32'h0;
283
        r0D <= 32'h0;
284
        r0F <= 32'h0;
285
        r10 <= 32'h0;
286
        r12 <= 32'h0;
287
        r13 <= 32'h0;
288
        r14 <= 32'h0;
289
        r15 <= 32'h0;
290
        r16 <= 32'h0;
291
        r17 <= 32'h0;
292
        r18 <= 32'h0;
293
        r19 <= 32'h0;
294
        r1A <= 32'h0;
295
        r1B <= 32'h0;
296
        r1C <= 32'h0;
297
        r1D <= 32'h0;
298
        r1E <= 32'h0;
299
        r1F <= 32'h0;
300
        // End of automatics
301
     end else begin // if (!nrst)
302
        r01 <= #1 (!fR01) ? r01 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r01;
303
        r02 <= #1 (!fR02) ? r02 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r02;
304
        r03 <= #1 (!fR03) ? r03 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r03;
305
        r04 <= #1 (!fR04) ? r04 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r04;
306
        r05 <= #1 (!fR05) ? r05 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r05;
307
        r06 <= #1 (!fR06) ? r06 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r06;
308
        r07 <= #1 (!fR07) ? r07 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r07;
309
        r08 <= #1 (!fR08) ? r08 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r08;
310
        r09 <= #1 (!fR09) ? r09 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r09;
311
        r0A <= #1 (!fR0A) ? r0A : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r0A;
312
        r0B <= #1 (!fR0B) ? r0B : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r0B;
313
        r0C <= #1 (!fR0C) ? r0C : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r0C;
314
        r0D <= #1 (!fR0D) ? r0D : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r0D;
315
        r0F <= #1 (!fR0F) ? r0F : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r0F;
316
        r10 <= #1 (!fR10) ? r10 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r10;
317
        r12 <= #1 (!fR12) ? r12 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r12;
318
        r13 <= #1 (!fR13) ? r13 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r13;
319
 
320
        r14 <= #1 (rFSM == 2'h1) ? rPCNXT : (!fR14) ? r14 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r14;
321
 
322
        r15 <= #1 (!fR15) ? r15 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r15;
323
        r16 <= #1 (!fR16) ? r16 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r16;
324
 
325
        r17 <= #1 (rFSM == 2'h2) ? rPCNXT : (!fR17) ? r17 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r17;
326
 
327
        r18 <= #1 (!fR18) ? r18 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r18;
328
        r19 <= #1 (!fR19) ? r19 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r19;
329
        r1A <= #1 (!fR1A) ? r1A : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r1A;
330
        r1B <= #1 (!fR1B) ? r1B : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r1B;
331
        r1C <= #1 (!fR1C) ? r1C : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r1C;
332
        r1D <= #1 (!fR1D) ? r1D : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r1D;
333
        r1E <= #1 (!fR1E) ? r1E : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r1E;
334
        r1F <= #1 (!fR1F) ? r1F : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r1F;
335
 
336
        /*
337
        r01 <= #1 (!fR01) ? r01 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r01;
338
        r02 <= #1 (fR02 & fLD) ? wDWBDAT : (fR02 & fLNK) ? rPC_ : (fR02 & fWE) ? rRESULT : r02;
339
        r03 <= #1 (fR03 & fLD) ? wDWBDAT : (fR03 & fLNK) ? rPC_ : (fR03 & fWE) ? rRESULT : r03;
340
        r04 <= #1 (fR04 & fLD) ? wDWBDAT : (fR04 & fLNK) ? rPC_ : (fR04 & fWE) ? rRESULT : r04;
341
        r05 <= #1 (fR05 & fLD) ? wDWBDAT : (fR05 & fLNK) ? rPC_ : (fR05 & fWE) ? rRESULT : r05;
342
        r06 <= #1 (fR06 & fLD) ? wDWBDAT : (fR06 & fLNK) ? rPC_ : (fR06 & fWE) ? rRESULT : r06;
343
        r07 <= #1 (fR07 & fLD) ? wDWBDAT : (fR07 & fLNK) ? rPC_ : (fR07 & fWE) ? rRESULT : r07;
344
        r08 <= #1 (fR08 & fLD) ? wDWBDAT : (fR08 & fLNK) ? rPC_ : (fR08 & fWE) ? rRESULT : r08;
345
        r09 <= #1 (fR09 & fLD) ? wDWBDAT : (fR09 & fLNK) ? rPC_ : (fR09 & fWE) ? rRESULT : r09;
346
        r0A <= #1 (fR0A & fLD) ? wDWBDAT : (fR0A & fLNK) ? rPC_ : (fR0A & fWE) ? rRESULT : r0A;
347
        r0B <= #1 (fR0B & fLD) ? wDWBDAT : (fR0B & fLNK) ? rPC_ : (fR0B & fWE) ? rRESULT : r0B;
348
        r0C <= #1 (fR0C & fLD) ? wDWBDAT : (fR0C & fLNK) ? rPC_ : (fR0C & fWE) ? rRESULT : r0C;
349
        r0D <= #1 (fR0D & fLD) ? wDWBDAT : (fR0D & fLNK) ? rPC_ : (fR0D & fWE) ? rRESULT : r0D;
350
        //r0E <= #1 (fR0E & fLD) ? wDWBDAT : (fR0E & fLNK) ? rPC_ : (fR0E & fWE) ? rRESULT : r0E;
351
        r0F <= #1 (fR0F & fLD) ? wDWBDAT : (fR0F & fLNK) ? rPC_ : (fR0F & fWE) ? rRESULT : r0F;
352
        r10 <= #1 (fR10 & fLD) ? wDWBDAT : (fR10 & fLNK) ? rPC_ : (fR10 & fWE) ? rRESULT : r10;
353
        //r11 <= #1 (fR11 & fLD) ? wDWBDAT : (fR11 & fLNK) ? rPC_ : (fR11 & fWE) ? rRESULT : r11;
354
        r12 <= #1 (fR12 & fLD) ? wDWBDAT : (fR12 & fLNK) ? rPC_ : (fR12 & fWE) ? rRESULT : r12;
355
        r13 <= #1 (fR13 & fLD) ? wDWBDAT : (fR13 & fLNK) ? rPC_ : (fR13 & fWE) ? rRESULT : r13;
356
        r14 <= #1 (fR14 & fLD) ? wDWBDAT : (fR14 & fLNK) ? rPC_ : (fR14 & fWE) ? rRESULT : r14;
357
        r15 <= #1 (fR15 & fLD) ? wDWBDAT : (fR15 & fLNK) ? rPC_ : (fR15 & fWE) ? rRESULT : r15;
358
        r16 <= #1 (fR16 & fLD) ? wDWBDAT : (fR16 & fLNK) ? rPC_ : (fR16 & fWE) ? rRESULT : r16;
359
        r17 <= #1 (fR17 & fLD) ? wDWBDAT : (fR17 & fLNK) ? rPC_ : (fR17 & fWE) ? rRESULT : r17;
360
        r18 <= #1 (fR18 & fLD) ? wDWBDAT : (fR18 & fLNK) ? rPC_ : (fR18 & fWE) ? rRESULT : r18;
361
        r19 <= #1 (fR19 & fLD) ? wDWBDAT : (fR19 & fLNK) ? rPC_ : (fR19 & fWE) ? rRESULT : r19;
362
        r1A <= #1 (fR1A & fLD) ? wDWBDAT : (fR1A & fLNK) ? rPC_ : (fR1A & fWE) ? rRESULT : r1A;
363
        r1B <= #1 (fR1B & fLD) ? wDWBDAT : (fR1B & fLNK) ? rPC_ : (fR1B & fWE) ? rRESULT : r1B;
364
        r1C <= #1 (fR1C & fLD) ? wDWBDAT : (fR1C & fLNK) ? rPC_ : (fR1C & fWE) ? rRESULT : r1C;
365
        r1D <= #1 (fR1D & fLD) ? wDWBDAT : (fR1D & fLNK) ? rPC_ : (fR1D & fWE) ? rRESULT : r1D;
366
        r1E <= #1 (fR1E & fLD) ? wDWBDAT : (fR1E & fLNK) ? rPC_ : (fR1E & fWE) ? rRESULT : r1E;
367
        r1F <= #1 (fR1F & fLD) ? wDWBDAT : (fR1F & fLNK) ? rPC_ : (fR1F & fWE) ? rRESULT : r1F;
368
         */
369 4 sybreon
     end // else: !if(!nrst)
370 3 sybreon
 
371
   // Special Registers
372
   always @(negedge nclk or negedge nrst)
373
     if (!nrst) begin
374
        /*AUTORESET*/
375
        // Beginning of autoreset for uninitialized flops
376
        r00 <= 32'h0;
377
        r0E <= 32'h0;
378
        r11 <= 32'h0;
379
        // End of automatics
380
     end else begin
381
        // R00 - Zero
382
        r00 <= #1 r00;
383
        // R0E - Interrupt
384
        r0E <= #1 (rFSM == 2'b11) ? rPC : // Needs verification
385
               (!fR0E) ? r0E : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r0E;
386
        // R11 - Exception
387
        r11 <= #1 (rFSM == 2'b10) ? rPC : // Needs verification
388
               (!fR11) ? r11 : (fLD) ? wDWBDAT : (fLNK) ? rPC_ : (fWE) ? rRESULT : r11;
389 4 sybreon
     end // else: !if(!nrst)
390 3 sybreon
 
391
 
392
endmodule // aeMB_regfile
393
 
394
// Local Variables:
395
// verilog-library-directories:(".")
396
// verilog-library-files:("")
397
// End:

powered by: WebSVN 2.1.0

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