Skip to content

Commit

Permalink
fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
broskoTT committed Mar 7, 2025
1 parent 7ae3cb1 commit 5fe433f
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 23 deletions.
23 changes: 23 additions & 0 deletions device/api/umd/device/tt_simulation_device.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,13 +46,28 @@ class tt_SimulationDevice : public tt_device {
tt_cxy_pair core, const TensixSoftResetOptions& soft_resets = TENSIX_DEASSERT_SOFT_RESET);
virtual void assert_risc_reset_at_core(
tt_cxy_pair core, const TensixSoftResetOptions& soft_resets = TENSIX_ASSERT_SOFT_RESET);

virtual void deassert_risc_reset_at_core(
const chip_id_t chip, const tt::umd::CoreCoord core, const TensixSoftResetOptions& soft_resets = TENSIX_DEASSERT_SOFT_RESET);
virtual void assert_risc_reset_at_core(
const chip_id_t chip, const tt::umd::CoreCoord core, const TensixSoftResetOptions& soft_resets = TENSIX_ASSERT_SOFT_RESET);

virtual void close_device();

// Runtime Functions
virtual void write_to_device(
const void* mem_ptr, uint32_t size_in_bytes, tt_cxy_pair core, uint64_t addr, const std::string& tlb_to_use);
virtual void write_to_device(
const void* mem_ptr,
uint32_t size_in_bytes,
chip_id_t chip,
tt::umd::CoreCoord core,
uint64_t addr,
const std::string& tlb_to_use);
virtual void read_from_device(
void* mem_ptr, tt_cxy_pair core, uint64_t addr, uint32_t size, const std::string& fallback_tlb);
virtual void read_from_device(
void* mem_ptr, chip_id_t chip, tt::umd::CoreCoord core, uint64_t addr, uint32_t size, const std::string& fallback_tlb);

virtual void wait_for_non_mmio_flush();
virtual void wait_for_non_mmio_flush(const chip_id_t chip);
Expand All @@ -78,6 +93,14 @@ class tt_SimulationDevice : public tt_device {
virtual std::uint32_t get_numa_node_for_pcie_device(std::uint32_t device_id);
virtual const tt_SocDescriptor& get_soc_descriptor(chip_id_t chip_id) const;

virtual void configure_active_ethernet_cores_for_mmio_device(
chip_id_t mmio_chip, const std::unordered_set<tt_xy_pair>& active_eth_cores_per_chip);
virtual void configure_active_ethernet_cores_for_mmio_device(
const std::unordered_set<tt::umd::CoreCoord>& active_eth_cores_per_chip, chip_id_t mmio_chip);

CoordSystem get_coord_system_used() const;
tt_xy_pair translate_to_api_coords(const chip_id_t chip, const tt::umd::CoreCoord core_coord) const;

private:
// State variables
tt_driver_noc_params noc_params;
Expand Down
85 changes: 70 additions & 15 deletions device/simulation/tt_simulation_device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ void print_flatbuffer(const DeviceRequestResponse* buf) {
}

tt_SimulationDeviceInit::tt_SimulationDeviceInit(const std::filesystem::path& simulator_directory) :
simulator_directory(simulator_directory), soc_descriptor(simulator_directory / "soc_descriptor.yaml", false) {}
simulator_directory(simulator_directory), soc_descriptor(simulator_directory / "soc_descriptor.yaml", false) { }

tt_SimulationDevice::tt_SimulationDevice(const tt_SimulationDeviceInit& init) : tt_device() {
log_info(tt::LogEmulationDriver, "Instantiating simulation device");
Expand Down Expand Up @@ -85,7 +85,8 @@ tt_SimulationDevice::tt_SimulationDevice(const tt_SimulationDeviceInit& init) :

tt_SimulationDevice::~tt_SimulationDevice() { close_device(); }

void tt_SimulationDevice::set_barrier_address_params(const barrier_address_params& barrier_address_params_) {}
void tt_SimulationDevice::set_barrier_address_params(const barrier_address_params& barrier_address_params_) {
}

void tt_SimulationDevice::start_device(const tt_device_params& device_params) {
void* buf_ptr = nullptr;
Expand Down Expand Up @@ -135,6 +136,16 @@ void tt_SimulationDevice::assert_risc_reset_at_core(tt_cxy_pair core, const Tens
assert_risc_reset();
}

void tt_SimulationDevice::deassert_risc_reset_at_core(
const chip_id_t chip, const tt::umd::CoreCoord core, const TensixSoftResetOptions& soft_resets) {
deassert_risc_reset_at_core({(size_t)chip, translate_to_api_coords(chip, core)}, soft_resets);
}

void tt_SimulationDevice::assert_risc_reset_at_core(
const chip_id_t chip, const tt::umd::CoreCoord core, const TensixSoftResetOptions& soft_resets) {
assert_risc_reset_at_core({(size_t)chip, translate_to_api_coords(chip, core)}, soft_resets);
}

void tt_SimulationDevice::close_device() {
// disconnect from remote connection
log_info(tt::LogEmulationDriver, "Sending exit signal to remote...");
Expand All @@ -161,6 +172,16 @@ void tt_SimulationDevice::write_to_device(
host.send_to_device(wr_buffer_ptr, wr_buffer_size);
}

void tt_SimulationDevice::write_to_device(
const void* mem_ptr,
uint32_t size_in_bytes,
chip_id_t chip,
tt::umd::CoreCoord core,
uint64_t addr,
const std::string& tlb_to_use) {
write_to_device(mem_ptr, size_in_bytes, {(size_t)chip, translate_to_api_coords(chip, core)}, addr, tlb_to_use);
}

void tt_SimulationDevice::read_from_device(
void* mem_ptr, tt_cxy_pair core, uint64_t addr, uint32_t size, const std::string& fallback_tlb) {
void* rd_resp;
Expand All @@ -182,29 +203,44 @@ void tt_SimulationDevice::read_from_device(
nng_free(rd_resp, rd_rsp_sz);
}

void tt_SimulationDevice::wait_for_non_mmio_flush() {}
void tt_SimulationDevice::read_from_device(
void* mem_ptr, chip_id_t chip, tt::umd::CoreCoord core, uint64_t addr, uint32_t size, const std::string& fallback_tlb) {
read_from_device(mem_ptr, {(size_t)chip, translate_to_api_coords(chip, core)}, addr, size, fallback_tlb);
}

void tt_SimulationDevice::wait_for_non_mmio_flush() {
}

void tt_SimulationDevice::wait_for_non_mmio_flush(const chip_id_t chip) {}
void tt_SimulationDevice::wait_for_non_mmio_flush(const chip_id_t chip) {
}

void tt_SimulationDevice::l1_membar(
const chip_id_t chip, const std::string& fallback_tlb, const std::unordered_set<tt_xy_pair>& cores) {}
const chip_id_t chip, const std::string& fallback_tlb, const std::unordered_set<tt_xy_pair>& cores) {
}

void tt_SimulationDevice::dram_membar(
const chip_id_t chip, const std::string& fallback_tlb, const std::unordered_set<uint32_t>& channels) {}
const chip_id_t chip, const std::string& fallback_tlb, const std::unordered_set<uint32_t>& channels) {
}

void tt_SimulationDevice::dram_membar(
const chip_id_t chip, const std::string& fallback_tlb, const std::unordered_set<tt_xy_pair>& cores) {}
const chip_id_t chip, const std::string& fallback_tlb, const std::unordered_set<tt_xy_pair>& cores) {
}

// Misc. Functions to Query/Set Device State
std::vector<chip_id_t> tt_SimulationDevice::detect_available_device_ids() { return {0}; }
std::vector<chip_id_t> tt_SimulationDevice::detect_available_device_ids() {
return {0}; }

std::set<chip_id_t> tt_SimulationDevice::get_target_device_ids() { return target_devices_in_cluster; }
std::set<chip_id_t> tt_SimulationDevice::get_target_device_ids() {
return target_devices_in_cluster; }

std::set<chip_id_t> tt_SimulationDevice::get_target_mmio_device_ids() { return target_devices_in_cluster; }
std::set<chip_id_t> tt_SimulationDevice::get_target_mmio_device_ids() {
return target_devices_in_cluster; }

std::set<chip_id_t> tt_SimulationDevice::get_target_remote_device_ids() { return target_remote_chips; }
std::set<chip_id_t> tt_SimulationDevice::get_target_remote_device_ids() {
return target_remote_chips; }

std::map<int, int> tt_SimulationDevice::get_clocks() { return {{0, 0}}; }
std::map<int, int> tt_SimulationDevice::get_clocks() {
return {{0, 0}}; }

void* tt_SimulationDevice::host_dma_address(std::uint64_t offset, chip_id_t src_device_id, uint16_t channel) const {
return nullptr;
Expand All @@ -229,12 +265,31 @@ std::uint64_t tt_SimulationDevice::get_dram_channel_size(std::uint32_t device_id
return get_soc_descriptor(device_id).dram_bank_size; // Space per channel is identical for now
}

std::uint32_t tt_SimulationDevice::get_num_host_channels(std::uint32_t device_id) { return 1; }
std::uint32_t tt_SimulationDevice::get_num_host_channels(std::uint32_t device_id) {
return 1; }

std::uint32_t tt_SimulationDevice::get_host_channel_size(std::uint32_t device_id, std::uint32_t channel) { return 0; }
std::uint32_t tt_SimulationDevice::get_host_channel_size(std::uint32_t device_id, std::uint32_t channel) {
return 0; }

std::uint32_t tt_SimulationDevice::get_numa_node_for_pcie_device(std::uint32_t device_id) { return 0; }
std::uint32_t tt_SimulationDevice::get_numa_node_for_pcie_device(std::uint32_t device_id) {
return 0; }

const tt_SocDescriptor& tt_SimulationDevice::get_soc_descriptor(chip_id_t chip_id) const {
return soc_descriptor_per_chip.at(chip_id);
};

void tt_SimulationDevice::configure_active_ethernet_cores_for_mmio_device(
chip_id_t mmio_chip, const std::unordered_set<tt_xy_pair>& active_eth_cores_per_chip) {}
void tt_SimulationDevice::configure_active_ethernet_cores_for_mmio_device(
const std::unordered_set<tt::umd::CoreCoord>& active_eth_cores_per_chip, chip_id_t mmio_chip) {}


CoordSystem tt_SimulationDevice::get_coord_system_used() const {
return arch_name == tt::ARCH::GRAYSKULL ? CoordSystem::PHYSICAL : CoordSystem::VIRTUAL;
}

// TODO: This is a temporary function while we're switching between the old and the new API.
// Eventually, this function should be so small it would be obvioud to remove.
tt_xy_pair tt_SimulationDevice::translate_to_api_coords(const chip_id_t chip, const tt::umd::CoreCoord core_coord) const {
return get_soc_descriptor(chip).translate_coord_to(core_coord, get_coord_system_used());
}
20 changes: 12 additions & 8 deletions tests/soc_descs/blackhole_simulation_1x2.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,18 @@ pcie:
dram:
[[1-0]]

dram_preferred_eth_endpoint:
[ 1-0 ]

dram_preferred_worker_endpoint:
[ 1-0 ]

dram_address_offsets:
[ 0 ]
dram_views:
[
{
channel: 0,
eth_endpoint: 0,
worker_endpoint: 0,
address_offset: 0
}
]

dram_view_size:
1073741824

eth:
[]
Expand Down

0 comments on commit 5fe433f

Please sign in to comment.