249 static constexpr const char *
const name =
"tofino";
250 static constexpr target_t tag = TOFINO;
251 static constexpr target_t register_set = TOFINO;
252 typedef Target::Tofino target_type;
253 typedef Target::Tofino register_type;
256 typedef ::Tofino::memories_top _mem_top;
257 typedef ::Tofino::memories_pipe _mem_pipe;
258 typedef ::Tofino::regs_top _regs_top;
259 typedef ::Tofino::regs_pipe _regs_pipe;
261 ::Tofino::memories_top mem_top;
262 ::Tofino::memories_pipe mem_pipe;
263 ::Tofino::regs_top reg_top;
264 ::Tofino::regs_pipe reg_pipe;
267 std::map<unsigned, ::Tofino::memories_all_parser_ *> parser_memory[2];
268 std::map<unsigned, ::Tofino::regs_all_parser_ingress *> parser_ingress;
269 std::map<unsigned, ::Tofino::regs_all_parser_egress *> parser_egress;
270 ::Tofino::regs_all_parse_merge parser_merge;
273 typedef ::Tofino::memories_all_parser_ _memory;
274 typedef ::Tofino::regs_all_parser_ingress _ingress;
275 typedef ::Tofino::regs_all_parser_egress _egress;
276 typedef ::Tofino::regs_all_parse_merge _merge;
278 ::Tofino::memories_all_parser_ memory[2];
279 ::Tofino::regs_all_parser_ingress ingress;
280 ::Tofino::regs_all_parser_egress egress;
281 ::Tofino::regs_all_parse_merge merge;
284 typedef ::Tofino::regs_match_action_stage_ mau_regs;
286 typedef ::Tofino::regs_all_deparser_input_phase _input;
287 typedef ::Tofino::regs_all_deparser_header_phase _header;
289 ::Tofino::regs_all_deparser_input_phase input;
290 ::Tofino::regs_all_deparser_header_phase header;
293 ARAM_UNITS_PER_STAGE = 0,
294 PARSER_CHECKSUM_UNITS = 2,
295 PARSER_EXTRACT_BYTES =
false,
296 PARSER_DEPTH_MAX_BYTES_INGRESS = (((1 << 10) - 1) * 16),
297 PARSER_DEPTH_MAX_BYTES_EGRESS = (((1 << 10) - 1) * 16),
298 PARSER_DEPTH_MAX_BYTES_MULTITHREADED_EGRESS = 160,
299 PARSER_DEPTH_MIN_BYTES_INGRESS = 0,
300 PARSER_DEPTH_MIN_BYTES_EGRESS = 65,
301 MATCH_BYTE_16BIT_PAIRS =
true,
302 MATCH_REQUIRES_PHYSID =
false,
303 MAX_IMMED_ACTION_DATA = 32,
304 MAX_OVERHEAD_OFFSET = 64,
305 MAX_OVERHEAD_OFFSET_NEXT = 40,
306 NUM_MAU_STAGES_PRIVATE = 12,
307 NUM_EGRESS_STAGES_PRIVATE = NUM_MAU_STAGES_PRIVATE,
308 ACTION_INSTRUCTION_MAP_WIDTH = 7,
309 DEPARSER_CHECKSUM_UNITS = 6,
310 DEPARSER_CONSTANTS = 0,
311 DEPARSER_MAX_POV_BYTES = 32,
312 DEPARSER_MAX_POV_PER_USE = 1,
313 DEPARSER_MAX_FD_ENTRIES = 192,
314 DP_UNITS_PER_STAGE = 0,
316 DYNAMIC_CONFIG_INPUT_BITS = 0,
317 EGRESS_SEPARATE =
false,
319 EXACT_HASH_GROUPS = 8,
320 EXACT_HASH_TABLES = 16,
321 EXTEND_ALU_8_SLOTS = 0,
322 EXTEND_ALU_16_SLOTS = 0,
323 EXTEND_ALU_32_SLOTS = 0,
324 GATEWAY_INHIBIT_INDEX =
false,
325 GATEWAY_MATCH_BITS = 56,
326 GATEWAY_NEEDS_SEARCH_BUS =
true,
327 GATEWAY_PAYLOAD_GROUPS = 1,
329 GATEWAY_SINGLE_XBAR_GROUP =
true,
330 SUPPORT_TRUE_EOP = 0,
333 IXBAR_HASH_GROUPS = 8,
334 IXBAR_HASH_INDEX_MAX = 40,
335 IXBAR_HASH_INDEX_STRIDE = 10,
336 LOCAL_TIND_UNITS = 0,
337 LONG_BRANCH_TAGS = 0,
339 MAU_BASE_PREDICATION_DELAY = 11,
340 MAU_ERROR_DELAY_ADJUST = 2,
341 METER_ALU_GROUP_DATA_DELAY = 13,
343 MINIMUM_REQUIRED_EGRESS_PIPELINE_LATENCY = 160,
344 NEXT_TABLE_EXEC_COMBINED =
false,
345 NEXT_TABLE_SUCCESSOR_TABLE_DEPTH = 8,
346 PHASE0_FORMAT_WIDTH = 64,
347 REQUIRE_TCAM_ID =
false,
348 SRAM_EGRESS_ROWS = 8,
349 SRAM_GLOBAL_ACCESS =
false,
350 SRAM_HBUS_SECTIONS_PER_STAGE = 0,
351 SRAM_HBUSSES_PER_ROW = 0,
352 SRAM_INGRESS_ROWS = 8,
353 SRAM_LAMBS_PER_STAGE = 0,
354 SRAM_LOGICAL_UNITS_PER_ROW = 6,
355 SRAM_REMOVED_COLUMNS = 2,
356 SRAM_STRIDE_COLUMN = 1,
357 SRAM_STRIDE_ROW = 12,
358 SRAM_STRIDE_STAGE = 0,
359 SRAM_UNITS_PER_ROW = 12,
360 STATEFUL_CMP_UNITS = 2,
361 STATEFUL_CMP_ADDR_WIDTH = 2,
362 STATEFUL_CMP_CONST_WIDTH = 4,
363 STATEFUL_CMP_CONST_MASK = 0xf,
364 STATEFUL_CMP_CONST_MIN = -8,
365 STATEFUL_CMP_CONST_MAX = 7,
366 STATEFUL_TMATCH_UNITS = 0,
367 STATEFUL_OUTPUT_UNITS = 1,
368 STATEFUL_PRED_MASK = (1U << (1 << STATEFUL_CMP_UNITS)) - 1,
369 STATEFUL_REGFILE_ROWS = 4,
370 STATEFUL_REGFILE_CONST_WIDTH = 32,
371 SUPPORT_ALWAYS_RUN = 0,
373 SUPPORT_CONCURRENT_STAGE_DEP = 1,
374 SUPPORT_OVERFLOW_BUS = 1,
375 SUPPORT_SALU_FAST_CLEAR = 0,
376 STATEFUL_ALU_ADDR_WIDTH = 2,
377 STATEFUL_ALU_CONST_WIDTH = 4,
378 STATEFUL_ALU_CONST_MASK = 0xf,
379 STATEFUL_ALU_CONST_MIN = -8,
380 STATEFUL_ALU_CONST_MAX = 7,
381 MINIMUM_INSTR_CONSTANT = -8,
384 OUTPUT_STAGE_EXTENSION_PRIVATE = 0,
385 SYNTH2PORT_NEED_MAPRAMS =
true,
386 TCAM_EXTRA_NIBBLE =
true,
387 TCAM_GLOBAL_ACCESS =
false,
388 TCAM_MATCH_BUSSES = 2,
389 TCAM_MEMORY_FULL_WIDTH = 47,
391 TCAM_UNITS_PER_ROW = 2,
392 TCAM_XBAR_GROUPS = 12,
393 TABLES_REQUIRE_ROW = 1,
395 static int encodeConst(
int src) {
return (src >> 10 << 15) | (0x8 << 10) | (src & 0x3ff); }
396 TARGET_SPECIFIC_CLASSES
397 REGISTER_SET_SPECIFIC_CLASSES
398 TARGET_CLASS_SPECIFIC_CLASSES
424 static constexpr const char *
const name =
"tofino2";
425 static constexpr target_t tag = JBAY;
426 static constexpr target_t register_set = JBAY;
427 typedef Target::JBay target_type;
428 typedef Target::JBay register_type;
431 typedef ::JBay::memories_top _mem_top;
432 typedef ::JBay::memories_pipe _mem_pipe;
433 typedef ::JBay::regs_top _regs_top;
434 typedef ::JBay::regs_pipe _regs_pipe;
436 ::JBay::memories_top mem_top;
437 ::JBay::memories_pipe mem_pipe;
438 ::JBay::regs_top reg_top;
439 ::JBay::regs_pipe reg_pipe;
442 std::map<unsigned, ::JBay::memories_parser_ *> parser_memory[2];
443 std::map<unsigned, ::JBay::regs_parser_ingress *> parser_ingress;
444 std::map<unsigned, ::JBay::regs_parser_egress *> parser_egress;
445 std::map<unsigned, ::JBay::regs_parser_main_ *> parser_main[2];
446 ::JBay::regs_parse_merge parser_merge;
449 typedef ::JBay::memories_parser_ _memory;
450 typedef ::JBay::regs_parser_ingress _ingress;
451 typedef ::JBay::regs_parser_egress _egress;
452 typedef ::JBay::regs_parser_main_ _main;
453 typedef ::JBay::regs_parse_merge _merge;
455 ::JBay::memories_parser_ memory[2];
456 ::JBay::regs_parser_ingress ingress;
457 ::JBay::regs_parser_egress egress;
458 ::JBay::regs_parser_main_ main[2];
459 ::JBay::regs_parse_merge merge;
462 typedef ::JBay::regs_match_action_stage_ mau_regs;
463 typedef ::JBay::regs_deparser deparser_regs;
465 ARAM_UNITS_PER_STAGE = 0,
466 PARSER_CHECKSUM_UNITS = 5,
467 PARSER_EXTRACT_BYTES =
true,
468 PARSER_DEPTH_MAX_BYTES_INGRESS = (((1 << 10) - 1) * 16),
469 PARSER_DEPTH_MAX_BYTES_EGRESS = (32 * 16),
470 PARSER_DEPTH_MAX_BYTES_MULTITHREADED_EGRESS = (32 * 16),
471 PARSER_DEPTH_MIN_BYTES_INGRESS = 0,
472 PARSER_DEPTH_MIN_BYTES_EGRESS = 0,
473 MATCH_BYTE_16BIT_PAIRS =
false,
474 MATCH_REQUIRES_PHYSID =
false,
475 MAX_IMMED_ACTION_DATA = 32,
476 MAX_OVERHEAD_OFFSET = 64,
477 MAX_OVERHEAD_OFFSET_NEXT = 40,
478#ifdef EMU_OVERRIDE_STAGE_COUNT
479 NUM_MAU_STAGES_PRIVATE = EMU_OVERRIDE_STAGE_COUNT,
480 OUTPUT_STAGE_EXTENSION_PRIVATE = 1,
482 NUM_MAU_STAGES_PRIVATE = 20,
483 OUTPUT_STAGE_EXTENSION_PRIVATE = 0,
485 NUM_EGRESS_STAGES_PRIVATE = NUM_MAU_STAGES_PRIVATE,
486 ACTION_INSTRUCTION_MAP_WIDTH = 8,
487 DEPARSER_CHECKSUM_UNITS = 8,
488 DEPARSER_CONSTANTS = 8,
489 DEPARSER_MAX_POV_BYTES = 16,
490 DEPARSER_MAX_POV_PER_USE = 1,
491 DEPARSER_CHUNKS_PER_GROUP = 8,
492 DEPARSER_CHUNK_SIZE = 8,
493 DEPARSER_CHUNK_GROUPS = 16,
494 DEPARSER_CLOTS_PER_GROUP = 4,
495 DEPARSER_TOTAL_CHUNKS = DEPARSER_CHUNK_GROUPS * DEPARSER_CHUNKS_PER_GROUP,
496 DEPARSER_MAX_FD_ENTRIES = DEPARSER_TOTAL_CHUNKS,
497 DP_UNITS_PER_STAGE = 0,
499 DYNAMIC_CONFIG_INPUT_BITS = 0,
500 EGRESS_SEPARATE =
false,
502 EXACT_HASH_GROUPS = 8,
503 EXACT_HASH_TABLES = 16,
504 EXTEND_ALU_8_SLOTS = 0,
505 EXTEND_ALU_16_SLOTS = 0,
506 EXTEND_ALU_32_SLOTS = 0,
507 GATEWAY_INHIBIT_INDEX =
false,
508 GATEWAY_MATCH_BITS = 56,
509 GATEWAY_NEEDS_SEARCH_BUS =
true,
510 GATEWAY_PAYLOAD_GROUPS = 5,
512 GATEWAY_SINGLE_XBAR_GROUP =
true,
513 SUPPORT_TRUE_EOP = 1,
516 IXBAR_HASH_GROUPS = 8,
517 IXBAR_HASH_INDEX_MAX = 40,
518 IXBAR_HASH_INDEX_STRIDE = 10,
519 LOCAL_TIND_UNITS = 0,
520 LONG_BRANCH_TAGS = 8,
522 MAU_BASE_PREDICATION_DELAY = 13,
523 MAU_ERROR_DELAY_ADJUST = 3,
524 METER_ALU_GROUP_DATA_DELAY = 15,
525 NEXT_TABLE_EXEC_COMBINED =
true,
526 NEXT_TABLE_SUCCESSOR_TABLE_DEPTH = 8,
527 PHASE0_FORMAT_WIDTH = 128,
528 REQUIRE_TCAM_ID =
false,
529 SRAM_EGRESS_ROWS = 8,
530 SRAM_GLOBAL_ACCESS =
false,
531 SRAM_HBUS_SECTIONS_PER_STAGE = 0,
532 SRAM_HBUSSES_PER_ROW = 0,
533 SRAM_INGRESS_ROWS = 8,
534 SRAM_LAMBS_PER_STAGE = 0,
535 SRAM_LOGICAL_UNITS_PER_ROW = 6,
536 SRAM_REMOVED_COLUMNS = 2,
537 SRAM_STRIDE_COLUMN = 1,
538 SRAM_STRIDE_ROW = 12,
539 SRAM_STRIDE_STAGE = 0,
540 SRAM_UNITS_PER_ROW = 12,
541 STATEFUL_CMP_UNITS = 4,
542 STATEFUL_CMP_ADDR_WIDTH = 2,
543 STATEFUL_CMP_CONST_WIDTH = 6,
544 STATEFUL_CMP_CONST_MASK = 0x3f,
545 STATEFUL_CMP_CONST_MIN = -32,
546 STATEFUL_CMP_CONST_MAX = 31,
547 STATEFUL_TMATCH_UNITS = 2,
548 STATEFUL_OUTPUT_UNITS = 4,
549 STATEFUL_PRED_MASK = (1U << (1 << STATEFUL_CMP_UNITS)) - 1,
550 STATEFUL_REGFILE_ROWS = 4,
551 STATEFUL_REGFILE_CONST_WIDTH = 34,
552 SUPPORT_ALWAYS_RUN = 1,
554 SUPPORT_CONCURRENT_STAGE_DEP = 0,
555 SUPPORT_OVERFLOW_BUS = 0,
556 SUPPORT_SALU_FAST_CLEAR = 1,
557 STATEFUL_ALU_ADDR_WIDTH = 2,
558 STATEFUL_ALU_CONST_WIDTH = 4,
559 STATEFUL_ALU_CONST_MASK = 0xf,
560 STATEFUL_ALU_CONST_MIN = -8,
561 STATEFUL_ALU_CONST_MAX = 7,
562 MINIMUM_INSTR_CONSTANT = -4,
565 TABLES_REQUIRE_ROW = 1,
566 SYNTH2PORT_NEED_MAPRAMS =
true,
567 TCAM_EXTRA_NIBBLE =
true,
568 TCAM_GLOBAL_ACCESS =
false,
569 TCAM_MATCH_BUSSES = 2,
570 TCAM_MEMORY_FULL_WIDTH = 47,
572 TCAM_UNITS_PER_ROW = 2,
573 TCAM_XBAR_GROUPS = 12,
575 static int encodeConst(
int src) {
return (src >> 11 << 16) | (0x8 << 11) | (src & 0x7ff); }
576 TARGET_SPECIFIC_CLASSES
577 REGISTER_SET_SPECIFIC_CLASSES