Releases: llvm/circt
firtool-1.149.0
What's Changed
- [LowerToHW] Add support for lower-to-core in firrtl.fprintf by @nanjo712 in #10452
- [ESI][Runtime] Codegen: emit structs with accessors by @teqdruid in #10538
- [SimToSV] Fix an error occurred when a sim.pause is nested in a scf.if by @nanjo712 in #10535
- [ESI][Runtime] Support for integrals >64 bits by @teqdruid in #10548
- Bump LLVM by @uenoku in #10542
- [SimToSV] Lower sim.flush to sv.fflush by @nanjo712 in #10546
- [Sim] Add convert-to-hw for SquashSimTriggered by @nanjo712 in #10534
- [FIRRTLToHW] Print to stderr in lower-to-core path by @nanjo712 in #10544
- Add BMCTrace runtime support and unit tests for text counterexample formatting by @5iri in #10537
- [CI] Include the Runner Image Version in the sccahe key as a string by @okekayode in #10547
- [ESI][Runtime] Cosim: remove MtiPli target and resolve svDpi at runtime by @teqdruid in #10553
- [Synth] Fix NPN input permutation mapping by @uenoku in #10543
- [circt-lec] Lower truth tables before SMT conversion by @uenoku in #10491
- [OM] Use FlatSymbolRefAttr for object class names by @uenoku in #10554
- [Moore][ImportVerilog][MooreToCore][Sim] Add $fdisplay and $fwrite by @VecoMr in #10520
- [ESI][Runtime] Make esi-cosim work on Windows by @teqdruid in #10558
- [SV] Add pass to hide non-synthesizable ops by @teqdruid in #10479
Full Changelog: firtool-1.148.0...firtool-1.149.0
firtool-1.148.0
What's Changed
- [Sim] Set the GetFileOp operation to procedural only by @nanjo712 in #10474
- [Sim] Improve cleanup logic in ProceduralizeSim by @fzi-hielscher in #10469
- [Synth] add onehot gate by @okekayode in #10475
- [LowerClasses][OM] Make classes for private modules private by @uenoku in #10481
- [SimToSV] Use SparseOpSCC for cleanup by @nanjo712 in #10476
- [SimToSV] Lower sim.triggered to sv.always by @nanjo712 in #10490
- Bump LLVM by @uenoku in #10483
- [Synth][FunctionalReduction] Fold constants by @okekayode in #10487
- [Synth] add synth.mux_inv by @okekayode in #10486
- [ESI][Runtime] Codegen: emit files as utf8 by @teqdruid in #10495
- [ESI][runtime] Make VoidType zero-width; collapse 0-bit types to void in codegen by @teqdruid in #10496
- [ESI][Runtime] Optimize Debug wheel builds for size by @teqdruid in #10497
- [ImportVerilog]
HierarchicalNamesshould skip reprocessing identical module instances by @rocallahan in #10341 - [ESI][Runtime] Fix Windows linking issue by @teqdruid in #10498
- [ImportVerilog] Add support for onehot by @jpienaar in #10465
- [ESI][Runtime] Don't cache gRPC build by @teqdruid in #10503
- [CI] Enable macos wheel building by @jumerckx in #10371
- [ExtractInstance] Rejecet non-instance op more gracefully by @uenoku in #10508
- [circt-reduce][FIRRTL] Sanitize Instance Choice by @seldridge in #10506
- [VerifToSMT] Use dbg.variable names for BMC declarations by @5iri in #10492
- [Moore][ImportVerilog][MooreToCore][Sim] Add file I/O system tasks support. by @VecoMr in #10460
- ci: declare minimum permissions on dispatchCirctTests workflow by @arpitjain099 in #10462
- [ImportVerilog] Fix unpacked string array with a concatenation initialization by @sunhailong2001 in #10511
- [MooreToCore] Convert operands of arith SelectOp by @fzi-hielscher in #10512
- [ImportVerilog] Fix deprecated op building style, NFC by @fzi-hielscher in #10514
- [Arc] Removed unused
isAlwaysfunction, NFC by @fzi-hielscher in #10515 - [ESI][Runtime] Codegen: skip structs containing windows by @teqdruid in #10516
- [ESI][Runtime] Fixes for
voidDMA transfers by @teqdruid in #10517 - [HW] Add canonicalizer for HW StructCreateOp by @fzi-hielscher in #10521
- [OM] Support evaluated object evaluator flow by @uenoku in #10440
- [ESI][Runtime] Cosim: ditch gRPC for custom RPC by @teqdruid in #10507
- [OM][firtool][om-linker] Elaborate public classes before emission/after linking. by @uenoku in #10480
- [FIRRTL] Create minimal alt paths LowerClasses by @seldridge in #10518
- [FIRRTL] Fix mux fold bug, 1 const, 2 SSA values by @seldridge in #10529
- [OM][LinkModules] Update ElaboratedObjectOp symbol by @uenoku in #10530
- [OM] Fuse class field locations into values during object inlining by @uenoku in #10531
- [Sim] add SquashSimTriggered pass for merging sim.triggered by @nanjo712 in #10524
- [Moore][ImportVerilog][MooreToCore][Sim] Add $fflush by @VecoMr in #10525
- [OM] Fix IntegerShlOp evaluation to allow arbitrary bitwidth by @uenoku in #10533
- [Synth] add synth.gamble by @okekayode in #10502
- [FIRRTL][circt-reduce] Add LayerEnableRemover to strip enabled layers by @okekayode in #10539
- [FIRRTL] Domains and -fixup-eicg-wrapper working by @seldridge in #10532
- [Synth] Move three-input boilerplate to ODS by @uenoku in #10540
New Contributors
Full Changelog: firtool-1.147.0...firtool-1.148.0
firtool-1.147.0
What's Changed
- [HW] HWVectorization Part 3: Structural Patterns by @mafeguimaraes in #9749
- [Synth] Add NLDM attribute and enhance LibertyParser by @okekayode in #10373
- [Arc] Convert HasBeenResetOp to register in StripSV by @fabianschuiki in #10376
- [OM] Add ElaborateObject pass by @uenoku in #10363
- [Arc] Add missing onInitialized prototype by @fabianschuiki in #10377
- [Arc] Fix
arcRuntimeIR_onInitializedcomment, NFC by @fzi-hielscher in #10379 - [PyCDE][ESI] Fix ListWindowTo* for zero width list types by @teqdruid in #10372
- [Synth][CutRewriter] Include constant in truth table computation by @uenoku in #10375
- [ImportVerilog] Use Slang's LRM clock inference for assertion calls by @TaoBi22 in #10370
- [NFC][LTL] Document PastOp clk operand by @TaoBi22 in #10384
- [ImportVerilog] Capture analysis should skip reprocessing identical module instances by @rocallahan in #10338
- [PyCDE] Don't call 'echo' in setup.py by @teqdruid in #10388
- [ESI][Runtime] Refactor pytest for loopback C++ by @teqdruid in #10389
- [Arc] Consider clocked DPI calls as arc-breaking in SplitLoops by @fabianschuiki in #10397
- [Sim] Allow DPI calls to point to regular funcs in LowerDPIFunc by @fabianschuiki in #10396
- [Verif] Add `ifdef SYNTHESIS guards in SV lowering by @teqdruid in #10387
- [Arc] Lower ConstantTimeOp to i64 constant by @fabianschuiki in #10400
- [ESI][Runtime] Codegen: emit typed accessors for window helper structs by @teqdruid in #10390
- [ESI][Runtime] Use
std::arrayand limit packing by @teqdruid in #10402 - [ESI][Runtime] Codegen: window TypeDeserializers by @teqdruid in #10403
- [Python] Don't eager-load LLVM dialect in CIRCT bindings by @teqdruid in #10381
- [Comb][AssumeTwoValued] Set twoState=true on all Comb ops by @jmolloy in #10395
- Add support for loop-generate in SV dialect. by @jpienaar in #10383
- [Arc] Add a next wakeup time slot to the model header by @fabianschuiki in #10401
- [ESI][Runtime] Support lists in TypedFunction/TypedCallback by @teqdruid in #10409
- [ESI][Runtime] Codegen facades for each module by @teqdruid in #10412
- [ESI][Runtime] Codegen: add constructors for POD types by @teqdruid in #10413
- Add union roundtrip by @jpienaar in #10236
- [Comb] Add two canonicalization patterns by @jmolloy in #10394
- [circt][arc] Add bufferized array handling by @jmolloy in #10391
- [CD] Remove scheduled Python wheel uploads. by @mikeurbach in #10417
- [firtool] Move SpecializeOption after InferResets by @uenoku in #10386
- Bump LLVM to a47d3636f953870d96fb6cc68817365fdad2f9fe. by @mikeurbach in #10416
- [ESI][Runtime] Add integration tests for ordering issues by @teqdruid in #10418
- [LTL] Add ClockedDelayOp description by @Clo91eaf in #10415
- [Synth] Improve the truth table expansion of > 6 inputs by @okekayode in #10420
- [Synth] Add attribute for linear delay model and pass to approximate them from NLDM attr by @okekayode in #10385
- [Comb] Improve SExt matcher by @okekayode in #10432
- [circt-synth] Register datapath dialect by @uenoku in #10434
- [Arc] Remove optional enable operands of MemoryWriteOp and StateWriteOp by @fzi-hielscher in #10411
- [Sim] Add sim.fmt.current_time for printing simulation time by @nanjo712 in #10421
- [firrtl] Update for released FIRRTL 6.0.0 by @seldridge in #10435
- [OM] Fix unsafe cast in OM class op verifier, fix up unverified unit tests, NFC by @uenoku in #10437
- [OM] Fix an unused variable warning by @uenoku in #10438
- [LTL] Add fold and canonicalization patterns for ClockedDelayOp by @Clo91eaf in #10423
- [Support] Add SparseOpSCC utility by @fzi-hielscher in #10305
- [LTL][NFC] Move clocked_delay + concat fold tests in with delay + concats by @TaoBi22 in #10442
- [ExportVerilog] Emit LTL clocked delays by @Clo91eaf in #10443
- [docs] Add circt-bot avatar; NFC by @fabianschuiki in #10445
- Python Bindings export CF and Func dialect by @hmatt1 in #10424
- Revert "[Verif] Add `ifdef SYNTHESIS guards in SV lowering (#10387)" by @seldridge in #10446
- [OM] Refactor OM evaluator unit tests, NFC by @uenoku in #10439
- [Sim] Introduce sim.triggered op by @nanjo712 in #10450
- [ImportVerilog] Fix several bugs in the handling of arrays by @jmolloy in #10444
- [LTL] Make PastOp clock operand mandatory by @TaoBi22 in #10392
- [arc][LowerToLLVM] Handle i0 types more rigorously by @jmolloy in #10393
- [ImportVerilog] Resolve modport member accesses through interface ports by @micprog in #10398
- [ESI][Runtime] Comprehensive codegen tests and fixes by @teqdruid in #10455
- [Sim][MooreToCore] Lowering moore.fmt.string op to the new sim.fmt.string by @sunhailong2001 in #10346
- [LTL][CAPI] Add LTL dialect CAPI implementation and unit tests by @Clo91eaf in #10449
- [LTLToCore] Drop assume-first-clock option by @TaoBi22 in #10456
- [NFC][ESI][Runtime] Refactor integration test infrastructure with shared probe runner by @teqdruid in #10457
- [ESI][Runtime] Cosim BSP: allow selection of DMA engines by @teqdruid in #10458
- [OM] Simplify OM evaluator tests with helper functions, NFC by @uenoku in #10448
- Add a minimal EditorConfig file; NFC by @fabianschuiki in #10454
- [CI] Dispatch circt-tests via workflow_run, support fork PRs by @fabianschuiki in #10453
- [ESI][Runtime] Fix data race in PODTypeDeserializer::poke() by @teqdruid in #10464
- ci: declare contents:read on testESIRuntime workflow by @arpitjain099 in #10463
- [ESI][Runtime] Packaging: don't include debug DLLs by @teqdruid in #10466
- [ESI][codegen] Comment out invalid C++ void fields by @teqdruid in #10467
- [Synth] Add majority gate by @okekayode in #10459
- [LLHD][Mem2Reg] Remove quadratic behavior by @jmolloy in #10461
- [circt-synth] Transform Dialect support PR 1 by @markram1729 in #10471
- [LowerToHW] Emit sim.proc.print nested in sim.triggered instead of sim.print by @nanjo712 in #10451
- [circt-verilog] Add bytecode emission by @fabianschuiki in #10472
- [ImportVerilog] Remove unnecessary field
ModuleLowering::canonicalBodyby @rocallahan in #10473 - [CI][UBTI] Free disk space first by @teqdruid in #10470
- Revert "[ImportVerilog] Fix several bugs in the handling of arrays" by @jmolloy in #10478
New Contributors
- @rocallahan made their first contribution in #10338
- @hmatt1 made their first contribution in #10424
- @micprog made their first contribution in #10398
- @arpitjain099 made their first contribution in #10463
Full Changelog: firtool-1.146.0...firtool-1.147.0
firtool-1.146.0
What's Changed
- [ci] Use old (macOS) bash-compatible lowercase by @seldridge in #10306
- [circt-test] Print empty JSON array when listing tests on empty input by @ankit-cybertron in #10295
- [AGENTs] Fix ESI/PyCDE directions and add a style rule by @teqdruid in #10307
- [ESI][Runtime] Switch ReadChannelPort to segmented by @teqdruid in #10308
- [ci] Exclude z3 from macOS tests by @seldridge in #10309
- [CI] Add extra_cmake_args option to UBTI and enable LLVM_ENABLE_REVERSE_ITERATION by @uenoku in #10300
- [lldh] Revert Recent Mem2Reg Changes by @seldridge in #10318
- [Synth][FunctionalReduction] Add a newVar interface to SATSolver and use it in FR by @okekayode in #10316
- [Synth] Add dot gate by @uenoku in #10277
- Bump LLVM by @uenoku in #10320
- [CI] Enable Reverse iteration by @uenoku in #10312
- [Synth][FunctionalReduction] Improve choice materialization with reachability of choice by @okekayode in #10319
- [SimToSV] support lowering stdout/stderr by @nanjo712 in #10283
- [OM] Switch to IntegerBinaryInterface by @seldridge in #10328
- [Synth][FunctionalReduction] Remove redundant reachable values from choice classes by @okekayode in #10325
- [Support][SATSolver] Add at-most-one / exactly-one clause helpers by @uenoku in #10324
- [FIRRTL][OM] Add Bool/Integer And/Or/Xor by @seldridge in #10322
- [LowerToHW] Extract the logic related to file descriptor acquisition as a common utility function by @nanjo712 in #10288
- [FSM] Canonicalize away no-op updates by @TaoBi22 in #10336
- Prioritize in-tree MLIR headers in unified builds by @gipsyh in #10331
- [Synth] Clean up boolean logic interface, NFC by @uenoku in #10333
- [OM] Add ElaboratedObjectOp by @uenoku in #10334
- [ESI][Runtime] Fix race condition in port disconnects by @teqdruid in #10342
- [ESI][Runtime] Refactor promise fulfill logic in ReadChannelPort by @teqdruid in #10343
- [ESI][Runtime] TypeDeserializer handles complex messages by @teqdruid in #10310
- Bump LLVM to 90c90a41bed5ba2e4c7b724ecfd533f6f3f7d204 by @TaoBi22 in #10345
- [CoreToFSM] Avoid violating pattern invariants in getReachableStates by @TaoBi22 in #10347
- [MSFT] Fix Python DeviceDB test by @teqdruid in #10351
- [OM] Clean up ObjectOfieldOp: Move away from symbols, remove a field path and VerifyObjectFields pass by @uenoku in #10303
- [OM] Drop memory effects from Class, Object by @seldridge in #10352
- [FSMToSMT] Allow fsm.machines with no outputs/vars by @TaoBi22 in #10354
- [FIRRTL] InferDomains: On error, print more diagnostic information by @rwy7 in #10337
- [CoreToFSM] Move topological sorts to avoid pattern invariant violation by @TaoBi22 in #10355
- [ExportVerilog] Drop 'reg' for unpacked arrays too by @teqdruid in #10361
- [FIRRTL] Add "hasProperties" to InstanceInfo by @seldridge in #10359
- [NFC][FSMToSMT] Make error test names more informative by @TaoBi22 in #10364
- [CellIFT] Add CellIFT instrumentation pass for HW/Comb/Seq IR by @flaviens in #10250
- [SimToSV] lower sim.get_file to i32 fd by @nanjo712 in #10335
- [FIRRTL] Include "public" in hasProperties logic by @seldridge in #10365
- [LLHD] Run Mem2Reg per slot to fix cubic scaling by @fabianschuiki in #10321
- [LLHD][Deseq] Lower reset-only async reset processes as register holds by @gipsyh in #10344
- [Moore][ImportVerilog] Implement static $cast via materializeConversion by @sunhailong2001 in #10156
- [CI] Run integration tests in Clang as well by @uenoku in #10366
- [ESI][Runtime] Update AGENTS.md with debuging tips by @teqdruid in #10367
- [ESI][Runtime] Message translation: check for support by @teqdruid in #10368
- [PyCDE] Modules to convert parallel <--> serial lists by @teqdruid in #10360
- [PyCDE] Add AGENTS.md with hardware dev tips by @teqdruid in #10369
- [FIRRTL] Create classes for transitive properties by @seldridge in #10362
New Contributors
Full Changelog: firtool-1.145.0...firtool-1.146.0
firtool-1.145.1
Full Changelog: firtool-1.145.0...firtool-1.145.1
firtool-1.145.0
What's Changed
- [ImportVerilog] Refactor HierarchicalNames to use ASTVisitor by @TaoBi22 in #10097
- Silence a warning by @darthscsi in #10099
- [NFC][ImportVerilog] Clean up unnecessary hierarchical expr visitor by @TaoBi22 in #10098
- [ImportVerilog] Add capture analysis pre-pass for functions by @fabianschuiki in #10094
- [Synth] [FunctionalReduction] Add conflict limit option, and add to circt-synth by @uenoku in #10073
- [ExportVerilog] Add ModportType support for non-extern hw.module ports by @dmlockhart in #10030
- [ImportVerilog] Use capture analysis for function declarations by @fabianschuiki in #10101
- [ImportVerilog] Support case inside statements by @sunhailong2001 in #10090
- [SMTToZ3LLVM] Strip dbg.variable and dbg.scope ops (for now) by @TaoBi22 in #10102
- [Sim][SimToSv] DPI-C Semantic preserving sim.func.dpi and sim.func.dpi.call by @pscabot in #9977
- [circt-bmc] Preserve signal names before lowering by @ankit-cybertron in #10075
- [ImportVerilog] Add basic (and/or/xor) primitive support by @TaoBi22 in #10108
- [Arc][Conversion] Lower sim.clocked_terminate to exit in LowerArcToLLVM by @nanjo712 in #10089
- [Arc] Handle sv.xmr.ref ops and hw.hierpath ops by @nanjo712 in #10096
- [ImportVerilog] Post-merge review fixes for #10108 by @TaoBi22 in #10110
- [ArcRuntime] Error on invalid trace buffer size by @fzi-hielscher in #10113
- [CMake][ArcRuntime] Tweak build of libfst by @fzi-hielscher in #10112
- [FIRRTL] InferDomains: Add debug logging by @rwy7 in #10107
- [ImportVerilog] Two-phase function conversion: declare then define by @fabianschuiki in #10111
- [SATSolver] Fix a namespace issue, NFC by @uenoku in #10117
- [HW] Add IMDCE module rewrites by @stomfaig in #10007
- [Synth][CutRewriter] Add signature filtering by @uenoku in #10120
- Revert "Revert "[CI] Cancel in-progress PR builds on new push"" by @uenoku in #10122
- [FIRRTL] Fix mask repeat order in FlattenMemory by @Waryc in #10106
- [FIRRTL] LowerDomains Domain-type Associated Wire by @seldridge in #10123
- [FIRRTL] InferDomains: Fix wire updating by @rwy7 in #10115
- [ci] Switch buildAndTest to use UBTI by @seldridge in #10135
- [FIRRTL] InferDomains: put code under a class by @rwy7 in #10145
- [ci] Only save sccache on push to main by @uenoku in #10149
- [ci] Switch to release builds for pre-merge by @seldridge in #10150
- [FIRRTL] LowerTypes Wire Domain Association Support by @seldridge in #10151
- [ImportVerilog] Add support for remaining n-input primitives by @TaoBi22 in #10155
- [FIRRTL] InferDomains: insert domain bounce wires by @rwy7 in #10148
- [Synth] Remove MIG support by @uenoku in #10154
- [TruthTable][Synth] Add precomputed 4-input NPN lookup table by @uenoku in #10118
- [Synth] Use truth table merging for cut computation by @uenoku in #10121
- [FIRRTL] Add FIRRTL Exporter Version Support by @seldridge in #10119
- Bump LLVM to e89a4dfabfac7016819d201dacb6c6c58e6a2365 by @mikeurbach in #10047
- FIRRTL] InferDomains: rename classes by @rwy7 in #10157
- [1/4] [MooreToCore] Add stable class object header layout, introduce RTTI slot by @Scheremo in #10127
- [2/4] [MooreToCore] Materialize class RTTI globals by @Scheremo in #10128
- [ImportVerilog] Sort generated modules by source order, deterministically by @jmolloy in #10164
- ImportVerilog: improve testbench compatibility by @AmurG in #10095
- [ImportVerilog] Support using string variables as arguments of $display by @sunhailong2001 in #10147
- [ImportVerilog] Add support for not primitive by @TaoBi22 in #10165
- [FIRRTL][OM] Add property asserts by @seldridge in #10093
- Modify ConvertCombToSynth to run on any op and add unit tests by @joaovam in #10169
- [FIRRTL] Fix C++20 incomplete type error in FIRRTLAnnotationsGen by @ayanbanrj in #10134
- [circt-synth] Add functional reduction conflict limit option by @uenoku in #10170
- [ESI][Runtime] change Verilator cosim flow by @teqdruid in #10159
- [Sim] Add output-stream support and introduce sim.get_file by @nanjo712 in #10163
- [FIRRTL] Remove deprecated printf-encode verif ops by @seldridge in #10173
- [Synth][CutRewriter] Support choice cuts in mapping by @uenoku in #10171
- [FIRRTL][OM] Property Equality Expression by @seldridge in #10168
- [ci] Add z3 to UBTI native builds by @seldridge in #10175
- [SV][ExportVerilog] Add sv.write for no-stream writes by @nanjo712 in #10179
- [ci] UBTI Cleanup by @seldridge in #10177
- [SCFToCalyx] Fix illegal op mutation in RewritePattern by @uenoku in #10178
- [ci] Better release artifact matrix job names, NFC by @seldridge in #10182
- [ci] Restore original buildAndTest job names, NFC by @seldridge in #10183
- [Synth][FunctionalReduction] support for inversion equivalences by @okekayode in #10181
- [LLHD][SV] Unify the ProceduralRegion trait in CIRCTSupport by @fzi-hielscher in #10180
- [Arc] Fix untracked op mutation in canonicalizer by @uenoku in #10176
- [ESI][Runtime] Add SegmentedMessageData to support minimize copies by @teqdruid in #10160
- [Sim] TableGen whistespace cleanup, NFC by @fzi-hielscher in #10196
- [FIRRTL] InferDomains: support probes by @rwy7 in #10167
- [Datapath][Synth] Make comb-to-datapath and lower-word-to-bits work on generic ops by @joaovam in #10198
- [ESI][Runtime] Make esitester public by @teqdruid in #10199
- [ci] Add integration test input to UBTI flows by @seldridge in #10188
- [circt-synth] Reduce problem sizes and load balance LEC tests, NFC by @uenoku in #10202
- [Synth] Add BooleanLogicOpInterface for and_inv by @uenoku in #10190
- [ESI][Runtime] Add UnionType by @teqdruid in #10208
- [ESI][Runtime] Add a workflow to test just the ESI Runtime by @teqdruid in #10209
- [Synth] [LowerWordToBits] Constant defined outside of IsolatedAbove region by @joaovam in #10210
- [SV][HW][Sim] Rework (Non)ProceduralOp traits by @fzi-hielscher in #10195
- [ci] Use UBTI for nightly by @seldridge in #10200
- [Synth] Modify StructuralHash to remove HwModule dependency and add IR test by @joaovam in #10212
- [ESI][Runtime] Fix runtime test workflow by @teqdruid in #10214
- [ESI][Runtime] Update Copilot runtime instructions by @teqdruid in #10220
- [ci] More clang versions in UBTI by @seldridge in #10218
- [ESI][Runtime] Add Window and List types by @teqdruid in #10221
- [Calyx] Fix non-determinism in commonTailPatternWithPar by @uenoku in #10216
- [ExportVerilog] Migrate the tests for sv.fwrite and sv.write to sv-dialect.mlir by @nanjo712 in #10205
- [Synth] Use BooleanLogicOpInterface in LongestPathAnalysis, NFC by @uenoku in #10225
- [Synth][LowerVariadic] Use TypeSwitch over dyn_cast, NFC by @uenoku in #10226
- [ExportVerilog] Update LoweringOptionsParser flags by @Nergy-TCGeneric in #10222
- [Arc] Avoid DenseMap iteration in SplitFuncs by @TaoBi22 in #10228
- [Sim] Add builtin stdout/stderr stream ops by @nanjo712 in #10206
- [ImportVerilog] Add support for buf primitive by @TaoBi22 in #10227
- [Moore][ImportVerilog][MooreToCore] Add DPI call semantics to Moore by @pscabot in https://githu...
firtool-1.144.0
firtool 1.144.0 Release Notes
Changes between firtool-1.143.0 and firtool-1.144.0.
FIRRTL
- Erase wire domain operands during lowering (ca2e93f)
- Infer wires w/ domain associations (c4283b2)
- Add parser/printer for wire w/ domains (2301d8e)
- Extend WireOp verifier for domains (b6db749)
- Add variadic domain operands to WireOp (0d36a8c)
- Make wording for optional intrinsic args/params consistent; NFC (#10092)
- Add ltl.past intrinsic (#10091)
- [LowerToHW] Change InstanceChoice ABI from header files to defines (#10042)
- Fix LowerClasses Objects not InstanceLike (#10081)
- reduction test: find utilities via /usr/bin/env. (#10079)
- Remove convention verification for InstanceChoice (#10066)
- Don't use matching connect for bundles w/ analog (#10054)
- Move InferDomains pass after ExpandWhens (#10043)
- Remove getPortNames from FInstanceLike (#10039)
- parser: support rwprobe of open-agg instance results. (#10018)
- Extend emitConnect to open aggregates. (#10017)
- Fix use-before-def in InferDomains (#10029)
- Add type lowering support for InstanceChoiceOp (#9970)
- [LOA] Fix bug dropping inner symbol within mapped type. (#10026)
- [NFC] Use OpRewritePattern in FIRRTLFolds (#10023)
- [OM] Add string.concat canonicalization (#9997)
- Utils: fix getValueByFieldID for open aggregates. (#10016)
- [InferResets] Add InstanceChoice support (#9955)
- Remove FInstanceLike from ObjectOp and add interface methods to FInstanceLike, NFCI (#9975)
- Fix a failure when the number of operands are missing on format string (#10044)
OM
- Evaluator: fix type mismatch for unknown object fields (#10085)
SV
- Add SymbolUserOpInterface to VerbatimOp and friends (#10088)
HW
- Verify port_locs length in module verifier (#10013)
- Fix crash on self-referential hw.wire canonicalize (b59eca8)
Arc
- [StripSV] Replace i1 macro references with true constants (#10086)
- Fix trace-instrumentation test to use supported directives. (#10027)
- Fix aliases in FST trace files (#10076)
- Add optional support for FST tracing. (#9979)
ImportVerilog
- Handle
$monitor([boh]?|on|off)statements (#10057) - Emit coroutines for tasks (#10070)
- Fix signal captures in timing controls (#10067)
- Add initial virtual interface lowering (#10035)
- Add initial virtual interface lowering (#9904)
- Fix crash on instance with unconvertible port values (1625085)
- Fix crash on array new with unsupported size expr (9445def)
- Fix crash on continuous assign with rise/fall delay (#9994)
- Fix crash on repeat loop with real count (#9992)
- Fix crash on enum traversal methods (#9988)
- Use FileLineColRange for source ranges. (#10014)
Moore
- Unify random builtins into urandom_range, add lowering (#10071)
- Add coroutine, call_coroutine ops; lower to LLHD (#10069)
- Fix crash on self-referential AssignedVariableOp canonicalize (72acea9)
MooreToCore
- [HW] Fix a few compiler warnings, NFC (f2ee27b)
- Fix queue pop conversions bypassing rewriter (b190784)
- Fix crash on class new with unsupported member types (#10001)
- Fix crash on dynamic array variable conversion (#9996)
LLHD
- Add coroutine, call_coroutine, return ops (#10068)
- Don't promote signals with projections and mixed drive delays (#10004)
- Don't promote signals with cross-block nested projections (#10003)
- Skip slots without drive sets in HoistSignals (#10000)
- Handle float types in HoistSignals, skip unsupported types (#9999)
- Handle union types in Mem2Reg signal promotion (#9995)
- Don't promote signals with non-integer types in Mem2Reg (#9989)
Synth
- [ResourceUsage] Fix misuse of InstanceGraphNode::getModule, report truth table total count (#10078)
- [CutRewriter] Add stats (#10077)
- Extend functional reduction SAT support to OR/XOR/MIG (#10009)
- Add canonicalization for synth.choice (#10019)
- [SynthToComb] Support n-input MIG to comb lowering (#10008)
- Add basic SAT construction for functional reduction (#9939)
- [Synth] Implement operation reuse for LowerVariadic (#9964)
CombToSynth
- Lower majority-inverter to and-inverter (#9947)
Support
- Add CaDiCaL SAT solver backend (#10032)
- [SATSolver] Add an utility for assume, split decl and def, NFC (#10011)
- [SATSolver] Add indexed max heap utility (#9945)
CoreToFSM
- Require that all registers have the same reset signal (#10064)
- Error out on multiple reg clocks (#10061)
- Error out when clocks are used outside regs (#10060)
ESI
- [Runtime] Add ChannelService for raw to_host/from_host channels (#10072)
- [Runtime] Stop publishing weekly and upload debug (#10002)
- [Runtime] Include "verilated_random.cpp" if available (#9991)
circt-reduce
- Add reset disconnect reduction (#10059)
- Add convention attribute remover (#10058)
- Fix connect-forwarder crash (#10052)
- Fix module-port-pruner crash on ports with uses (#10040)
- Add IMDCE as a FIRRTL reduction (#10046)
Sim
- Fix null dereference in StringConcatOp::fold (#9990)
FlattenMemRefs
- Remove global static variables (#10024)
InstanceGraph
- Relax assertion failure condition (#10005)
HWToSystemC
- Fix illegal Op creation (#10012)
Release
- Add macOS AARCH64 (macos-15) runner to release artifacts (#10082)
New Contributors
- @AayushMainali-Github made their first contribution in #10023
- @AmurG made their first contribution in #9904
- @nanjo712 made their first contribution in #10086
Full Changelog: firtool-1.143.0...firtool-1....
firtool-1.143.0
CIRCT Release Notes: firtool-1.143.0
FIRRTL Dialect
String Properties
This release adds comprehensive support for string concatenation in FIRRTL
properties:
-
New
firrtl.string.concatoperation ([15f44a9], [32d7d87], [ae00359]):
Concatenate multiple string property values with full support in parsing,
emission, and lowering to OM. This enables building complex string properties
from multiple components.Example:
%result = firrtl.string.concat %prefix, %name, %suffix -
The operation lowers cleanly through LowerClasses to OM's
om.string.concat
([2f9b5c9]) and includes evaluator support ([34e5533]) for runtime string
concatenation.
Domain System Overhaul
The domain system has undergone a major redesign to align with FIRRTL's
class-based property system:
-
Domains are now similar to classes ([#9871]): Domain types now include
symbol references and field name/type tuples, making them structurally similar
to FIRRTL classes. This unification simplifies the type system and enables
better tooling support. -
Field value support ([#9902]):
DomainCreateOpnow accepts variadic field
values as operands, allowing domains to be instantiated with specific field
values directly. This eliminates the need for separate assignment operations.Example:
%domain = firrtl.domain.create @ClockDomain(%clk, %reset) -
New
DomainSubfieldOp([#9910]): Extract field values from domain
instances usingfirrtl.domain.subfield, similar to how object fields are
accessed. -
Improved domain inference ([#9958]): The InferDomains pass now properly
handlesDomainCreateOpandDomainCreateAnonOp, preventing spurious domain
inference on modules containing these operations. Error messages for domain
unification conflicts are now more user-friendly. -
Simplified storage ([#9896]): Domain information is now stored exclusively
in types rather than duplicated in thedomainInfoattribute, reducing
redundancy and potential inconsistencies. -
Domain stripping improvements ([#9931]): The domain stripping mode now
properly handlesDomainSubfieldOpby replacing uses withUnknownValueOp
before erasure.
Intrinsics
- All intrinsics migrated to TableGen ([#9847]): The remaining 34
manually-registered FIRRTL intrinsics have been moved to the
FIRRTLIntrinsics.tdTableGen file. This enables automatic generation of both
registration code and documentation. Previously undocumented intrinsics (LTL
ops, clock_inv, clock_div, mux cells, has_been_reset, fpga_probe) now have
proper descriptions with argument/result tables.
Instance Choice Support
-
ExpandWhens support ([#9956]): The ExpandWhens pass now properly handles
InstanceChoiceOp, treating it the same as regularInstanceOpfor
when-block expansion. -
InstanceInfo tracking ([#9811]): The InstanceInfo analysis now tracks
modules instantiated within instance choice operations, following the same
pattern as other module attributes likeinDesignandinEffectiveDesign.
Cross-Module References (XMR)
- Cleaner port references ([#9954]): When a
RefSendOpreferences a port,
the LowerXMR pass now adds an inner symbol directly to the port instead of
creating an intermediate node. This produces cleaner Verilog output and works
around issues with certain formal tools that treat output ports assigned from
probe nodes as "uncovered".
Layer Improvements
- Capture naming ([#9957]): Changed the namehint for layer-captured
expressions from_layer_probeto_layerCaptureto avoid conflicts with
protocols that use "probe" terminology.
Other Improvements
- Circuit linking ([#9928]): The
firldtool now allows private extmodules
in circuit linking, providing more flexibility in modular compilation
workflows.
OM Dialect
New Features
-
String concatenation ([2f9b5c9], [34e5533]): Added
om.string.concat
operation with full evaluator support for runtime string concatenation. -
Python bindings ([#9868]): Added Python bindings for OM unknown value
operations.
HW Dialect
New Optimization Pass
- Inter-Module Dead Code Elimination (IMDCE) ([#9609]): A new aggressive
optimization pass that performs inter-module liveness analysis. The pass
considers a value alive only if it connects to a port of a public module or a
value with a symbol. This can significantly reduce design size by removing
unused logic across module boundaries.
Breaking Changes
- Removed
hw.instance_choice([#9849]): Thehw.instance_choiceoperation
has been removed from the HW dialect.firrtl.instance_choicenow lowers
directly to implement the FIRRTL ABI in LowerFIRRTLToHW, avoiding the need to
carry specialized ABI information (macros and headers) into the HW dialect.
Formal Verification and Model Checking
This release significantly expands formal verification capabilities,
particularly for BTOR2-based model checking:
Verification Dialect
-
New FoldAssume pass ([#9968]): Optimizes verification code by folding and
simplifying assume operations. -
Named symbolic values ([#9919]): The
verif.symbolic_valueoperation now
accepts an optional name parameter, improving readability in formal backends
while preserving original signal names. -
Improved CombineAssertLike ([#9983]): The pass now supports
verif.formal
operations, enabling better optimization of formal verification constructs.
BTOR2 Backend Enhancements
The HWToBTOR2 conversion has received substantial improvements for formal
verification workflows:
-
Formal operation support ([#9926]): Added basic support for
verif.formal
operations, enabling structured formal verification blocks in BTOR2 output. -
Symbolic value emission ([#9924]):
verif.symbolic_valueoperations now
emit asinputin BTOR2, properly representing free variables in model
checking. -
Initialization assumptions ([#9844]): New
--assume-init-resetoption
allows assuming reset initialization in formal proofs, simplifying
verification of designs with complex reset logic. -
Clock conversion ([#9837]): Added support for
seq.to_clockoperation,
enabling proper handling of clock type conversions in BTOR2 output. -
Improved register handling ([#9916], [#9838]): The backend now only
accepts integer-typed registers and avoids generating invalid BTOR2 when
multiple registers share the same name.
Temporal Logic
-
LTL past operations ([#9845], [#9892]): Added lowering for
ltl.past
operations with clock operands, and integrated these lowerings into the
firtool BTOR2 pipeline. -
Clock assumption control ([#9863]): New
--assume-first-clockflag for
LTLToCore enables better control over clock assumptions when ingesting
SystemVerilog assertions.
Synthesis and Optimization
Synth Dialect
The Synth dialect introduces new abstractions for synthesis choices and
optimizations:
-
New
synth.choiceoperation ([#9857], [#9872], [#9876], [#9940]):
Represents synthesis alternatives, allowing the compiler to choose between
different implementations. The operation folds when only a single operand
remains and is supported throughout the lowering pipeline (LowerWordToBits,
ConvertSynthToComb). -
Functional reduction pass ([#9886]): New optimization pass for functional
reduction (without SAT solving). This enables simplification of synthesis
choices based on functional equivalence. -
Majority graph folding ([#9033]): Implements optimization for majority
gate graphs, a common pattern in certain synthesis flows. -
Operation reuse in LowerVariadic ([#9850]): The LowerVariadic pass now
implements operation reuse, reducing redundant operations when lowering
variadic operations.
Seq Dialect
-
Clock-enable register lowering ([#9890]): Added lowering from
seq.compreg.ce(clock-enable register) toseq.compreg(standard register),
expanding the range of register types that can be processed through the
standard pipeline. -
Preset value validation ([#6856]): The FirRegOp printer/parser now
enforces non-negative preset values, catching errors earlier in the
compilation flow. -
Memory address type fix ([#9827]): Fixed invalid address type generation
for single-element memories in the RegOfVecToMem pass.
SystemVerilog Import (ImportVerilog)
This release dramatically expands SystemVerilog import capabilities,
particularly for advanced language features:
Interface Support
-
Full interface support ([#9792]): Added comprehensive support for
interface definitions, instantiation, and interface port handling. This is a
major milestone for importing designs that use SystemVerilog interfaces. -
Unconnected ports ([#9759]): Support for unconnected InOut and Ref
instance ports, allowing partial port connections.
Dynamic and Associative Arrays
-
Dynamic array creation ([#9679]): Added support for dynamic array creation
with newsizeandlengthoperations. -
Associative array methods ([#9853], [#9901], [#9907]): Implemented
Size(),Num(),exists(),First(),Last(),Next(), andPrev()
methods for associative arrays. -
Queue operations ([#9791], [#9818]): Added support for queue
concatenations and queue comparisons (equality/inequality).
Concurrency and Timing
-
Wait statements ([#9824]): Added support for
waitandwait fork
statements, enabling import of designs with complex synchronization. -
Fork-join fixes ([#9951]): Fixed bugs in fork-join statement handling.
Asserti...
firtool-1.142.0
What's Changed
- [Arc] Fix extraneous semicolons in TraceEncoder; NFC by @fabianschuiki in #9746
- [circt-bmc] Add LTLToCore to pipeline by @TaoBi22 in #9735
- [HW][circt-reduce] Add HW name sanitization by @seldridge in #9730
- Move ESI runtime tests into pytest suite by @teqdruid in #9655
- [CI] Cancel in-progress PR builds on new push by @Copilot in #9751
- [ImportVerilog][MooreToCore][Sim] Support queue element/range extractions in ImportVerilog and Sim by @Lauriethefish in #9727
- [Synth] Add resource usage analysis by @uenoku in #9717
- [HW] Make sure the index type for arrays is at least i1 by @pscabot in #9733
- [ImportVerilog] Make sampled value functions' results usable by Moore ops by @Arya-Golkari in #9718
- [ImportVerilog] Support
$literal within queue indexing expressions by @Lauriethefish in #9719 - [circt-reduce] Use per-port matching for FIRRTL port pruners by @seldridge in #9755
- [Arc] Add time operations for LLHD simulation support by @fabianschuiki in #9747
- [FIRRTL] Allow full reset module instances outside of reset domain by @fabianschuiki in #9754
- [HWToLLVM] Take the correct data layout alignment for alloca by @pscabot in #9734
- [FIRRTL][LowerToHW] Add InstanceChoiceOp lowering, Part 1 by @uenoku in #9742
- [FIRRTL] Fix domain info updates in cloneWithInsertedPorts by @seldridge in #9758
- [Datapath] Bug Fix for Sign-Extension Logic when Lowering Partial Products to Booth Arrays (#9726) by @cowardsa in #9744
- [ESI] Update test to exercise new functionality by @teqdruid in #9763
- [PyRTG] Add String format function by @maerhart in #9762
- [ESI][Runtime] Support editable installs by @teqdruid in #9764
- [ESI][Runtime] Improve support for extending pytest.cosim_test by @teqdruid in #9765
- [FIRRTL] Add instance macro attribute to InstanceChoice for Lowering by @uenoku in #9760
- [FIRRTL] Lazily construct CircuitNamespace, NFC by @uenoku in #9767
- [FIRRTL] Support FInstanceLike operations in ModuleInliner by @uenoku in #9688
- [ESI][Runtime] Don't crash on unsupported type by @teqdruid in #9768
- [PyCDE] Remove python 3.8, 3.9 and add 3.14 builds by @teqdruid in #9769
- [PyCDE] Disable cocotb tests by default by @teqdruid in #9770
- [Arc] Lower llhd.current_time to Arc in LowerState by @fabianschuiki in #9756
- [FIRRTL] Add domain create op by @seldridge in #9774
- [FIRRTL] Improve error messages for domain symbol verification by @seldridge in #9776
- [Moore][ImportVerilog] Add support for fork-join blocks by @tdps2 in #9682
- [FIRRTL] Add conservative IMDCE handling for InstanceChoiceOp by @uenoku in #9710
- [Arc] Lower time operations to LLVM IR by @fabianschuiki in #9757
- [FIRRTL] Support merging layers in LinkCircuits by @unlsycn in #9677
- [ImportVerilog] Add support for $swrite by @fabianschuiki in #9782
- [Moore] Add %m/%M hierarchical path format specifier by @fabianschuiki in #9783
- [Comb] [NFC] Reorder arguments for the consistency in CombOps create* helpers by @uenoku in #9799
- [RTG] Same seed for all tests & random scopes by @maerhart in #9793
- [RTG][Elaboration] Fix getUniformInRange by @maerhart in #9806
- [PyCDE] Fix Struct metaclass for Python 3.14 (PEP 649/749 annotations) and CI disk space by @Copilot in #9773
- [circt-verilog] Bump slang version requirement to 10.0 by @unlsycn in #9808
- [ImportVerilog][Sim][MooreToCore] Add support for resizing queues by @Lauriethefish in #9780
- [Arc] Use simulation time for VCD timestamps by @fabianschuiki in #9785
- [Moore][MooreToCore][Sim] Support for basic uses of
moore.dyn_queue_ref_elementby @Lauriethefish in #9778 - [ImportVerilog][Moore] Add support for queue concatenations by @Lauriethefish in #9777
- [ESI Runtime] Add statically typed port wrappers by @teqdruid in #9771
- [ESI] Add ValidOnly channel signaling protocol by @teqdruid in #9787
- [ESI][Copilot] Add ESI runtime development skills file by @teqdruid in #9812
- [Comb] Officialize support for zero-width integers by @Moxinilian in #6959
- [SV] Add an utility function to construct nested ifdefs by @uenoku in #9798
- [FIRRTL] Allow keywords as identifiers in expressions by @seldridge in #9788
- [ImportLiberty] Remove unused functions, NFC by @uenoku in #9813
- [FIRRTL] Add case_macro attribute to OptionCaseOp and refactor PopulateInstanceChoiceSymbols by @uenoku in #9797
- [FIRRTL][LowerToHW] Require instance_macro before lowering by @uenoku in #9814
- [FIRRTL] Allow Unknown as an identifier by @seldridge in #9789
- [RTG][circt-tblgen] Add RegisterAllocationOpInterface methods and decorators by @maerhart in #9801
- [VerifToSMT] Add meaningful name prefixes to BMC symbolic constants by @5iri in #9794
- [ImportVerilog] Add support for associative array extractions by @Elijah-Cheesman in #9796
- [HWToBTOR2][NFC] Fix typo in multi-clock error by @TaoBi22 in #9819
- [Synth][CutRewriter] Add LogicNetwork flat IR by @uenoku in #9804
- [Synth][CutRewriter] Migrate CutRewriter to use Flat IR by @uenoku in #9805
- [ESI][Cosim][Pytest] Increase debug-ability of cosim pytest runs by @teqdruid in #9825
- [Tools] Set bug report messages to CIRCT by @uenoku in #9826
- [Synth][CutRewriter] Add a LEC test for mig/xor, NFC by @uenoku in #9828
- [FSM] Convert
FSMtoSMTby @luisacicolini in #9379 - [FIRRTL][Inliner] Fix NLA updates during flattening by @seldridge in #9810
- [ImportVerilog] Add delete and clear ops for assoc arrays by @Elijah-Cheesman in #9823
- [FIRRTL][Inliner] Remove flattenPoint, use inlinedSymbols by @seldridge in #9816
- [RTG][circt-tblgen] Auto-generate instruction assembly and binary emission methods by @maerhart in #9802
- [ImportVerilog] Support DPI-C extern declarations and open arrays by @pscabot in #9809
- [FIRRTL] InstanceChoice support for LowerToHW, Part 2(ABI lowering) by @uenoku in #9761
- [FIRRTL][LowerDomains] Add support for DomainCreateOp by @seldridge in #9781
- [Synth][CutRewriter] Fix potential non-determinism by @uenoku in #9830
- [LowerToHW] Use "-" for instance choice header file delimiter by @uenoku in #9832
- [Synth][SOPBalancing] Fix non-determinism from duplicated value numbering by @uenoku in #9836
- [FIRRTL] Use hw.hierpath in CreateSiFiveMetadata by @seldridge in #9829
- [HWToBTOR2] Strengthen multi-clocking detection by @TaoBi22 in #9820
- Update to avoid arith i0 by @jpienaar in #9835
- [ImportVerilog] Waive another valgrind test, NFC by @seldridge in #9841
- [Handshake] Fix deprecated builder.create warnings by @seldridge in #9843
- [SV] Remove extract-test-code by @rwy7 in #8846
New Contributors
- @tdps2 made their first contribution in #9682
- @Elijah-Cheesman made their first contribution in #9796
Full Changelog: firtool-1.141.0...firtool-1.142.0
firtool-1.141.1
Full Changelog: firtool-1.141.0...firtool-1.141.1