MLIR-AIE 1.4.6.dev
AIERT.h
Go to the documentation of this file.
1//===- AIERT.h --------------------------------------------------*- C++ -*-===//
2//
3// Copyright (C) 2024 Advanced Micro Devices, Inc.
4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
5//
6//===----------------------------------------------------------------------===//
7
8#ifndef AIE_AIERT_H
9#define AIE_AIERT_H
10
14
15#include "mlir/IR/Location.h"
16#include "llvm/Support/raw_ostream.h"
17
18#include <map>
19#include <optional>
20#include <string>
21#include <vector>
22
23namespace xilinx::AIE {
24struct AIERTControl;
25
26// RAII helper. Constructs while AIERTControl is recording an aie-rt
27// transaction, captures the current XAie_TxnInst command count at entry, and
28// at scope end attributes every aie-rt command produced during the scope to
29// `loc`. exportSerializedTransaction() projects the captured ranges onto the
30// serialized transaction's operations, and the AIEToConfiguration round-trip
31// reads them back out so re-emitted aiex.npu.* ops carry the source op's MLIR
32// Location instead of the device's fallback location.
34public:
35 TxnLocBracket(AIERTControl &ctl, mlir::Location loc);
37 TxnLocBracket(const TxnLocBracket &) = delete;
39
40private:
41 AIERTControl &ctl;
42 mlir::Location loc;
43 uint32_t startCmds;
44};
45
47
50
51 mlir::LogicalResult setIOBackend(bool aieSim, bool xaieDebug);
52 mlir::LogicalResult
53 pushToBdQueueAndEnable(mlir::Operation &op, int col, int row, int chNum,
54 const DMAChannelDir &channelDir, int bdId,
55 int repeatCount, uint32_t padValue = 0,
56 bool outOfOrder = false, bool configureChannel = true,
57 bool pushTask = true);
58 mlir::LogicalResult configureLocksAndBd(mlir::Block &block, int col, int row,
59 bool outOfOrder = false);
60 mlir::LogicalResult initLocks(DeviceOp &targetOp);
61 mlir::LogicalResult initBuffers(DeviceOp &targetOp);
62 mlir::LogicalResult configureSwitches(DeviceOp &targetOp,
63 bool skipCtrlPktOverlay = false);
64 mlir::LogicalResult addInitConfig(DeviceOp &targetOp,
65 bool skipCtrlPktOverlay = false);
66 mlir::LogicalResult teardownSwitches(DeviceOp &targetOp,
67 bool skipCtrlPktOverlay = false);
68 mlir::LogicalResult disableCores(DeviceOp &targetOp);
69 mlir::LogicalResult resetDmaChannels(DeviceOp &targetOp);
70 mlir::LogicalResult addCoreEnable(DeviceOp &targetOp);
71 mlir::LogicalResult addAieElf(uint8_t col, uint8_t row,
72 const mlir::StringRef elfPath, bool aieSim);
73 mlir::LogicalResult addAieElfs(DeviceOp &targetOp,
74 const mlir::StringRef elfPath, bool aieSim);
75 void startTransaction();
76 void dmaUpdateBdAddr(int col, int row, size_t addr, size_t bdId);
77 std::vector<uint8_t> exportSerializedTransaction();
78
79 // Source locations for the operations in the transaction binary returned by
80 // the last exportSerializedTransaction() call, in binary order. Derived
81 // there from the TxnLocBracket scopes around each per-source-op block in the
82 // AIERT methods; empty if nothing was bracketed. Entries the brackets did
83 // not cover are mlir::UnknownLoc.
84 const std::vector<mlir::Location> &getTxnOpLocs() const;
85
86 // Current XAie_TxnInst::NumCmds for the active transaction (zero if no
87 // transaction is being recorded). Used by TxnLocBracket.
88 uint32_t getCurrentTxnNumCmds() const;
89
90 // Append `loc` to the per-command locations at indices [startCmds, endCmds).
91 // Used by TxnLocBracket on scope exit.
92 void recordTxnLocRange(uint32_t startCmds, uint32_t endCmds,
93 mlir::Location loc);
94 mlir::LogicalResult resetPartition();
95 mlir::LogicalResult resetDMA(int col, int row, bool on);
96 mlir::LogicalResult resetCore(int col, int row);
97 mlir::LogicalResult resetCoreUnreset(int col, int row);
98 mlir::LogicalResult resetSwitch(int col, int row);
99 mlir::LogicalResult resetLock(int col, int row, int lockId);
100 mlir::LogicalResult resetSwitchConnection(int col, int row,
101 WireBundle sourceBundle,
102 int sourceChannel,
103 WireBundle destBundle,
104 int destChannel);
105 mlir::LogicalResult resetPerfCounters(int col, int row);
106
107private:
108 const AIETargetModel &targetModel;
109 struct AIERtImpl;
110 std::unique_ptr<AIERtImpl> aiert;
111};
112
113} // namespace xilinx::AIE
114
115#endif // AIE_AIERT_H
TxnLocBracket(const TxnLocBracket &)=delete
TxnLocBracket & operator=(const TxnLocBracket &)=delete
TxnLocBracket(AIERTControl &ctl, mlir::Location loc)
Definition AIERT.cpp:233
mlir::LogicalResult configureSwitches(DeviceOp &targetOp, bool skipCtrlPktOverlay=false)
Definition AIERT.cpp:736
mlir::LogicalResult resetPerfCounters(int col, int row)
Definition AIERT.cpp:1213
mlir::LogicalResult configureLocksAndBd(mlir::Block &block, int col, int row, bool outOfOrder=false)
Definition AIERT.cpp:646
mlir::LogicalResult resetCore(int col, int row)
Definition AIERT.cpp:1121
void dmaUpdateBdAddr(int col, int row, size_t addr, size_t bdId)
Definition AIERT.cpp:1270
mlir::LogicalResult resetPartition()
Definition AIERT.cpp:1104
mlir::LogicalResult resetCoreUnreset(int col, int row)
Definition AIERT.cpp:1155
mlir::LogicalResult setIOBackend(bool aieSim, bool xaieDebug)
Definition AIERT.cpp:307
uint32_t getCurrentTxnNumCmds() const
Definition AIERT.cpp:1359
std::vector< uint8_t > exportSerializedTransaction()
Definition AIERT.cpp:1336
AIERTControl(const xilinx::AIE::AIETargetModel &tm)
Definition AIERT.cpp:250
mlir::LogicalResult initLocks(DeviceOp &targetOp)
Definition AIERT.cpp:676
mlir::LogicalResult resetDMA(int col, int row, bool on)
Definition AIERT.cpp:1109
mlir::LogicalResult disableCores(DeviceOp &targetOp)
Definition AIERT.cpp:920
mlir::LogicalResult initBuffers(DeviceOp &targetOp)
Definition AIERT.cpp:709
mlir::LogicalResult resetSwitch(int col, int row)
Definition AIERT.cpp:1127
mlir::LogicalResult addCoreEnable(DeviceOp &targetOp)
Definition AIERT.cpp:1062
mlir::LogicalResult resetSwitchConnection(int col, int row, WireBundle sourceBundle, int sourceChannel, WireBundle destBundle, int destChannel)
Definition AIERT.cpp:1173
const std::vector< mlir::Location > & getTxnOpLocs() const
Definition AIERT.cpp:1355
mlir::LogicalResult addInitConfig(DeviceOp &targetOp, bool skipCtrlPktOverlay=false)
Definition AIERT.cpp:971
mlir::LogicalResult addAieElf(uint8_t col, uint8_t row, const mlir::StringRef elfPath, bool aieSim)
Definition AIERT.cpp:1082
void recordTxnLocRange(uint32_t startCmds, uint32_t endCmds, mlir::Location loc)
Definition AIERT.cpp:1363
mlir::LogicalResult resetDmaChannels(DeviceOp &targetOp)
Definition AIERT.cpp:930
mlir::LogicalResult pushToBdQueueAndEnable(mlir::Operation &op, int col, int row, int chNum, const DMAChannelDir &channelDir, int bdId, int repeatCount, uint32_t padValue=0, bool outOfOrder=false, bool configureChannel=true, bool pushTask=true)
Definition AIERT.cpp:598
mlir::LogicalResult addAieElfs(DeviceOp &targetOp, const mlir::StringRef elfPath, bool aieSim)
Definition AIERT.cpp:1235
mlir::LogicalResult resetLock(int col, int row, int lockId)
Definition AIERT.cpp:1161
mlir::LogicalResult teardownSwitches(DeviceOp &targetOp, bool skipCtrlPktOverlay=false)
Definition AIERT.cpp:868