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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [orpsocv2/] [boards/] [xilinx/] [s3adsp1800/] [rtl/] [verilog/] [xilinx_s3adsp_ddr2/] [s3adsp_ddr2_data_read_controller_0.v] - Blame information for rev 568

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 568 julius
//*****************************************************************************
2
// DISCLAIMER OF LIABILITY
3
//
4
// This file contains proprietary and confidential information of
5
// Xilinx, Inc. ("Xilinx"), that is distributed under a license
6
// from Xilinx, and may be used, copied and/or disclosed only
7
// pursuant to the terms of a valid license agreement with Xilinx.
8
//
9
// XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION
10
// ("MATERIALS") "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
11
// EXPRESSED, IMPLIED, OR STATUTORY, INCLUDING WITHOUT
12
// LIMITATION, ANY WARRANTY WITH RESPECT TO NONINFRINGEMENT,
13
// MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE. Xilinx
14
// does not warrant that functions included in the Materials will
15
// meet the requirements of Licensee, or that the operation of the
16
// Materials will be uninterrupted or error-free, or that defects
17
// in the Materials will be corrected. Furthermore, Xilinx does
18
// not warrant or make any representations regarding use, or the
19
// results of the use, of the Materials in terms of correctness,
20
// accuracy, reliability or otherwise.
21
//
22
// Xilinx products are not designed or intended to be fail-safe,
23
// or for use in any application requiring fail-safe performance,
24
// such as life-support or safety devices or systems, Class III
25
// medical devices, nuclear facilities, applications related to
26
// the deployment of airbags, or any other applications that could
27
// lead to death, personal injury or severe property or
28
// environmental damage (individually and collectively, "critical
29
// applications"). Customer assumes the sole risk and liability
30
// of any use of Xilinx products in critical applications,
31
// subject only to applicable laws and regulations governing
32
// limitations on product liability.
33
//
34
// Copyright 2005, 2006, 2007, 2008 Xilinx, Inc.
35
// All rights reserved.
36
//
37
// This disclaimer and copyright notice must be retained as part
38
// of this file at all times.
39
//*****************************************************************************
40
//   ____  ____
41
//  /   /\/   /
42
// /___/  \  /   Vendor             : Xilinx
43
// \   \   \/    Version            : 3.6.1
44
//  \   \        Application        : MIG
45
//  /   /        Filename           : s3adsp_ddr2_data_read_controller_0.v
46
// /___/   /\    Date Last Modified : $Date: 2010/11/26 18:25:41 $
47
// \   \  /  \   Date Created       : Mon May 2 2005
48
//  \___\/\___\
49
// Device       : Spartan-3/3A/3A-DSP
50
// Design Name  : DDR2 SDRAM
51
// Purpose      : This module has instantiations fifo_0_wr_en, fifo_1_wr_en, 
52
//                dqs_delay and wr_gray_cntr.
53
//*****************************************************************************
54
 
55
`timescale 1ns/100ps
56
`include "s3adsp_ddr2_parameters_0.v"
57
 
58
module s3adsp_ddr2_data_read_controller_0
59
  (
60
   input                                clk,
61
   input                                reset,
62
   input                               rst_dqs_div_in,
63
   input [4:0]                         delay_sel,
64
   input  [(`DATA_STROBE_WIDTH-1):0]     dqs_int_delay_in,
65
   output [(`DATA_STROBE_WIDTH-1):0]     fifo_0_wr_en_val,
66
   output [(`DATA_STROBE_WIDTH-1):0]     fifo_1_wr_en_val,
67
   output [(4*`DATA_STROBE_WIDTH)-1:0]   fifo_0_wr_addr_val,
68
   output [(4*`DATA_STROBE_WIDTH)-1:0]   fifo_1_wr_addr_val,
69
   output [(`DATA_STROBE_WIDTH-1):0]     dqs_delayed_col0_val,
70
   output [(`DATA_STROBE_WIDTH-1):0]     dqs_delayed_col1_val,
71
   //debug_signals
72
   input [4:0]                           vio_out_dqs,
73
   input                                vio_out_dqs_en,
74
   input [4:0]                          vio_out_rst_dqs_div,
75
   input                                vio_out_rst_dqs_div_en
76
 
77
   );
78
 
79
   reg                               reset_r;
80
   wire                              rst_dqs_div;
81
   wire [(4*`DATA_STROBE_WIDTH)-1:0] fifo_0_wr_addr;
82
   wire [(4*`DATA_STROBE_WIDTH)-1:0] fifo_1_wr_addr;
83
   wire [(`DATA_STROBE_WIDTH-1):0]   rst_dqs_delay_n;
84
   wire [(`DATA_STROBE_WIDTH-1):0]   dqs_delayed_col0_n;
85
   wire [(`DATA_STROBE_WIDTH-1):0]   dqs_delayed_col1_n;
86
   wire [(`DATA_STROBE_WIDTH-1):0]   fifo_0_wr_en/* synthesis syn_keep=1 */;
87
   wire [(`DATA_STROBE_WIDTH-1):0]   fifo_1_wr_en/* synthesis syn_keep=1 */;
88
   wire [4:0]                        delay_sel_rst_dqs_div;
89
   wire [4:0]                         delay_sel_dqs;
90
 
91
   (* BUFFER_TYPE = "none" *) wire [(`DATA_STROBE_WIDTH-1):0]   dqs_delayed_col0;
92
   (* BUFFER_TYPE = "none" *) wire [(`DATA_STROBE_WIDTH-1):0]   dqs_delayed_col1;
93
 
94
   assign fifo_0_wr_addr_val    = fifo_0_wr_addr;
95
   assign fifo_1_wr_addr_val    = fifo_1_wr_addr;
96
   assign fifo_0_wr_en_val      = fifo_0_wr_en;
97
   assign fifo_1_wr_en_val      = fifo_1_wr_en;
98
   assign dqs_delayed_col0_val  = dqs_delayed_col0;
99
   assign dqs_delayed_col1_val  = dqs_delayed_col1;
100
   assign dqs_delayed_col0_n    = ~ dqs_delayed_col0;
101
   assign dqs_delayed_col1_n    = ~ dqs_delayed_col1;
102
 
103
 
104
   always @(posedge clk)
105
     reset_r <= reset;
106
 
107
 
108
   generate
109
      if(`DEBUG_EN)
110
        assign delay_sel_rst_dqs_div = (vio_out_rst_dqs_div_en) ?
111
                                       vio_out_rst_dqs_div[4:0] :
112
                                       delay_sel;
113
      else
114
        assign delay_sel_rst_dqs_div = delay_sel;
115
   endgenerate
116
 
117
// rst_dqs_div instantation. 
118
   s3adsp_ddr2_dqs_delay rst_dqs_div_delayed
119
     (
120
      .clk_in(rst_dqs_div_in),
121
      .sel_in(delay_sel_rst_dqs_div),
122
      .clk_out(rst_dqs_div)
123
      );
124
 
125
 
126
   generate
127
      if(`DEBUG_EN)
128
         assign delay_sel_dqs = vio_out_dqs_en ? vio_out_dqs[4:0] : delay_sel;
129
      else
130
        assign delay_sel_dqs = delay_sel;
131
   endgenerate
132
 
133
 
134
//DQS Internal Delay Circuit implemented in LUTs
135
   genvar dly_i;
136
   generate
137
      for(dly_i = 0; dly_i < `DATA_STROBE_WIDTH; dly_i = dly_i + 1)
138
        begin: gen_delay
139
           s3adsp_ddr2_dqs_delay dqs_delay_col0
140
             (
141
              .clk_in   (dqs_int_delay_in[dly_i]),
142
              .sel_in   (delay_sel_dqs),
143
              .clk_out  (dqs_delayed_col0[dly_i])
144
              )/* synthesis syn_preserve=1 */;
145
 
146
           s3adsp_ddr2_dqs_delay dqs_delay_col1
147
             (
148
              .clk_in   (dqs_int_delay_in[dly_i]),
149
              .sel_in   (delay_sel_dqs),
150
              .clk_out  (dqs_delayed_col1[dly_i])
151
              )/* synthesis syn_preserve=1 */;
152
        end
153
   endgenerate
154
 
155
 
156
// FIFO write enables instances
157
   genvar wren_i;
158
   generate
159
      for(wren_i = 0; wren_i < `DATA_STROBE_WIDTH;  wren_i = wren_i + 1)
160
        begin: gen_wr_en
161
           s3adsp_ddr2_fifo_0_wr_en_0 fifo_0_wr_en_inst
162
             (
163
              .clk              (dqs_delayed_col1_n [wren_i]),
164
              .reset            (reset_r),
165
              .din              (rst_dqs_div),
166
              .rst_dqs_delay_n  (rst_dqs_delay_n[wren_i]),
167
              .dout             (fifo_0_wr_en[wren_i])
168
              );
169
           s3adsp_ddr2_fifo_1_wr_en_0 fifo_1_wr_en_inst
170
             (
171
              .clk              (dqs_delayed_col0[wren_i]),
172
              .rst_dqs_delay_n  (rst_dqs_delay_n[wren_i]),
173
              .reset            (reset_r),
174
              .din              (rst_dqs_div),
175
              .dout             (fifo_1_wr_en[wren_i])
176
              );
177
        end
178
   endgenerate
179
 
180
//FIFO write pointer instances
181
   genvar wr_addr_i;
182
   generate
183
      for(wr_addr_i = 0; wr_addr_i < `DATA_STROBE_WIDTH;  wr_addr_i = wr_addr_i + 1)
184
        begin: gen_wr_addr
185
           s3adsp_ddr2_wr_gray_cntr fifo_0_wr_addr_inst
186
             (
187
              .clk      (dqs_delayed_col1[wr_addr_i]),
188
              .reset    (reset_r),
189
              .cnt_en   (fifo_0_wr_en[wr_addr_i]),
190
              .wgc_gcnt (fifo_0_wr_addr[wr_addr_i*4+:4])
191
              );
192
           s3adsp_ddr2_wr_gray_cntr fifo_1_wr_addr_inst
193
             (
194
              .clk      (dqs_delayed_col0_n[wr_addr_i]),
195
              .reset    (reset_r),
196
              .cnt_en   (fifo_1_wr_en[wr_addr_i]),
197
              .wgc_gcnt (fifo_1_wr_addr[wr_addr_i*4+:4])
198
              );
199
        end
200
   endgenerate
201
 
202
endmodule

powered by: WebSVN 2.1.0

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