MLIR-AIE 1.4.5.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 pushToBdQueueAndEnable(mlir::Operation &op, int col,
53 int row, int chNum,
54 const DMAChannelDir &channelDir,
55 int bdId, int repeatCount,
56 uint32_t padValue = 0,
57 bool outOfOrder = false);
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 mlir::LogicalResult disableCores(DeviceOp &targetOp);
68 mlir::LogicalResult resetDmaChannels(DeviceOp &targetOp);
69 mlir::LogicalResult addCoreEnable(DeviceOp &targetOp);
70 mlir::LogicalResult addAieElf(uint8_t col, uint8_t row,
71 const mlir::StringRef elfPath, bool aieSim);
72 mlir::LogicalResult addAieElfs(DeviceOp &targetOp,
73 const mlir::StringRef elfPath, bool aieSim);
74 void startTransaction();
75 void dmaUpdateBdAddr(int col, int row, size_t addr, size_t bdId);
76 std::vector<uint8_t> exportSerializedTransaction();
77
78 // Source locations for the operations in the transaction binary returned by
79 // the last exportSerializedTransaction() call, in binary order. Derived
80 // there from the TxnLocBracket scopes around each per-source-op block in the
81 // AIERT methods; empty if nothing was bracketed. Entries the brackets did
82 // not cover are mlir::UnknownLoc.
83 const std::vector<mlir::Location> &getTxnOpLocs() const;
84
85 // Current XAie_TxnInst::NumCmds for the active transaction (zero if no
86 // transaction is being recorded). Used by TxnLocBracket.
87 uint32_t getCurrentTxnNumCmds() const;
88
89 // Append `loc` to the per-command locations at indices [startCmds, endCmds).
90 // Used by TxnLocBracket on scope exit.
91 void recordTxnLocRange(uint32_t startCmds, uint32_t endCmds,
92 mlir::Location loc);
93 mlir::LogicalResult resetPartition();
94 mlir::LogicalResult resetDMA(int col, int row, bool on);
95 mlir::LogicalResult resetCore(int col, int row);
96 mlir::LogicalResult resetCoreUnreset(int col, int row);
97 mlir::LogicalResult resetSwitch(int col, int row);
98 mlir::LogicalResult resetLock(int col, int row, int lockId);
99 mlir::LogicalResult resetSwitchConnection(int col, int row,
100 WireBundle sourceBundle,
101 int sourceChannel,
102 WireBundle destBundle,
103 int destChannel);
104 mlir::LogicalResult resetPerfCounters(int col, int row);
105
106private:
107 const AIETargetModel &targetModel;
108 struct AIERtImpl;
109 std::unique_ptr<AIERtImpl> aiert;
110};
111
112} // namespace xilinx::AIE
113
114#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:731
mlir::LogicalResult resetPerfCounters(int col, int row)
Definition AIERT.cpp:1185
mlir::LogicalResult configureLocksAndBd(mlir::Block &block, int col, int row, bool outOfOrder=false)
Definition AIERT.cpp:641
mlir::LogicalResult resetCore(int col, int row)
Definition AIERT.cpp:1093
void dmaUpdateBdAddr(int col, int row, size_t addr, size_t bdId)
Definition AIERT.cpp:1242
mlir::LogicalResult resetPartition()
Definition AIERT.cpp:1076
mlir::LogicalResult resetCoreUnreset(int col, int row)
Definition AIERT.cpp:1127
mlir::LogicalResult setIOBackend(bool aieSim, bool xaieDebug)
Definition AIERT.cpp:307
uint32_t getCurrentTxnNumCmds() const
Definition AIERT.cpp:1331
std::vector< uint8_t > exportSerializedTransaction()
Definition AIERT.cpp:1308
AIERTControl(const xilinx::AIE::AIETargetModel &tm)
Definition AIERT.cpp:250
mlir::LogicalResult initLocks(DeviceOp &targetOp)
Definition AIERT.cpp:671
mlir::LogicalResult resetDMA(int col, int row, bool on)
Definition AIERT.cpp:1081
mlir::LogicalResult disableCores(DeviceOp &targetOp)
Definition AIERT.cpp:901
mlir::LogicalResult initBuffers(DeviceOp &targetOp)
Definition AIERT.cpp:704
mlir::LogicalResult resetSwitch(int col, int row)
Definition AIERT.cpp:1099
mlir::LogicalResult addCoreEnable(DeviceOp &targetOp)
Definition AIERT.cpp:1041
mlir::LogicalResult resetSwitchConnection(int col, int row, WireBundle sourceBundle, int sourceChannel, WireBundle destBundle, int destChannel)
Definition AIERT.cpp:1145
const std::vector< mlir::Location > & getTxnOpLocs() const
Definition AIERT.cpp:1327
mlir::LogicalResult addInitConfig(DeviceOp &targetOp, bool skipCtrlPktOverlay=false)
Definition AIERT.cpp:952
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)
Definition AIERT.cpp:598
mlir::LogicalResult addAieElf(uint8_t col, uint8_t row, const mlir::StringRef elfPath, bool aieSim)
Definition AIERT.cpp:1054
void recordTxnLocRange(uint32_t startCmds, uint32_t endCmds, mlir::Location loc)
Definition AIERT.cpp:1335
mlir::LogicalResult resetDmaChannels(DeviceOp &targetOp)
Definition AIERT.cpp:911
mlir::LogicalResult addAieElfs(DeviceOp &targetOp, const mlir::StringRef elfPath, bool aieSim)
Definition AIERT.cpp:1207
mlir::LogicalResult teardownSwitches(DeviceOp &targetOp)
Definition AIERT.cpp:860
mlir::LogicalResult resetLock(int col, int row, int lockId)
Definition AIERT.cpp:1133