@@ -25,6 +25,7 @@ using std::string;
25
25
" I_BUF_DS" ,
26
26
" I_DDR" ,
27
27
" I_DELAY" ,
28
+ " I_FAB" ,
28
29
" IO_BUF" ,
29
30
" IO_BUF_DS" ,
30
31
" I_SERDES" ,
@@ -40,6 +41,7 @@ using std::string;
40
41
" O_BUFT_DS" ,
41
42
" O_DDR" ,
42
43
" O_DELAY" ,
44
+ " O_FAB" ,
43
45
" O_SERDES" ,
44
46
" O_SERDES_CLK" ,
45
47
" PLL" ,
@@ -61,9 +63,40 @@ using std::string;
61
63
62
64
{ " Q" }, // DFFRE
63
65
64
- { " Z1" , " DLY_B1" , " Z2" , " DLY_B2" }, // DSP19X2
65
-
66
- { " Z" , " DLY_B" }, // DSP38
66
+ // DSP19X2
67
+ {
68
+ // Z1[18:0]:
69
+ " Z1[17]" , " Z1[16]" , " Z1[15]" , " Z1[14]" , " Z1[13]" , " Z1[12]" , " Z1[11]" , " Z1[10]" ,
70
+ " Z1[9]" , " Z1[8]" , " Z1[7]" , " Z1[6]" , " Z1[5]" , " Z1[4]" , " Z1[3]" , " Z1[2]" ,
71
+ " Z1[1]" , " Z1[0]" ,
72
+
73
+ // DLY_B1[8:0]:
74
+ " DLY_B1[7]" , " DLY_B1[6]" , " DLY_B1[5]" , " DLY_B1[4]" , " DLY_B1[3]" , " DLY_B1[2]" ,
75
+ " DLY_B1[1]" , " DLY_B1[0]"
76
+
77
+ // Z2[18:0]:
78
+ " Z2[17]" , " Z2[16]" , " Z2[15]" , " Z2[14]" , " Z2[13]" , " Z2[12]" , " Z2[11]" , " Z2[10]" ,
79
+ " Z2[9]" , " Z2[8]" , " Z2[7]" , " Z2[6]" , " Z2[5]" , " Z2[4]" , " Z2[3]" , " Z2[2]" ,
80
+ " Z2[1]" , " Z2[0]" ,
81
+
82
+ // DLY_B2[8:0]:
83
+ " DLY_B2[7]" , " DLY_B2[6]" , " DLY_B2[5]" , " DLY_B2[4]" , " DLY_B2[3]" , " DLY_B2[2]" ,
84
+ " DLY_B2[1]" , " DLY_B2[0]"
85
+ },
86
+
87
+ // DSP38
88
+ {
89
+ // Z[37:0]
90
+ " Z[36]" , " Z[35]" , " Z[34]" , " Z[33]" , " Z[32]" , " Z[31]" , " Z[30]" , " Z[29]" , " Z[28]" , " Z[27]" , " Z[26]" ,
91
+ " Z[25]" , " Z[24]" , " Z[23]" , " Z[22]" , " Z[21]" , " Z[20]" , " Z[19]" , " Z[18]" , " Z[17]" , " Z[16]" , " Z[15]" ,
92
+ " Z[14]" , " Z[13]" , " Z[12]" , " Z[11]" , " Z[10]" , " Z[9]" , " Z[8]" , " Z[7]" ,
93
+ " Z[6]" , " Z[5]" , " Z[4]" , " Z[3]" , " Z[2]" , " Z[1]" , " Z[0]" ,
94
+
95
+ // DLY_B[17:0]
96
+ " DLY_B[16]" , " DLY_B[15]" , " DLY_B[14]" , " DLY_B[13]" , " DLY_B[12]" , " DLY_B[11]" , " DLY_B[10]" ,
97
+ " DLY_B[9]" , " DLY_B[8]" , " DLY_B[7]" , " DLY_B[6]" , " DLY_B[5]" , " DLY_B[4]" , " DLY_B[3]" ,
98
+ " DLY_B[2]" , " DLY_B[1]" , " DLY_B[0]"
99
+ },
67
100
68
101
{ " O" }, // FCLK_BUF
69
102
@@ -73,19 +106,32 @@ using std::string;
73
106
" RD_DATA2" , " EMPTY2" , " FULL2" , " ALMOST_EMPTY2" , " ALMOST_FULL2" ,
74
107
" PROG_EMPTY2" , " PROG_FULL2" , " OVERFLOW2" , " UNDERFLOW2" },
75
108
76
- // FIFO36K
77
- { " RD_DATA" , " EMPTY" , " FULL" , " ALMOST_EMPTY" , " ALMOST_FULL" ,
78
- " PROG_EMPTY" , " PROG_FULL" , " OVERFLOW" , " UNDERFLOW" },
109
+ // FIFO36K
110
+ {
111
+ // RD_DATA[DATA_WRITE_WIDTH-1:0]:
112
+ " RD_DATA[35]" , " RD_DATA[34]" , " RD_DATA[33]" , " RD_DATA[32]" , " RD_DATA[31]" , " RD_DATA[30]" ,
113
+ " RD_DATA[29]" , " RD_DATA[28]" , " RD_DATA[27]" , " RD_DATA[26]" , " RD_DATA[25]" , " RD_DATA[24]" ,
114
+ " RD_DATA[23]" , " RD_DATA[22]" , " RD_DATA[21]" , " RD_DATA[20]" , " RD_DATA[19]" , " RD_DATA[18]" ,
115
+ " RD_DATA[17]" , " RD_DATA[16]" , " RD_DATA[15]" , " RD_DATA[14]" , " RD_DATA[13]" , " RD_DATA[12]" ,
116
+ " RD_DATA[11]" , " RD_DATA[10]" , " RD_DATA[9]" , " RD_DATA[8]" , " RD_DATA[7]" , " RD_DATA[6]" ,
117
+ " RD_DATA[5]" , " RD_DATA[4]" , " RD_DATA[3]" , " RD_DATA[2]" , " RD_DATA[1]" , " RD_DATA[0]" ,
118
+
119
+ " EMPTY" , " FULL" , " ALMOST_EMPTY" , " ALMOST_FULL" ,
120
+ " PROG_EMPTY" , " PROG_FULL" ,
121
+ " OVERFLOW" , " UNDERFLOW"
122
+ },
79
123
80
124
{ " O" }, // I_BUF
81
125
{ " O" }, // I_BUF_DS
82
126
83
127
{ " Q" }, // I_DDR
84
128
85
- { " O" , " DLY_TAP_VALUE" }, // I_DELAY
129
+ { " O" , " DLY_TAP_VALUE" }, // I_DELAY
130
+
131
+ { " O" }, // I_FAB
86
132
87
- { " O" }, // IO_BUF
88
- { " O" }, // IO_BUF_DS
133
+ { " O" }, // IO_BUF
134
+ { " O" }, // IO_BUF_DS
89
135
90
136
// I_SERDES
91
137
{ " CLK_OUT" , " Q" , " DATA_VALID" , " DPA_LOCK" , " DPA_ERROR" },
@@ -107,6 +153,8 @@ using std::string;
107
153
108
154
{ " O" , " DLY_TAP_VALUE" }, // O_DELAY
109
155
156
+ { " O" }, // O_FAB
157
+
110
158
// O_SERDES
111
159
{ " OE_OUT" , " Q" , " CHANNEL_BOND_SYNC_OUT" , " DLY_TAP_VALUE" },
112
160
@@ -143,28 +191,82 @@ using std::string;
143
191
144
192
// DSP19X2
145
193
{
146
- " A1[8]" , " A1[7]" , " A1[6]" , " A1[5]" , " A1[4]" , " A1[3]" , " A1[2]" , " A1[1]" , " A1[0]" ,
147
- " B1[9]" , " B1[8]" , " B1[7]" , " B1[6]" , " B1[5]" , " B1[4]" , " B1[3]" , " B1[2]" , " B1[1]" , " B1[0]" ,
148
- " CLK" , " RESET" , " LOAD_ACC" , " UNSIGNED_A" , " UNSIGNED_B" ,
149
- " SATURATE" , " ROUND" , " SUBTRACT"
194
+ // A1[9:0]:
195
+ " A1[8]" , " A1[7]" , " A1[6]" , " A1[5]" , " A1[4]" , " A1[3]" , " A1[2]" , " A1[1]" , " A1[0]" ,
196
+
197
+ // B1[8:0]:
198
+ " B1[7]" , " B1[6]" , " B1[5]" , " B1[4]" , " B1[3]" , " B1[2]" , " B1[1]" , " B1[0]" ,
199
+
200
+ // A2[9:0]:
201
+ " A2[8]" , " A2[7]" , " A2[6]" , " A2[5]" , " A2[4]" , " A2[3]" , " A2[2]" , " A2[1]" , " A2[0]" ,
202
+
203
+ // B2[8:0]:
204
+ " B2[7]" , " B2[6]" , " B2[5]" , " B2[4]" , " B2[3]" , " B2[2]" , " B2[1]" , " B2[0]" ,
205
+
206
+ " CLK" , " RESET" ,
207
+
208
+ // ACC_FIR[4:0]:
209
+ " ACC_FIR[3]" , " ACC_FIR[2]" , " ACC_FIR[1]" , " ACC_FIR[0]" ,
210
+
211
+ // FEEDBACK[2:0]:
212
+ " FEEDBACK[1]" , " FEEDBACK[0]" ,
213
+
214
+ " LOAD_ACC" ,
215
+ " UNSIGNED_A" , " UNSIGNED_B" ,
216
+ " SATURATE" ,
217
+
218
+ // SHIFT_RIGHT[4:0]:
219
+ " SHIFT_RIGHT[3]" , " SHIFT_RIGHT[2]" , " SHIFT_RIGHT[1]" , " SHIFT_RIGHT[0]" ,
220
+
221
+ " ROUND" , " SUBTRACT"
150
222
},
151
223
152
224
// DSP38
153
225
{
154
- " A[19]" , " A[18]" , " A[17]" , " A[16]" , " A[15]" , " A[14]" , " A[13]" , " A[12]" , " A[11]" , " A[10]" ,
155
- " A[9]" , " A[8]" , " A[7]" , " A[6]" , " A[5]" , " A[4]" , " A[3]" , " A[2]" , " A[1]" , " A[0]" ,
156
- " B[17]" , " B[16]" , " B[15]" , " B[14]" , " B[13]" , " B[12]" , " B[11]" , " B[10]" , " B[9]" , " B[8]" ,
157
- " B[7]" , " B[6]" , " B[5]" , " B[4]" , " B[3]" , " B[2]" , " B[1]" , " B[0]" ,
158
- " CLK" ,
226
+ // A[19:0]:
227
+ " A[18]" , " A[17]" , " A[16]" , " A[15]" , " A[14]" , " A[13]" , " A[12]" , " A[11]" , " A[10]" ,
228
+ " A[9]" , " A[8]" , " A[7]" , " A[6]" , " A[5]" , " A[4]" , " A[3]" , " A[2]" , " A[1]" , " A[0]" ,
229
+
230
+ // B[17:0]:
231
+ " B[16]" , " B[15]" , " B[14]" , " B[13]" , " B[12]" , " B[11]" , " B[10]" , " B[9]" , " B[8]" ,
232
+ " B[7]" , " B[6]" , " B[5]" , " B[4]" , " B[3]" , " B[2]" , " B[1]" , " B[0]" ,
233
+
234
+ // ACC_FIR[5:0]:
235
+ " ACC_FIR[4]" , " ACC_FIR[3]" , " ACC_FIR[2]" , " ACC_FIR[1]" , " ACC_FIR[0]" ,
236
+
237
+ " CLK" , " RESET" ,
238
+
239
+ // FEEDBACK[2:0]:
240
+ " FEEDBACK[1]" , " FEEDBACK[0]" ,
241
+
242
+ " LOAD_ACC" ,
243
+ " SATURATE" ,
244
+
245
+ // SHIFT_RIGHT[5:0]
246
+ " SHIFT_RIGHT[4]" , " SHIFT_RIGHT[3]" , " SHIFT_RIGHT[2]" , " SHIFT_RIGHT[1]" , " SHIFT_RIGHT[0]" ,
247
+
248
+ " ROUND" ,
249
+ " SUBTRACT" ,
250
+ " UNSIGNED_A" ,
251
+ " UNSIGNED_B"
159
252
},
160
253
161
254
{ " I" }, // FCLK_BUF
162
255
163
256
// FIFO18KX2
164
257
{ },
165
258
166
- // FIFO36K
167
- { },
259
+ // FIFO36K
260
+ { " RESET" , " WR_CLK" , " RD_CLK" , " WR_EN" , " RD_EN" ,
261
+
262
+ // WR_DATA[DATA_WRITE_WIDTH-1:0]:
263
+ " WR_DATA[35]" , " WR_DATA[34]" , " WR_DATA[33]" , " WR_DATA[32]" , " WR_DATA[31]" , " WR_DATA[30]" ,
264
+ " WR_DATA[29]" , " WR_DATA[28]" , " WR_DATA[27]" , " WR_DATA[26]" , " WR_DATA[25]" , " WR_DATA[24]" ,
265
+ " WR_DATA[23]" , " WR_DATA[22]" , " WR_DATA[21]" , " WR_DATA[20]" , " WR_DATA[19]" , " WR_DATA[18]" ,
266
+ " WR_DATA[17]" , " WR_DATA[16]" , " WR_DATA[15]" , " WR_DATA[14]" , " WR_DATA[13]" , " WR_DATA[12]" ,
267
+ " WR_DATA[11]" , " WR_DATA[10]" , " WR_DATA[9]" , " WR_DATA[8]" , " WR_DATA[7]" , " WR_DATA[6]" ,
268
+ " WR_DATA[5]" , " WR_DATA[4]" , " WR_DATA[3]" , " WR_DATA[2]" , " WR_DATA[1]" , " WR_DATA[0]"
269
+ },
168
270
169
271
{ " I" , " EN" }, // I_BUF
170
272
{ " I_P" , " I_N" , " EN" }, // I_BUF_DS
@@ -175,8 +277,10 @@ using std::string;
175
277
{ " I" , " DLY_LOAD" , " DLY_ADJ" ,
176
278
" DLY_INCDEC" , " CLK_IN" },
177
279
178
- { " I" }, // IO_BUF
179
- { " I" }, // IO_BUF_DS
280
+ { " I" }, // I_FAB
281
+
282
+ { " I" }, // IO_BUF
283
+ { " I" }, // IO_BUF_DS
180
284
181
285
// I_SERDES
182
286
{ " D" , " RST" , " BITSLIP_ADJ" , " EN" , " CLK_IN" ,
@@ -202,6 +306,8 @@ using std::string;
202
306
{ " I" , " DLY_LOAD" , " DLY_ADJ" ,
203
307
" DLY_INCDEC" , " CLK_IN" },
204
308
309
+ { " I" }, // O_FAB
310
+
205
311
// O_SERDES // TMP. INCOMPLETE: D is a bus
206
312
{ " D" , " RST" , " DATA_VALID" , " CLK_IN" , " OE_IN" ,
207
313
" CHANNEL_BOND_SYNC_IN" , " PLL_LOCK" , " PLL_CLK" },
@@ -257,6 +363,7 @@ using std::string;
257
363
258
364
{ " CLK_IN" }, // I_DELAY
259
365
366
+ { }, // I_FAB
260
367
{ }, // IO_BUF
261
368
{ }, // IO_BUF_DS
262
369
@@ -277,8 +384,8 @@ using std::string;
277
384
{ }, // O_BUFT_DS
278
385
279
386
{ }, // O_DDR
280
-
281
387
{ }, // O_DELAY
388
+ { }, // O_FAB
282
389
283
390
{ " CLK_IN" , " PLL_CLK" }, // O_SERDES
284
391
@@ -357,7 +464,18 @@ uint pr_num_clocks(Prim_t pt) noexcept {
357
464
return V.size ();
358
465
}
359
466
360
- void pr_get_inputs (Prim_t pt, vector<string>& INP) {
467
+ bool pr_is_core_fabric (Prim_t t) noexcept {
468
+ if (pr_is_LUT (t) or pr_is_DSP (t) or pr_is_DFF (t))
469
+ return true ;
470
+ if (t == CARRY or pr_is_FIFO (t) or pr_is_RAM (t) or
471
+ t == I_FAB or t == O_FAB) {
472
+ return true ;
473
+ }
474
+
475
+ return false ;
476
+ }
477
+
478
+ void pr_get_inputs (Prim_t pt, vector<string>& INP) noexcept {
361
479
INP.clear ();
362
480
uint i = pt;
363
481
assert (i <= Prim_MAX_ID);
@@ -366,7 +484,7 @@ void pr_get_inputs(Prim_t pt, vector<string>& INP) {
366
484
INP = _id2inputs[i];
367
485
}
368
486
369
- void pr_get_outputs (Prim_t pt, vector<string>& OUT) {
487
+ void pr_get_outputs (Prim_t pt, vector<string>& OUT) noexcept {
370
488
OUT.clear ();
371
489
uint i = pt;
372
490
assert (i <= Prim_MAX_ID);
@@ -575,13 +693,13 @@ string pr_write_yaml(Prim_t pt) noexcept {
575
693
576
694
fos << " name: " << primName << endl;
577
695
fos << " desc: " ;
578
- if (pt >= LUT1 and pt <= LUT6 )
696
+ if (pr_is_LUT (pt) )
579
697
os_printf (fos, " %u-input lookup table (LUT)" , pr_num_inputs (pt));
580
698
fos << endl;
581
699
582
- fos << " category: core_fabric" << endl;
583
- fos << endl;
700
+ os_printf (fos, " category: %s\n " , pr_is_core_fabric (pt) ? " core_fabric" : " " );
584
701
702
+ fos << endl;
585
703
fos << " ports:" << endl;
586
704
587
705
vector<string> V;
0 commit comments