Changelog¶
Notable changes to the manhattan-reasoning-gym SDK and CLI. The project is in
private beta, so surfaces may still change between 0.1.x releases.
0.1.8 (private beta)¶
Added¶
- Plain Verilog designs.
design=onApp, and thedesignargument tomrg.build.synth/pnrandmrg synth/mrg pnr, now also accept a.vfile, not just an Amaranth.pymodule — the extension picks the language server-side. A Verilog file's top module is found by scanning for the one module whose port list matches the fixed Wishbone contract (clk,rst,wb_cyc,wb_stb,wb_we,wb_adr,wb_dat_w,wb_sel,wb_dat_r,wb_ack, exact widths and directions) by name; if a file exposes more than one matching module, pass--top <name>(CLI) ortop="<name>"(App(...)/mrg.build.synth/pnr) to disambiguate. See the new Verilog Hello example. mrg synth/mrg pnrandmrg rungained a--topflag;App,mrg.build.synth, andmrg.build.pnrgained a matchingtop=keyword argument. All are ignored for an Amaranth design.
0.1.7 (private beta)¶
Fixed¶
mrg.bench.CloudSiliconstill called the pre-0.1.6 client API (find_idle_fpga/NoFPGAAvailableError, andsubmit(fpga_id, ...)), left over from the 0.1.6 board-less submit change. It now submits without anfpga_id, treats a full build-slot pool as a503(surfaced asno_board) instead of a pre-flight idle-board check, and reads the assignedfpga_idoff the completed job record instead of raising on success.
0.1.6 (private beta)¶
Changed¶
- Board-less submit.
App/mrg runno longer picks a board before building — the server claims a build slot (a network identity baked into the bitstream, decoupled from any physical board) and dispatches the build immediately, so many builds now run concurrently regardless of how many physical boards are live.app.fpga_idis filled in once some board's worker claims the finished bitstream and flashes it, not chosen up front.App(fpga_id=...)/mrg run --fpga-idnow only matter for the--no-programreconnect case (skip rebuilding, talk to a board you already have a live session on). mrg job,mrg logs, andmrg cancelnow take ajob_iddirectly instead of<fpga_id> [job_id]— jobs are looked up by their own id, not scoped under a board, since a job with no board assigned yet has no board to look it up by.- FPGA states are now
idle,programming,reserved,error—queuedandbuildingwere board states describing a build in progress on that board; a build never touches a board anymore, so those states no longer apply to one.
Added¶
mrg jobs [--status STATUS]: list every job the caller's API key has submitted, newest first — the only way to find a board-less build'sjob_idwhile it's still in flight, since it has no board to check instead.
0.1.5 (private beta)¶
Added¶
App.write(addr, value, fixed_address=True): repeatsaddrfor every word in a burst instead of incrementing it, for a FIFO or push-register port where a design keeps its own internal write index (a common streaming-load pattern — writing a sequence of words one at a time to a single register, with the RTL auto-advancing into the next clause/slot).App.stream(): a persistent, low-latency session for many smallread/writeops. UnlikeApp.write()/App.read(), which each dispatch their own job against the cloud API and poll for completion every 0.5s, aStreamholds one WebSocket connection open for the life of awithblock — useful for tight loops like loading a CNF instance one literal per write, or an RL reward loop grading many episodes per training step.
0.1.4 (private beta)¶
The current beta surface:
mrg.cloudfor direct cloud silicon: declare anApp, program a real Lattice ECP5 over the network, and drive it over MMIO.mrg.buildfor local synthesis and place-and-route feedback (synth,pnr) in the pinned toolchain image, with no board and no cloud.mrg.sandboxandmrg.benchfor running untrusted agents in a locked container that promotes candidates to silicon through a broker.- The
mrgCLI:login,run,synth,pnr,status,job,logs,cancel,reset,read, andwrite.