aboutsummaryrefslogtreecommitdiffstats
path: root/projects/U200/patches/rd_en.patch
blob: ea2485af1625ba2fe544b84e8584d4513072c4a1 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
--- U200.srcs/sources_1/ip/phy_rdimm_x8_dual/rtl/cal/ddr4_v2_2_cal_rd_en.sv
@@ -114,55 +114,86 @@
 
 reg                      [RL+12 + 4*EXTRA_CMD_DELAY :0] rdEn;
 (* KEEP = "true" *) reg  [RL+12 + 4*EXTRA_CMD_DELAY :0] rdEn_nxt;
-reg                      [18:0]                        rsMask[0:7];
+reg                      [19:0]                        rsMask[0:15];
 
-function [18:0] rs2mask;
+// RS probably stands for rank select.
+// TODO edit below in worst case.
+function [19:0] rs2mask;
    input [3:0] diff;
    input       slot2;
-case ({diff, slot2})
-   5'b0_0000: rs2mask = 19'b000_0000_0000_0000_1111;
-   5'b0_0001: rs2mask = 19'b000_0000_0000_0011_1100;
-   5'b0_0010: rs2mask = 19'b000_0000_0000_0001_1110;
-   5'b0_0011: rs2mask = 19'b000_0000_0000_0111_1000;
-   5'b0_0100: rs2mask = 19'b000_0000_0000_0011_1100;
-   5'b0_0101: rs2mask = 19'b000_0000_0000_1111_0000;
-   5'b0_0110: rs2mask = 19'b000_0000_0000_0111_1000;
-   5'b0_0111: rs2mask = 19'b000_0000_0001_1110_0000;
-   5'b0_1000: rs2mask = 19'b000_0000_0000_1111_0000;
-   5'b0_1001: rs2mask = 19'b000_0000_0011_1100_0000;
-   5'b0_1010: rs2mask = 19'b000_0000_0001_1110_0000;
-   5'b0_1011: rs2mask = 19'b000_0000_0111_1000_0000;
-   5'b0_1100: rs2mask = 19'b000_0000_0011_1100_0000;
-   5'b0_1101: rs2mask = 19'b000_0000_1111_0000_0000;
-   5'b0_1110: rs2mask = 19'b000_0000_0111_1000_0000;
-   5'b0_1111: rs2mask = 19'b000_0001_1110_0000_0000;
-   5'b1_0000: rs2mask = 19'b000_0000_1111_0000_0000;
-   5'b1_0001: rs2mask = 19'b000_0011_1100_0000_0000;
-   5'b1_0010: rs2mask = 19'b000_0001_1110_0000_0000;
-   5'b1_0011: rs2mask = 19'b000_0111_1000_0000_0000;
-   5'b1_0100: rs2mask = 19'b000_0011_1100_0000_0000;
-   5'b1_0101: rs2mask = 19'b000_1111_0000_0000_0000;
-   5'b1_0110: rs2mask = 19'b000_0111_1000_0000_0000;
-   5'b1_0111: rs2mask = 19'b001_1110_0000_0000_0000;
-   5'b1_1000: rs2mask = 19'b000_1111_0000_0000_0000;
-   5'b1_1001: rs2mask = 19'b011_1100_0000_0000_0000;
-   5'b1_1010: rs2mask = 19'b001_1110_0000_0000_0000;
-   5'b1_1011: rs2mask = 19'b111_1000_0000_0000_0000;
+   input       slot1;
+case ({diff, slot2, slot1})
+6'b0_00000: rs2mask = 19'b000_0000_0000_0000_1111;
+    6'b0_00001: rs2mask = 19'b000_0000_0000_0001_1110;
+   6'b0_00010: rs2mask = 19'b000_0000_0000_0011_1100;
+    6'b0_00011: rs2mask = 19'b000_0000_0000_0111_1000;
+   6'b0_00100: rs2mask = 19'b000_0000_0000_0001_1110;
+    6'b0_00101: rs2mask = 19'b000_0000_0000_0011_1100;
+   6'b0_00110: rs2mask = 19'b000_0000_0000_0111_1000;
+    6'b0_00111: rs2mask = 19'b000_0000_0000_1111_0000;
+   6'b0_01000: rs2mask = 19'b000_0000_0000_0011_1100;
+    6'b0_01001: rs2mask = 19'b000_0000_0000_0111_1000;
+   6'b0_01010: rs2mask = 19'b000_0000_0000_1111_0000;
+    6'b0_01011: rs2mask = 19'b000_0000_0001_1110_0000;
+   6'b0_01100: rs2mask = 19'b000_0000_0000_0111_1000;
+    6'b0_01101: rs2mask = 19'b000_0000_0000_1111_0000;
+   6'b0_01110: rs2mask = 19'b000_0000_0001_1110_0000;
+    6'b0_01111: rs2mask = 19'b000_0000_0011_1100_0000;
+   6'b0_10000: rs2mask = 19'b000_0000_0000_1111_0000;
+    6'b0_10001: rs2mask = 19'b000_0000_0001_1110_0000;
+   6'b0_10010: rs2mask = 19'b000_0000_0011_1100_0000;
+    6'b0_10011: rs2mask = 19'b000_0000_0111_1000_0000;
+   6'b0_10100: rs2mask = 19'b000_0000_0001_1110_0000;
+    6'b0_10101: rs2mask = 19'b000_0000_0011_1100_0000;
+   6'b0_10110: rs2mask = 19'b000_0000_0111_1000_0000;
+    6'b0_10111: rs2mask = 19'b000_0000_1111_0000_0000;
+   6'b0_11000: rs2mask = 19'b000_0000_0011_1100_0000;
+    6'b0_11001: rs2mask = 19'b000_0000_0111_1000_0000;
+   6'b0_11010: rs2mask = 19'b000_0000_1111_0000_0000;
+    6'b0_11011: rs2mask = 19'b000_0001_1110_0000_0000;
+   6'b0_11100: rs2mask = 19'b000_0000_0111_1000_0000;
+    6'b0_11101: rs2mask = 19'b000_0000_1111_0000_0000;
+   6'b0_11110: rs2mask = 19'b000_0001_1110_0000_0000;
+    6'b0_11111: rs2mask = 19'b000_0011_1100_0000_0000;
+   6'b1_00000: rs2mask = 19'b000_0000_1111_0000_0000;
+    6'b1_00001: rs2mask = 19'b000_0001_1110_0000_0000;
+   6'b1_00010: rs2mask = 19'b000_0011_1100_0000_0000;
+    6'b1_00011: rs2mask = 19'b000_0111_1000_0000_0000;
+   6'b1_00100: rs2mask = 19'b000_0001_1110_0000_0000;
+    6'b1_00101: rs2mask = 19'b000_0011_1100_0000_0000;
+   6'b1_00110: rs2mask = 19'b000_0111_1000_0000_0000;
+    6'b1_00111: rs2mask = 19'b000_1111_0000_0000_0000;
+   6'b1_01000: rs2mask = 19'b000_0011_1100_0000_0000;
+    6'b1_01001: rs2mask = 19'b000_0111_1000_0000_0000;
+   6'b1_01010: rs2mask = 19'b000_1111_0000_0000_0000;
+    6'b1_01011: rs2mask = 19'b001_1110_0000_0000_0000;
+   6'b1_01100: rs2mask = 19'b000_0111_1000_0000_0000;
+    6'b1_01101: rs2mask = 19'b000_1111_0000_0000_0000;
+   6'b1_01110: rs2mask = 19'b001_1110_0000_0000_0000;
+    6'b1_01111: rs2mask = 19'b011_1100_0000_0000_0000;
+   6'b1_10000: rs2mask = 19'b000_1111_0000_0000_0000;
+    6'b1_10001: rs2mask = 19'b001_1110_0000_0000_0000;
+   6'b1_10010: rs2mask = 19'b011_1100_0000_0000_0000;
+    6'b1_10011: rs2mask = 19'b111_1000_0000_0000_0000;
+   6'b1_10100: rs2mask = 19'b001_1110_0000_0000_0000;
+    6'b1_10101: rs2mask = 19'b011_1100_0000_0000_0000;
+   6'b1_10110: rs2mask = 19'b111_1000_0000_0000_0000;
+    6'b1_10111: rs2mask = 20'b1111_0000_0000_0000_0000;
      default: rs2mask = 19'b000_0000_1000_0000_1111;
 endcase
 endfunction
 
 always @(posedge clk) begin: blk1
-   reg [3:0] rsNdx;
-   for (rsNdx = 0; rsNdx <= 7; rsNdx = rsNdx + 1)
-      rsMask[rsNdx] <= #TCQ rs2mask(mCL[rsNdx[2:1]] - (RL - 3), rsNdx[0]);
+   reg [4:0] rsNdx;
+   for (rsNdx = 0; rsNdx <= 15; rsNdx = rsNdx + 1)
+      rsMask[rsNdx] <= #TCQ rs2mask(mCL[rsNdx[3:2]] - (RL - 3), rsNdx[1], rsNdx[0]);
 end
 
 always @(*) if (rst) begin
    rdEn_nxt = 'b0;
 end else begin
    rdEn_nxt =   (rdEn >> 4)
-                | (rdCAS ? {rsMask[{winRank, casSlot[1]}], { (RL-6 + 4*EXTRA_CMD_DELAY) {1'b0}}}
+                | (rdCAS ? {rsMask[{winRank, casSlot[1], casSlot[0]}], { (RL-6 + 4*EXTRA_CMD_DELAY) {1'b0}}}
                 : 'b0);
 end


--- U200.srcs/sources_1/ip/phy_ddr4/rtl/cal/ddr4_v2_2_cal_rd_en.sv
@@ -114,55 +114,86 @@
 
 reg                      [RL+12 + 4*EXTRA_CMD_DELAY :0] rdEn;
 (* KEEP = "true" *) reg  [RL+12 + 4*EXTRA_CMD_DELAY :0] rdEn_nxt;
-reg                      [18:0]                        rsMask[0:7];
+reg                      [19:0]                        rsMask[0:15];
 
-function [18:0] rs2mask;
+// RS probably stands for rank select.
+// TODO edit below in worst case.
+function [19:0] rs2mask;
    input [3:0] diff;
    input       slot2;
-case ({diff, slot2})
-   5'b0_0000: rs2mask = 19'b000_0000_0000_0000_1111;
-   5'b0_0001: rs2mask = 19'b000_0000_0000_0011_1100;
-   5'b0_0010: rs2mask = 19'b000_0000_0000_0001_1110;
-   5'b0_0011: rs2mask = 19'b000_0000_0000_0111_1000;
-   5'b0_0100: rs2mask = 19'b000_0000_0000_0011_1100;
-   5'b0_0101: rs2mask = 19'b000_0000_0000_1111_0000;
-   5'b0_0110: rs2mask = 19'b000_0000_0000_0111_1000;
-   5'b0_0111: rs2mask = 19'b000_0000_0001_1110_0000;
-   5'b0_1000: rs2mask = 19'b000_0000_0000_1111_0000;
-   5'b0_1001: rs2mask = 19'b000_0000_0011_1100_0000;
-   5'b0_1010: rs2mask = 19'b000_0000_0001_1110_0000;
-   5'b0_1011: rs2mask = 19'b000_0000_0111_1000_0000;
-   5'b0_1100: rs2mask = 19'b000_0000_0011_1100_0000;
-   5'b0_1101: rs2mask = 19'b000_0000_1111_0000_0000;
-   5'b0_1110: rs2mask = 19'b000_0000_0111_1000_0000;
-   5'b0_1111: rs2mask = 19'b000_0001_1110_0000_0000;
-   5'b1_0000: rs2mask = 19'b000_0000_1111_0000_0000;
-   5'b1_0001: rs2mask = 19'b000_0011_1100_0000_0000;
-   5'b1_0010: rs2mask = 19'b000_0001_1110_0000_0000;
-   5'b1_0011: rs2mask = 19'b000_0111_1000_0000_0000;
-   5'b1_0100: rs2mask = 19'b000_0011_1100_0000_0000;
-   5'b1_0101: rs2mask = 19'b000_1111_0000_0000_0000;
-   5'b1_0110: rs2mask = 19'b000_0111_1000_0000_0000;
-   5'b1_0111: rs2mask = 19'b001_1110_0000_0000_0000;
-   5'b1_1000: rs2mask = 19'b000_1111_0000_0000_0000;
-   5'b1_1001: rs2mask = 19'b011_1100_0000_0000_0000;
-   5'b1_1010: rs2mask = 19'b001_1110_0000_0000_0000;
-   5'b1_1011: rs2mask = 19'b111_1000_0000_0000_0000;
+   input       slot1;
+case ({diff, slot2, slot1})
+6'b0_00000: rs2mask = 19'b000_0000_0000_0000_1111;
+    6'b0_00001: rs2mask = 19'b000_0000_0000_0001_1110;
+   6'b0_00010: rs2mask = 19'b000_0000_0000_0011_1100;
+    6'b0_00011: rs2mask = 19'b000_0000_0000_0111_1000;
+   6'b0_00100: rs2mask = 19'b000_0000_0000_0001_1110;
+    6'b0_00101: rs2mask = 19'b000_0000_0000_0011_1100;
+   6'b0_00110: rs2mask = 19'b000_0000_0000_0111_1000;
+    6'b0_00111: rs2mask = 19'b000_0000_0000_1111_0000;
+   6'b0_01000: rs2mask = 19'b000_0000_0000_0011_1100;
+    6'b0_01001: rs2mask = 19'b000_0000_0000_0111_1000;
+   6'b0_01010: rs2mask = 19'b000_0000_0000_1111_0000;
+    6'b0_01011: rs2mask = 19'b000_0000_0001_1110_0000;
+   6'b0_01100: rs2mask = 19'b000_0000_0000_0111_1000;
+    6'b0_01101: rs2mask = 19'b000_0000_0000_1111_0000;
+   6'b0_01110: rs2mask = 19'b000_0000_0001_1110_0000;
+    6'b0_01111: rs2mask = 19'b000_0000_0011_1100_0000;
+   6'b0_10000: rs2mask = 19'b000_0000_0000_1111_0000;
+    6'b0_10001: rs2mask = 19'b000_0000_0001_1110_0000;
+   6'b0_10010: rs2mask = 19'b000_0000_0011_1100_0000;
+    6'b0_10011: rs2mask = 19'b000_0000_0111_1000_0000;
+   6'b0_10100: rs2mask = 19'b000_0000_0001_1110_0000;
+    6'b0_10101: rs2mask = 19'b000_0000_0011_1100_0000;
+   6'b0_10110: rs2mask = 19'b000_0000_0111_1000_0000;
+    6'b0_10111: rs2mask = 19'b000_0000_1111_0000_0000;
+   6'b0_11000: rs2mask = 19'b000_0000_0011_1100_0000;
+    6'b0_11001: rs2mask = 19'b000_0000_0111_1000_0000;
+   6'b0_11010: rs2mask = 19'b000_0000_1111_0000_0000;
+    6'b0_11011: rs2mask = 19'b000_0001_1110_0000_0000;
+   6'b0_11100: rs2mask = 19'b000_0000_0111_1000_0000;
+    6'b0_11101: rs2mask = 19'b000_0000_1111_0000_0000;
+   6'b0_11110: rs2mask = 19'b000_0001_1110_0000_0000;
+    6'b0_11111: rs2mask = 19'b000_0011_1100_0000_0000;
+   6'b1_00000: rs2mask = 19'b000_0000_1111_0000_0000;
+    6'b1_00001: rs2mask = 19'b000_0001_1110_0000_0000;
+   6'b1_00010: rs2mask = 19'b000_0011_1100_0000_0000;
+    6'b1_00011: rs2mask = 19'b000_0111_1000_0000_0000;
+   6'b1_00100: rs2mask = 19'b000_0001_1110_0000_0000;
+    6'b1_00101: rs2mask = 19'b000_0011_1100_0000_0000;
+   6'b1_00110: rs2mask = 19'b000_0111_1000_0000_0000;
+    6'b1_00111: rs2mask = 19'b000_1111_0000_0000_0000;
+   6'b1_01000: rs2mask = 19'b000_0011_1100_0000_0000;
+    6'b1_01001: rs2mask = 19'b000_0111_1000_0000_0000;
+   6'b1_01010: rs2mask = 19'b000_1111_0000_0000_0000;
+    6'b1_01011: rs2mask = 19'b001_1110_0000_0000_0000;
+   6'b1_01100: rs2mask = 19'b000_0111_1000_0000_0000;
+    6'b1_01101: rs2mask = 19'b000_1111_0000_0000_0000;
+   6'b1_01110: rs2mask = 19'b001_1110_0000_0000_0000;
+    6'b1_01111: rs2mask = 19'b011_1100_0000_0000_0000;
+   6'b1_10000: rs2mask = 19'b000_1111_0000_0000_0000;
+    6'b1_10001: rs2mask = 19'b001_1110_0000_0000_0000;
+   6'b1_10010: rs2mask = 19'b011_1100_0000_0000_0000;
+    6'b1_10011: rs2mask = 19'b111_1000_0000_0000_0000;
+   6'b1_10100: rs2mask = 19'b001_1110_0000_0000_0000;
+    6'b1_10101: rs2mask = 19'b011_1100_0000_0000_0000;
+   6'b1_10110: rs2mask = 19'b111_1000_0000_0000_0000;
+    6'b1_10111: rs2mask = 20'b1111_0000_0000_0000_0000;
      default: rs2mask = 19'b000_0000_1000_0000_1111;
 endcase
 endfunction
 
 always @(posedge clk) begin: blk1
-   reg [3:0] rsNdx;
-   for (rsNdx = 0; rsNdx <= 7; rsNdx = rsNdx + 1)
-      rsMask[rsNdx] <= #TCQ rs2mask(mCL[rsNdx[2:1]] - (RL - 3), rsNdx[0]);
+   reg [4:0] rsNdx;
+   for (rsNdx = 0; rsNdx <= 15; rsNdx = rsNdx + 1)
+      rsMask[rsNdx] <= #TCQ rs2mask(mCL[rsNdx[3:2]] - (RL - 3), rsNdx[1], rsNdx[0]);
 end
 
 always @(*) if (rst) begin
    rdEn_nxt = 'b0;
 end else begin
    rdEn_nxt =   (rdEn >> 4)
-                | (rdCAS ? {rsMask[{winRank, casSlot[1]}], { (RL-6 + 4*EXTRA_CMD_DELAY) {1'b0}}}
+                | (rdCAS ? {rsMask[{winRank, casSlot[1], casSlot[0]}], { (RL-6 + 4*EXTRA_CMD_DELAY) {1'b0}}}
                 : 'b0);
 end

--- U200.srcs/sources_1/ip/phy_ddr4_udimm/rtl/cal/ddr4_v2_2_cal_rd_en.sv
@@ -114,55 +114,86 @@
 
 reg                      [RL+12 + 4*EXTRA_CMD_DELAY :0] rdEn;
 (* KEEP = "true" *) reg  [RL+12 + 4*EXTRA_CMD_DELAY :0] rdEn_nxt;
-reg                      [18:0]                        rsMask[0:7];
+reg                      [19:0]                        rsMask[0:15];
 
-function [18:0] rs2mask;
+// RS probably stands for rank select.
+// TODO edit below in worst case.
+function [19:0] rs2mask;
    input [3:0] diff;
    input       slot2;
-case ({diff, slot2})
-   5'b0_0000: rs2mask = 19'b000_0000_0000_0000_1111;
-   5'b0_0001: rs2mask = 19'b000_0000_0000_0011_1100;
-   5'b0_0010: rs2mask = 19'b000_0000_0000_0001_1110;
-   5'b0_0011: rs2mask = 19'b000_0000_0000_0111_1000;
-   5'b0_0100: rs2mask = 19'b000_0000_0000_0011_1100;
-   5'b0_0101: rs2mask = 19'b000_0000_0000_1111_0000;
-   5'b0_0110: rs2mask = 19'b000_0000_0000_0111_1000;
-   5'b0_0111: rs2mask = 19'b000_0000_0001_1110_0000;
-   5'b0_1000: rs2mask = 19'b000_0000_0000_1111_0000;
-   5'b0_1001: rs2mask = 19'b000_0000_0011_1100_0000;
-   5'b0_1010: rs2mask = 19'b000_0000_0001_1110_0000;
-   5'b0_1011: rs2mask = 19'b000_0000_0111_1000_0000;
-   5'b0_1100: rs2mask = 19'b000_0000_0011_1100_0000;
-   5'b0_1101: rs2mask = 19'b000_0000_1111_0000_0000;
-   5'b0_1110: rs2mask = 19'b000_0000_0111_1000_0000;
-   5'b0_1111: rs2mask = 19'b000_0001_1110_0000_0000;
-   5'b1_0000: rs2mask = 19'b000_0000_1111_0000_0000;
-   5'b1_0001: rs2mask = 19'b000_0011_1100_0000_0000;
-   5'b1_0010: rs2mask = 19'b000_0001_1110_0000_0000;
-   5'b1_0011: rs2mask = 19'b000_0111_1000_0000_0000;
-   5'b1_0100: rs2mask = 19'b000_0011_1100_0000_0000;
-   5'b1_0101: rs2mask = 19'b000_1111_0000_0000_0000;
-   5'b1_0110: rs2mask = 19'b000_0111_1000_0000_0000;
-   5'b1_0111: rs2mask = 19'b001_1110_0000_0000_0000;
-   5'b1_1000: rs2mask = 19'b000_1111_0000_0000_0000;
-   5'b1_1001: rs2mask = 19'b011_1100_0000_0000_0000;
-   5'b1_1010: rs2mask = 19'b001_1110_0000_0000_0000;
-   5'b1_1011: rs2mask = 19'b111_1000_0000_0000_0000;
+   input       slot1;
+case ({diff, slot2, slot1})
+6'b0_00000: rs2mask = 19'b000_0000_0000_0000_1111;
+    6'b0_00001: rs2mask = 19'b000_0000_0000_0001_1110;
+   6'b0_00010: rs2mask = 19'b000_0000_0000_0011_1100;
+    6'b0_00011: rs2mask = 19'b000_0000_0000_0111_1000;
+   6'b0_00100: rs2mask = 19'b000_0000_0000_0001_1110;
+    6'b0_00101: rs2mask = 19'b000_0000_0000_0011_1100;
+   6'b0_00110: rs2mask = 19'b000_0000_0000_0111_1000;
+    6'b0_00111: rs2mask = 19'b000_0000_0000_1111_0000;
+   6'b0_01000: rs2mask = 19'b000_0000_0000_0011_1100;
+    6'b0_01001: rs2mask = 19'b000_0000_0000_0111_1000;
+   6'b0_01010: rs2mask = 19'b000_0000_0000_1111_0000;
+    6'b0_01011: rs2mask = 19'b000_0000_0001_1110_0000;
+   6'b0_01100: rs2mask = 19'b000_0000_0000_0111_1000;
+    6'b0_01101: rs2mask = 19'b000_0000_0000_1111_0000;
+   6'b0_01110: rs2mask = 19'b000_0000_0001_1110_0000;
+    6'b0_01111: rs2mask = 19'b000_0000_0011_1100_0000;
+   6'b0_10000: rs2mask = 19'b000_0000_0000_1111_0000;
+    6'b0_10001: rs2mask = 19'b000_0000_0001_1110_0000;
+   6'b0_10010: rs2mask = 19'b000_0000_0011_1100_0000;
+    6'b0_10011: rs2mask = 19'b000_0000_0111_1000_0000;
+   6'b0_10100: rs2mask = 19'b000_0000_0001_1110_0000;
+    6'b0_10101: rs2mask = 19'b000_0000_0011_1100_0000;
+   6'b0_10110: rs2mask = 19'b000_0000_0111_1000_0000;
+    6'b0_10111: rs2mask = 19'b000_0000_1111_0000_0000;
+   6'b0_11000: rs2mask = 19'b000_0000_0011_1100_0000;
+    6'b0_11001: rs2mask = 19'b000_0000_0111_1000_0000;
+   6'b0_11010: rs2mask = 19'b000_0000_1111_0000_0000;
+    6'b0_11011: rs2mask = 19'b000_0001_1110_0000_0000;
+   6'b0_11100: rs2mask = 19'b000_0000_0111_1000_0000;
+    6'b0_11101: rs2mask = 19'b000_0000_1111_0000_0000;
+   6'b0_11110: rs2mask = 19'b000_0001_1110_0000_0000;
+    6'b0_11111: rs2mask = 19'b000_0011_1100_0000_0000;
+   6'b1_00000: rs2mask = 19'b000_0000_1111_0000_0000;
+    6'b1_00001: rs2mask = 19'b000_0001_1110_0000_0000;
+   6'b1_00010: rs2mask = 19'b000_0011_1100_0000_0000;
+    6'b1_00011: rs2mask = 19'b000_0111_1000_0000_0000;
+   6'b1_00100: rs2mask = 19'b000_0001_1110_0000_0000;
+    6'b1_00101: rs2mask = 19'b000_0011_1100_0000_0000;
+   6'b1_00110: rs2mask = 19'b000_0111_1000_0000_0000;
+    6'b1_00111: rs2mask = 19'b000_1111_0000_0000_0000;
+   6'b1_01000: rs2mask = 19'b000_0011_1100_0000_0000;
+    6'b1_01001: rs2mask = 19'b000_0111_1000_0000_0000;
+   6'b1_01010: rs2mask = 19'b000_1111_0000_0000_0000;
+    6'b1_01011: rs2mask = 19'b001_1110_0000_0000_0000;
+   6'b1_01100: rs2mask = 19'b000_0111_1000_0000_0000;
+    6'b1_01101: rs2mask = 19'b000_1111_0000_0000_0000;
+   6'b1_01110: rs2mask = 19'b001_1110_0000_0000_0000;
+    6'b1_01111: rs2mask = 19'b011_1100_0000_0000_0000;
+   6'b1_10000: rs2mask = 19'b000_1111_0000_0000_0000;
+    6'b1_10001: rs2mask = 19'b001_1110_0000_0000_0000;
+   6'b1_10010: rs2mask = 19'b011_1100_0000_0000_0000;
+    6'b1_10011: rs2mask = 19'b111_1000_0000_0000_0000;
+   6'b1_10100: rs2mask = 19'b001_1110_0000_0000_0000;
+    6'b1_10101: rs2mask = 19'b011_1100_0000_0000_0000;
+   6'b1_10110: rs2mask = 19'b111_1000_0000_0000_0000;
+    6'b1_10111: rs2mask = 20'b1111_0000_0000_0000_0000;
      default: rs2mask = 19'b000_0000_1000_0000_1111;
 endcase
 endfunction
 
 always @(posedge clk) begin: blk1
-   reg [3:0] rsNdx;
-   for (rsNdx = 0; rsNdx <= 7; rsNdx = rsNdx + 1)
-      rsMask[rsNdx] <= #TCQ rs2mask(mCL[rsNdx[2:1]] - (RL - 3), rsNdx[0]);
+   reg [4:0] rsNdx;
+   for (rsNdx = 0; rsNdx <= 15; rsNdx = rsNdx + 1)
+      rsMask[rsNdx] <= #TCQ rs2mask(mCL[rsNdx[3:2]] - (RL - 3), rsNdx[1], rsNdx[0]);
 end
 
 always @(*) if (rst) begin
    rdEn_nxt = 'b0;
 end else begin
    rdEn_nxt =   (rdEn >> 4)
-                | (rdCAS ? {rsMask[{winRank, casSlot[1]}], { (RL-6 + 4*EXTRA_CMD_DELAY) {1'b0}}}
+                | (rdCAS ? {rsMask[{winRank, casSlot[1], casSlot[0]}], { (RL-6 + 4*EXTRA_CMD_DELAY) {1'b0}}}
                 : 'b0);
 end