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

Subversion Repositories yifive

[/] [yifive/] [trunk/] [caravel_yifive/] [verilog/] [rtl/] [digital_core/] [src/] [glbl_cfg.sv] - Blame information for rev 22

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 22 dinesha
//////////////////////////////////////////////////////////////////////
2
////                                                              ////
3
////  Global confg register                                       ////
4
////                                                              ////
5
////  This file is part of the YIFive cores project               ////
6
////  http://www.opencores.org/cores/yifive/                      ////
7
////                                                              ////
8
////  Description                                                 ////
9
////      This block generate all the global config and status    ////
10
////                                                              ////
11
////  To Do:                                                      ////
12
////    nothing                                                   ////
13
////                                                              ////
14
////  Author(s):                                                  ////
15
////      - Dinesh Annayya, dinesha@opencores.org                 ////
16
////                                                              ////
17
////  Revision :                                                  ////
18
////    0.1 - 08 June 2021  Dinesh A                              ////
19
////          Initial version                                     ////
20
////                                                              ////
21
//////////////////////////////////////////////////////////////////////
22
////                                                              ////
23
//// Copyright (C) 2000 Authors and OPENCORES.ORG                 ////
24
////                                                              ////
25
//// This source file may be used and distributed without         ////
26
//// restriction provided that this copyright statement is not    ////
27
//// removed from the file and that any derivative work contains  ////
28
//// the original copyright notice and the associated disclaimer. ////
29
////                                                              ////
30
//// This source file is free software; you can redistribute it   ////
31
//// and/or modify it under the terms of the GNU Lesser General   ////
32
//// Public License as published by the Free Software Foundation; ////
33
//// either version 2.1 of the License, or (at your option) any   ////
34
//// later version.                                               ////
35
////                                                              ////
36
//// This source is distributed in the hope that it will be       ////
37
//// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
38
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
39
//// PURPOSE.  See the GNU Lesser General Public License for more ////
40
//// details.                                                     ////
41
////                                                              ////
42
//// You should have received a copy of the GNU Lesser General    ////
43
//// Public License along with this source; if not, download it   ////
44
//// from http://www.opencores.org/lgpl.shtml                     ////
45
////                                                              ////
46
//////////////////////////////////////////////////////////////////////
47
 
48
module glbl_cfg (
49
 
50
        input logic             mclk,
51
        input logic             reset_n,
52
        output logic [31:0]     device_idcode,
53
 
54
        // Reg Bus Interface Signal
55
        input logic             reg_cs,
56
        input logic             reg_wr,
57
        input logic [3:0]       reg_addr,
58
        input logic [31:0]      reg_wdata,
59
        input logic [3:0]       reg_be,
60
 
61
       // Outputs
62
        output logic [31:0]     reg_rdata,
63
        output logic            reg_ack,
64
 
65
       // SDRAM Clock
66
 
67
       output  logic           sdram_clk,
68
 
69
       // reset
70
       output  logic           cpu_rst_n,
71
       output  logic           spi_rst_n,
72
       output  logic           sdram_rst_n,
73
 
74
       // Risc configuration
75
       output logic [31:0]     fuse_mhartid,
76
       output logic [15:0]     irq_lines,
77
       output logic            soft_irq,
78
 
79
       // SDRAM Config
80
       input logic             sdr_init_done       , // Indicate SDRAM Initialisation Done
81
       output logic [1:0]      cfg_sdr_width       , // 2'b00 - 32 Bit SDR, 2'b01 - 16 Bit SDR, 2'b1x - 8 Bit
82
       output logic [1:0]      cfg_colbits         , // 2'b00 - 8 Bit column address,
83
       output logic [3:0]      cfg_sdr_tras_d      , // Active to precharge delay
84
       output logic [3:0]      cfg_sdr_trp_d       , // Precharge to active delay
85
       output logic [3:0]      cfg_sdr_trcd_d      , // Active to R/W delay
86
       output logic            cfg_sdr_en          , // Enable SDRAM controller
87
       output logic [1:0]      cfg_req_depth       , // Maximum Request accepted by SDRAM controller
88
       output logic [12:0]     cfg_sdr_mode_reg    ,
89
       output logic [2:0]      cfg_sdr_cas         , // SDRAM CAS Latency
90
       output logic [3:0]      cfg_sdr_trcar_d     , // Auto-refresh period
91
       output logic [3:0]      cfg_sdr_twr_d       , // Write recovery delay
92
       output logic [11:0]     cfg_sdr_rfsh        ,
93
       output logic [2:0]      cfg_sdr_rfmax
94
 
95
 
96
        );
97
 
98
 
99
 
100
//-----------------------------------------------------------------------
101
// Internal Wire Declarations
102
//-----------------------------------------------------------------------
103
 
104
logic           sw_rd_en;
105
logic           sw_wr_en;
106
logic  [3:0]    sw_addr ; // addressing 16 registers
107
logic  [3:0]    wr_be   ;
108
logic  [31:0]   sw_reg_wdata;
109
 
110
logic           reg_cs_l    ;
111
logic           reg_cs_2l    ;
112
logic           cfg_sdram_clk_div;
113
 
114
 
115
logic [31:0]    reg_0;  // Software_Reg_0
116
logic [31:0]    reg_1;  // Software-Reg_1
117
logic [31:0]    reg_2;  // Software-Reg_2
118
logic [31:0]    reg_3;  // Software-Reg_3
119
logic [31:0]    reg_4;  // Software-Reg_4
120
logic [31:0]    reg_5;  // Software-Reg_5
121
logic [31:0]    reg_6;  // Software-Reg_6
122
logic [31:0]    reg_7;  // Software-Reg_7
123
logic [31:0]    reg_8;  // Software-Reg_8
124
logic [31:0]    reg_9;  // Software-Reg_9
125
logic [31:0]    reg_10; // Software-Reg_10
126
logic [31:0]    reg_11; // Software-Reg_11
127
logic [31:0]    reg_12; // Software-Reg_12
128
logic [31:0]    reg_13; // Software-Reg_13
129
logic [31:0]    reg_14; // Software-Reg_14
130
logic [31:0]    reg_15; // Software-Reg_15
131
logic [31:0]    reg_out;
132
 
133
//-----------------------------------------------------------------------
134
// Main code starts here
135
//-----------------------------------------------------------------------
136
 
137
//-----------------------------------------------------------------------
138
// To avoid interface timing, all the content are registered
139
//-----------------------------------------------------------------------
140
always @ (posedge mclk or negedge reset_n)
141
begin
142
   if (reset_n == 1'b0)
143
   begin
144
    sw_addr       <= '0;
145
    sw_rd_en      <= '0;
146
    sw_wr_en      <= '0;
147
    sw_reg_wdata  <= '0;
148
    wr_be         <= '0;
149
    reg_cs_l      <= '0;
150
    reg_cs_2l     <= '0;
151
  end else begin
152
    sw_addr       <= reg_addr [3:0];
153
    sw_rd_en      <= reg_cs & !reg_wr;
154
    sw_wr_en      <= reg_cs & reg_wr;
155
    sw_reg_wdata  <= reg_wdata;
156
    wr_be         <= reg_be;
157
    reg_cs_l      <= reg_cs;
158
    reg_cs_2l     <= reg_cs_l;
159
  end
160
end
161
 
162
 
163
//-----------------------------------------------------------------------
164
// Read path mux
165
//-----------------------------------------------------------------------
166
 
167
always @ (posedge mclk or negedge reset_n)
168
begin : preg_out_Seq
169
   if (reset_n == 1'b0) begin
170
      reg_rdata [31:0]  <= 32'h0000_0000;
171
      reg_ack           <= 1'b0;
172
   end else if (sw_rd_en && !reg_ack && !reg_cs_2l) begin
173
      reg_rdata [31:0]  <= reg_out [31:0];
174
      reg_ack           <= 1'b1;
175
   end else if (sw_wr_en && !reg_ack && !reg_cs_2l) begin
176
      reg_ack           <= 1'b1;
177
   end else begin
178
      reg_ack        <= 1'b0;
179
   end
180
end
181
 
182
 
183
//-----------------------------------------------------------------------
184
// register read enable and write enable decoding logic
185
//-----------------------------------------------------------------------
186
wire   sw_wr_en_0 = sw_wr_en & (sw_addr == 4'h0);
187
wire   sw_rd_en_0 = sw_rd_en & (sw_addr == 4'h0);
188
wire   sw_wr_en_1 = sw_wr_en & (sw_addr == 4'h1);
189
wire   sw_rd_en_1 = sw_rd_en & (sw_addr == 4'h1);
190
wire   sw_wr_en_2 = sw_wr_en & (sw_addr == 4'h2);
191
wire   sw_rd_en_2 = sw_rd_en & (sw_addr == 4'h2);
192
wire   sw_wr_en_3 = sw_wr_en & (sw_addr == 4'h3);
193
wire   sw_rd_en_3 = sw_rd_en & (sw_addr == 4'h3);
194
wire   sw_wr_en_4 = sw_wr_en & (sw_addr == 4'h4);
195
wire   sw_rd_en_4 = sw_rd_en & (sw_addr == 4'h4);
196
wire   sw_wr_en_5 = sw_wr_en & (sw_addr == 4'h5);
197
wire   sw_rd_en_5 = sw_rd_en & (sw_addr == 4'h5);
198
wire   sw_wr_en_6 = sw_wr_en & (sw_addr == 4'h6);
199
wire   sw_rd_en_6 = sw_rd_en & (sw_addr == 4'h6);
200
wire   sw_wr_en_7 = sw_wr_en & (sw_addr == 4'h7);
201
wire   sw_rd_en_7 = sw_rd_en & (sw_addr == 4'h7);
202
wire   sw_wr_en_8 = sw_wr_en & (sw_addr == 4'h8);
203
wire   sw_rd_en_8 = sw_rd_en & (sw_addr == 4'h8);
204
wire   sw_wr_en_9 = sw_wr_en & (sw_addr == 4'h9);
205
wire   sw_rd_en_9 = sw_rd_en & (sw_addr == 4'h9);
206
wire   sw_wr_en_10 = sw_wr_en & (sw_addr == 4'hA);
207
wire   sw_rd_en_10 = sw_rd_en & (sw_addr == 4'hA);
208
wire   sw_wr_en_11 = sw_wr_en & (sw_addr == 4'hB);
209
wire   sw_rd_en_11 = sw_rd_en & (sw_addr == 4'hB);
210
wire   sw_wr_en_12 = sw_wr_en & (sw_addr == 4'hC);
211
wire   sw_rd_en_12 = sw_rd_en & (sw_addr == 4'hC);
212
wire   sw_wr_en_13 = sw_wr_en & (sw_addr == 4'hD);
213
wire   sw_rd_en_13 = sw_rd_en & (sw_addr == 4'hD);
214
wire   sw_wr_en_14 = sw_wr_en & (sw_addr == 4'hE);
215
wire   sw_rd_en_14 = sw_rd_en & (sw_addr == 4'hE);
216
wire   sw_wr_en_15 = sw_wr_en & (sw_addr == 4'hF);
217
wire   sw_rd_en_15 = sw_rd_en & (sw_addr == 4'hF);
218
 
219
 
220
always @( *)
221
begin : preg_sel_Com
222
 
223
  reg_out [31:0] = 32'd0;
224
 
225
  case (sw_addr [3:0])
226
    4'b0000 : reg_out [31:0] = reg_0 [31:0];
227
    4'b0001 : reg_out [31:0] = reg_1 [31:0];
228
    4'b0010 : reg_out [31:0] = reg_2 [31:0];
229
    4'b0011 : reg_out [31:0] = reg_3 [31:0];
230
    4'b0100 : reg_out [31:0] = reg_4 [31:0];
231
    4'b0101 : reg_out [31:0] = reg_5 [31:0];
232
    4'b0110 : reg_out [31:0] = reg_6 [31:0];
233
    4'b0111 : reg_out [31:0] = reg_7 [31:0];
234
    4'b1000 : reg_out [31:0] = reg_8 [31:0];
235
    4'b1001 : reg_out [31:0] = reg_9 [31:0];
236
    4'b1010 : reg_out [31:0] = reg_10 [31:0];
237
    4'b1011 : reg_out [31:0] = reg_11 [31:0];
238
    4'b1100 : reg_out [31:0] = reg_12 [31:0];
239
    4'b1101 : reg_out [31:0] = reg_13 [31:0];
240
    4'b1110 : reg_out [31:0] = reg_14 [31:0];
241
    4'b1111 : reg_out [31:0] = reg_15 [31:0];
242
  endcase
243
end
244
 
245
 
246
 
247
//-----------------------------------------------------------------------
248
// Individual register assignments
249
//-----------------------------------------------------------------------
250
//-----------------------------------------------------------------------
251
//   reg-0
252
//   -----------------------------------------------------------------
253
 
254
assign cpu_rst_n     = reg_0[0];
255
assign spi_rst_n     = reg_0[1];
256
assign sdram_rst_n   = reg_0[2];
257
assign cfg_sdram_clk_div = reg_0[3];
258
 
259
 
260
 
261
generic_register #(8,0  ) u_reg0_be0 (
262
              .we            ({8{sw_wr_en_0 &
263
                                 wr_be[0]   }}  ),
264
              .data_in       (sw_reg_wdata[7:0]    ),
265
              .reset_n       (reset_n           ),
266
              .clk           (mclk              ),
267
 
268
              //List of Outs
269
              .data_out      (reg_0[7:0]        )
270
          );
271
 
272
generic_register #(8,0  ) u_reg0_be1 (
273
              .we            ({8{sw_wr_en_0 &
274
                                 wr_be[1]   }}  ),
275
              .data_in       (sw_reg_wdata[15:8]    ),
276
              .reset_n       (reset_n           ),
277
              .clk           (mclk              ),
278
 
279
              //List of Outs
280
              .data_out      (reg_0[15:8]        )
281
          );
282
generic_register #(8,0  ) u_reg0_be2 (
283
              .we            ({8{sw_wr_en_0 &
284
                                 wr_be[2]   }}  ),
285
              .data_in       (sw_reg_wdata[23:16]    ),
286
              .reset_n       (reset_n           ),
287
              .clk           (mclk              ),
288
 
289
              //List of Outs
290
              .data_out      (reg_0[23:16]        )
291
          );
292
 
293
generic_register #(8,0  ) u_reg0_be3 (
294
              .we            ({8{sw_wr_en_0 &
295
                                 wr_be[3]   }}  ),
296
              .data_in       (sw_reg_wdata[31:24]    ),
297
              .reset_n       (reset_n           ),
298
              .clk           (mclk              ),
299
 
300
              //List of Outs
301
              .data_out      (reg_0[31:24]        )
302
          );
303
 
304
 
305
 
306
//-----------------------------------------------------------------------
307
//   reg-1, reset value = 32'hA55A_A55A
308
//   -----------------------------------------------------------------
309
assign  device_idcode     = reg_1[31:0];
310
 
311
generic_register #(.WD(8),.RESET_DEFAULT(8'h5A)) u_reg1_be0 (
312
              .we            ({8{sw_wr_en_1 &
313
                                 wr_be[0]   }}  ),
314
              .data_in       (sw_reg_wdata[7:0]    ),
315
              .reset_n       (reset_n           ),
316
              .clk           (mclk              ),
317
 
318
              //List of Outs
319
              .data_out      (reg_1[7:0]        )
320
          );
321
 
322
generic_register #(.WD(8),.RESET_DEFAULT(8'hA5)  ) u_reg1_be1 (
323
              .we            ({8{sw_wr_en_1 &
324
                                 wr_be[1]   }}  ),
325
              .data_in       (sw_reg_wdata[15:8]    ),
326
              .reset_n       (reset_n           ),
327
              .clk           (mclk              ),
328
 
329
              //List of Outs
330
              .data_out      (reg_1[15:8]        )
331
          );
332
generic_register #(.WD(8),.RESET_DEFAULT(8'h5A)  ) u_reg1_be2 (
333
              .we            ({8{sw_wr_en_1 &
334
                                 wr_be[2]   }}  ),
335
              .data_in       (sw_reg_wdata[23:16]    ),
336
              .reset_n       (reset_n           ),
337
              .clk           (mclk              ),
338
 
339
              //List of Outs
340
              .data_out      (reg_1[23:16]        )
341
          );
342
 
343
generic_register #(.WD(8),.RESET_DEFAULT(8'hA5)  ) u_reg1_be3 (
344
              .we            ({8{sw_wr_en_1 &
345
                                 wr_be[3]   }}  ),
346
              .data_in       (sw_reg_wdata[31:24]    ),
347
              .reset_n       (reset_n           ),
348
              .clk           (mclk              ),
349
 
350
              //List of Outs
351
              .data_out      (reg_1[31:24]        )
352
          );
353
 
354
//-----------------------------------------------------------------------
355
//   reg-2, reset value = 32'hAABBCCDD
356
//-----------------------------------------------------------------
357
assign  fuse_mhartid     = reg_1[31:0];
358
 
359
generic_register #(.WD(8),.RESET_DEFAULT(8'hDD)  ) u_reg2_be0 (
360
              .we            ({8{sw_wr_en_2 &
361
                                 wr_be[0]   }}  ),
362
              .data_in       (sw_reg_wdata[7:0]    ),
363
              .reset_n       (reset_n           ),
364
              .clk           (mclk              ),
365
 
366
              //List of Outs
367
              .data_out      (reg_2[7:0]        )
368
          );
369
 
370
generic_register #(.WD(8),.RESET_DEFAULT(8'hCC)  ) u_reg2_be1 (
371
              .we            ({8{sw_wr_en_2 &
372
                                 wr_be[1]   }}  ),
373
              .data_in       (sw_reg_wdata[15:8]    ),
374
              .reset_n       (reset_n           ),
375
              .clk           (mclk              ),
376
 
377
              //List of Outs
378
              .data_out      (reg_2[15:8]        )
379
          );
380
generic_register #(.WD(8),.RESET_DEFAULT(8'hBB)  ) u_reg2_be2 (
381
              .we            ({8{sw_wr_en_2 &
382
                                 wr_be[2]   }}  ),
383
              .data_in       (sw_reg_wdata[23:16]    ),
384
              .reset_n       (reset_n           ),
385
              .clk           (mclk              ),
386
 
387
              //List of Outs
388
              .data_out      (reg_2[23:16]        )
389
          );
390
 
391
generic_register #(.WD(8),.RESET_DEFAULT(8'hAA)  ) u_reg2_be3 (
392
              .we            ({8{sw_wr_en_2 &
393
                                 wr_be[3]   }}  ),
394
              .data_in       (sw_reg_wdata[31:24]    ),
395
              .reset_n       (reset_n           ),
396
              .clk           (mclk              ),
397
 
398
              //List of Outs
399
              .data_out      (reg_2[31:24]        )
400
          );
401
 
402
//-----------------------------------------------------------------------
403
//   reg-3
404
//-----------------------------------------------------------------
405
assign  irq_lines     = reg_3[15:0];
406
assign  soft_irq      = reg_3[16];
407
 
408
generic_register #(8,0  ) u_reg3_be0 (
409
              .we            ({8{sw_wr_en_3 &
410
                                 wr_be[0]   }}  ),
411
              .data_in       (sw_reg_wdata[7:0]    ),
412
              .reset_n       (reset_n           ),
413
              .clk           (mclk              ),
414
 
415
              //List of Outs
416
              .data_out      (reg_3[7:0]        )
417
          );
418
 
419
generic_register #(8,0  ) u_reg3_be1 (
420
              .we            ({8{sw_wr_en_3 &
421
                                 wr_be[1]   }}  ),
422
              .data_in       (sw_reg_wdata[15:8]    ),
423
              .reset_n       (reset_n           ),
424
              .clk           (mclk              ),
425
 
426
              //List of Outs
427
              .data_out      (reg_3[15:8]        )
428
          );
429
generic_register #(1,0  ) u_reg3_be2 (
430
              .we            ({1{sw_wr_en_3 &
431
                                 wr_be[2]   }}  ),
432
              .data_in       (sw_reg_wdata[16]    ),
433
              .reset_n       (reset_n           ),
434
              .clk           (mclk              ),
435
 
436
              //List of Outs
437
              .data_out      (reg_3[16]        )
438
          );
439
 
440
assign reg_3[31:17] = '0;
441
 
442
 
443
//-----------------------------------------------------------------------
444
//   reg-4
445
//   recommended Default value:
446
//   1'b1,3'h3,2'h3,4'h1,4'h7',4'h2,4'h2,4'h4,2'b00,2'b10 = 32'h2F17_2242
447
//-----------------------------------------------------------------
448
assign      cfg_sdr_width     = reg_4[1:0] ;  // 2'b10 // 2'b00 - 32 Bit SDR, 2'b01 - 16 Bit SDR, 2'b1x - 8 Bit
449
assign      cfg_colbits       = reg_4[3:2] ;  // 2'b00 //  8 Bit column address,
450
assign      cfg_sdr_tras_d    = reg_4[7:4] ;  // 4'h4  // Active to precharge delay
451
assign      cfg_sdr_trp_d     = reg_4[11:8];  // 4'h2  // Precharge to active delay
452
assign      cfg_sdr_trcd_d    = reg_4[15:12]; // 4'h2  // Active to R/W delay
453
assign      cfg_sdr_trcar_d   = reg_4[19:16]; // 4'h7  // Auto-refresh period
454
assign      cfg_sdr_twr_d     = reg_4[23:20]; // 4'h1  // Write recovery delay
455
assign      cfg_req_depth     = reg_4[25:24]; // 2'h3  // Maximum Request accepted by SDRAM controller
456
assign      cfg_sdr_cas       = reg_4[28:26]; // 3'h3  // SDRAM CAS Latency
457
assign      cfg_sdr_en        = reg_4[29]   ; // 1'b1 // Enable SDRAM controller
458
assign      reg_4[30]         = sdr_init_done ; // Indicate SDRAM Initialisation Done
459
assign      reg_4[31]         = 1'b0;
460
 
461
 
462
generic_register #(8,0  ) u_reg4_be0 (
463
              .we            ({8{sw_wr_en_4 &
464
                                 wr_be[0]   }}  ),
465
              .data_in       (sw_reg_wdata[7:0]    ),
466
              .reset_n       (reset_n           ),
467
              .clk           (mclk              ),
468
 
469
              //List of Outs
470
              .data_out      (reg_4[7:0]        )
471
          );
472
 
473
generic_register #(8,0  ) u_reg4_be1 (
474
              .we            ({8{sw_wr_en_4 &
475
                                 wr_be[1]   }}  ),
476
              .data_in       (sw_reg_wdata[15:8]    ),
477
              .reset_n       (reset_n           ),
478
              .clk           (mclk              ),
479
 
480
              //List of Outs
481
              .data_out      (reg_4[15:8]        )
482
          );
483
generic_register #(8,0  ) u_reg4_be2 (
484
              .we            ({8{sw_wr_en_4 &
485
                                 wr_be[2]   }}  ),
486
              .data_in       (sw_reg_wdata[23:16]    ),
487
              .reset_n       (reset_n           ),
488
              .clk           (mclk              ),
489
 
490
              //List of Outs
491
              .data_out      (reg_4[23:16]        )
492
          );
493
 
494
generic_register #(6,0  ) u_reg4_be3 (
495
              .we            ({6{sw_wr_en_4 &
496
                                 wr_be[3]   }}  ),
497
              .data_in       (sw_reg_wdata[29:24]    ),
498
              .reset_n       (reset_n           ),
499
              .clk           (mclk              ),
500
 
501
              //List of Outs
502
              .data_out      (reg_4[29:24]        )
503
          );
504
//-----------------------------------------------------------------------
505
//   reg-5, recomended default value {12'h100,13'h33,3'h6} = 32'h100_019E
506
//-----------------------------------------------------------------
507
assign      cfg_sdr_rfmax     = reg_5[2:0] ;   // 3'h6
508
assign      cfg_sdr_mode_reg  = reg_5[15:3] ;  // 13'h033
509
assign      cfg_sdr_rfsh      = reg_5[27:16];  // 12'h100
510
 
511
generic_register #(8,0  ) u_reg5_be0 (
512
              .we            ({8{sw_wr_en_5 &
513
                                 wr_be[0]   }}  ),
514
              .data_in       (sw_reg_wdata[7:0]    ),
515
              .reset_n       (reset_n           ),
516
              .clk           (mclk              ),
517
 
518
              //List of Outs
519
              .data_out      (reg_5[7:0]        )
520
          );
521
 
522
generic_register #(8,0  ) u_reg5_be1 (
523
              .we            ({8{sw_wr_en_5 &
524
                                 wr_be[1]   }}  ),
525
              .data_in       (sw_reg_wdata[15:8]    ),
526
              .reset_n       (reset_n           ),
527
              .clk           (mclk              ),
528
 
529
              //List of Outs
530
              .data_out      (reg_5[15:8]        )
531
          );
532
generic_register #(8,0  ) u_reg5_be2 (
533
              .we            ({8{sw_wr_en_5 &
534
                                 wr_be[2]   }}  ),
535
              .data_in       (sw_reg_wdata[23:16]    ),
536
              .reset_n       (reset_n           ),
537
              .clk           (mclk              ),
538
 
539
              //List of Outs
540
              .data_out      (reg_5[23:16]        )
541
          );
542
 
543
generic_register #(8,0  ) u_reg5_be3 (
544
              .we            ({8{sw_wr_en_5 &
545
                                 wr_be[3]   }}  ),
546
              .data_in       (sw_reg_wdata[31:24]    ),
547
              .reset_n       (reset_n           ),
548
              .clk           (mclk              ),
549
 
550
              //List of Outs
551
              .data_out      (reg_5[31:24]        )
552
          );
553
 
554
 
555
//-----------------------------------------------------------------
556
//   reg- 6
557
//-----------------------------------------------------------------
558
 
559
generic_register #(8,0  ) u_reg6_be0 (
560
              .we            ({8{sw_wr_en_6 &
561
                                 wr_be[0]   }}  ),
562
              .data_in       (sw_reg_wdata[7:0]    ),
563
              .reset_n       (reset_n           ),
564
              .clk           (mclk              ),
565
 
566
              //List of Outs
567
              .data_out      (reg_6[7:0]        )
568
          );
569
 
570
generic_register #(8,0  ) u_reg6_be1 (
571
              .we            ({8{sw_wr_en_6 &
572
                                 wr_be[1]   }}  ),
573
              .data_in       (sw_reg_wdata[15:8]    ),
574
              .reset_n       (reset_n           ),
575
              .clk           (mclk              ),
576
 
577
              //List of Outs
578
              .data_out      (reg_6[15:8]        )
579
          );
580
generic_register #(8,0  ) u_reg6_be2 (
581
              .we            ({8{sw_wr_en_6 &
582
                                 wr_be[2]   }}  ),
583
              .data_in       (sw_reg_wdata[23:16]    ),
584
              .reset_n       (reset_n           ),
585
              .clk           (mclk              ),
586
 
587
              //List of Outs
588
              .data_out      (reg_6[23:16]        )
589
          );
590
 
591
generic_register #(8,0  ) u_reg6_be3 (
592
              .we            ({8{sw_wr_en_6 &
593
                                 wr_be[3]   }}  ),
594
              .data_in       (sw_reg_wdata[31:24]    ),
595
              .reset_n       (reset_n           ),
596
              .clk           (mclk              ),
597
 
598
              //List of Outs
599
              .data_out      (reg_6[31:24]        )
600
          );
601
 
602
 
603
//-----------------------------------------------------------------
604
//   reg- 7
605
//-----------------------------------------------------------------
606
 
607
generic_register #(8,0  ) u_reg7_be0 (
608
              .we            ({8{sw_wr_en_7 &
609
                                 wr_be[0]   }}  ),
610
              .data_in       (sw_reg_wdata[7:0]    ),
611
              .reset_n       (reset_n           ),
612
              .clk           (mclk              ),
613
 
614
              //List of Outs
615
              .data_out      (reg_7[7:0]        )
616
          );
617
 
618
generic_register #(8,0  ) u_reg7_be1 (
619
              .we            ({8{sw_wr_en_7 &
620
                                 wr_be[1]   }}  ),
621
              .data_in       (sw_reg_wdata[15:8]    ),
622
              .reset_n       (reset_n           ),
623
              .clk           (mclk              ),
624
 
625
              //List of Outs
626
              .data_out      (reg_7[15:8]        )
627
          );
628
generic_register #(8,0  ) u_reg7_be2 (
629
              .we            ({8{sw_wr_en_7 &
630
                                 wr_be[2]   }}  ),
631
              .data_in       (sw_reg_wdata[23:16]    ),
632
              .reset_n       (reset_n           ),
633
              .clk           (mclk              ),
634
 
635
              //List of Outs
636
              .data_out      (reg_7[23:16]        )
637
          );
638
 
639
generic_register #(8,0  ) u_reg7_be3 (
640
              .we            ({8{sw_wr_en_7 &
641
                                 wr_be[3]   }}  ),
642
              .data_in       (sw_reg_wdata[31:24]    ),
643
              .reset_n       (reset_n           ),
644
              .clk           (mclk              ),
645
 
646
              //List of Outs
647
              .data_out      (reg_7[31:24]        )
648
          );
649
 
650
 
651
//-----------------------------------------------------------------
652
//   reg- 8
653
//-----------------------------------------------------------------
654
 
655
generic_register #(8,0  ) u_reg8_be0 (
656
              .we            ({8{sw_wr_en_8 &
657
                                 wr_be[0]   }}  ),
658
              .data_in       (sw_reg_wdata[7:0]    ),
659
              .reset_n       (reset_n           ),
660
              .clk           (mclk              ),
661
 
662
              //List of Outs
663
              .data_out      (reg_8[7:0]        )
664
          );
665
 
666
generic_register #(8,0  ) u_reg8_be1 (
667
              .we            ({8{sw_wr_en_8 &
668
                                 wr_be[1]   }}  ),
669
              .data_in       (sw_reg_wdata[15:8]    ),
670
              .reset_n       (reset_n           ),
671
              .clk           (mclk              ),
672
 
673
              //List of Outs
674
              .data_out      (reg_8[15:8]        )
675
          );
676
generic_register #(8,0  ) u_reg8_be2 (
677
              .we            ({8{sw_wr_en_8 &
678
                                 wr_be[2]   }}  ),
679
              .data_in       (sw_reg_wdata[23:16]    ),
680
              .reset_n       (reset_n           ),
681
              .clk           (mclk              ),
682
 
683
              //List of Outs
684
              .data_out      (reg_8[23:16]        )
685
          );
686
 
687
generic_register #(8,0  ) u_reg8_be3 (
688
              .we            ({8{sw_wr_en_8 &
689
                                 wr_be[3]   }}  ),
690
              .data_in       (sw_reg_wdata[31:24]    ),
691
              .reset_n       (reset_n           ),
692
              .clk           (mclk              ),
693
 
694
              //List of Outs
695
              .data_out      (reg_8[31:24]        )
696
          );
697
 
698
 
699
//-----------------------------------------------------------------
700
//   reg- 9
701
//-----------------------------------------------------------------
702
 
703
generic_register #(8,0  ) u_reg9_be0 (
704
              .we            ({8{sw_wr_en_9 &
705
                                 wr_be[0]   }}  ),
706
              .data_in       (sw_reg_wdata[7:0]    ),
707
              .reset_n       (reset_n           ),
708
              .clk           (mclk              ),
709
 
710
              //List of Outs
711
              .data_out      (reg_9[7:0]        )
712
          );
713
 
714
generic_register #(8,0  ) u_reg9_be1 (
715
              .we            ({8{sw_wr_en_9 &
716
                                 wr_be[1]   }}  ),
717
              .data_in       (sw_reg_wdata[15:8]    ),
718
              .reset_n       (reset_n           ),
719
              .clk           (mclk              ),
720
 
721
              //List of Outs
722
              .data_out      (reg_9[15:8]        )
723
          );
724
generic_register #(8,0  ) u_reg9_be2 (
725
              .we            ({8{sw_wr_en_9 &
726
                                 wr_be[2]   }}  ),
727
              .data_in       (sw_reg_wdata[23:16]    ),
728
              .reset_n       (reset_n           ),
729
              .clk           (mclk              ),
730
 
731
              //List of Outs
732
              .data_out      (reg_9[23:16]        )
733
          );
734
 
735
generic_register #(8,0  ) u_reg9_be3 (
736
              .we            ({8{sw_wr_en_9 &
737
                                 wr_be[3]   }}  ),
738
              .data_in       (sw_reg_wdata[31:24]    ),
739
              .reset_n       (reset_n           ),
740
              .clk           (mclk              ),
741
 
742
              //List of Outs
743
              .data_out      (reg_9[31:24]        )
744
          );
745
 
746
 
747
//-----------------------------------------------------------------
748
//   reg- 10
749
//-----------------------------------------------------------------
750
 
751
generic_register #(8,0  ) u_reg10_be0 (
752
              .we            ({8{sw_wr_en_10 &
753
                                 wr_be[0]   }}  ),
754
              .data_in       (sw_reg_wdata[7:0]    ),
755
              .reset_n       (reset_n           ),
756
              .clk           (mclk              ),
757
 
758
              //List of Outs
759
              .data_out      (reg_10[7:0]        )
760
          );
761
 
762
generic_register #(8,0  ) u_reg10_be1 (
763
              .we            ({8{sw_wr_en_10 &
764
                                 wr_be[1]   }}  ),
765
              .data_in       (sw_reg_wdata[15:8]    ),
766
              .reset_n       (reset_n           ),
767
              .clk           (mclk              ),
768
 
769
              //List of Outs
770
              .data_out      (reg_10[15:8]        )
771
          );
772
generic_register #(8,0  ) u_reg10_be2 (
773
              .we            ({8{sw_wr_en_10 &
774
                                 wr_be[2]   }}  ),
775
              .data_in       (sw_reg_wdata[23:16]    ),
776
              .reset_n       (reset_n           ),
777
              .clk           (mclk              ),
778
 
779
              //List of Outs
780
              .data_out      (reg_10[23:16]        )
781
          );
782
 
783
generic_register #(8,0  ) u_reg10_be3 (
784
              .we            ({8{sw_wr_en_10 &
785
                                 wr_be[3]   }}  ),
786
              .data_in       (sw_reg_wdata[31:24]    ),
787
              .reset_n       (reset_n           ),
788
              .clk           (mclk              ),
789
 
790
              //List of Outs
791
              .data_out      (reg_10[31:24]        )
792
          );
793
 
794
 
795
//-----------------------------------------------------------------
796
//   reg- 11
797
//-----------------------------------------------------------------
798
 
799
generic_register #(8,0  ) u_reg11_be0 (
800
              .we            ({8{sw_wr_en_11 &
801
                                 wr_be[0]   }}  ),
802
              .data_in       (sw_reg_wdata[7:0]    ),
803
              .reset_n       (reset_n           ),
804
              .clk           (mclk              ),
805
 
806
              //List of Outs
807
              .data_out      (reg_11[7:0]        )
808
          );
809
 
810
generic_register #(8,0  ) u_reg11_be1 (
811
              .we            ({8{sw_wr_en_11 &
812
                                 wr_be[1]   }}  ),
813
              .data_in       (sw_reg_wdata[15:8]    ),
814
              .reset_n       (reset_n           ),
815
              .clk           (mclk              ),
816
 
817
              //List of Outs
818
              .data_out      (reg_11[15:8]        )
819
          );
820
generic_register #(8,0  ) u_reg11_be2 (
821
              .we            ({8{sw_wr_en_11 &
822
                                 wr_be[2]   }}  ),
823
              .data_in       (sw_reg_wdata[23:16]    ),
824
              .reset_n       (reset_n           ),
825
              .clk           (mclk              ),
826
 
827
              //List of Outs
828
              .data_out      (reg_11[23:16]        )
829
          );
830
 
831
generic_register #(8,0  ) u_reg11_be3 (
832
              .we            ({8{sw_wr_en_11 &
833
                                 wr_be[3]   }}  ),
834
              .data_in       (sw_reg_wdata[31:24]    ),
835
              .reset_n       (reset_n           ),
836
              .clk           (mclk              ),
837
 
838
              //List of Outs
839
              .data_out      (reg_11[31:24]        )
840
          );
841
 
842
 
843
//-----------------------------------------------------------------
844
//   reg- 12
845
//-----------------------------------------------------------------
846
 
847
generic_register #(8,0  ) u_reg12_be0 (
848
              .we            ({8{sw_wr_en_12 &
849
                                 wr_be[0]   }}  ),
850
              .data_in       (sw_reg_wdata[7:0]    ),
851
              .reset_n       (reset_n           ),
852
              .clk           (mclk              ),
853
 
854
              //List of Outs
855
              .data_out      (reg_12[7:0]        )
856
          );
857
 
858
generic_register #(8,0  ) u_reg12_be1 (
859
              .we            ({8{sw_wr_en_12 &
860
                                 wr_be[1]   }}  ),
861
              .data_in       (sw_reg_wdata[15:8]    ),
862
              .reset_n       (reset_n           ),
863
              .clk           (mclk              ),
864
 
865
              //List of Outs
866
              .data_out      (reg_12[15:8]        )
867
          );
868
generic_register #(8,0  ) u_reg12_be2 (
869
              .we            ({8{sw_wr_en_12 &
870
                                 wr_be[2]   }}  ),
871
              .data_in       (sw_reg_wdata[23:16]    ),
872
              .reset_n       (reset_n           ),
873
              .clk           (mclk              ),
874
 
875
              //List of Outs
876
              .data_out      (reg_12[23:16]        )
877
          );
878
 
879
generic_register #(8,0  ) u_reg12_be3 (
880
              .we            ({8{sw_wr_en_12 &
881
                                 wr_be[3]   }}  ),
882
              .data_in       (sw_reg_wdata[31:24]    ),
883
              .reset_n       (reset_n           ),
884
              .clk           (mclk              ),
885
 
886
              //List of Outs
887
              .data_out      (reg_12[31:24]        )
888
          );
889
 
890
 
891
//-----------------------------------------------------------------
892
//   reg- 13
893
//-----------------------------------------------------------------
894
 
895
generic_register #(8,0  ) u_reg13_be0 (
896
              .we            ({8{sw_wr_en_13 &
897
                                 wr_be[0]   }}  ),
898
              .data_in       (sw_reg_wdata[7:0]    ),
899
              .reset_n       (reset_n           ),
900
              .clk           (mclk              ),
901
 
902
              //List of Outs
903
              .data_out      (reg_13[7:0]        )
904
          );
905
 
906
generic_register #(8,0  ) u_reg13_be1 (
907
              .we            ({8{sw_wr_en_13 &
908
                                 wr_be[1]   }}  ),
909
              .data_in       (sw_reg_wdata[15:8]    ),
910
              .reset_n       (reset_n           ),
911
              .clk           (mclk              ),
912
 
913
              //List of Outs
914
              .data_out      (reg_13[15:8]        )
915
          );
916
generic_register #(8,0  ) u_reg13_be2 (
917
              .we            ({8{sw_wr_en_13 &
918
                                 wr_be[2]   }}  ),
919
              .data_in       (sw_reg_wdata[23:16]    ),
920
              .reset_n       (reset_n           ),
921
              .clk           (mclk              ),
922
 
923
              //List of Outs
924
              .data_out      (reg_13[23:16]        )
925
          );
926
 
927
generic_register #(8,0  ) u_reg13_be3 (
928
              .we            ({8{sw_wr_en_13 &
929
                                 wr_be[3]   }}  ),
930
              .data_in       (sw_reg_wdata[31:24]    ),
931
              .reset_n       (reset_n           ),
932
              .clk           (mclk              ),
933
 
934
              //List of Outs
935
              .data_out      (reg_13[31:24]        )
936
          );
937
 
938
 
939
//-----------------------------------------------------------------
940
//   reg- 14
941
//-----------------------------------------------------------------
942
 
943
generic_register #(8,0  ) u_reg14_be0 (
944
              .we            ({8{sw_wr_en_14 &
945
                                 wr_be[0]   }}  ),
946
              .data_in       (sw_reg_wdata[7:0]    ),
947
              .reset_n       (reset_n           ),
948
              .clk           (mclk              ),
949
 
950
              //List of Outs
951
              .data_out      (reg_14[7:0]        )
952
          );
953
 
954
generic_register #(8,0  ) u_reg14_be1 (
955
              .we            ({8{sw_wr_en_14 &
956
                                 wr_be[1]   }}  ),
957
              .data_in       (sw_reg_wdata[15:8]    ),
958
              .reset_n       (reset_n           ),
959
              .clk           (mclk              ),
960
 
961
              //List of Outs
962
              .data_out      (reg_14[15:8]        )
963
          );
964
generic_register #(8,0  ) u_reg14_be2 (
965
              .we            ({8{sw_wr_en_14 &
966
                                 wr_be[2]   }}  ),
967
              .data_in       (sw_reg_wdata[23:16]    ),
968
              .reset_n       (reset_n           ),
969
              .clk           (mclk              ),
970
 
971
              //List of Outs
972
              .data_out      (reg_14[23:16]        )
973
          );
974
 
975
generic_register #(8,0  ) u_reg14_be3 (
976
              .we            ({8{sw_wr_en_14 &
977
                                 wr_be[3]   }}  ),
978
              .data_in       (sw_reg_wdata[31:24]    ),
979
              .reset_n       (reset_n           ),
980
              .clk           (mclk              ),
981
 
982
              //List of Outs
983
              .data_out      (reg_14[31:24]        )
984
          );
985
 
986
 
987
//-----------------------------------------------------------------
988
//   reg- 15
989
//-----------------------------------------------------------------
990
 
991
generic_register #(8,0  ) u_reg15_be0 (
992
              .we            ({8{sw_wr_en_15 &
993
                                 wr_be[0]   }}  ),
994
              .data_in       (sw_reg_wdata[7:0]    ),
995
              .reset_n       (reset_n           ),
996
              .clk           (mclk              ),
997
 
998
              //List of Outs
999
              .data_out      (reg_15[7:0]        )
1000
          );
1001
 
1002
generic_register #(8,0  ) u_reg15_be1 (
1003
              .we            ({8{sw_wr_en_15 &
1004
                                 wr_be[1]   }}  ),
1005
              .data_in       (sw_reg_wdata[15:8]    ),
1006
              .reset_n       (reset_n           ),
1007
              .clk           (mclk              ),
1008
 
1009
              //List of Outs
1010
              .data_out      (reg_15[15:8]        )
1011
          );
1012
generic_register #(8,0  ) u_reg15_be2 (
1013
              .we            ({8{sw_wr_en_15 &
1014
                                 wr_be[2]   }}  ),
1015
              .data_in       (sw_reg_wdata[23:16]    ),
1016
              .reset_n       (reset_n           ),
1017
              .clk           (mclk              ),
1018
 
1019
              //List of Outs
1020
              .data_out      (reg_15[23:16]        )
1021
          );
1022
 
1023
generic_register #(8,0  ) u_reg15_be3 (
1024
              .we            ({8{sw_wr_en_15 &
1025
                                 wr_be[3]   }}  ),
1026
              .data_in       (sw_reg_wdata[31:24]    ),
1027
              .reset_n       (reset_n           ),
1028
              .clk           (mclk              ),
1029
 
1030
              //List of Outs
1031
              .data_out      (reg_15[31:24]        )
1032
          );
1033
 
1034
 
1035
 
1036
 
1037
//----------------------------------
1038
// Generate SDRAM Div-2 Clock
1039
//----------------------------------
1040
wire   sdram_clk_div2;
1041
 
1042
assign sdram_clk = (cfg_sdram_clk_div) ? sdram_clk_div2 : mclk;
1043
 
1044
 
1045
clk_ctl #(1) u_sdramclk (
1046
   // Outputs
1047
       .clk_o         (sdram_clk_div2),
1048
   // Inputs
1049
       .mclk          (mclk),
1050
       .reset_n       (reset_n),
1051
       .clk_div_ratio (2'b00)
1052
   );
1053
 
1054
 
1055
 
1056
endmodule

powered by: WebSVN 2.1.0

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