patch notes · #18, #21, #223 October

#18, #21, #22 · A workspace that keeps names, choices and edits; Board controls retain the state the student is holding; Explain slow counters and keep Max responsive

#18 · A workspace that keeps names, choices and edits · 3 October

A directory tree and freely named sources, headers, memory data and multiple XDC files replace the fixed-name workspace. Top and testbench selection use source content; ambiguous choices are shown instead of guessed. Active XPR filesets exclude disabled/inactive files. A selected constraints file follows renames, including case-only renames, and a deleted selection does not transfer to a new file with the same name.

Autosave preserves original BOM/CRLF bytes until a file is edited. Share links keep top/testbench/XDC choices, file roles, active file and bytes in a fresh browser profile; old links still load. A failed link offers ZIP export. Workspace unit checks passed 69/0. Review found and fixed choice loss during rename and stale choice inheritance after deletion.

#21 · Board controls retain the state the student is holding · 3 October

Switches and momentary buttons support pointer and keyboard input. Releasing one input method no longer releases a button still held by the other; focus loss releases held controls. Source and board hover links use the bound port/pin, without mistaking a helper-module port for the top-level output. Mobile tooltips stay inside the viewport. Failed runs retain POWER and clear DONE and outputs.

Independent browser checks passed 72/0. The expanded WebKit gate initially failed because its touch-hold test called Chromium-only CDP. Chromium still tests a trusted touch hold; WebKit tests the same handlers with explicitly labelled synthetic touch pointer events. This is not physical Safari/phone acceptance. Board pitch still limits mobile target width; LED changes are not announced by a screen reader.

#22 · Explain slow counters and keep Max responsive · 3 October

Detected divider bits and threshold comparisons explain why a 100 MHz design looks still at browser speed and suggest an explicit SIM divider. Closing the advice panel persists across reruns until the advice changes. Threshold comparisons, including strict versus inclusive bounds and mirrored operands, were corrected. Finite and Max clock modes both use a bounded per-frame work budget.

The repeated two-counter experiment measured roughly 5.8–5.9 thousand UI-driven DigitalJS cycles/s. Its isolated DigitalJS kernel reached 12–13 thousand/s; a CXXRTL kernel compiled locally to WASM ran in Chromium at 198–206 million/s, with 14 output comparisons. This measures a precompiled browser kernel, not a dynamic browser C++ compiler or a general equivalence result. Divider advice was selected; down-counter hints remain absent and Max does not promise a physical 100 MHz rate.


previous: #17 Browser compilation checks the design and clears failed runs
next: #19 Bring a lab folder and take it back to the CLI
These entries in the full list
Every SystemVerilog construct measured so far, next to what Vivado does: the probes, stage by stage