diff --git a/himbaechel/uarch/ng-ultra/location_map.cc b/himbaechel/uarch/ng-ultra/location_map.cc index d3e38173..c04c8888 100644 --- a/himbaechel/uarch/ng-ultra/location_map.cc +++ b/himbaechel/uarch/ng-ultra/location_map.cc @@ -22,37 +22,37 @@ NEXTPNR_NAMESPACE_BEGIN namespace { - +/* clang-format off */ const Loc ng_ultra_place_cy_map[24] = { - {0, 1, 0}, // S1 0 -> S2 0 CY24->CY1 - {0, 0, -1}, // S1 1 -> S1 0 CY23->CY24 - {0, 0, -1}, // S1 2 -> S1 1 CY22->CY23 - {0, 0, -1}, // S1 3 -> S1 2 CY21->CY22 + { 0, 1, 0}, // S1 0 -> S2 0 CY24->CY1 + { 0, 0, -1}, // S1 1 -> S1 0 CY23->CY24 + { 0, 0, -1}, // S1 2 -> S1 1 CY22->CY23 + { 0, 0, -1}, // S1 3 -> S1 2 CY21->CY22 - {-1, 0, +3}, // S5 0 -> S1 1 CY20->CY21 - {0, 0, -1}, // S5 1 -> S5 0 CY19->CY20 - {0, 0, -1}, // S5 2 -> S5 1 CY18->CY19 - {0, 0, -1}, // S5 3 -> S5 2 CY17->CY18 + {-1, 0, +3}, // S5 0 -> S1 1 CY20->CY21 + { 0, 0, -1}, // S5 1 -> S5 0 CY19->CY20 + { 0, 0, -1}, // S5 2 -> S5 1 CY18->CY19 + { 0, 0, -1}, // S5 3 -> S5 2 CY17->CY18 - {-1, 0, +3}, // S9 0 -> S5 1 CY16->CY17 - {0, 0, -1}, // S9 1 -> S9 0 CY15->CY16 - {0, 0, -1}, // S9 2 -> S9 1 CY14->CY15 - {0, 0, -1}, // S9 3 -> S9 2 CY13->CY14 + {-1, 0, +3}, // S9 0 -> S5 1 CY16->CY17 + { 0, 0, -1}, // S9 1 -> S9 0 CY15->CY16 + { 0, 0, -1}, // S9 2 -> S9 1 CY14->CY15 + { 0, 0, -1}, // S9 3 -> S9 2 CY13->CY14 - {0, 0, +1}, // S2 0 -> S2 1 CY1->CY2 - {0, 0, +1}, // S2 1 -> S2 2 CY2->CY3 - {0, 0, +1}, // S2 2 -> S2 3 CY3->CY4 - {1, 0, -3}, // S2 3 -> S6 0 CY4->CY5 + { 0, 0, +1}, // S2 0 -> S2 1 CY1->CY2 + { 0, 0, +1}, // S2 1 -> S2 2 CY2->CY3 + { 0, 0, +1}, // S2 2 -> S2 3 CY3->CY4 + { 1, 0, -3}, // S2 3 -> S6 0 CY4->CY5 - {0, 0, +1}, // S6 0 -> S6 1 CY5->CY6 - {0, 0, +1}, // S6 1 -> S6 2 CY6->CY7 - {0, 0, +1}, // S6 2 -> S6 3 CY7->CY8 - {1, 0, -3}, // S6 3 -> S10 0 CY8->CY9 + { 0, 0, +1}, // S6 0 -> S6 1 CY5->CY6 + { 0, 0, +1}, // S6 1 -> S6 2 CY6->CY7 + { 0, 0, +1}, // S6 2 -> S6 3 CY7->CY8 + { 1, 0, -3}, // S6 3 -> S10 0 CY8->CY9 - {0, 0, +1}, // S10 0 -> S10 1 CY9->CY10 - {0, 0, +1}, // S10 1 -> S10 2 CY10->CY11 - {0, 0, +1}, // S10 2 -> S10 3 CY11->CY12 - {0, -1, 0}, // S10 3 -> S9 3 CY12->CY13 + { 0, 0, +1}, // S10 0 -> S10 1 CY9->CY10 + { 0, 0, +1}, // S10 1 -> S10 2 CY10->CY11 + { 0, 0, +1}, // S10 2 -> S10 3 CY11->CY12 + { 0, -1, 0}, // S10 3 -> S9 3 CY12->CY13 }; const Loc ng_ultra_place_xrf[] = { @@ -134,8 +134,8 @@ const Loc ng_ultra_place_cdc1[] = { {+1, 0, 26}, // BI5 {+1, 0, 27}, // BI6 - {0, 0, 22}, // ASRSTI - {0, 0, 30}, // ADRSTI + { 0, 0, 22}, // ASRSTI + { 0, 0, 30}, // ADRSTI {+1, 0, 24}, // BSRSTI {+1, 0, 8}, // BDRSTI }; @@ -155,50 +155,50 @@ const Loc ng_ultra_place_cdc2[] = { {-1, 0, 29}, // BI5 {-1, 0, 30}, // BI6 - {0, 0, 22}, // ASRSTI - {0, 0, 30}, // ADRSTI + { 0, 0, 22}, // ASRSTI + { 0, 0, 30}, // ADRSTI {-1, 0, 23}, // BSRSTI {-1, 0, 7}, // BDRSTI }; const Loc ng_ultra_place_xcdc[] = { - {0, 0, 1}, // AI1 - {0, 0, 2}, // AI2 - {0, 0, 9}, // AI3 - {0, 0, 17}, // AI4 - {0, 0, 18}, // AI5 - {0, 0, 25}, // AI6 + { 0, 0, 1}, // AI1 + { 0, 0, 2}, // AI2 + { 0, 0, 9}, // AI3 + { 0, 0, 17}, // AI4 + { 0, 0, 18}, // AI5 + { 0, 0, 25}, // AI6 - {0, 0, 4}, // BI1 - {0, 0, 5}, // BI2 - {0, 0, 12}, // BI3 - {0, 0, 20}, // BI4 - {0, 0, 21}, // BI5 - {0, 0, 28}, // BI6 + { 0, 0, 4}, // BI1 + { 0, 0, 5}, // BI2 + { 0, 0, 12}, // BI3 + { 0, 0, 20}, // BI4 + { 0, 0, 21}, // BI5 + { 0, 0, 28}, // BI6 {-1, 0, 22}, // ASRSTI {-1, 0, 30}, // ADRSTI {+1, 0, 22}, // BSRSTI {+1, 0, 30}, // BDRSTI - {0, 0, 3}, // CI1 - {0, 0, 10}, // CI2 - {0, 0, 11}, // CI3 - {0, 0, 19}, // CI4 - {0, 0, 26}, // CI5 - {0, 0, 27}, // CI6 + { 0, 0, 3}, // CI1 + { 0, 0, 10}, // CI2 + { 0, 0, 11}, // CI3 + { 0, 0, 19}, // CI4 + { 0, 0, 26}, // CI5 + { 0, 0, 27}, // CI6 - {0, 0, 6}, // DI1 - {0, 0, 13}, // DI2 - {0, 0, 14}, // DI3 - {0, 0, 22}, // DI4 - {0, 0, 29}, // DI5 - {0, 0, 30}, // DI6 + { 0, 0, 6}, // DI1 + { 0, 0, 13}, // DI2 + { 0, 0, 14}, // DI3 + { 0, 0, 22}, // DI4 + { 0, 0, 29}, // DI5 + { 0, 0, 30}, // DI6 - {0, 0, 24}, // CSRSTI - {0, 0, 8}, // CDRSTI - {0, 0, 23}, // DSRSTI - {0, 0, 7}, // DDRSTI + { 0, 0, 24}, // CSRSTI + { 0, 0, 8}, // CDRSTI + { 0, 0, 23}, // DSRSTI + { 0, 0, 7}, // DDRSTI }; const Loc ng_ultra_place_fifo1[] = { @@ -221,52 +221,52 @@ const Loc ng_ultra_place_fifo1[] = { {-1, 0, 26}, // I/O17 {-1, 0, 29}, // I/O18 - {0, 0, 0}, // I/O19 - {0, 0, 0}, // I/O20 - {0, 0, 0}, // I/O21 - {0, 0, 0}, // I/O22 - {0, 0, 0}, // I/O23 - {0, 0, 0}, // I/O24 - {0, 0, 0}, // I/O25 - {0, 0, 0}, // I/O26 - {0, 0, 0}, // I/O27 - {0, 0, 0}, // I/O28 - {0, 0, 0}, // I/O29 - {0, 0, 0}, // I/O30 - {0, 0, 0}, // I/O31 - {0, 0, 0}, // I/O32 - {0, 0, 0}, // I/O33 - {0, 0, 0}, // I/O34 - {0, 0, 0}, // I/O35 - {0, 0, 0}, // I/O36 + { 0, 0, 0}, // I/O19 + { 0, 0, 0}, // I/O20 + { 0, 0, 0}, // I/O21 + { 0, 0, 0}, // I/O22 + { 0, 0, 0}, // I/O23 + { 0, 0, 0}, // I/O24 + { 0, 0, 0}, // I/O25 + { 0, 0, 0}, // I/O26 + { 0, 0, 0}, // I/O27 + { 0, 0, 0}, // I/O28 + { 0, 0, 0}, // I/O29 + { 0, 0, 0}, // I/O30 + { 0, 0, 0}, // I/O31 + { 0, 0, 0}, // I/O32 + { 0, 0, 0}, // I/O33 + { 0, 0, 0}, // I/O34 + { 0, 0, 0}, // I/O35 + { 0, 0, 0}, // I/O36 - {0, 0, 3}, // RAI1/RAO1 - {0, 0, 10}, // RAI2/RAO2 - {0, 0, 11}, // RAI3/RAO3 - {0, 0, 19}, // RAI4/RAO4 - {0, 0, 26}, // RAI5/RAO5 - {0, 0, 27}, // RAI6/RAO6 - {0, 0, 0}, // RAI7/RAO7 + { 0, 0, 3}, // RAI1/RAO1 + { 0, 0, 10}, // RAI2/RAO2 + { 0, 0, 11}, // RAI3/RAO3 + { 0, 0, 19}, // RAI4/RAO4 + { 0, 0, 26}, // RAI5/RAO5 + { 0, 0, 27}, // RAI6/RAO6 + { 0, 0, 0}, // RAI7/RAO7 - {0, 0, 1}, // WAI1/WAO1 - {0, 0, 2}, // WAI2/WAO2 - {0, 0, 9}, // WAI3/WAO3 - {0, 0, 17}, // WAI4/WAO4 - {0, 0, 18}, // WAI5/WAO5 - {0, 0, 25}, // WAI6/WAO6 - {0, 0, 0}, // WAI7/WAO7 + { 0, 0, 1}, // WAI1/WAO1 + { 0, 0, 2}, // WAI2/WAO2 + { 0, 0, 9}, // WAI3/WAO3 + { 0, 0, 17}, // WAI4/WAO4 + { 0, 0, 18}, // WAI5/WAO5 + { 0, 0, 25}, // WAI6/WAO6 + { 0, 0, 0}, // WAI7/WAO7 - {-1, 0, 0}, // WE - {-1, 0, 8}, // WEA + {-1, 0, 0}, // WE + {-1, 0, 8}, // WEA {-1, 0, 22}, // WRSTI1/WRSTO {-1, 0, 30}, // RRSTI1/RRSTO - {0, 0, 8}, // WRSTI2 - {0, 0, 24}, // RRSTI2 - {0, 0, 0}, // WRSTI3/WRSTO - {0, 0, 0}, // RRSTI3/RRSTO - {0, 0, 0}, // WRSTI4 - {0, 0, 0}, // RRSTI4 + { 0, 0, 8}, // WRSTI2 + { 0, 0, 24}, // RRSTI2 + { 0, 0, 0}, // WRSTI3/WRSTO + { 0, 0, 0}, // RRSTI3/RRSTO + { 0, 0, 0}, // WRSTI4 + { 0, 0, 0}, // RRSTI4 {-1, 0, 3}, // WEQ {-1, 0, 4}, // REQ @@ -276,8 +276,8 @@ const Loc ng_ultra_place_fifo1[] = { // {-1, 0, 20}, REQ // {-1, 0, 27}, WEQ // {-1, 0, 28}, REQ - {0, 0, 0}, // WEQ2 - {0, 0, 0}, // REQ2 + { 0, 0, 0}, // WEQ2 + { 0, 0, 0}, // REQ2 }; const Loc ng_ultra_place_fifo2[] = { @@ -300,52 +300,52 @@ const Loc ng_ultra_place_fifo2[] = { {+1, 0, 26}, // I/O17 {+1, 0, 29}, // I/O18 - {0, 0, 0}, // I/O19 - {0, 0, 0}, // I/O20 - {0, 0, 0}, // I/O21 - {0, 0, 0}, // I/O22 - {0, 0, 0}, // I/O23 - {0, 0, 0}, // I/O24 - {0, 0, 0}, // I/O25 - {0, 0, 0}, // I/O26 - {0, 0, 0}, // I/O27 - {0, 0, 0}, // I/O28 - {0, 0, 0}, // I/O29 - {0, 0, 0}, // I/O30 - {0, 0, 0}, // I/O31 - {0, 0, 0}, // I/O32 - {0, 0, 0}, // I/O33 - {0, 0, 0}, // I/O34 - {0, 0, 0}, // I/O35 - {0, 0, 0}, // I/O36 + { 0, 0, 0}, // I/O19 + { 0, 0, 0}, // I/O20 + { 0, 0, 0}, // I/O21 + { 0, 0, 0}, // I/O22 + { 0, 0, 0}, // I/O23 + { 0, 0, 0}, // I/O24 + { 0, 0, 0}, // I/O25 + { 0, 0, 0}, // I/O26 + { 0, 0, 0}, // I/O27 + { 0, 0, 0}, // I/O28 + { 0, 0, 0}, // I/O29 + { 0, 0, 0}, // I/O30 + { 0, 0, 0}, // I/O31 + { 0, 0, 0}, // I/O32 + { 0, 0, 0}, // I/O33 + { 0, 0, 0}, // I/O34 + { 0, 0, 0}, // I/O35 + { 0, 0, 0}, // I/O36 - {0, 0, 6}, // RAI1/RAO1 - {0, 0, 13}, // RAI2/RAO2 - {0, 0, 14}, // RAI3/RAO3 - {0, 0, 22}, // RAI4/RAO4 - {0, 0, 29}, // RAI5/RAO5 - {0, 0, 30}, // RAI6/RAO6 - {0, 0, 0}, // RAI7/RAO7 + { 0, 0, 6}, // RAI1/RAO1 + { 0, 0, 13}, // RAI2/RAO2 + { 0, 0, 14}, // RAI3/RAO3 + { 0, 0, 22}, // RAI4/RAO4 + { 0, 0, 29}, // RAI5/RAO5 + { 0, 0, 30}, // RAI6/RAO6 + { 0, 0, 0}, // RAI7/RAO7 - {0, 0, 4}, // WAI1/WAO1 - {0, 0, 5}, // WAI2/WAO2 - {0, 0, 12}, // WAI3/WAO3 - {0, 0, 20}, // WAI4/WAO4 - {0, 0, 21}, // WAI5/WAO5 - {0, 0, 28}, // WAI6/WAO6 - {0, 0, 0}, // WAI7/WAO7 + { 0, 0, 4}, // WAI1/WAO1 + { 0, 0, 5}, // WAI2/WAO2 + { 0, 0, 12}, // WAI3/WAO3 + { 0, 0, 20}, // WAI4/WAO4 + { 0, 0, 21}, // WAI5/WAO5 + { 0, 0, 28}, // WAI6/WAO6 + { 0, 0, 0}, // WAI7/WAO7 - {+1, 0, 0}, // WE - {+1, 0, 8}, // WEA + {+1, 0, 0}, // WE + {+1, 0, 8}, // WEA {+1, 0, 22}, // WRSTI1/WRSTO {+1, 0, 30}, // RRSTI1/RRSTO - {0, 0, 7}, // WRSTI2 - {0, 0, 23}, // RRSTI2 - {0, 0, 0}, // WRSTI3/WRSTO - {0, 0, 0}, // RRSTI3/RRSTO - {0, 0, 0}, // WRSTI4 - {0, 0, 0}, // RRSTI4 + { 0, 0, 7}, // WRSTI2 + { 0, 0, 23}, // RRSTI2 + { 0, 0, 0}, // WRSTI3/WRSTO + { 0, 0, 0}, // RRSTI3/RRSTO + { 0, 0, 0}, // WRSTI4 + { 0, 0, 0}, // RRSTI4 {+1, 0, 3}, // WEQ {+1, 0, 4}, // REQ @@ -355,8 +355,8 @@ const Loc ng_ultra_place_fifo2[] = { // {+1, 0, 20}, REQ // {+1, 0, 27}, WEQ // {+1, 0, 28}, REQ - {0, 0, 0}, // WEQ2 - {0, 0, 0}, // REQ2 + { 0, 0, 0}, // WEQ2 + { 0, 0, 0}, // REQ2 }; const Loc ng_ultra_place_xfifo[] = { @@ -397,33 +397,33 @@ const Loc ng_ultra_place_xfifo[] = { {+1, 0, 26}, // I/O35 {+1, 0, 29}, // I/O36 - {0, 0, 3}, // RAI1/RAO1 - {0, 0, 10}, // RAI2/RAO2 - {0, 0, 11}, // RAI3/RAO3 - {0, 0, 19}, // RAI4/RAO4 - {0, 0, 26}, // RAI5/RAO5 - {0, 0, 27}, // RAI6/RAO6 - {0, 0, 6}, // RAI7/RAO7 + { 0, 0, 3}, // RAI1/RAO1 + { 0, 0, 10}, // RAI2/RAO2 + { 0, 0, 11}, // RAI3/RAO3 + { 0, 0, 19}, // RAI4/RAO4 + { 0, 0, 26}, // RAI5/RAO5 + { 0, 0, 27}, // RAI6/RAO6 + { 0, 0, 6}, // RAI7/RAO7 - {0, 0, 1}, // WAI1/WAO1 - {0, 0, 2}, // WAI2/WAO2 - {0, 0, 9}, // WAI3/WAO3 - {0, 0, 17}, // WAI4/WAO4 - {0, 0, 18}, // WAI5/WAO5 - {0, 0, 25}, // WAI6/WAO6 - {0, 0, 4}, // WAI7/WAO7 + { 0, 0, 1}, // WAI1/WAO1 + { 0, 0, 2}, // WAI2/WAO2 + { 0, 0, 9}, // WAI3/WAO3 + { 0, 0, 17}, // WAI4/WAO4 + { 0, 0, 18}, // WAI5/WAO5 + { 0, 0, 25}, // WAI6/WAO6 + { 0, 0, 4}, // WAI7/WAO7 - {-1, 0, 0}, // WE - {-1, 0, 8}, // WEA + {-1, 0, 0}, // WE + {-1, 0, 8}, // WEA {-1, 0, 22}, // WRSTI1/WRSTO {-1, 0, 30}, // RRSTI1/RRSTO - {0, 0, 8}, // WRSTI2 - {0, 0, 24}, // RRSTI2 + { 0, 0, 8}, // WRSTI2 + { 0, 0, 24}, // RRSTI2 {+1, 0, 22}, // WRSTI3/WRSTO {+1, 0, 30}, // RRSTI3/RRSTO - {0, 0, 7}, // WRSTI4 - {0, 0, 23}, // RRSTI4 + { 0, 0, 7}, // WRSTI4 + { 0, 0, 23}, // RRSTI4 {-1, 0, 3}, // WEQ1 {-1, 0, 4}, // REQ1 @@ -435,13 +435,14 @@ const Loc ng_ultra_place_xfifo[] = { // {-1, 0, 28}, REQ1 {+1, 0, 3}, // WEQ2 {+1, 0, 4}, // REQ2 - // {+1, 0, 11}, WEQ2 - // {+1, 0, 12}, REQ2 - // {+1, 0, 19}, WEQ2 - // {+1, 0, 20}, REQ2 - // {+1, 0, 27}, WEQ2 - // {+1, 0, 28}, REQ2 + // {+1, 0, 11}, WEQ2 + // {+1, 0, 12}, REQ2 + // {+1, 0, 19}, WEQ2 + // {+1, 0, 20}, REQ2 + // {+1, 0, 27}, WEQ2 + // {+1, 0, 28}, REQ2 }; +/* clang-format on */ }; // namespace diff --git a/himbaechel/uarch/ng-ultra/ng_ultra.h b/himbaechel/uarch/ng-ultra/ng_ultra.h index a5b6511d..0ced37b2 100644 --- a/himbaechel/uarch/ng-ultra/ng_ultra.h +++ b/himbaechel/uarch/ng-ultra/ng_ultra.h @@ -103,8 +103,10 @@ struct NgUltraImpl : HimbaechelAPI dict unused_pll; dict dsp_cascade; + /* clang-format off */ TESTABLE_PRIVATE: void write_bitstream_json(const std::string &filename); + /* clang-format on */ void parse_csv(const std::string &filename); void remove_constants(); bool update_bff_to_csc(CellInfo *cell, BelId bel, PipId dst_pip); diff --git a/himbaechel/uarch/ng-ultra/pack.h b/himbaechel/uarch/ng-ultra/pack.h index 07253688..09a99fa2 100644 --- a/himbaechel/uarch/ng-ultra/pack.h +++ b/himbaechel/uarch/ng-ultra/pack.h @@ -75,8 +75,10 @@ struct NgUltraPacker void insert_bypass_gck(); void insert_csc(); + /* clang-format off */ TESTABLE_PRIVATE: void set_lut_input_if_constant(CellInfo *cell, IdString input); + /* clang-format on */ void lut_to_fe(CellInfo *lut, CellInfo *fe, bool no_dff, Property lut_table); void dff_to_fe(CellInfo *dff, CellInfo *fe, bool pass_thru_lut); void dff_rewrite(CellInfo *cell);