wolfpine 2.1__tar.gz → 2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {wolfpine-2.1 → wolfpine-2.2}/PKG-INFO +68 -16
- {wolfpine-2.1 → wolfpine-2.2}/README.md +67 -15
- wolfpine-2.2/framework/arch/__init__.py +14 -0
- wolfpine-2.2/framework/arch/blackhole.py +172 -0
- wolfpine-2.2/framework/arch/profile.py +296 -0
- wolfpine-2.2/framework/arch/wormhole.py +82 -0
- {wolfpine-2.1 → wolfpine-2.2}/framework/behaviour.py +5 -1
- wolfpine-2.2/framework/bridge/__init__.py +71 -0
- wolfpine-2.2/framework/bridge/_flatbuf/DEVICE_COMMAND.py +12 -0
- wolfpine-2.2/framework/bridge/_flatbuf/DeviceRequestResponse.py +121 -0
- wolfpine-2.2/framework/bridge/_flatbuf/__init__.py +0 -0
- wolfpine-2.2/framework/bridge/_flatbuf/tt_vcs_core.py +37 -0
- wolfpine-2.2/framework/bridge/convention_guard_test.py +148 -0
- wolfpine-2.2/framework/bridge/cores.py +387 -0
- wolfpine-2.2/framework/bridge/cores_test.py +181 -0
- wolfpine-2.2/framework/bridge/device.py +558 -0
- wolfpine-2.2/framework/bridge/fabric.py +296 -0
- wolfpine-2.2/framework/bridge/fabric_test.py +169 -0
- wolfpine-2.2/framework/bridge/grid.py +107 -0
- wolfpine-2.2/framework/bridge/grid_test.py +154 -0
- wolfpine-2.2/framework/bridge/host_stop_test.py +193 -0
- wolfpine-2.2/framework/bridge/hostlink.py +245 -0
- wolfpine-2.2/framework/bridge/hostlink_test.py +224 -0
- wolfpine-2.2/framework/bridge/materialise.py +275 -0
- wolfpine-2.2/framework/bridge/materialise_test.py +401 -0
- wolfpine-2.2/framework/bridge/profiler_readback_test.py +377 -0
- wolfpine-2.2/framework/bridge/protocol.py +94 -0
- wolfpine-2.2/framework/bridge/trace.py +96 -0
- wolfpine-2.2/framework/bridge/transport.py +89 -0
- wolfpine-2.2/framework/cli.py +335 -0
- wolfpine-2.2/framework/cli_test.py +85 -0
- wolfpine-2.2/framework/device/__init__.py +0 -0
- wolfpine-2.2/framework/device/blackhole.py +69 -0
- wolfpine-2.2/framework/device/clock.py +694 -0
- wolfpine-2.2/framework/device/clock_test.py +445 -0
- wolfpine-2.2/framework/device/deadlock.py +1076 -0
- wolfpine-2.2/framework/device/deadlock_test.py +947 -0
- wolfpine-2.2/framework/device/device.py +54 -0
- wolfpine-2.2/framework/device/dram_banks_test.py +227 -0
- wolfpine-2.2/framework/device/dram_cost_model_test.py +731 -0
- wolfpine-2.2/framework/device/noc_translation_test.py +486 -0
- wolfpine-2.2/framework/device/parity_test.py +216 -0
- wolfpine-2.2/framework/device/reset.py +22 -0
- wolfpine-2.2/framework/device/tiles.py +1100 -0
- wolfpine-2.2/framework/device/tt_device.py +1031 -0
- wolfpine-2.2/framework/device/wormhole.py +191 -0
- wolfpine-2.2/framework/memory/__init__.py +0 -0
- wolfpine-2.2/framework/memory/mem_mapable.py +15 -0
- wolfpine-2.2/framework/memory/memory.py +400 -0
- wolfpine-2.2/framework/memory/memory_map.py +114 -0
- wolfpine-2.2/framework/memory/sparse_memory_test.py +131 -0
- wolfpine-2.2/framework/misc/__init__.py +0 -0
- wolfpine-2.2/framework/misc/mailbox.py +124 -0
- wolfpine-2.2/framework/misc/perf_counters.py +551 -0
- wolfpine-2.2/framework/misc/perf_counters_test.py +227 -0
- wolfpine-2.2/framework/misc/tile_ctrl.py +265 -0
- wolfpine-2.2/framework/misc/tile_ctrl_test.py +116 -0
- wolfpine-2.2/framework/misc/ttsync.py +114 -0
- wolfpine-2.2/framework/network/__init__.py +0 -0
- wolfpine-2.2/framework/network/alignment.py +148 -0
- wolfpine-2.2/framework/network/alignment_test.py +222 -0
- wolfpine-2.2/framework/network/attribution.py +572 -0
- wolfpine-2.2/framework/network/attribution_test.py +683 -0
- wolfpine-2.2/framework/network/multicast_order.py +260 -0
- wolfpine-2.2/framework/network/multicast_order_test.py +595 -0
- wolfpine-2.2/framework/network/noc_coords.py +72 -0
- wolfpine-2.2/framework/network/noc_cost_model_test.py +857 -0
- wolfpine-2.2/framework/network/noc_counter_accounting_test.py +363 -0
- wolfpine-2.2/framework/network/noc_endpoint_consistency_test.py +435 -0
- wolfpine-2.2/framework/network/noc_link_congestion_test.py +445 -0
- wolfpine-2.2/framework/network/noc_registers_test.py +141 -0
- wolfpine-2.2/framework/network/noc_routing_test.py +940 -0
- wolfpine-2.2/framework/network/noc_shadow.py +146 -0
- wolfpine-2.2/framework/network/noc_translation.py +115 -0
- wolfpine-2.2/framework/network/noc_translation_test.py +89 -0
- wolfpine-2.2/framework/network/tt_noc.py +2741 -0
- wolfpine-2.2/framework/pe/__init__.py +0 -0
- wolfpine-2.2/framework/pe/pcbuf.py +193 -0
- wolfpine-2.2/framework/pe/pcbuf_test.py +390 -0
- wolfpine-2.2/framework/pe/pe.py +27 -0
- wolfpine-2.2/framework/pe/register/__init__.py +0 -0
- wolfpine-2.2/framework/pe/register/register.py +68 -0
- wolfpine-2.2/framework/pe/register/register_file.py +69 -0
- wolfpine-2.2/framework/pe/rv/__init__.py +0 -0
- wolfpine-2.2/framework/pe/rv/babyriscv.py +339 -0
- wolfpine-2.2/framework/pe/rv/breakpoint.py +92 -0
- wolfpine-2.2/framework/pe/rv/breakpoint_test.py +99 -0
- wolfpine-2.2/framework/pe/rv/cost.py +816 -0
- wolfpine-2.2/framework/pe/rv/cost_test.py +776 -0
- wolfpine-2.2/framework/pe/rv/isa/__init__.py +0 -0
- wolfpine-2.2/framework/pe/rv/isa/a_isa.py +71 -0
- wolfpine-2.2/framework/pe/rv/isa/a_isa_test.py +112 -0
- wolfpine-2.2/framework/pe/rv/isa/b_isa.py +198 -0
- wolfpine-2.2/framework/pe/rv/isa/b_isa_test.py +118 -0
- wolfpine-2.2/framework/pe/rv/isa/guard_isa.py +64 -0
- wolfpine-2.2/framework/pe/rv/isa/i_isa.py +760 -0
- wolfpine-2.2/framework/pe/rv/isa/i_isa_test.py +212 -0
- wolfpine-2.2/framework/pe/rv/isa/m_isa.py +92 -0
- wolfpine-2.2/framework/pe/rv/isa/rv_isa.py +100 -0
- wolfpine-2.2/framework/pe/rv/isa/tt_isa.py +53 -0
- wolfpine-2.2/framework/pe/rv/isa/zfh_isa.py +247 -0
- wolfpine-2.2/framework/pe/rv/isa/zfh_isa_test.py +253 -0
- wolfpine-2.2/framework/pe/rv/isa/zicsr_isa.py +570 -0
- wolfpine-2.2/framework/pe/rv/isa/zicsr_isa_test.py +517 -0
- wolfpine-2.2/framework/pe/rv/rv32.py +421 -0
- wolfpine-2.2/framework/pe/rv/spin.py +749 -0
- wolfpine-2.2/framework/pe/rv/spin_test.py +512 -0
- wolfpine-2.2/framework/pe/tensix/__init__.py +0 -0
- wolfpine-2.2/framework/pe/tensix/backend.py +423 -0
- wolfpine-2.2/framework/pe/tensix/backend_cost_model_test.py +1277 -0
- wolfpine-2.2/framework/pe/tensix/backends/__init__.py +0 -0
- wolfpine-2.2/framework/pe/tensix/backends/backend_base.py +675 -0
- wolfpine-2.2/framework/pe/tensix/backends/config.py +455 -0
- wolfpine-2.2/framework/pe/tensix/backends/fpu_jit.py +156 -0
- wolfpine-2.2/framework/pe/tensix/backends/fpu_jit_kernel.py +184 -0
- wolfpine-2.2/framework/pe/tensix/backends/matrix.py +2505 -0
- wolfpine-2.2/framework/pe/tensix/backends/misc.py +486 -0
- wolfpine-2.2/framework/pe/tensix/backends/mover.py +195 -0
- wolfpine-2.2/framework/pe/tensix/backends/packer.py +917 -0
- wolfpine-2.2/framework/pe/tensix/backends/sync.py +425 -0
- wolfpine-2.2/framework/pe/tensix/backends/thcon.py +860 -0
- wolfpine-2.2/framework/pe/tensix/backends/unpacker.py +1817 -0
- wolfpine-2.2/framework/pe/tensix/backends/vector.py +2363 -0
- wolfpine-2.2/framework/pe/tensix/blackhole_decode_test.py +161 -0
- wolfpine-2.2/framework/pe/tensix/blackhole_ops_test.py +235 -0
- wolfpine-2.2/framework/pe/tensix/conversion_batch_test.py +361 -0
- wolfpine-2.2/framework/pe/tensix/elementwise_datapath_test.py +464 -0
- wolfpine-2.2/framework/pe/tensix/fma_model_test.py +92 -0
- wolfpine-2.2/framework/pe/tensix/fpu_accumulate_test.py +545 -0
- wolfpine-2.2/framework/pe/tensix/frontend.py +1170 -0
- wolfpine-2.2/framework/pe/tensix/frontend_backpressure_test.py +399 -0
- wolfpine-2.2/framework/pe/tensix/implied_src_format_test.py +104 -0
- wolfpine-2.2/framework/pe/tensix/matrix_cost_model_test.py +224 -0
- wolfpine-2.2/framework/pe/tensix/matrix_mov_pool_test.py +611 -0
- wolfpine-2.2/framework/pe/tensix/mop_clobber_test.py +175 -0
- wolfpine-2.2/framework/pe/tensix/mover_cost_model_test.py +321 -0
- wolfpine-2.2/framework/pe/tensix/pack_dest_rd_ctrl_test.py +235 -0
- wolfpine-2.2/framework/pe/tensix/pack_intf_sel_test.py +235 -0
- wolfpine-2.2/framework/pe/tensix/pack_strided_test.py +365 -0
- wolfpine-2.2/framework/pe/tensix/pack_yzw_addr_test.py +243 -0
- wolfpine-2.2/framework/pe/tensix/registers.py +296 -0
- wolfpine-2.2/framework/pe/tensix/registers_test.py +273 -0
- wolfpine-2.2/framework/pe/tensix/semaphore_contract.py +286 -0
- wolfpine-2.2/framework/pe/tensix/semaphore_contract_test.py +316 -0
- wolfpine-2.2/framework/pe/tensix/setdvalid_srcrow_test.py +309 -0
- wolfpine-2.2/framework/pe/tensix/sfpu_blackhole_modes_test.py +536 -0
- wolfpine-2.2/framework/pe/tensix/sfpu_blackhole_test.py +132 -0
- wolfpine-2.2/framework/pe/tensix/sfpu_lut_transp_test.py +478 -0
- wolfpine-2.2/framework/pe/tensix/sync_mixed_queue_test.py +70 -0
- wolfpine-2.2/framework/pe/tensix/sync_mutex_issue_test.py +95 -0
- wolfpine-2.2/framework/pe/tensix/sync_mutex_queue_test.py +146 -0
- wolfpine-2.2/framework/pe/tensix/tdma.py +104 -0
- wolfpine-2.2/framework/pe/tensix/tensix.py +81 -0
- wolfpine-2.2/framework/pe/tensix/tensix_backend_cfg.yaml +3637 -0
- wolfpine-2.2/framework/pe/tensix/tensix_backend_cfg_blackhole.yaml +3280 -0
- wolfpine-2.2/framework/pe/tensix/tensix_instruction_costs.yaml +1489 -0
- wolfpine-2.2/framework/pe/tensix/tensix_instructions.yaml +3192 -0
- wolfpine-2.2/framework/pe/tensix/unpack_stride_test.py +489 -0
- wolfpine-2.2/framework/pe/tensix/unpack_untilize_test.py +433 -0
- wolfpine-2.2/framework/pe/tensix/unpacker_cost_model_test.py +1001 -0
- wolfpine-2.2/framework/pe/tensix/util.py +649 -0
- wolfpine-2.2/framework/pe/tensix/waitgate_allowed_client_test.py +256 -0
- wolfpine-2.2/framework/pe/tensix/waitgate_latched_wait_test.py +257 -0
- wolfpine-2.2/framework/pe/tensix/waitgate_multi_semaphore_test.py +254 -0
- wolfpine-2.2/framework/pe/tensix/waitgate_stallwait_blocked_test.py +148 -0
- wolfpine-2.2/framework/pe/tensix/zeroacc_blackhole_test.py +293 -0
- wolfpine-2.2/framework/perf/__init__.py +10 -0
- wolfpine-2.2/framework/perf/costs.py +456 -0
- wolfpine-2.2/framework/perf/costs_test.py +1217 -0
- wolfpine-2.2/framework/perf/datasets/dramratebench-blackhole-2026-08-09.csv +103 -0
- wolfpine-2.2/framework/perf/datasets/nocbench-blackhole-2026-08-09-2224-epoch.csv +163 -0
- wolfpine-2.2/framework/perf/datasets/nocbench-blackhole-2026-08-09-2224.csv +154 -0
- wolfpine-2.2/framework/perf/datasets/nocbench-blackhole-2026-08-09-repeat.csv +163 -0
- wolfpine-2.2/framework/perf/datasets/nocbench-blackhole-2026-08-09.csv +145 -0
- wolfpine-2.2/framework/perf/datasets/nocbench-blackhole-sizes.csv +130 -0
- wolfpine-2.2/framework/perf/datasets/nocbench-blackhole.csv +124 -0
- wolfpine-2.2/framework/perf/datasets/nocbench-grid-blackhole.csv +136 -0
- wolfpine-2.2/framework/perf/datasets/nocbench-grid-wormhole-sim.csv +78 -0
- wolfpine-2.2/framework/perf/datasets/nocreadbench-blackhole-2026-08-09.csv +145 -0
- wolfpine-2.2/framework/perf/datasets/riscvbench-blackhole-2026-08-09-gset1.csv +37 -0
- wolfpine-2.2/framework/perf/datasets/riscvbench-blackhole-2026-08-09-gset2.csv +37 -0
- wolfpine-2.2/framework/perf/datasets/riscvbench-blackhole-2026-08-09-gset3.csv +42 -0
- wolfpine-2.2/framework/perf/datasets/riscvbench-blackhole-2026-08-09-gset4.csv +42 -0
- wolfpine-2.2/framework/perf/datasets/riscvbench-blackhole-2026-08-09-pairs.csv +50 -0
- wolfpine-2.2/framework/perf/datasets/riscvbench-blackhole-2026-08-09-qdrain.csv +144 -0
- wolfpine-2.2/framework/perf/datasets/riscvbench-blackhole-2026-08-09-repeat.csv +1618 -0
- wolfpine-2.2/framework/perf/datasets/riscvbench-blackhole-2026-08-09.csv +1615 -0
- wolfpine-2.2/framework/perf/datasets/riscvbench-blackhole-blocks8.csv +1687 -0
- wolfpine-2.2/framework/perf/datasets/riscvbench-blackhole-gset1.csv +56 -0
- wolfpine-2.2/framework/perf/datasets/riscvbench-blackhole-gset2.csv +56 -0
- wolfpine-2.2/framework/perf/datasets/riscvbench-blackhole.csv +1751 -0
- wolfpine-2.2/framework/perf/datasets/riscvbench-qdrain.csv +225 -0
- wolfpine-2.2/framework/perf/datasets/tensixbench-blackhole-2026-08-09-blocks64.csv +511 -0
- wolfpine-2.2/framework/perf/datasets/tensixbench-blackhole-2026-08-09.csv +542 -0
- wolfpine-2.2/framework/perf/datasets/tensixbench-blackhole-dvalid-per-thread.csv +524 -0
- wolfpine-2.2/framework/perf/datasets/tensixbench-blackhole-unpacr-nop-bf16.csv +160 -0
- wolfpine-2.2/framework/perf/datasets/tensixbench-blackhole-unpacr-nop-fp16.csv +159 -0
- wolfpine-2.2/framework/perf/datasets/tensixbench-blackhole-unpacr-nop-fp32.csv +160 -0
- wolfpine-2.2/framework/perf/datasets/tensixbench-blackhole-unpacr-nop-tf32.csv +159 -0
- wolfpine-2.2/framework/perf/datasets/tensixbench-blackhole.csv +556 -0
- wolfpine-2.2/framework/perf/dram_rate_sweep.py +721 -0
- wolfpine-2.2/framework/perf/dram_rate_sweep_test.py +523 -0
- wolfpine-2.2/framework/perf/energy_activity.py +283 -0
- wolfpine-2.2/framework/perf/energy_activity_test.py +163 -0
- wolfpine-2.2/framework/perf/energy_quarantine_test.py +88 -0
- wolfpine-2.2/framework/perf/energy_rank.py +2028 -0
- wolfpine-2.2/framework/perf/energy_rank_test.py +2082 -0
- wolfpine-2.2/framework/perf/model.py +1472 -0
- wolfpine-2.2/framework/perf/model_test.py +344 -0
- wolfpine-2.2/framework/perf/noc_congestion_plan.py +1454 -0
- wolfpine-2.2/framework/perf/noc_congestion_plan_test.py +468 -0
- wolfpine-2.2/framework/perf/noc_congestion_sweep.py +963 -0
- wolfpine-2.2/framework/perf/noc_congestion_sweep_test.py +606 -0
- wolfpine-2.2/framework/perf/noc_dataset_sweep.py +1358 -0
- wolfpine-2.2/framework/perf/noc_dataset_sweep_test.py +452 -0
- wolfpine-2.2/framework/perf/noc_events.py +1648 -0
- wolfpine-2.2/framework/perf/noc_events_test.py +867 -0
- wolfpine-2.2/framework/perf/noc_issue_loop.py +345 -0
- wolfpine-2.2/framework/perf/noc_issue_loop_test.py +195 -0
- wolfpine-2.2/framework/perf/retire_attribution.py +1248 -0
- wolfpine-2.2/framework/perf/retire_attribution_test.py +646 -0
- wolfpine-2.2/framework/perf/riscv_bench_sweep.py +2600 -0
- wolfpine-2.2/framework/perf/riscv_bench_sweep_test.py +1422 -0
- wolfpine-2.2/framework/perf/stall_attribution.py +1370 -0
- wolfpine-2.2/framework/perf/stall_attribution_test.py +947 -0
- wolfpine-2.2/framework/perf/tensix_bench_sweep.py +1252 -0
- wolfpine-2.2/framework/perf/tensix_bench_sweep_test.py +824 -0
- wolfpine-2.2/framework/perf/unit_costs.yaml +2042 -0
- wolfpine-2.2/framework/sim/__init__.py +17 -0
- wolfpine-2.2/framework/sim/blackhole/__init__.py +6 -0
- wolfpine-2.2/framework/sim/blackhole/__main__.py +221 -0
- wolfpine-2.2/framework/sim/blackhole/bh_device.py +36 -0
- wolfpine-2.2/framework/sim/blackhole/cluster_descriptor.yaml +50 -0
- wolfpine-2.2/framework/sim/blackhole/coords.py +144 -0
- wolfpine-2.2/framework/sim/blackhole/run.sh +43 -0
- wolfpine-2.2/framework/sim/blackhole/soc_descriptor.yaml +131 -0
- wolfpine-2.2/framework/sim/wormhole/__init__.py +6 -0
- wolfpine-2.2/framework/sim/wormhole/__main__.py +300 -0
- wolfpine-2.2/framework/sim/wormhole/cluster_descriptor.yaml +43 -0
- wolfpine-2.2/framework/sim/wormhole/coords.py +206 -0
- wolfpine-2.2/framework/sim/wormhole/run.sh +43 -0
- wolfpine-2.2/framework/sim/wormhole/soc_descriptor.yaml +160 -0
- wolfpine-2.2/framework/sim/wormhole/wh_device.py +30 -0
- wolfpine-2.2/framework/trace/README.md +876 -0
- wolfpine-2.2/framework/trace/__init__.py +92 -0
- wolfpine-2.2/framework/trace/attribution_test.py +655 -0
- wolfpine-2.2/framework/trace/auto.py +398 -0
- wolfpine-2.2/framework/trace/benchmark.py +107 -0
- wolfpine-2.2/framework/trace/bus.py +80 -0
- wolfpine-2.2/framework/trace/counters.py +206 -0
- wolfpine-2.2/framework/trace/diff_spike.py +79 -0
- wolfpine-2.2/framework/trace/diff_state.py +75 -0
- wolfpine-2.2/framework/trace/dwarf.py +386 -0
- wolfpine-2.2/framework/trace/elfdisc.py +346 -0
- wolfpine-2.2/framework/trace/events.py +438 -0
- wolfpine-2.2/framework/trace/hotspots.py +165 -0
- wolfpine-2.2/framework/trace/ids.py +71 -0
- wolfpine-2.2/framework/trace/invariants.py +217 -0
- wolfpine-2.2/framework/trace/observability_test.py +1224 -0
- wolfpine-2.2/framework/trace/queries/README.md +68 -0
- wolfpine-2.2/framework/trace/queries/counters.sql +163 -0
- wolfpine-2.2/framework/trace/report.py +886 -0
- wolfpine-2.2/framework/trace/state_dump.py +113 -0
- wolfpine-2.2/framework/trace/writers/__init__.py +3 -0
- wolfpine-2.2/framework/trace/writers/cachegrind.py +68 -0
- wolfpine-2.2/framework/trace/writers/commitlog.py +75 -0
- wolfpine-2.2/framework/trace/writers/jsonl.py +52 -0
- wolfpine-2.2/framework/trace/writers/lcov.py +85 -0
- wolfpine-2.2/framework/trace/writers/noc_parquet.py +144 -0
- wolfpine-2.2/framework/trace/writers/parquet.py +92 -0
- wolfpine-2.2/framework/trace/writers/perfetto.py +440 -0
- wolfpine-2.2/framework/util/__init__.py +0 -0
- wolfpine-2.2/framework/util/bits.py +105 -0
- wolfpine-2.2/framework/util/conversion.py +48 -0
- wolfpine-2.2/framework/util/yaml_cache.py +80 -0
- {wolfpine-2.1 → wolfpine-2.2}/pyproject.toml +11 -3
- {wolfpine-2.1 → wolfpine-2.2}/wolfpine.egg-info/PKG-INFO +68 -16
- wolfpine-2.2/wolfpine.egg-info/SOURCES.txt +284 -0
- wolfpine-2.2/wolfpine.egg-info/entry_points.txt +2 -0
- wolfpine-2.1/wolfpine.egg-info/SOURCES.txt +0 -11
- {wolfpine-2.1 → wolfpine-2.2}/LICENSE +0 -0
- {wolfpine-2.1 → wolfpine-2.2}/framework/__init__.py +0 -0
- {wolfpine-2.1 → wolfpine-2.2}/framework/behaviour_test.py +0 -0
- {wolfpine-2.1 → wolfpine-2.2}/setup.cfg +0 -0
- {wolfpine-2.1 → wolfpine-2.2}/wolfpine.egg-info/dependency_links.txt +0 -0
- {wolfpine-2.1 → wolfpine-2.2}/wolfpine.egg-info/requires.txt +0 -0
- {wolfpine-2.1 → wolfpine-2.2}/wolfpine.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wolfpine
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.2
|
|
4
4
|
Summary: A framework for simulating AI accelerators, with Tenstorrent Wormhole and Blackhole backends
|
|
5
5
|
Author: Nick Brown
|
|
6
6
|
License-Expression: BSD-3-Clause
|
|
@@ -41,6 +41,7 @@ down, poke at simulator state directly from a driver script.
|
|
|
41
41
|
|
|
42
42
|
## Contents
|
|
43
43
|
|
|
44
|
+
- [Quick start](#quick-start)
|
|
44
45
|
- [Installation](#installation)
|
|
45
46
|
- [Using Wolfpine as a simulator for tt-metal](#using-wolfpine-as-a-simulator-for-tt-metal)
|
|
46
47
|
- [Repository overview](#repository-overview)
|
|
@@ -53,11 +54,56 @@ Building tooling on those outputs: [`docs/trace-schema.md`](docs/trace-schema.md
|
|
|
53
54
|
is the stable, versioned schema — field meanings, units and what you may
|
|
54
55
|
rely on.
|
|
55
56
|
|
|
57
|
+
## Quick start
|
|
58
|
+
|
|
59
|
+
You need Python ≥ 3.10 and a built [tt-metal](https://github.com/tenstorrent/tt-metal)
|
|
60
|
+
checkout. Install Wolfpine from PyPI and tell it where tt-metal is:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
pip install wolfpine
|
|
64
|
+
wolfpine config --tt-metal /path/to/tt-metal # once; saved to ~/.config/wolfpine
|
|
65
|
+
wolfpine doctor # check what it found
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
Then run any tt-metal program against the simulator with `wolfpine run <target>`, where the
|
|
69
|
+
target is `wormhole`, `blackhole`, or `hw` for real hardware. The program needs no changes:
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
cd /path/to/tt-metal/build/programming_examples
|
|
73
|
+
wolfpine run wormhole ./metal_example_add_2_integers_in_compute # simulated Wormhole
|
|
74
|
+
wolfpine run blackhole ./metal_example_add_2_integers_in_compute # simulated Blackhole
|
|
75
|
+
wolfpine run hw ./metal_example_add_2_integers_in_compute # the same binary on hardware
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
`wolfpine run` sets tt-metal's environment variables (`TT_METAL_SIMULATOR`,
|
|
79
|
+
`TT_METAL_SLOW_DISPATCH_MODE`, `TT_METAL_RUNTIME_ROOT`, `LD_LIBRARY_PATH`) for that one
|
|
80
|
+
command only, so nothing is left behind in your shell. Leave out the command to get a
|
|
81
|
+
subshell with the target switched on (`exit` to leave it). To switch your current shell
|
|
82
|
+
instead — handy when building your own programs with CMake — `eval` the exports; `off`
|
|
83
|
+
puts back exactly what was there before:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
eval "$(wolfpine env blackhole)" # or wormhole, or hw
|
|
87
|
+
cmake -B build -S . && cmake --build build && ./build/my_program
|
|
88
|
+
eval "$(wolfpine env off)"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Run `wolfpine --help` for the full list of commands.
|
|
92
|
+
|
|
56
93
|
## Installation
|
|
57
94
|
|
|
58
|
-
Wolfpine is pure Python and requires Python ≥ 3.10.
|
|
59
|
-
|
|
60
|
-
|
|
95
|
+
Wolfpine is pure Python and requires Python ≥ 3.10. It depends on numpy, pyyaml, pynng,
|
|
96
|
+
flatbuffers, pyarrow and pyelftools, which pip installs for you.
|
|
97
|
+
|
|
98
|
+
**From PyPI** — the simulator library plus the `wolfpine` command, everything needed to run
|
|
99
|
+
tt-metal programs:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
pip install wolfpine
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**From source** — for the example programs, the low-level driver scripts and the test
|
|
106
|
+
suite, or to hack on the simulator itself:
|
|
61
107
|
|
|
62
108
|
```bash
|
|
63
109
|
git clone https://github.com/hedgehope/wolfpine.git
|
|
@@ -65,9 +111,9 @@ cd wolfpine
|
|
|
65
111
|
pip install -e . # add [dev] for the ruff + pytest tooling: pip install -e .[dev]
|
|
66
112
|
```
|
|
67
113
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
114
|
+
Both install the `framework` simulator library and the `wolfpine` command. The example
|
|
115
|
+
drivers under `driver/` are not part of the package; they run from the repository root, so
|
|
116
|
+
keep the repo root on your `PYTHONPATH` when invoking them directly:
|
|
71
117
|
|
|
72
118
|
```bash
|
|
73
119
|
export PYTHONPATH=$PWD:$PYTHONPATH
|
|
@@ -75,22 +121,28 @@ export PYTHONPATH=$PWD:$PYTHONPATH
|
|
|
75
121
|
|
|
76
122
|
## Using Wolfpine as a simulator for tt-metal
|
|
77
123
|
|
|
78
|
-
tt-metal's UMD has a "simulation" chip backend: point `TT_METAL_SIMULATOR` at
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
124
|
+
tt-metal's UMD has a "simulation" chip backend: point `TT_METAL_SIMULATOR` at a simulator
|
|
125
|
+
directory and UMD launches Wolfpine in place of real silicon, so an ordinary tt-metal program
|
|
126
|
+
runs against the simulator over a socket — no code changes, exactly as it would run on
|
|
127
|
+
hardware. The simulator directories ship inside the package (`framework/sim/wormhole` and
|
|
128
|
+
`framework/sim/blackhole`), which is why the [`wolfpine` command](#quick-start) is the easy
|
|
129
|
+
way in: it finds them for you.
|
|
130
|
+
|
|
131
|
+
`wolfpine` looks for tt-metal in this order: `--tt-metal` (given before the target, e.g.
|
|
132
|
+
`wolfpine run --tt-metal /path wormhole ./prog`), then `$TT_METAL_RUNTIME_ROOT` or
|
|
133
|
+
`$TT_METAL_HOME`, then the path saved by `wolfpine config`. If you would rather export
|
|
134
|
+
the variables yourself, these are the ones it manages:
|
|
82
135
|
|
|
83
136
|
```bash
|
|
84
137
|
export TT_METAL_RUNTIME_ROOT=/path/to/tt-metal # your built tt-metal checkout
|
|
85
|
-
export TT_METAL_SIMULATOR="$
|
|
138
|
+
export TT_METAL_SIMULATOR="$(python3 -c 'from framework.sim import simulator_dir; print(simulator_dir("wormhole"))')"
|
|
86
139
|
export TT_METAL_SLOW_DISPATCH_MODE=1 # the only launch path the sim models
|
|
87
140
|
export LD_LIBRARY_PATH="$TT_METAL_RUNTIME_ROOT/build/lib:$LD_LIBRARY_PATH"
|
|
88
|
-
|
|
89
|
-
# then run any tt-metal program, e.g. an upstream example:
|
|
90
|
-
cd "$TT_METAL_RUNTIME_ROOT/build/programming_examples"
|
|
91
|
-
./metal_example_add_2_integers_in_compute
|
|
92
141
|
```
|
|
93
142
|
|
|
143
|
+
In a repository checkout `driver/wormhole` and `driver/blackhole` link to the same simulator
|
|
144
|
+
directories, so `TT_METAL_SIMULATOR=$PWD/driver/wormhole` works too.
|
|
145
|
+
|
|
94
146
|
A set of ready-to-run example programs, plus a build-and-run test suite, lives under
|
|
95
147
|
[`examples`](examples). For the full walkthrough — building the
|
|
96
148
|
examples, the `TT_SIM_TENSIX_COORDS` grid-pinning knob, diagnostics, structured tracing and
|
|
@@ -20,6 +20,7 @@ down, poke at simulator state directly from a driver script.
|
|
|
20
20
|
|
|
21
21
|
## Contents
|
|
22
22
|
|
|
23
|
+
- [Quick start](#quick-start)
|
|
23
24
|
- [Installation](#installation)
|
|
24
25
|
- [Using Wolfpine as a simulator for tt-metal](#using-wolfpine-as-a-simulator-for-tt-metal)
|
|
25
26
|
- [Repository overview](#repository-overview)
|
|
@@ -32,11 +33,56 @@ Building tooling on those outputs: [`docs/trace-schema.md`](docs/trace-schema.md
|
|
|
32
33
|
is the stable, versioned schema — field meanings, units and what you may
|
|
33
34
|
rely on.
|
|
34
35
|
|
|
36
|
+
## Quick start
|
|
37
|
+
|
|
38
|
+
You need Python ≥ 3.10 and a built [tt-metal](https://github.com/tenstorrent/tt-metal)
|
|
39
|
+
checkout. Install Wolfpine from PyPI and tell it where tt-metal is:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pip install wolfpine
|
|
43
|
+
wolfpine config --tt-metal /path/to/tt-metal # once; saved to ~/.config/wolfpine
|
|
44
|
+
wolfpine doctor # check what it found
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Then run any tt-metal program against the simulator with `wolfpine run <target>`, where the
|
|
48
|
+
target is `wormhole`, `blackhole`, or `hw` for real hardware. The program needs no changes:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
cd /path/to/tt-metal/build/programming_examples
|
|
52
|
+
wolfpine run wormhole ./metal_example_add_2_integers_in_compute # simulated Wormhole
|
|
53
|
+
wolfpine run blackhole ./metal_example_add_2_integers_in_compute # simulated Blackhole
|
|
54
|
+
wolfpine run hw ./metal_example_add_2_integers_in_compute # the same binary on hardware
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
`wolfpine run` sets tt-metal's environment variables (`TT_METAL_SIMULATOR`,
|
|
58
|
+
`TT_METAL_SLOW_DISPATCH_MODE`, `TT_METAL_RUNTIME_ROOT`, `LD_LIBRARY_PATH`) for that one
|
|
59
|
+
command only, so nothing is left behind in your shell. Leave out the command to get a
|
|
60
|
+
subshell with the target switched on (`exit` to leave it). To switch your current shell
|
|
61
|
+
instead — handy when building your own programs with CMake — `eval` the exports; `off`
|
|
62
|
+
puts back exactly what was there before:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
eval "$(wolfpine env blackhole)" # or wormhole, or hw
|
|
66
|
+
cmake -B build -S . && cmake --build build && ./build/my_program
|
|
67
|
+
eval "$(wolfpine env off)"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Run `wolfpine --help` for the full list of commands.
|
|
71
|
+
|
|
35
72
|
## Installation
|
|
36
73
|
|
|
37
|
-
Wolfpine is pure Python and requires Python ≥ 3.10.
|
|
38
|
-
|
|
39
|
-
|
|
74
|
+
Wolfpine is pure Python and requires Python ≥ 3.10. It depends on numpy, pyyaml, pynng,
|
|
75
|
+
flatbuffers, pyarrow and pyelftools, which pip installs for you.
|
|
76
|
+
|
|
77
|
+
**From PyPI** — the simulator library plus the `wolfpine` command, everything needed to run
|
|
78
|
+
tt-metal programs:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
pip install wolfpine
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**From source** — for the example programs, the low-level driver scripts and the test
|
|
85
|
+
suite, or to hack on the simulator itself:
|
|
40
86
|
|
|
41
87
|
```bash
|
|
42
88
|
git clone https://github.com/hedgehope/wolfpine.git
|
|
@@ -44,9 +90,9 @@ cd wolfpine
|
|
|
44
90
|
pip install -e . # add [dev] for the ruff + pytest tooling: pip install -e .[dev]
|
|
45
91
|
```
|
|
46
92
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
93
|
+
Both install the `framework` simulator library and the `wolfpine` command. The example
|
|
94
|
+
drivers under `driver/` are not part of the package; they run from the repository root, so
|
|
95
|
+
keep the repo root on your `PYTHONPATH` when invoking them directly:
|
|
50
96
|
|
|
51
97
|
```bash
|
|
52
98
|
export PYTHONPATH=$PWD:$PYTHONPATH
|
|
@@ -54,22 +100,28 @@ export PYTHONPATH=$PWD:$PYTHONPATH
|
|
|
54
100
|
|
|
55
101
|
## Using Wolfpine as a simulator for tt-metal
|
|
56
102
|
|
|
57
|
-
tt-metal's UMD has a "simulation" chip backend: point `TT_METAL_SIMULATOR` at
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
103
|
+
tt-metal's UMD has a "simulation" chip backend: point `TT_METAL_SIMULATOR` at a simulator
|
|
104
|
+
directory and UMD launches Wolfpine in place of real silicon, so an ordinary tt-metal program
|
|
105
|
+
runs against the simulator over a socket — no code changes, exactly as it would run on
|
|
106
|
+
hardware. The simulator directories ship inside the package (`framework/sim/wormhole` and
|
|
107
|
+
`framework/sim/blackhole`), which is why the [`wolfpine` command](#quick-start) is the easy
|
|
108
|
+
way in: it finds them for you.
|
|
109
|
+
|
|
110
|
+
`wolfpine` looks for tt-metal in this order: `--tt-metal` (given before the target, e.g.
|
|
111
|
+
`wolfpine run --tt-metal /path wormhole ./prog`), then `$TT_METAL_RUNTIME_ROOT` or
|
|
112
|
+
`$TT_METAL_HOME`, then the path saved by `wolfpine config`. If you would rather export
|
|
113
|
+
the variables yourself, these are the ones it manages:
|
|
61
114
|
|
|
62
115
|
```bash
|
|
63
116
|
export TT_METAL_RUNTIME_ROOT=/path/to/tt-metal # your built tt-metal checkout
|
|
64
|
-
export TT_METAL_SIMULATOR="$
|
|
117
|
+
export TT_METAL_SIMULATOR="$(python3 -c 'from framework.sim import simulator_dir; print(simulator_dir("wormhole"))')"
|
|
65
118
|
export TT_METAL_SLOW_DISPATCH_MODE=1 # the only launch path the sim models
|
|
66
119
|
export LD_LIBRARY_PATH="$TT_METAL_RUNTIME_ROOT/build/lib:$LD_LIBRARY_PATH"
|
|
67
|
-
|
|
68
|
-
# then run any tt-metal program, e.g. an upstream example:
|
|
69
|
-
cd "$TT_METAL_RUNTIME_ROOT/build/programming_examples"
|
|
70
|
-
./metal_example_add_2_integers_in_compute
|
|
71
120
|
```
|
|
72
121
|
|
|
122
|
+
In a repository checkout `driver/wormhole` and `driver/blackhole` link to the same simulator
|
|
123
|
+
directories, so `TT_METAL_SIMULATOR=$PWD/driver/wormhole` works too.
|
|
124
|
+
|
|
73
125
|
A set of ready-to-run example programs, plus a build-and-run test suite, lives under
|
|
74
126
|
[`examples`](examples). For the full walkthrough — building the
|
|
75
127
|
examples, the `TT_SIM_TENSIX_COORDS` grid-pinning knob, diagnostics, structured tracing and
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"""Architecture profiles for Wolfpine.
|
|
2
|
+
|
|
3
|
+
An :class:`~framework.arch.profile.ArchProfile` carries every hardware constant
|
|
4
|
+
that differs between Tenstorrent architectures (Wormhole, Blackhole, ...). The
|
|
5
|
+
device/tile classes read these values from a profile rather than hardcoding
|
|
6
|
+
them, so a new architecture is (largely) a new profile plus per-arch strategies
|
|
7
|
+
rather than a fork. See ``docs/plans/blackhole-support.md``.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from framework.arch.blackhole import BLACKHOLE_PROFILE
|
|
11
|
+
from framework.arch.profile import ArchProfile
|
|
12
|
+
from framework.arch.wormhole import WORMHOLE_PROFILE
|
|
13
|
+
|
|
14
|
+
__all__ = ["ArchProfile", "BLACKHOLE_PROFILE", "WORMHOLE_PROFILE"]
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"""The Blackhole A0 architecture profile.
|
|
2
|
+
|
|
3
|
+
Numbers are sourced in ``docs/plans/blackhole-reference.md`` (ttsim
|
|
4
|
+
``src/config.h`` + tt-metal's ``blackhole_140_arch.yaml``). Unlike Wormhole,
|
|
5
|
+
Blackhole tiles use their **physical NoC 0 coordinate** as the tile-directory
|
|
6
|
+
coord directly (there is no "unified" indirection — that exists only to serve
|
|
7
|
+
the Wormhole wire bridge). See ``docs/plans/blackhole-support.md``.
|
|
8
|
+
|
|
9
|
+
This is a *minimal bring-up* profile: one DRAM channel + one Tensix worker,
|
|
10
|
+
matching the scope decision. Expanding to the full 8 DRAM channels / 140 workers
|
|
11
|
+
is mechanical (extend the coord tuples), exactly as for Wormhole.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from framework.arch.profile import ArchProfile
|
|
15
|
+
from framework.network.noc_coords import BlackholeNocCoords
|
|
16
|
+
|
|
17
|
+
BLACKHOLE_PROFILE = ArchProfile(
|
|
18
|
+
name="blackhole",
|
|
19
|
+
# NoC grid: 17 columns x 12 rows, per BlackholeA0/NoC/MemoryMap.md and the
|
|
20
|
+
# SoC descriptor's grid.x_size/y_size.
|
|
21
|
+
noc_grid_x=17,
|
|
22
|
+
noc_grid_y=12,
|
|
23
|
+
# Max single NoC transfer: 16384 bytes (config.h NOC_MAX_PACKET_SIZE).
|
|
24
|
+
noc_max_burst_size=16384,
|
|
25
|
+
# DRAM-sourced NoC reads must be congruent modulo 64 (ttsim tile.cpp checks
|
|
26
|
+
# `(src_addr & 63) == (dst_addr & 63)` under TT_ARCH_VERSION == 1), matching
|
|
27
|
+
# Blackhole's 64 B NoC byte-enable span vs Wormhole's 32 B.
|
|
28
|
+
noc_dram_read_congruence=64,
|
|
29
|
+
# Tensix L1 SRAM: TENSIX_SRAM_SIZE = 1536 * 1024 = 1,572,864 bytes.
|
|
30
|
+
tensix_l1_size=1536 * 1024,
|
|
31
|
+
# Baby-core local data memories are doubled vs Wormhole (ttsim config.h,
|
|
32
|
+
# TT_ARCH_VERSION 1) — the firmware stack lives at the top of this region.
|
|
33
|
+
brisc_local_mem_size=8 * 1024,
|
|
34
|
+
ncrisc_local_mem_size=8 * 1024,
|
|
35
|
+
trisc_local_mem_size=4 * 1024,
|
|
36
|
+
# Blackhole moves the reset-PC override to the RISCV_DEBUG_REG block.
|
|
37
|
+
baby_core_reset_pc_debug_regs=True,
|
|
38
|
+
# Blackhole's Tensix backend config state is larger than Wormhole's
|
|
39
|
+
# (ttsim sim.h TT_ARCH_VERSION 1: 56 config / 68 thread-config registers).
|
|
40
|
+
tensix_cfg_state_size=56,
|
|
41
|
+
tensix_thd_state_size=68,
|
|
42
|
+
# Use Blackhole Tensix semantics: BH config-register layout + STALLWAIT bits.
|
|
43
|
+
tensix_blackhole=True,
|
|
44
|
+
# Blackhole baby cores add, over RV32IM: Zba address-gen + Zbb basic
|
|
45
|
+
# bit-manip (tt-metal's Blackhole kernels use them, e.g. zext.h / sh2add for
|
|
46
|
+
# loop-bound and pointer arithmetic), Zaamo local-L1 atomics, and an F/Zfh
|
|
47
|
+
# guard (floating-point is partially supported by hardware but not yet
|
|
48
|
+
# modelled — the guard makes any use fail loudly). The V vector extension is
|
|
49
|
+
# TRISC2-only, so its guard is attached there. Zicsr brings the CSR file
|
|
50
|
+
# (BabyRISCV/CSRs.md), including mcycle/minstret; Wormhole documents no CSRs
|
|
51
|
+
# at all, so it stays off that profile and a CSR instruction there raises.
|
|
52
|
+
baby_core_isa_extensions=("zba", "zbb", "zaamo", "zfh", "f_guard", "zicsr"),
|
|
53
|
+
trisc2_isa_extensions=("v_guard",),
|
|
54
|
+
# All 8 DRAM channels' worker-visible endpoints, in SoC-descriptor channel
|
|
55
|
+
# order. tt-metal interleaves a buffer's tiles round-robin across every
|
|
56
|
+
# channel (default InterleavedBufferConfig), so an example that reads more
|
|
57
|
+
# than one tile — e.g. `six`'s 128^3 matmul, whose A/B tiles land on all 8
|
|
58
|
+
# banks — reads zeros for any channel not modelled. Each channel's NoC 0 and
|
|
59
|
+
# NoC 1 worker endpoints are *different* subchannels of its 3-endpoint DRAM
|
|
60
|
+
# row: the coords below come from the descriptor's `dram` array indexed by
|
|
61
|
+
# `dram_views[ch].worker_endpoint = [noc0_idx, noc1_idx]`:
|
|
62
|
+
# ch: dram row worker_endpoint -> NoC0 NoC1
|
|
63
|
+
# 0: [0-0, 0-1, 0-11] [2, 1] -> (0,11) (0,1)
|
|
64
|
+
# 1: [0-2, 0-10, 0-3] [0, 1] -> (0,2) (0,10)
|
|
65
|
+
# 2: [0-9, 0-4, 0-8] [0, 1] -> (0,9) (0,4)
|
|
66
|
+
# 3: [0-5, 0-7, 0-6] [0, 1] -> (0,5) (0,7)
|
|
67
|
+
# 4: [9-0, 9-1, 9-11] [2, 1] -> (9,11) (9,1)
|
|
68
|
+
# 5: [9-2, 9-10, 9-3] [2, 1] -> (9,3) (9,10)
|
|
69
|
+
# 6: [9-9, 9-4, 9-8] [2, 1] -> (9,8) (9,4)
|
|
70
|
+
# 7: [9-5, 9-7, 9-6] [2, 1] -> (9,6) (9,7)
|
|
71
|
+
# Blackhole uses physical coords as the tile coord, so unified == NoC 0.
|
|
72
|
+
dram_channel_unified_coords=(
|
|
73
|
+
(0, 11),
|
|
74
|
+
(0, 2),
|
|
75
|
+
(0, 9),
|
|
76
|
+
(0, 5),
|
|
77
|
+
(9, 11),
|
|
78
|
+
(9, 3),
|
|
79
|
+
(9, 8),
|
|
80
|
+
(9, 6),
|
|
81
|
+
),
|
|
82
|
+
dram_channel_physical_noc0_coords=(
|
|
83
|
+
((0, 11),),
|
|
84
|
+
((0, 2),),
|
|
85
|
+
((0, 9),),
|
|
86
|
+
((0, 5),),
|
|
87
|
+
((9, 11),),
|
|
88
|
+
((9, 3),),
|
|
89
|
+
((9, 8),),
|
|
90
|
+
((9, 6),),
|
|
91
|
+
),
|
|
92
|
+
# Each channel's NoC 1 worker endpoint (a different subchannel than NoC 0);
|
|
93
|
+
# a NoC 1 read/write to the channel targets the grid-mirror of this coord.
|
|
94
|
+
dram_channel_physical_noc1_coords=(
|
|
95
|
+
(0, 1),
|
|
96
|
+
(0, 10),
|
|
97
|
+
(0, 4),
|
|
98
|
+
(0, 7),
|
|
99
|
+
(9, 1),
|
|
100
|
+
(9, 10),
|
|
101
|
+
(9, 4),
|
|
102
|
+
(9, 7),
|
|
103
|
+
),
|
|
104
|
+
# Translated coords of the same two sub-endpoints, in the same order.
|
|
105
|
+
# ``BlackholeCoordinateManager::map_dram_banks`` walks (bank, port) in
|
|
106
|
+
# descriptor order and hands out ``x = 17`` for banks 0-3 and ``x = 18``
|
|
107
|
+
# for banks 4-7, with ``y`` starting at 12 and incrementing once per port
|
|
108
|
+
# (3 ports per bank) — so bank b, port p is
|
|
109
|
+
# ``(17 + b//4, 12 + 3*(b%4) + p)``. Applying that to the ports named in
|
|
110
|
+
# the table above (ch0 uses port 2 on NoC 0 and port 1 on NoC 1, ch1-ch3
|
|
111
|
+
# port 0 and port 1, ch4-ch7 port 2 and port 1) gives the pairs below, and
|
|
112
|
+
# they reproduce the ``dram_bank_to_noc_xy`` table read off the wire from a
|
|
113
|
+
# translated run exactly: NoC 0 (17,14) (17,15) (17,18) (17,21) (18,14)
|
|
114
|
+
# (18,17) (18,20) (18,23), NoC 1 (17,13) (17,16) (17,19) (17,22) (18,13)
|
|
115
|
+
# (18,16) (18,19) (18,22).
|
|
116
|
+
dram_channel_translated_coords=(
|
|
117
|
+
((17, 14), (17, 13)),
|
|
118
|
+
((17, 15), (17, 16)),
|
|
119
|
+
((17, 18), (17, 19)),
|
|
120
|
+
((17, 21), (17, 22)),
|
|
121
|
+
((18, 14), (18, 13)),
|
|
122
|
+
((18, 17), (18, 16)),
|
|
123
|
+
((18, 20), (18, 19)),
|
|
124
|
+
((18, 23), (18, 22)),
|
|
125
|
+
),
|
|
126
|
+
# DRAM per channel: soc_descriptor.yaml `dram_bank_size` / `dram_view_size`
|
|
127
|
+
# = 4,278,190,080 = 0xFF00_0000, one view per channel; 8 channels = 31.9
|
|
128
|
+
# GiB. The physical channel is 4 GiB (ttsim config.h DRAM_CHANNEL_SIZE,
|
|
129
|
+
# TT_ARCH_VERSION 1) but the top 16 MiB of a tile's NoC address space is the
|
|
130
|
+
# register aperture, which is why the descriptor stops at 0xFF00_0000 — and
|
|
131
|
+
# why a top-down allocation tops out at 0xFEFF_FC00, inside this range.
|
|
132
|
+
dram_channel_size=0xFF00_0000,
|
|
133
|
+
# First functional worker: physical (1, 2).
|
|
134
|
+
tensix_unified_coords=((1, 2),),
|
|
135
|
+
# Blackhole holds the destination coord in the dedicated HI register.
|
|
136
|
+
noc_coord_strategy=BlackholeNocCoords(),
|
|
137
|
+
noc_blackhole_cmd_buf_layout=True,
|
|
138
|
+
# No Tensix mirror aliases on NoC 1. `RiscFirmwareInitializer::
|
|
139
|
+
# virtual_noc0_coordinate` early-outs on `|| cluster_.arch() ==
|
|
140
|
+
# ARCH::BLACKHOLE`, so `l1_bank_to_noc_xy`'s NoC 1 half is byte-identical to
|
|
141
|
+
# its NoC 0 half here (measured off the wire) and nothing on Blackhole ever
|
|
142
|
+
# addresses a worker by its mirror. Registering the aliases anyway displaced
|
|
143
|
+
# 96 of the 140 live workers from their own canonical NoC 1 cell. DRAM's
|
|
144
|
+
# mirrors are unaffected — that table *is* mirrored. Wormhole must keep
|
|
145
|
+
# them; see `ArchProfile.noc1_tensix_mirror_aliases`.
|
|
146
|
+
noc1_tensix_mirror_aliases=False,
|
|
147
|
+
# ...and the self-address side of the same fact. `NOC_ID_LOGICAL` is
|
|
148
|
+
# `NOC_CFG(0x12)` here, not Wormhole's `NOC_CFG(0xE)` — Blackhole's ID
|
|
149
|
+
# translation tables are six entries per axis, so 0xE is
|
|
150
|
+
# NOC_Y_ID_TRANSLATE_TABLE_2 and reading the Wormhole offset answered 0 for
|
|
151
|
+
# every core, which is what tt-metal's firmware fills `my_x[]`/`my_y[]`
|
|
152
|
+
# from. And it reports the canonical coord on *both* NoCs, because
|
|
153
|
+
# Blackhole's L1 bank table is not mirrored on NoC 1 and its NoC 1 directory
|
|
154
|
+
# has no Tensix mirror keys.
|
|
155
|
+
noc_id_logical_cfg_index=0x12,
|
|
156
|
+
noc_id_logical_mirrored_on_noc1=False,
|
|
157
|
+
# A Blackhole core's *translated* coord is a NoC 0 Tensix coord, so the
|
|
158
|
+
# translated and physical ranges are one numeric range and there is no
|
|
159
|
+
# second space for NoC 1 to keep. Under translation its mirror keys go
|
|
160
|
+
# entirely: `(16-x, 11-y)` of one worker is another worker's translated
|
|
161
|
+
# coordinate, so a leftover mirror is a misroute rather than dead weight.
|
|
162
|
+
# See `ArchProfile.translated_coords_off_physical_grid`.
|
|
163
|
+
translated_coords_off_physical_grid=False,
|
|
164
|
+
# Baby-core firmware bases (blackhole/dev_mem_map.h): with no IRAM
|
|
165
|
+
# constraints every core boots from L1. Computed from the mailbox/zeros/LLK
|
|
166
|
+
# chain: BRISC 0x39E0, then NCRISC 0x5BE0, TRISC0/1/2 0x65E0/0x6FE0/0x79E0.
|
|
167
|
+
# (BRISC always boots from the 0x0 boot vector, so it needs no override.)
|
|
168
|
+
ncrisc_firmware_base=0x5BE0,
|
|
169
|
+
trisc0_firmware_base=0x65E0,
|
|
170
|
+
trisc1_firmware_base=0x6FE0,
|
|
171
|
+
trisc2_firmware_base=0x79E0,
|
|
172
|
+
)
|