aboutsummaryrefslogtreecommitdiffstats
path: root/projects/VU095/patches/rd_en.patch
blob: 5372b3206b076ebe9a7b84f7dfed5934ca791bd7 (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
--- VU095.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