{"id":21551,"library":"mantle","title":"Mantle","description":"The standard library for the Magma hardware DSL, providing core primitives (gates, muxes, registers, memories) for building digital circuits in Python. Current version: 2.0.21, release cadence: irregular.","status":"active","version":"2.0.21","language":"python","source_language":"en","source_url":"https://github.com/phanrahan/mantle","tags":["mantle","magma","hardware","DSL","circuit"],"install":[{"cmd":"pip install mantle","lang":"bash","label":"default"}],"dependencies":[{"reason":"Mantle is the standard library for Magma; requires magma >= 2.0","package":"magma","optional":false},{"reason":"Used for testing / simulation in some patterns","package":"fault","optional":true}],"imports":[{"note":"Standard import; used to access mantle primitives like mantle.Register, mantle.DefineCounter, etc.","symbol":"mantle","correct":"import mantle"},{"note":"In earlier versions (pre-2.0), mantle was structured differently; direct import from mantle is the current pattern.","wrong":"from mantle.coreir import Register","symbol":"Register","correct":"from mantle import Register"},{"note":"Commonly used for counter circuits.","symbol":"DefineCounter","correct":"from mantle import DefineCounter"}],"quickstart":{"code":"import magma\nimport mantle\n\n# Define a simple circuit: incrementer using a register and adder\nclass Incrementer(magma.Circuit):\n    name = \"Incrementer\"\n    io = magma.IO(I=magma.In(magma.Bits[4]), O=magma.Out(magma.Bits[4]))\n    \n    reg = mantle.Register(4, init=0)\n    adder = mantle.DefineAdd(4)\n    \n    # Connect: reg_out -> adder b, I -> adder a, adder out -> reg in\n    magma.wire(reg.O, adder.b)\n    magma.wire(io.I, adder.a)\n    magma.wire(adder.out, reg.I)\n    magma.wire(reg.O, io.O)\n\n# Compile and simulate (requires fault or other backend)\n# magma.compile(\"build/Incrementer\", Incrementer)\nprint(\"Circuit defined successfully.\")","lang":"python","description":"Basic circuit using mantle primitives."},"warnings":[{"fix":"Update imports to match version 2.x patterns: use 'from mantle import Register' instead of 'from mantle.coreir import Register'.","message":"Mantle 1.x APIs changed significantly in 2.0. Many modules (e.g., mantle.coreir, mantle.backend) moved or removed. Always use 'from mantle import ...'.","severity":"breaking","affected_versions":"<2.0"},{"fix":"Check if mantle provides a direct replacement or use Magma's built-in IR primitives.","message":"Mantle 2.0.21 notes that some functions (e.g., DefineAdd, DefineCounter) are considered legacy; consider using magma.ir directly for new designs.","severity":"deprecated","affected_versions":"2.0.x"},{"fix":"Always pass width as first argument: Register(width) or Register(width, init=0).","message":"Mantle registers require explicit width parameter (e.g., Register(4)). Forgetting the width will cause errors.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-04-27T00:00:00.000Z","next_check":"2026-07-26T00:00:00.000Z","problems":[{"fix":"Use 'from mantle import ...' directly instead of 'from mantle.coreir import ...'.","cause":"Importing from old submodule path that no longer exists in mantle 2.x.","error":"ModuleNotFoundError: No module named 'mantle.coreir'"},{"fix":"Add 'from mantle import DefineAdd' or use 'mantle.DefineAdd' after importing mantle.","cause":"DefineAdd is not imported; it's in the mantle namespace but not auto-imported.","error":"NameError: name 'DefineAdd' is not defined"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}