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

Subversion Repositories versatile_mem_ctrl

[/] [versatile_mem_ctrl/] [trunk/] [syn/] [altera/] [bin/] [versatile_memory_controller.sdc] - Blame information for rev 22

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

Line No. Rev Author Line
1 15 mikaeljf
#**************************************************************
2 22 mikaeljf
# Timimg Information for DDR2 SDRAM
3 15 mikaeljf
#**************************************************************
4 21 mikaeljf
# Timing specifications from Micron Data Sheet (DDR2 SDRAM MT47H32M16-5E)
5 15 mikaeljf
 
6 20 mikaeljf
# Clock cycle time: min=5.00ns, max=8.00ns
7
set tCK 5.000
8 15 mikaeljf
 
9 22 mikaeljf
# Data Strobe Out
10 20 mikaeljf
# DQS output access time from CK/CK#
11
set tDQSCKmin -0.500
12
set tDQSCKmax  0.500
13
 
14 22 mikaeljf
# Data Strobe In
15
# DQS rising edge to CK rising edge
16
set tDQSSmin [expr -0.25 * $tCK]
17
set tDQSSmax [expr 0.25 * $tCK]
18
# DQS falling to CK rising: setup time
19
set tDSSmin [expr 0.2 * $tCK]
20
# DQS falling from CK rising: hold time
21
set tDSHmin [expr 0.2 * $tCK]
22
 
23
# Data Out
24 20 mikaeljf
# DQ output access time from CK/CK#
25
set tACmin -0.600
26
set tACmax  0.600
27
 
28 22 mikaeljf
# Data In
29
# DQ and DM input setup time to DQS
30
set tDSb 0.150
31
# DQ and DM input hold time to DQS
32
set tDHb 0.275
33
# DQ and DM input setup time to DQS
34
set tDSa 0.400
35
# DQ and DM input hold time to DQS
36
set tDHa 0.400
37 20 mikaeljf
 
38 22 mikaeljf
# Command and Address
39
# Input setup time
40
set tISb 0.350
41
set tISa 0.600
42
# Input hold time
43
set tIHb 0.470
44
set tIHa 0.600
45
 
46
 
47 15 mikaeljf
#**************************************************************
48 22 mikaeljf
# Timimg Information
49
#**************************************************************
50
 
51
# Trace delay for data
52
set tTDDmin 0.100
53
set tTDDmax 0.200
54
 
55
# Trace delay for clock
56
set tTDCmin  0.100
57
set tTDCmax  0.200
58
 
59
 
60
#**************************************************************
61 15 mikaeljf
# Create Clock
62
#**************************************************************
63
 
64
# Clock frequency
65
set wb_clk_period 20.000
66 20 mikaeljf
set sdram_clk_period $tCK
67 15 mikaeljf
 
68
# Clocks
69 22 mikaeljf
create_clock -name {wb_clk}    -period $wb_clk_period    [get_ports {wb_clk}]
70 20 mikaeljf
create_clock -name {sdram_clk} -period $sdram_clk_period [get_ports {sdram_clk}]
71 15 mikaeljf
 
72
# Virtual clocks
73 22 mikaeljf
#create_clock -name {v_wb_clk_in}     -period $wb_clk_period
74
#create_clock -name {v_wb_clk_out}    -period $wb_clk_period
75
#create_clock -name {v_sdram_clk_in}  -period $sdram_clk_period
76
#create_clock -name {v_sdram_clk_out} -period $sdram_clk_period
77 15 mikaeljf
 
78 21 mikaeljf
 
79 15 mikaeljf
#**************************************************************
80
# Create Generated Clock
81
#**************************************************************
82
 
83 20 mikaeljf
create_generated_clock -name sdram_clk_0 -phase 0 -source [get_ports {sdram_clk}] [get_pins {dcm_pll_0|altpll_internal|auto_generated|pll1|clk[0]}]
84
create_generated_clock -name sdram_clk_180 -phase 180 -source [get_ports {sdram_clk}] [get_pins {dcm_pll_0|altpll_internal|auto_generated|pll1|clk[2]}]
85
create_generated_clock -name sdram_clk_270 -phase 270 -source [get_ports {sdram_clk}] [get_pins {dcm_pll_0|altpll_internal|auto_generated|pll1|clk[3]}]
86
create_generated_clock -name ck_pad_o -phase 0 -source [get_pins {ddr_ff_out_inst_2|altddio_out_inst|auto_generated|ddio_outa[0]|clkhi}] [get_ports ck_pad*]
87 15 mikaeljf
 
88 21 mikaeljf
 
89 15 mikaeljf
#**************************************************************
90
# Set Clock Latency
91
#**************************************************************
92
 
93
 
94
 
95
#**************************************************************
96
# Set Clock Uncertainty
97
#**************************************************************
98
 
99
derive_clock_uncertainty
100
 
101
 
102
#**************************************************************
103
# Set Input Delay
104
#**************************************************************
105 22 mikaeljf
# Double Data Rate requires constraints for both rising and falling clock edge
106
# Input max delay value = max trace delay for data + tCO of external device – min trace delay for clock
107
# Input min delay value = min trace delay for data + tCOmin of external device – max trace delay for clock
108
# Assume (for now): max trace delay for data = min trace delay for clock
109
#                   min trace delay for data = max trace delay for clock
110
# Data
111 21 mikaeljf
set_input_delay -clock {ck_pad_o} -max $tACmax             [get_ports {dq_pad_io[*]}] -add_delay
112
set_input_delay -clock {ck_pad_o} -max $tACmax -clock_fall [get_ports {dq_pad_io[*]}] -add_delay
113
set_input_delay -clock {ck_pad_o} -min $tACmin             [get_ports {dq_pad_io[*]}] -add_delay
114
set_input_delay -clock {ck_pad_o} -min $tACmin -clock_fall [get_ports {dq_pad_io[*]}] -add_delay
115 22 mikaeljf
# Data Strobe
116
set_input_delay -clock {ck_pad_o} -max $tDQSCKmax             [get_ports {dqs_pad_io[*]}] -add_delay
117
set_input_delay -clock {ck_pad_o} -max $tDQSCKmax -clock_fall [get_ports {dqs_pad_io[*]}] -add_delay
118
set_input_delay -clock {ck_pad_o} -min $tDQSCKmin             [get_ports {dqs_pad_io[*]}] -add_delay
119
set_input_delay -clock {ck_pad_o} -min $tDQSCKmin -clock_fall [get_ports {dqs_pad_io[*]}] -add_delay
120
# Data Strobe
121
set_input_delay -clock {ck_pad_o} -max $tDQSCKmax             [get_ports {dqs_n_pad_io[*]}] -add_delay
122
set_input_delay -clock {ck_pad_o} -max $tDQSCKmax -clock_fall [get_ports {dqs_n_pad_io[*]}] -add_delay
123
set_input_delay -clock {ck_pad_o} -min $tDQSCKmin             [get_ports {dqs_n_pad_io[*]}] -add_delay
124
set_input_delay -clock {ck_pad_o} -min $tDQSCKmin -clock_fall [get_ports {dqs_n_pad_io[*]}] -add_delay
125
# Data Mask
126
set_input_delay -clock {ck_pad_o} -max $tDQSCKmax             [get_ports {dm_rdqs_pad_io[*]}] -add_delay
127
set_input_delay -clock {ck_pad_o} -max $tDQSCKmax -clock_fall [get_ports {dm_rdqs_pad_io[*]}] -add_delay
128
set_input_delay -clock {ck_pad_o} -min $tDQSCKmin             [get_ports {dm_rdqs_pad_io[*]}] -add_delay
129
set_input_delay -clock {ck_pad_o} -min $tDQSCKmin -clock_fall [get_ports {dm_rdqs_pad_io[*]}] -add_delay
130 15 mikaeljf
 
131 22 mikaeljf
# Single Data Rate requires constraints for rising clock edge only
132 15 mikaeljf
 
133
 
134
#**************************************************************
135
# Set Output Delay
136
#**************************************************************
137 22 mikaeljf
# Double Data Rate requires constraints for both rising and falling clock edge
138
# Output max delay = max trace delay for data + tSU of external register – min trace delay for clock
139
# Output min delay = min trace delay for data – tH of external register – max trace delay for clock
140
# Assume (for now): max trace delay for data = min trace delay for clock
141
#                   min trace delay for data = max trace delay for clock
142
# Data
143
set_output_delay -clock {ck_pad_o} -max $tISa              [get_ports {dq_pad_io[*]}] -add_delay
144
set_output_delay -clock {ck_pad_o} -max $tISa  -clock_fall [get_ports {dq_pad_io[*]}] -add_delay
145
set_output_delay -clock {ck_pad_o} -min -$tIHa             [get_ports {dq_pad_io[*]}] -add_delay
146
set_output_delay -clock {ck_pad_o} -min -$tIHa -clock_fall [get_ports {dq_pad_io[*]}] -add_delay
147
# Data Strobe
148
set_output_delay -clock {ck_pad_o} -max $tISa              [get_ports {dqs_pad_io[*]}] -add_delay
149
set_output_delay -clock {ck_pad_o} -max $tISa  -clock_fall [get_ports {dqs_pad_io[*]}] -add_delay
150
set_output_delay -clock {ck_pad_o} -min -$tIHa             [get_ports {dqs_pad_io[*]}] -add_delay
151
set_output_delay -clock {ck_pad_o} -min -$tIHa -clock_fall [get_ports {dqs_pad_io[*]}] -add_delay
152
# Data Strobe
153
set_output_delay -clock {ck_pad_o} -max $tISa              [get_ports {dqs_n_pad_io[*]}] -add_delay
154
set_output_delay -clock {ck_pad_o} -max $tISa  -clock_fall [get_ports {dqs_n_pad_io[*]}] -add_delay
155
set_output_delay -clock {ck_pad_o} -min -$tIHa             [get_ports {dqs_n_pad_io[*]}] -add_delay
156
set_output_delay -clock {ck_pad_o} -min -$tIHa -clock_fall [get_ports {dqs_n_pad_io[*]}] -add_delay
157
# Data Mask
158
set_output_delay -clock {ck_pad_o} -max $tISa              [get_ports {dm_rdqs_pad_io[*]}] -add_delay
159
set_output_delay -clock {ck_pad_o} -max $tISa  -clock_fall [get_ports {dm_rdqs_pad_io[*]}] -add_delay
160
set_output_delay -clock {ck_pad_o} -min -$tIHa             [get_ports {dm_rdqs_pad_io[*]}] -add_delay
161
set_output_delay -clock {ck_pad_o} -min -$tIHa -clock_fall [get_ports {dm_rdqs_pad_io[*]}] -add_delay
162 15 mikaeljf
 
163 22 mikaeljf
# Single Data Rate requires constraints for rising clock edge only
164
# Chip Select
165
set_output_delay -clock {ck_pad_o} -max $tISa  [get_ports {cs_n_pad_o}] -add_delay
166
set_output_delay -clock {ck_pad_o} -min -$tIHa [get_ports {cs_n_pad_o}] -add_delay
167
# Row Address Strobe
168
set_output_delay -clock {ck_pad_o} -max $tISa  [get_ports {ras_pad_o}] -add_delay
169
set_output_delay -clock {ck_pad_o} -min -$tIHa [get_ports {ras_pad_o}] -add_delay
170
# Column Address Strobe
171
set_output_delay -clock {ck_pad_o} -max $tISa  [get_ports {cas_pad_o}] -add_delay
172
set_output_delay -clock {ck_pad_o} -min -$tIHa [get_ports {cas_pad_o}] -add_delay
173
# Write Enable
174
set_output_delay -clock {ck_pad_o} -max $tISa  [get_ports {we_pad_o}] -add_delay
175
set_output_delay -clock {ck_pad_o} -min -$tIHa [get_ports {we_pad_o}] -add_delay
176
# Bank Address
177
set_output_delay -clock {ck_pad_o} -max $tISa  [get_ports {ba_pad_o[*]}] -add_delay
178
set_output_delay -clock {ck_pad_o} -min -$tIHa [get_ports {ba_pad_o[*]}] -add_delay
179
# Address
180
set_output_delay -clock {ck_pad_o} -max $tISa  [get_ports {addr_pad_o[*]}] -add_delay
181
set_output_delay -clock {ck_pad_o} -min -$tIHa [get_ports {addr_pad_o[*]}] -add_delay
182
# Clock Enable
183
set_output_delay -clock {ck_pad_o} -max $tISa  [get_ports {cke_pad_o}] -add_delay
184
set_output_delay -clock {ck_pad_o} -min -$tIHa [get_ports {cke_pad_o}] -add_delay
185 15 mikaeljf
 
186
 
187
#**************************************************************
188
# Set Clock Groups
189
#**************************************************************
190
 
191
 
192
 
193
#**************************************************************
194
# Set False Path
195
#**************************************************************
196
 
197 20 mikaeljf
# Reset
198 15 mikaeljf
set_false_path -from [get_ports {wb_rst}]
199 21 mikaeljf
 
200 20 mikaeljf
# Input Timing Exceptions
201 22 mikaeljf
# False path exceptions for opposite-edge transfer
202
# Data
203 21 mikaeljf
set_false_path -setup -fall_from [get_clocks ck_pad_o] -rise_to [get_clocks sdram_clk_270]
204
set_false_path -setup -rise_from [get_clocks ck_pad_o] -fall_to [get_clocks sdram_clk_270]
205
set_false_path -hold  -rise_from [get_clocks ck_pad_o] -fall_to [get_clocks sdram_clk_270]
206
set_false_path -hold  -fall_from [get_clocks ck_pad_o] -rise_to [get_clocks sdram_clk_270]
207 22 mikaeljf
# Data Strobe
208
#set_false_path -setup -fall_from [get_clocks ck_pad_o] -rise_to [get_clocks sdram_clk_0]
209
#set_false_path -setup -rise_from [get_clocks ck_pad_o] -fall_to [get_clocks sdram_clk_0]
210
#set_false_path -hold  -rise_from [get_clocks ck_pad_o] -fall_to [get_clocks sdram_clk_0]
211
#set_false_path -hold  -fall_from [get_clocks ck_pad_o] -rise_to [get_clocks sdram_clk_0]
212 15 mikaeljf
 
213 21 mikaeljf
# Output Timing Exceptions
214 22 mikaeljf
# False path exceptions for opposite-edge transfer
215
# Data
216 21 mikaeljf
set_false_path -setup -rise_from [get_clocks sdram_clk_270] -fall_to [get_clocks ck_pad_o]
217
set_false_path -setup -fall_from [get_clocks sdram_clk_270] -rise_to [get_clocks ck_pad_o]
218
set_false_path -hold  -rise_from [get_clocks sdram_clk_270] -rise_to [get_clocks ck_pad_o]
219
set_false_path -hold  -fall_from [get_clocks sdram_clk_270] -fall_to [get_clocks ck_pad_o]
220 22 mikaeljf
# Data Strobe
221
set_false_path -setup -rise_from [get_clocks sdram_clk_0] -fall_to [get_clocks ck_pad_o]
222
set_false_path -setup -fall_from [get_clocks sdram_clk_0] -rise_to [get_clocks ck_pad_o]
223
set_false_path -hold  -rise_from [get_clocks sdram_clk_0] -rise_to [get_clocks ck_pad_o]
224
set_false_path -hold  -fall_from [get_clocks sdram_clk_0] -fall_to [get_clocks ck_pad_o]
225 15 mikaeljf
 
226 21 mikaeljf
 
227 15 mikaeljf
#**************************************************************
228
# Set Multicycle Path
229
#**************************************************************
230
 
231
 
232
 
233
#**************************************************************
234
# Set Maximum Delay
235
#**************************************************************
236
 
237
 
238
 
239
#**************************************************************
240
# Set Minimum Delay
241
#**************************************************************
242
 
243
 
244
 
245
#**************************************************************
246
# Set Input Transition
247
#**************************************************************
248
 
249 21 mikaeljf
 

powered by: WebSVN 2.1.0

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