Skip to content

Commit 1bc62be

Browse files
committed
[FIRRTL] Generate annotation code from tablegen
This adds a FIRRTL annotation backend to circt-tablegen. It is currently capable of generating the annotation metadata, the string class names which were in AnnotationDetails.h, as well as the handler table for LowerAnnotations.
1 parent 55ef667 commit 1bc62be

21 files changed

+2303
-1428
lines changed

docs/Dialects/FIRRTL/FIRRTLAnnotations.md

Lines changed: 1 addition & 1144 deletions
Large diffs are not rendered by default.

include/circt/Dialect/FIRRTL/AnnotationDetails.h

Lines changed: 3 additions & 145 deletions
Original file line numberDiff line numberDiff line change
@@ -25,153 +25,11 @@ namespace firrtl {
2525
constexpr const char *rawAnnotations = "rawAnnotations";
2626

2727
//===----------------------------------------------------------------------===//
28-
// Annotation Class Names
28+
// Auto-generated Annotation Class Names
2929
//===----------------------------------------------------------------------===//
3030

31-
constexpr const char *conventionAnnoClass = "circt.ConventionAnnotation";
32-
constexpr const char *typeLoweringAnnoClass =
33-
"circt.BodyTypeLoweringAnnotation";
34-
constexpr const char *dontTouchAnnoClass =
35-
"firrtl.transforms.DontTouchAnnotation";
36-
constexpr const char *enumComponentAnnoClass =
37-
"chisel3.experimental.EnumAnnotations$EnumComponentAnnotation";
38-
constexpr const char *enumDefAnnoClass =
39-
"chisel3.experimental.EnumAnnotations$EnumDefAnnotation";
40-
constexpr const char *enumVecAnnoClass =
41-
"chisel3.experimental.EnumAnnotations$EnumVecAnnotation";
42-
constexpr const char *forceNameAnnoClass =
43-
"chisel3.util.experimental.ForceNameAnnotation";
44-
constexpr const char *decodeTableAnnotation =
45-
"chisel3.util.experimental.decode.DecodeTableAnnotation";
46-
constexpr const char *flattenAnnoClass = "firrtl.transforms.FlattenAnnotation";
47-
constexpr const char *inlineAnnoClass = "firrtl.passes.InlineAnnotation";
48-
constexpr const char *traceNameAnnoClass =
49-
"chisel3.experimental.Trace$TraceNameAnnotation";
50-
constexpr const char *traceAnnoClass =
51-
"chisel3.experimental.Trace$TraceAnnotation";
52-
53-
constexpr const char *blackBoxInlineAnnoClass =
54-
"firrtl.transforms.BlackBoxInlineAnno";
55-
constexpr const char *blackBoxPathAnnoClass =
56-
"firrtl.transforms.BlackBoxPathAnno";
57-
constexpr const char *blackBoxTargetDirAnnoClass =
58-
"firrtl.transforms.BlackBoxTargetDirAnno";
59-
constexpr const char *blackBoxAnnoClass =
60-
"firrtl.transforms.BlackBox"; // Not in SFC
61-
constexpr const char *verbatimBlackBoxAnnoClass = "circt.VerbatimBlackBoxAnno";
62-
constexpr const char *mustDedupAnnoClass =
63-
"firrtl.transforms.MustDeduplicateAnnotation";
64-
constexpr const char *runFIRRTLTransformAnnoClass =
65-
"firrtl.stage.RunFirrtlTransformAnnotation";
66-
constexpr const char *extractAssertAnnoClass =
67-
"sifive.enterprise.firrtl.ExtractAssertionsAnnotation";
68-
constexpr const char *extractAssumeAnnoClass =
69-
"sifive.enterprise.firrtl.ExtractAssumptionsAnnotation";
70-
constexpr const char *extractCoverageAnnoClass =
71-
"sifive.enterprise.firrtl.ExtractCoverageAnnotation";
72-
constexpr const char *testBenchDirAnnoClass =
73-
"sifive.enterprise.firrtl.TestBenchDirAnnotation";
74-
constexpr const char *moduleHierAnnoClass =
75-
"sifive.enterprise.firrtl.ModuleHierarchyAnnotation";
76-
constexpr const char *outputDirAnnoClass = "circt.OutputDirAnnotation";
77-
constexpr const char *testHarnessHierAnnoClass =
78-
"sifive.enterprise.firrtl.TestHarnessHierarchyAnnotation";
79-
constexpr const char *retimeModulesFileAnnoClass =
80-
"sifive.enterprise.firrtl.RetimeModulesAnnotation";
81-
constexpr const char *retimeModuleAnnoClass =
82-
"freechips.rocketchip.util.RetimeModuleAnnotation";
83-
constexpr const char *verifBlackBoxAnnoClass =
84-
"freechips.rocketchip.annotations.InternalVerifBlackBoxAnnotation";
85-
constexpr const char *metadataDirectoryAttrName =
86-
"sifive.enterprise.firrtl.MetadataDirAnnotation";
87-
constexpr const char *noDedupAnnoClass = "firrtl.transforms.NoDedupAnnotation";
88-
constexpr const char *dedupGroupAnnoClass =
89-
"firrtl.transforms.DedupGroupAnnotation";
90-
91-
// Grand Central Annotations
92-
constexpr const char *serializedViewAnnoClass =
93-
"sifive.enterprise.grandcentral.GrandCentralView$SerializedViewAnnotation";
94-
constexpr const char *viewAnnoClass =
95-
"sifive.enterprise.grandcentral.ViewAnnotation";
96-
constexpr const char *companionAnnoClass =
97-
"sifive.enterprise.grandcentral.ViewAnnotation.companion"; // not in SFC
98-
constexpr const char *augmentedGroundTypeClass =
99-
"sifive.enterprise.grandcentral.AugmentedGroundType"; // not an annotation
100-
constexpr const char *augmentedBundleTypeClass =
101-
"sifive.enterprise.grandcentral.AugmentedBundleType"; // not an annotation
102-
constexpr const char *augmentedVectorTypeClass =
103-
"sifive.enterprise.grandcentral.AugmentedVectorType"; // not an annotation
104-
constexpr const char *memTapClass =
105-
"sifive.enterprise.grandcentral.MemTapAnnotation";
106-
constexpr const char *extractGrandCentralClass =
107-
"sifive.enterprise.grandcentral.ExtractGrandCentralAnnotation";
108-
constexpr const char *grandCentralHierarchyFileAnnoClass =
109-
"sifive.enterprise.grandcentral.GrandCentralHierarchyFileAnnotation";
110-
111-
// SiFive specific Annotations
112-
constexpr const char *dutAnnoClass =
113-
"sifive.enterprise.firrtl.MarkDUTAnnotation";
114-
constexpr const char *injectDUTHierarchyAnnoClass =
115-
"sifive.enterprise.firrtl.InjectDUTHierarchyAnnotation";
116-
constexpr const char *sitestBlackBoxAnnoClass =
117-
"sifive.enterprise.firrtl.SitestBlackBoxAnnotation";
118-
constexpr const char *sitestTestHarnessBlackBoxAnnoClass =
119-
"sifive.enterprise.firrtl.SitestTestHarnessBlackBoxAnnotation";
120-
constexpr const char *sitestBlackBoxLibrariesAnnoClass =
121-
"sifive.enterprise.firrtl.SitestBlackBoxLibrariesAnnotation";
122-
constexpr const char *dontObfuscateModuleAnnoClass =
123-
"sifive.enterprise.firrtl.DontObfuscateModuleAnnotation";
124-
constexpr const char *elaborationArtefactsDirectoryAnnoClass =
125-
"sifive.enterprise.firrtl.ElaborationArtefactsDirectory";
126-
constexpr const char *testHarnessPathAnnoClass =
127-
"sifive.enterprise.firrtl.TestHarnessPathAnnotation";
128-
/// Annotation that marks a reset (port or wire) and domain.
129-
constexpr const char *fullResetAnnoClass = "circt.FullResetAnnotation";
130-
/// Annotation that marks a module as not belonging to any reset domain.
131-
constexpr const char *excludeFromFullResetAnnoClass =
132-
"circt.ExcludeFromFullResetAnnotation";
133-
/// Annotation that marks a reset (port or wire) and domain.
134-
constexpr const char *fullAsyncResetAnnoClass =
135-
"sifive.enterprise.firrtl.FullAsyncResetAnnotation";
136-
/// Annotation that marks a module as not belonging to any reset domain.
137-
constexpr const char *ignoreFullAsyncResetAnnoClass =
138-
"sifive.enterprise.firrtl.IgnoreFullAsyncResetAnnotation";
139-
140-
// MemToRegOfVec Annotations
141-
constexpr const char *convertMemToRegOfVecAnnoClass =
142-
"sifive.enterprise.firrtl.ConvertMemToRegOfVecAnnotation$";
143-
144-
// Instance Extraction
145-
constexpr const char *extractBlackBoxAnnoClass =
146-
"sifive.enterprise.firrtl.ExtractBlackBoxAnnotation";
147-
constexpr const char *extractClockGatesAnnoClass =
148-
"sifive.enterprise.firrtl.ExtractClockGatesFileAnnotation";
149-
constexpr const char *extractSeqMemsAnnoClass =
150-
"sifive.enterprise.firrtl.ExtractSeqMemsFileAnnotation";
151-
152-
// AddSeqMemPort Annotations
153-
constexpr const char *addSeqMemPortAnnoClass =
154-
"sifive.enterprise.firrtl.AddSeqMemPortAnnotation";
155-
constexpr const char *addSeqMemPortsFileAnnoClass =
156-
"sifive.enterprise.firrtl.AddSeqMemPortsFileAnnotation";
157-
158-
// Memory file loading annotations.
159-
constexpr const char *loadMemoryFromFileAnnoClass =
160-
"firrtl.annotations.LoadMemoryAnnotation";
161-
constexpr const char *loadMemoryFromFileInlineAnnoClass =
162-
"firrtl.annotations.MemoryFileInlineAnnotation";
163-
164-
// WiringTransform Annotations
165-
constexpr const char *wiringSinkAnnoClass =
166-
"firrtl.passes.wiring.SinkAnnotation";
167-
constexpr const char *wiringSourceAnnoClass =
168-
"firrtl.passes.wiring.SourceAnnotation";
169-
170-
// Attribute annotations.
171-
constexpr const char *attributeAnnoClass = "firrtl.AttributeAnnotation";
172-
173-
// Module Prefix Annotations.
174-
constexpr const char *modulePrefixAnnoClass = "chisel3.ModulePrefixAnnotation";
31+
// Include auto-generated annotation class name constants
32+
#include "circt/Dialect/FIRRTL/FIRRTLAnnotationDetails.h.inc"
17533

17634
} // namespace firrtl
17735
} // namespace circt

include/circt/Dialect/FIRRTL/CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,11 @@ add_circt_doc(FIRRTLTypes Dialects/FIRRTLTypes -gen-typedef-doc)
4242
add_circt_doc(FIRRTLTypesImpl Dialects/FIRRTLTypesImpl -gen-typedef-doc)
4343
add_circt_doc(FIRRTLOpInterfaces Dialects/FIRRTLOpInterfaces -gen-op-interface-docs)
4444

45+
# Generate FIRRTL Annotations classes and documentation.
46+
set(LLVM_TARGET_DEFINITIONS FIRRTLAnnotations.td)
47+
circt_tablegen(CIRCT FIRRTLAnnotationDetails.h.inc --firrtl-annotations-details TARGETS MLIRFIRRTLIncGen)
48+
circt_tablegen(CIRCT FIRRTLAnnotationRecords.inc --firrtl-annotation-records TARGETS MLIRFIRRTLIncGen)
49+
circt_tablegen(CIRCT ${CIRCT_BINARY_DIR}/docs/Dialects/FIRRTLAnnotations.md --firrtl-annotations-doc TARGETS circt-doc)
4550

4651
# Generate Pass documentation.
4752
add_circt_doc(Passes FIRRTLPasses -gen-pass-doc)

0 commit comments

Comments
 (0)