Skip to content

v0.21.0

Latest

Choose a tag to compare

@github-actions github-actions released this 02 Sep 02:51
2e32d53

What's Changed

Breaking Changes πŸ› 

  • Add non-portable construct opt-in and dependency policy by @dalance in #3268

New Features πŸŽ‰

  • feat(analyzer): infer generic function arguments from module ports by @AkiyukiOkayasu in #3197
  • Replace combinational-loop analysis with sparse SSA by @tignear in #3161
  • feat(analyzer): allow importing component namespaces (package, module, interface) by @AkiyukiOkayasu in #3198

Other Changes

  • fix(analyzer): detect duplicate enum variants with identical x/z values by @dalance in #3136
  • Fix hoisted statement-block declarations dropping ifdef guards by @dalance in #3137
  • Fix struct/union member separator emitted outside its ifdef guard by @dalance in #3138
  • Fix ifdef attribute state leaking across scopes accepting orphan else/elsif by @dalance in #3139
  • fix(analyzer): size assignment RHS against the LHS bit-select width by @dalance in #3145
  • fix(simulator): stop emitting acc << 64 on a uint64_t concat accumulator by @dalance in #3146
  • fix(simulator): AOT-C wide comb coverage for 65..128-bit shapes by @dalance in #3147
  • fix(simulator): AOT-C wide comb coverage for >128-bit dynamic selects and field stores by @dalance in #3148
  • Fix emittion of packed array typed with gen const by @taichi-ishitani in #3142
  • fix(simulator): AOT-C 128-bit ternary coverage and wide-ternary sign extension by @dalance in #3149
  • fix(simulator): AOT cache publish survives process exit by @dalance in #3150
  • fix(simulator): one compiler per AOT-C artifact via a cache lock file by @dalance in #3151
  • fix(simulator): the compile script lost -O3 to its missing lock argument by @dalance in #3152
  • fix(simulator): send the AOT compile's output to a file, not to a closed pipe by @dalance in #3153
  • feat(simulator): report the engine a run actually used as degraded_modules by @dalance in #3154
  • fix(simulator): reject read-before-write localization by @dalance in #3155
  • perf(simulator): elide provably-redundant masks by @dalance in #3156
  • fix(simulator): waveform dumping turns comb localization off by @dalance in #3157
  • fix(simulator): avoid zero-length wide scratch arrays in AOT-C emit by @dalance in #3158
  • Add behavioral tests for combinational-loop analysis by @tignear in #3159
  • feat(simulator): change-driven incremental comb settle, on by default by @dalance in #3160
  • fix(simulator): AOT-C coverage for a narrow rhs_select field of a wide RHS by @dalance in #3166
  • fix(simulator): store a localized wide-RHS def to its C local by @dalance in #3167
  • perf(simulator): narrow bit-field stores to their sub-word and merge a window's stores into one register build by @dalance in #3168
  • perf(simulator): sink a single-reader comb def to its reader by @dalance in #3170
  • perf(simulator): in-place settle-order comb relayout by @dalance in #3171
  • perf(simulator): inline single-reader comb defs into their readers by @dalance in #3172
  • perf(simulator): coalesce full-coverage field stores into one concat assignment by @dalance in #3173
  • perf(simulator): duplicate cheap multi-reader defs (opt-in) and collapse common RHS shapes by @dalance in #3174
  • perf(simulator): assemble wide concats, select-RMW stores, and bit broadcasts directly into their destinations by @dalance in #3175
  • diag(simulator): fusion veto-shape breakdown and field-store census by @dalance in #3177
  • Issue#3130 forloop overflow by @ranaumarnadeem in #3140
  • perf(simulator): weight the AOT-C chunk budget by approximate code size by @dalance in #3179
  • perf(simulator): pick SLP vectorization per comb source by static wide-op density by @dalance in #3180
  • perf(simulator): run the constant-input cone once per instance instead of every settle by @dalance in #3182
  • perf(simulator): turn cheap multi-reader duplication on by default by @dalance in #3183
  • perf(simulator): merge same-variable bit tests into masked compares and parities by @dalance in #3184
  • fix(simulator): give IR-walking threads an explicit stack so deep designs survive debug builds by @dalance in #3188
  • perf(simulator): drop dead machinery and retune the incremental sweep by @dalance in #3189
  • feat(simulator): decide the incremental settle from a probed activity verdict by @dalance in #3190
  • fix(simulator): bound one statement's emitted C and the compiler's address space by @dalance in #3192
  • fix(simulator): sweep AOT-C temp artifacts left by compiles that never published by @dalance in #3193
  • fix doc HTML escaping by @Kenta11 in #3178
  • fix(simulator): bound the version-split fold by expression size by @dalance in #3194
  • fix(doc): escape doc comments rendered into HTML table cells by @dalance in #3195
  • perf(simulator): run the version split unconditionally by @dalance in #3196
  • fix(synthesizer): read a packed multi-dimensional array element at its full width by @dalance in #3200
  • fix(synthesizer): write every element of a whole-array assignment destination by @dalance in #3201
  • fix(synthesizer): stop double-counting the member offset on a struct member write by @dalance in #3202
  • fix(simulator): build a dynamic bit-select for a runtime-indexed hierarchical read by @dalance in #3203
  • fix(simulator): support a whole-array assignment from an array-returning function by @dalance in #3204
  • fix(synthesizer): synthesize struct and array literals instead of rejecting them by @dalance in #3205
  • perf(simulator): enable comb fusion and the comb relayout by default by @dalance in #3209
  • fix(analyzer): keep a register when always_ff writes an element more than once by @dalance in #3210
  • fix(simulator): support a const array as an array-valued operand by @dalance in #3211
  • fix(analyzer): reject a type used as a width or array size by @ranaumarnadeem in #3206
  • Fix#3199 by @ranaumarnadeem in #3207
  • fix(simulator): expand a sub-array assignment on either side of the index by @dalance in #3212
  • fix(simulator): report a dynamic index that leaves a sub-array instead of asserting by @dalance in #3213
  • feat(analyzer): resolve a struct member through a hierarchical reference by @dalance in #3214
  • fix(simulator): fit a struct constructor member literal to the member width by @dalance in #3215
  • feat(analyzer): reject a union constructor by @dalance in #3216
  • fix(analyzer): keep the register only when a self-reference reads bits the block already wrote by @dalance in #3217
  • perf(simulator): recover word-wide work from per-bit logic and bound the version-split fold by @dalance in #3218
  • refactor(simulator): retire the incremental settle by @dalance in #3219
  • fix(analyzer): let every cached fragment define the $sv members it uses by @dalance in #3221
  • perf(simulator): fuse bit-disjoint writers in the version split by @dalance in #3222
  • refactor(simulator): stream a $readmemh image and share its destination list by @dalance in #3224
  • feat(simulator): honor $readmemh address directives by @dalance in #3225
  • fix(analyzer): connect an unpacked array slice to an instance port element-wise by @dalance in #3226
  • fix(simulator): report an unevaluatable width instead of panicking by @dalance in #3227
  • fix(simulator): build a comptime constant at the expression's own width by @dalance in #3230
  • fix(std): keep select_vector/select_onehot warning-free at N == 1 by @dalance in #3231
  • fix(simulator): key a signed RHS's sign extension to the right width by @dalance in #3235
  • fix(simulator): select if_reset from the reset net's level, not a reset event by @dalance in #3234
  • perf(simulator): settle only when a testbench write reaches the comb by @dalance in #3237
  • perf(simulator): coalesce field stores across word boundaries by @dalance in #3238
  • perf(simulator): window a wide bit-select read to its result width in AOT-C by @dalance in #3239
  • chore(simulator): add profiling hooks for the JIT perf map and the variable offset map by @dalance in #3240
  • perf(simulator): compress folded decoder chains into selector-table lookups by @dalance in #3245
  • perf(simulator): cover aligned wide-FF slice and element writes in the AOT-C event path by @dalance in #3246
  • perf(simulator): compile testbench-body statement runs into JIT chunks by @dalance in #3247
  • feat(simulator): skip idle module-subtree comb cones (cone gating) by @dalance in #3248
  • perf(simulator): scale two elaboration prepasses with variables, not memory elements by @dalance in #3249
  • fix(veryl): keep testbench derivation out of the reported simulation time by @dalance in #3250
  • Extend combinational loop analysis to function effects and instance receivers by @tignear in #3176
  • perf(analyzer): index the endpoint walk by span instead of scanning by @dalance in #3251
  • perf(simulator): fold a multi-megabyte array onto its base for analysis by @dalance in #3252
  • perf(simulator): compile a large comb source as parallel translation units by @dalance in #3253
  • ci(codspeed): cap benchmark jobs so a stalled valgrind install fails fast by @dalance in #3254
  • fix(analyzer): qualify a generic argument with the project its head is declared in by @dalance in #3255
  • fix(analyzer): reject importing a generic parameter as a component namespace by @dalance in #3256
  • perf(simulator): assemble a concatenation without a shift per element by @dalance in #3257
  • perf(simulator): weigh a cone gate's ownership table in variables, not array elements by @dalance in #3258
  • fix: satisfy clippy lints newly firing on Rust 1.98 by @dalance in #3265
  • fix(simulator): avoid Instant::now on wasm in testbench timing by @dalance in #3264
  • Report the cause when an assignment destination can't be built by @dalance in #3266
  • fix(emitter): keep #[ifdef] guards on generated modport members by @ranaumarnadeem in #3208
  • fix(emitter): keep #[ifdef] guards on generated and expanded modport members by @dalance in #3269
  • fix(simulator): report a non-progressing for-loop instead of exiting … by @ranaumarnadeem in #3236
  • perf(simulator): widen compiled-backend coverage for wide values by @dalance in #3273
  • perf(simulator): let the cone gate reach a design's whole comb network by @dalance in #3274
  • perf(simulator): compile a constant decode cascade as a lookup table by @dalance in #3275
  • fix: correct ten wrong-value defects in the analyzer and the compiled backends by @dalance in #3276
  • Resolve generic arguments in their own namespace by @taichi-ishitani in #3271
  • chore(deps): bump cranelift to 0.135 and wasmtime to 48 by @dalance in #3281
  • fix: resolve false comb cycles by splitting statements instead of relaxing the order by @dalance in #3283
  • fix(simulator): fire the edges of clocks and resets the design produces itself by @dalance in #3285
  • fix(analyzer): drop the reads of a ternary arm a constant condition rules out by @dalance in #3286
  • Report cyclic file dependency by @taichi-ishitani in #3282
  • feat(analyzer): allow importing proto packages as namespaces by @AkiyukiOkayasu in #3261
  • feat(veryl): accept -D on dump so #[ifdef] resolves as it does for test by @dalance in #3290
  • fix(simulator): round the AOT-C wide helpers' word count up so a sub-word size is not a no-op by @dalance in #3291
  • fix(simulator): compare comb storage in the AOT-C event validate by @dalance in #3292
  • Detect side-effecting function calls in always_ff by @tignear in #3229
  • fix(analyzer): check each item of a multiple import individually by @taichi-ishitani in #3289
  • fix(synthesizer): skip per-bit net allocation for inferred RAMs by @Latte72R in #3284
  • fix(synthesizer): keep an array port out of RAM inference by @dalance in #3296
  • fix(analyzer): bound the formal write depth so the function effect fixed point terminates by @dalance in #3294
  • fix(analyzer): skip empty package path when expanding an imported reference by @dalance in #3295
  • perf(simulator): compile wide dynamic bit/part selects and close the last whole-comb gaps by @dalance in #3297
  • perf(simulator): rate-based auto-off and epoch re-arm for cone gates by @dalance in #3298
  • perf(simulator): split static-field packed comb variables into per-field words by @dalance in #3299
  • perf(simulator): skip comb settles when no comb input changed (settle filter) by @dalance in #3300
  • perf(simulator): inline small cone-gate compares and avoid rep-movsq shadow copies by @dalance in #3303
  • feat(analyzer): allow importing project-scope functions by @AkiyukiOkayasu in #3262
  • perf(simulator): reuse per-step scratch buffers in the derived-clock step loop by @dalance in #3304
  • fix(emitter): match a project-qualified global function call to its definition by @dalance in #3305
  • Track positional control flow in combinational loop analysis by @tignear in #3241
  • Fix modport expansion for imported interfaces by @taichi-ishitani in #3302
  • test(analyzer): detect comb loop through a module absent from top-level IR components by @dalance in #3306
  • fix(analyzer): resolve interface members and report each combinational loop once by @dalance in #3307
  • Fix typo ($random_range -> $urandom_range) by @taichi-ishitani in #3309
  • fix(analyzer): reject a variable, port or const used as a type by @Kenta11 in #3267
  • fix(analyzer): point a cast type error at the use site and name all accepted types by @dalance in #3315
  • fix(analyzer): trace hierarchical combinational loop causes by @tignear in #3312
  • fix(simulator): keep the dead-variable DCE off while dumping waveforms by @dalance in #3316
  • fix(analyzer): keep comb-loop participants alongside dependency sites by @dalance in #3317
  • fix(analyzer): lower a const array from another namespace element-wise by @dalance in #3318
  • fix(emitter): substitute generic arguments exactly once by @dalance in #3320
  • Fix wrong filelist order when a source file contains multiple components by @taichi-ishitani in #3319
  • Emit pacakge prefix forcely when emitting expaned modport by @taichi-ishitani in #3322
  • fix(analyzer): order the filelist deterministically with opaque files last by @dalance in #3323
  • fix(simulator): bound the JIT frame's wide-value scratch by @dalance in #3324
  • fix(simulator): fire derived clocks in the period they belong to by @dalance in #3325
  • fix(simulator): stop false combinational loops forcing a multi-pass settle by @dalance in #3326
  • fix(simulator): widen an as cast used as a concatenation element by @dalance in #3327
  • fix(simulator): cover the shapes that dropped a whole event off the AOT-C path by @dalance in #3328
  • fix(simulator): bound what one fused statement can hand the backend by @dalance in #3329
  • perf(simulator): log the field a write changed, not the whole register by @dalance in #3330
  • chore(deps): update dependencies and bump gix to 0.87 by @dalance in #3331

New Contributors

Full Changelog: v0.20.3...v0.21.0