Move ResetType under the sv namespace (#7300)

This commit is contained in:
Robert Young 2024-07-10 13:39:26 -04:00 committed by GitHub
parent dcc7dd8db4
commit 68fdd8b418
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 20 additions and 19 deletions

View File

@ -268,8 +268,9 @@ def SyncReset: I32EnumAttrCase<"SyncReset", 1, "syncreset">;
def AsyncReset: I32EnumAttrCase<"AsyncReset", 2, "asyncreset">;
def ResetTypeAttr : I32EnumAttr<"ResetType", "reset type",
[NoReset, SyncReset, AsyncReset]>;
[NoReset, SyncReset, AsyncReset]> {
let cppNamespace = "::circt::sv";
}
def AlwaysFFOp : SVOp<"alwaysff", [SingleBlock, NoTerminator, NoRegionArguments,
RecursiveMemoryEffects, RecursivelySpeculatable,

View File

@ -1467,11 +1467,11 @@ struct FIRRTLLowering : public FIRRTLVisitor<FIRRTLLowering, LogicalResult> {
Value getNonClockValue(Value v);
void addToAlwaysBlock(sv::EventControl clockEdge, Value clock,
::ResetType resetStyle, sv::EventControl resetEdge,
sv::ResetType resetStyle, sv::EventControl resetEdge,
Value reset, std::function<void(void)> body = {},
std::function<void(void)> resetBody = {});
void addToAlwaysBlock(Value clock, std::function<void(void)> body = {}) {
addToAlwaysBlock(sv::EventControl::AtPosEdge, clock, ::ResetType(),
addToAlwaysBlock(sv::EventControl::AtPosEdge, clock, sv::ResetType(),
sv::EventControl(), Value(), body,
std::function<void(void)>());
}
@ -1736,7 +1736,7 @@ private:
// We auto-unique graph-level blocks to reduce the amount of generated
// code and ensure that side effects are properly ordered in FIRRTL.
using AlwaysKeyType = std::tuple<Block *, sv::EventControl, Value,
::ResetType, sv::EventControl, Value>;
sv::ResetType, sv::EventControl, Value>;
llvm::SmallDenseMap<AlwaysKeyType, std::pair<sv::AlwaysOp, sv::IfOp>>
alwaysBlocks;
llvm::SmallDenseMap<std::pair<Block *, Attribute>, sv::IfDefOp> ifdefBlocks;
@ -2511,7 +2511,7 @@ Value FIRRTLLowering::getNonClockValue(Value v) {
}
void FIRRTLLowering::addToAlwaysBlock(sv::EventControl clockEdge, Value clock,
::ResetType resetStyle,
sv::ResetType resetStyle,
sv::EventControl resetEdge, Value reset,
std::function<void(void)> body,
std::function<void(void)> resetBody) {
@ -2523,7 +2523,7 @@ void FIRRTLLowering::addToAlwaysBlock(sv::EventControl clockEdge, Value clock,
if (!alwaysOp) {
if (reset) {
assert(resetStyle != ::ResetType::NoReset);
assert(resetStyle != sv::ResetType::NoReset);
// Here, we want to create the folloing structure with sv.always and
// sv.if. If `reset` is async, we need to add `reset` to a sensitivity
// list.
@ -2542,7 +2542,7 @@ void FIRRTLLowering::addToAlwaysBlock(sv::EventControl clockEdge, Value clock,
insideIfOp = builder.create<sv::IfOp>(
reset, []() {}, []() {});
};
if (resetStyle == ::ResetType::AsyncReset) {
if (resetStyle == sv::ResetType::AsyncReset) {
sv::EventControl events[] = {clockEdge, resetEdge};
Value clocks[] = {clock, reset};

View File

@ -533,7 +533,7 @@ FirRegLowering::RegLowerInfo FirRegLowering::lower(FirRegOp reg) {
else
createTree(b, svReg.reg, reg, reg.getNext());
},
reg.getIsAsync() ? ResetType::AsyncReset : ResetType::SyncReset,
reg.getIsAsync() ? sv::ResetType::AsyncReset : sv::ResetType::SyncReset,
sv::EventControl::AtPosEdge, reg.getReset(),
[&](OpBuilder &builder) {
builder.create<sv::PAssignOp>(loc, svReg.reg, reg.getResetValue());
@ -616,7 +616,7 @@ void FirRegLowering::initialize(OpBuilder &builder, RegLowerInfo reg,
void FirRegLowering::addToAlwaysBlock(
Block *block, sv::EventControl clockEdge, Value clock,
const std::function<void(OpBuilder &)> &body, ::ResetType resetStyle,
const std::function<void(OpBuilder &)> &body, sv::ResetType resetStyle,
sv::EventControl resetEdge, Value reset,
const std::function<void(OpBuilder &)> &resetBody) {
auto loc = clock.getLoc();
@ -632,7 +632,7 @@ void FirRegLowering::addToAlwaysBlock(
if (!alwaysOp) {
if (reset) {
assert(resetStyle != ::ResetType::NoReset);
assert(resetStyle != sv::ResetType::NoReset);
// Here, we want to create the following structure with sv.always and
// sv.if. If `reset` is async, we need to add `reset` to a sensitivity
// list.
@ -651,7 +651,7 @@ void FirRegLowering::addToAlwaysBlock(
insideIfOp = builder.create<sv::IfOp>(
reset, []() {}, []() {});
};
if (resetStyle == ::ResetType::AsyncReset) {
if (resetStyle == sv::ResetType::AsyncReset) {
sv::EventControl events[] = {clockEdge, resetEdge};
Value clocks[] = {clock, reset};

View File

@ -107,7 +107,7 @@ private:
void addToAlwaysBlock(Block *block, sv::EventControl clockEdge, Value clock,
const std::function<void(OpBuilder &)> &body,
ResetType resetStyle = {},
sv::ResetType resetStyle = {},
sv::EventControl resetEdge = {}, Value reset = {},
const std::function<void(OpBuilder &)> &resetBody = {});
@ -127,8 +127,8 @@ private:
return constant;
}
using AlwaysKeyType = std::tuple<Block *, sv::EventControl, Value, ResetType,
sv::EventControl, Value>;
using AlwaysKeyType = std::tuple<Block *, sv::EventControl, Value,
sv::ResetType, sv::EventControl, Value>;
llvm::SmallDenseMap<AlwaysKeyType, std::pair<sv::AlwaysOp, sv::IfOp>>
alwaysBlocks;

View File

@ -97,7 +97,7 @@ public:
if (lowerToAlwaysFF) {
rewriter.create<sv::AlwaysFFOp>(
loc, sv::EventControl::AtPosEdge, adaptor.getClk(),
ResetType::SyncReset, sv::EventControl::AtPosEdge,
sv::ResetType::SyncReset, sv::EventControl::AtPosEdge,
adaptor.getReset(), assignValue, assignReset);
} else {
rewriter.create<sv::AlwaysOp>(

View File

@ -278,7 +278,7 @@ instantiateSystemVerilogMemory(ServiceImplementReqOp implReq,
// Now construct the memory writes.
auto hwClk = b.create<seq::FromClockOp>(clk);
b.create<sv::AlwaysFFOp>(
sv::EventControl::AtPosEdge, hwClk, ResetType::SyncReset,
sv::EventControl::AtPosEdge, hwClk, sv::ResetType::SyncReset,
sv::EventControl::AtPosEdge, rst, [&] {
for (auto [go, address, data] : writeGoAddressData) {
Value a = address, d = data; // So the lambda can capture.

View File

@ -100,8 +100,8 @@ public:
auto hwClk = rewriter.create<seq::FromClockOp>(clk.getLoc(), clk);
rewriter.create<sv::AlwaysFFOp>(
mem.getLoc(), sv::EventControl::AtPosEdge, hwClk, ResetType::SyncReset,
sv::EventControl::AtPosEdge, rst, [&] {
mem.getLoc(), sv::EventControl::AtPosEdge, hwClk,
sv::ResetType::SyncReset, sv::EventControl::AtPosEdge, rst, [&] {
for (auto [loc, address, data, en] : writeTuples) {
Value a = address, d = data; // So the lambda can capture.
Location l = loc;