Latest commit

History

628 Commits

Folders and files

NameName
Last commit message
Last commit date

pyCircuit 6

LicensepyCircuit Python 3.10 or laterAgentic Circuit Python 3.11 or laterMLIRCIReleaseLatest release

pyCircuit is a Python hardware construction and architecture-modeling repository. The pycircuit frontend lowers cycle-aware designs to verified PYC MLIR and emits synthesizable Verilog and a C++ cycle model. The retained agentic_circuit frontend lowers architecture/process/queue descriptions to ACIR, then targets either ACSim/gfsim or the pyCircuit 6 hardware flow.

PTO-ISA/pyCircuit is the canonical repository, release authority, and only active source of truth for both pyCircuit and Agentic Circuit. LinxISA/pyCircuit is its downstream fork for Linx integration work.

The standalone PTO-ISA/agentic-circuit repository remains public only as a migration and review record. New AC source, issues, releases, and packages belong in PTO-ISA/pyCircuit; the old repository is not archived until the independent QEMU/PYC retirement gate passes.

Why pyCircuit 6

  • Cycle-aware signals:CycleAwareSignal carries logical-cycle provenance.
  • Automatic pipeline balancing: mixed-cycle expressions lower to explicit delay registers.
  • Inferred state:domain.signal() plus <<= or .assign() derives the required register structure.
  • One semantic IR: C++ and Verilog consume the same verified pyc MLIR.
  • Preserved hierarchy: module instances remain visible to simulation, DFX, and emitted RTL.
  • Scalable validation: legality, cycle, depth, clock-domain, trace, and backend-equivalence gates are part of the repository workflow.

Choose a frontend

GoalDistributionPython importPrimary IR and runtime
Construct cycle-aware hardwarepycircuit-hisipycircuitPYC → pycclibpyc6_runtime / Verilog
Model architecture, processes, resources, and queuesagentic-circuitagentic_circuitACPy/ACIR → ACSim/gfsim, or ACIR → PYC

Use pycircuit when the design contract is signals, registers, memories, pipeline timing, and synthesizable hardware. Use agentic_circuit when the source model describes architectural processes, queues, resources, scheduling, or workloads. The namespaces remain separate even when both frontends converge on verified PYC for hardware generation.

See Choose a frontend for the supported entrypoints and first commands.

Install

The canonical pyCircuit 6 source installation is:

git clone https://github.com/PTO-ISA/pyCircuit.git
cd pyCircuit
python3 -m pip install -e ".[dev,docs]"
pre-commit install
bash flows/scripts/pyc build

Install the Agentic Circuit distribution from the same checkout when using ACPy, ACIR, ACSim, or gfsim:

python3 -m pip install -e "python/agentic-circuit[test]"
agentic-circuit --help

The source CLI's schema-backed commands also need the generated AC Python resource tree. The canonical run_agentic_circuit.sh gate configures that tree and supplies the required PYTHONPATH; installation alone is sufficient for imports and --help, not for compiling a workspace.

Release wheels, once published, use the distribution name pycircuit-hisi; the Python import remains pycircuit. The repository does not claim a PyPI release until the corresponding PTO-ISA release workflow has completed.

The staged compiler is installed under .pycircuit_out/toolchain/install/. Set PYC_TOOLCHAIN_ROOT to that directory when running end-to-end builds from a source checkout.

Agentic Circuit and ACIR

ACIR remains an independent, upper-level MLIR dialect. It is not folded into the PYC dialect and does not replace the Cycle-Aware Signal model:

agentic_circuit frontend -> ACPy 0.4 -> ACIR
|-> ACSim -> gfsim
`-> PYC -> pycc -> pyc6 C++ / Verilog
pycircuit frontend -> Cycle-Aware Signal -> PYC -> pycc -> pyc6 C++ / Verilog

The public agentic_circuit import and agentic-circuit CLI remain distinct from pycircuit. AC symbols are not re-exported from pycircuit.__init__. See the ACIR architecture overview and migration record.

First cycle-aware design

frompycircuitimport (
CycleAwareCircuit,
CycleAwareDomain,
cas,
compile_cycle_aware,
wire_of,
)
defcounter(
m: CycleAwareCircuit,
domain: CycleAwareDomain,
width: int=8,
) ->None:
enable=cas(domain, m.input("enable", width=1), cycle=0)
count=domain.signal(width=width, reset_value=0, name="count")
m.output("count", wire_of(count))
domain.next()
count.assign(count+1, when=enable)
if__name__=="__main__":
design=compile_cycle_aware(counter, name="counter", eager=True)
print(design.emit_mlir())

domain.next() advances the authoring-time logical cycle. The assignment to count therefore creates a one-stage state update. When values from different logical cycles meet, the compiler inserts the delay chain needed to align them.

Build and test

Build the repository counter example for both backends:

export PYC_TOOLCHAIN_ROOT="$PWD/.pycircuit_out/toolchain/install"
PYTHONPATH=python/pycircuit/src \
python3 -m pycircuit.cli build \
examples/pycircuit/counter/tb_counter.py \
--out-dir /tmp/pyc_counter \
--target both \
--jobs 8

Run the normal contributor lanes:

pre-commit run --files <changed-file> [<changed-file> ...]
pytest tests/unit -m unit
bash flows/scripts/run_examples.sh
bash flows/scripts/run_sims.sh

Run the complete Agentic Circuit G0/G1/G2 closure from the integrated checkout:

PYC_GATE_RUN_ID=local-ac-$(date +%Y%m%d-%H%M%S) \
bash flows/scripts/run_agentic_circuit.sh

The script installs the current AC frontend, builds ACIR/ACSim/gfsim, runs the MLIR and C++ suites, and validates canonical ACIR-to-PYC-to-C++/Verilog cases.

System tests require a built toolchain and Verilator:

pytest tests/system -m system

Documentation

Repository governance

PTO-ISA owns product decisions, both Python distributions, releases, package publication, and the default branch. Linx integration changes should be developed so they can be reviewed upstream; the LinxISA fork follows the upstream default branch. The standalone Agentic Circuit repository remains a public migration record until the current QEMU/PYC comparison and operational cutover checklist pass; it is not an active development or publishing source.

Historical gate logs retain their original directory names. Active runtime, trace, and gate contracts use libpyc6_runtime, PYC6TRC3, and run_semantic_regressions_v6.sh.

Repository layout

pyCircuit/
├── python/pycircuit/src/pycircuit/ # Python language frontend
├── python/agentic-circuit/ # Agentic Circuit Python distribution
├── compiler/mlir/ # pyc dialect, passes, pycc, and emitters
├── compiler/acir/ # ACIR/ACSim dialects, passes, and tools
├── library/ # pyCircuit C++ and Verilog libraries
├── simulator/gfsim/ # Agentic Circuit architecture simulator
├── examples/ # pyCircuit and Agentic Circuit examples
├── flows/ # Build and validation orchestration
├── tests/ # Language- and layer-classified tests
└── docs/ # Product and contributor documentation

License

pyCircuit, including the integrated Agentic Circuit sources, is licensed under the BSD 3-Clause License. See LICENSE and the relicensing record.

About

Downstream fork of PTO-ISA/pyCircuit for Linx integration work

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

628 Commits

Folders and files

NameName
Last commit message
Last commit date

pyCircuit 6

LicensepyCircuit Python 3.10 or laterAgentic Circuit Python 3.11 or laterMLIRCIReleaseLatest release

pyCircuit is a Python hardware construction and architecture-modeling repository. The pycircuit frontend lowers cycle-aware designs to verified PYC MLIR and emits synthesizable Verilog and a C++ cycle model. The retained agentic_circuit frontend lowers architecture/process/queue descriptions to ACIR, then targets either ACSim/gfsim or the pyCircuit 6 hardware flow.

PTO-ISA/pyCircuit is the canonical repository, release authority, and only active source of truth for both pyCircuit and Agentic Circuit. LinxISA/pyCircuit is its downstream fork for Linx integration work.

The standalone PTO-ISA/agentic-circuit repository remains public only as a migration and review record. New AC source, issues, releases, and packages belong in PTO-ISA/pyCircuit; the old repository is not archived until the independent QEMU/PYC retirement gate passes.

Why pyCircuit 6

  • Cycle-aware signals:CycleAwareSignal carries logical-cycle provenance.
  • Automatic pipeline balancing: mixed-cycle expressions lower to explicit delay registers.
  • Inferred state:domain.signal() plus <<= or .assign() derives the required register structure.
  • One semantic IR: C++ and Verilog consume the same verified pyc MLIR.
  • Preserved hierarchy: module instances remain visible to simulation, DFX, and emitted RTL.
  • Scalable validation: legality, cycle, depth, clock-domain, trace, and backend-equivalence gates are part of the repository workflow.

Choose a frontend

GoalDistributionPython importPrimary IR and runtime
Construct cycle-aware hardwarepycircuit-hisipycircuitPYC → pycclibpyc6_runtime / Verilog
Model architecture, processes, resources, and queuesagentic-circuitagentic_circuitACPy/ACIR → ACSim/gfsim, or ACIR → PYC

Use pycircuit when the design contract is signals, registers, memories, pipeline timing, and synthesizable hardware. Use agentic_circuit when the source model describes architectural processes, queues, resources, scheduling, or workloads. The namespaces remain separate even when both frontends converge on verified PYC for hardware generation.

See Choose a frontend for the supported entrypoints and first commands.

Install

The canonical pyCircuit 6 source installation is:

git clone https://github.com/PTO-ISA/pyCircuit.git
cd pyCircuit
python3 -m pip install -e ".[dev,docs]"
pre-commit install
bash flows/scripts/pyc build

Install the Agentic Circuit distribution from the same checkout when using ACPy, ACIR, ACSim, or gfsim:

python3 -m pip install -e "python/agentic-circuit[test]"
agentic-circuit --help

The source CLI's schema-backed commands also need the generated AC Python resource tree. The canonical run_agentic_circuit.sh gate configures that tree and supplies the required PYTHONPATH; installation alone is sufficient for imports and --help, not for compiling a workspace.

Release wheels, once published, use the distribution name pycircuit-hisi; the Python import remains pycircuit. The repository does not claim a PyPI release until the corresponding PTO-ISA release workflow has completed.

The staged compiler is installed under .pycircuit_out/toolchain/install/. Set PYC_TOOLCHAIN_ROOT to that directory when running end-to-end builds from a source checkout.

Agentic Circuit and ACIR

ACIR remains an independent, upper-level MLIR dialect. It is not folded into the PYC dialect and does not replace the Cycle-Aware Signal model:

agentic_circuit frontend -> ACPy 0.4 -> ACIR
|-> ACSim -> gfsim
`-> PYC -> pycc -> pyc6 C++ / Verilog
pycircuit frontend -> Cycle-Aware Signal -> PYC -> pycc -> pyc6 C++ / Verilog

The public agentic_circuit import and agentic-circuit CLI remain distinct from pycircuit. AC symbols are not re-exported from pycircuit.__init__. See the ACIR architecture overview and migration record.

First cycle-aware design

frompycircuitimport (
CycleAwareCircuit,
CycleAwareDomain,
cas,
compile_cycle_aware,
wire_of,
)
defcounter(
m: CycleAwareCircuit,
domain: CycleAwareDomain,
width: int=8,
) ->None:
enable=cas(domain, m.input("enable", width=1), cycle=0)
count=domain.signal(width=width, reset_value=0, name="count")
m.output("count", wire_of(count))
domain.next()
count.assign(count+1, when=enable)
if__name__=="__main__":
design=compile_cycle_aware(counter, name="counter", eager=True)
print(design.emit_mlir())

domain.next() advances the authoring-time logical cycle. The assignment to count therefore creates a one-stage state update. When values from different logical cycles meet, the compiler inserts the delay chain needed to align them.

Build and test

Build the repository counter example for both backends:

export PYC_TOOLCHAIN_ROOT="$PWD/.pycircuit_out/toolchain/install"
PYTHONPATH=python/pycircuit/src \
python3 -m pycircuit.cli build \
examples/pycircuit/counter/tb_counter.py \
--out-dir /tmp/pyc_counter \
--target both \
--jobs 8

Run the normal contributor lanes:

pre-commit run --files <changed-file> [<changed-file> ...]
pytest tests/unit -m unit
bash flows/scripts/run_examples.sh
bash flows/scripts/run_sims.sh

Run the complete Agentic Circuit G0/G1/G2 closure from the integrated checkout:

PYC_GATE_RUN_ID=local-ac-$(date +%Y%m%d-%H%M%S) \
bash flows/scripts/run_agentic_circuit.sh

The script installs the current AC frontend, builds ACIR/ACSim/gfsim, runs the MLIR and C++ suites, and validates canonical ACIR-to-PYC-to-C++/Verilog cases.

System tests require a built toolchain and Verilator:

pytest tests/system -m system

Documentation

Repository governance

PTO-ISA owns product decisions, both Python distributions, releases, package publication, and the default branch. Linx integration changes should be developed so they can be reviewed upstream; the LinxISA fork follows the upstream default branch. The standalone Agentic Circuit repository remains a public migration record until the current QEMU/PYC comparison and operational cutover checklist pass; it is not an active development or publishing source.

Historical gate logs retain their original directory names. Active runtime, trace, and gate contracts use libpyc6_runtime, PYC6TRC3, and run_semantic_regressions_v6.sh.

Repository layout

pyCircuit/
├── python/pycircuit/src/pycircuit/ # Python language frontend
├── python/agentic-circuit/ # Agentic Circuit Python distribution
├── compiler/mlir/ # pyc dialect, passes, pycc, and emitters
├── compiler/acir/ # ACIR/ACSim dialects, passes, and tools
├── library/ # pyCircuit C++ and Verilog libraries
├── simulator/gfsim/ # Agentic Circuit architecture simulator
├── examples/ # pyCircuit and Agentic Circuit examples
├── flows/ # Build and validation orchestration
├── tests/ # Language- and layer-classified tests
└── docs/ # Product and contributor documentation

License

pyCircuit, including the integrated Agentic Circuit sources, is licensed under the BSD 3-Clause License. See LICENSE and the relicensing record.

About

Downstream fork of PTO-ISA/pyCircuit for Linx integration work

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

628 Commits

Folders and files

NameName
Last commit message
Last commit date

pyCircuit 6

LicensepyCircuit Python 3.10 or laterAgentic Circuit Python 3.11 or laterMLIRCIReleaseLatest release

pyCircuit is a Python hardware construction and architecture-modeling repository. The pycircuit frontend lowers cycle-aware designs to verified PYC MLIR and emits synthesizable Verilog and a C++ cycle model. The retained agentic_circuit frontend lowers architecture/process/queue descriptions to ACIR, then targets either ACSim/gfsim or the pyCircuit 6 hardware flow.

PTO-ISA/pyCircuit is the canonical repository, release authority, and only active source of truth for both pyCircuit and Agentic Circuit. LinxISA/pyCircuit is its downstream fork for Linx integration work.

The standalone PTO-ISA/agentic-circuit repository remains public only as a migration and review record. New AC source, issues, releases, and packages belong in PTO-ISA/pyCircuit; the old repository is not archived until the independent QEMU/PYC retirement gate passes.

Why pyCircuit 6

  • Cycle-aware signals:CycleAwareSignal carries logical-cycle provenance.
  • Automatic pipeline balancing: mixed-cycle expressions lower to explicit delay registers.
  • Inferred state:domain.signal() plus <<= or .assign() derives the required register structure.
  • One semantic IR: C++ and Verilog consume the same verified pyc MLIR.
  • Preserved hierarchy: module instances remain visible to simulation, DFX, and emitted RTL.
  • Scalable validation: legality, cycle, depth, clock-domain, trace, and backend-equivalence gates are part of the repository workflow.

Choose a frontend

GoalDistributionPython importPrimary IR and runtime
Construct cycle-aware hardwarepycircuit-hisipycircuitPYC → pycclibpyc6_runtime / Verilog
Model architecture, processes, resources, and queuesagentic-circuitagentic_circuitACPy/ACIR → ACSim/gfsim, or ACIR → PYC

Use pycircuit when the design contract is signals, registers, memories, pipeline timing, and synthesizable hardware. Use agentic_circuit when the source model describes architectural processes, queues, resources, scheduling, or workloads. The namespaces remain separate even when both frontends converge on verified PYC for hardware generation.

See Choose a frontend for the supported entrypoints and first commands.

Install

The canonical pyCircuit 6 source installation is:

git clone https://github.com/PTO-ISA/pyCircuit.git
cd pyCircuit
python3 -m pip install -e ".[dev,docs]"
pre-commit install
bash flows/scripts/pyc build

Install the Agentic Circuit distribution from the same checkout when using ACPy, ACIR, ACSim, or gfsim:

python3 -m pip install -e "python/agentic-circuit[test]"
agentic-circuit --help

The source CLI's schema-backed commands also need the generated AC Python resource tree. The canonical run_agentic_circuit.sh gate configures that tree and supplies the required PYTHONPATH; installation alone is sufficient for imports and --help, not for compiling a workspace.

Release wheels, once published, use the distribution name pycircuit-hisi; the Python import remains pycircuit. The repository does not claim a PyPI release until the corresponding PTO-ISA release workflow has completed.

The staged compiler is installed under .pycircuit_out/toolchain/install/. Set PYC_TOOLCHAIN_ROOT to that directory when running end-to-end builds from a source checkout.

Agentic Circuit and ACIR

ACIR remains an independent, upper-level MLIR dialect. It is not folded into the PYC dialect and does not replace the Cycle-Aware Signal model:

agentic_circuit frontend -> ACPy 0.4 -> ACIR
|-> ACSim -> gfsim
`-> PYC -> pycc -> pyc6 C++ / Verilog
pycircuit frontend -> Cycle-Aware Signal -> PYC -> pycc -> pyc6 C++ / Verilog

The public agentic_circuit import and agentic-circuit CLI remain distinct from pycircuit. AC symbols are not re-exported from pycircuit.__init__. See the ACIR architecture overview and migration record.

First cycle-aware design

frompycircuitimport (
CycleAwareCircuit,
CycleAwareDomain,
cas,
compile_cycle_aware,
wire_of,
)
defcounter(
m: CycleAwareCircuit,
domain: CycleAwareDomain,
width: int=8,
) ->None:
enable=cas(domain, m.input("enable", width=1), cycle=0)
count=domain.signal(width=width, reset_value=0, name="count")
m.output("count", wire_of(count))
domain.next()
count.assign(count+1, when=enable)
if__name__=="__main__":
design=compile_cycle_aware(counter, name="counter", eager=True)
print(design.emit_mlir())

domain.next() advances the authoring-time logical cycle. The assignment to count therefore creates a one-stage state update. When values from different logical cycles meet, the compiler inserts the delay chain needed to align them.

Build and test

Build the repository counter example for both backends:

export PYC_TOOLCHAIN_ROOT="$PWD/.pycircuit_out/toolchain/install"
PYTHONPATH=python/pycircuit/src \
python3 -m pycircuit.cli build \
examples/pycircuit/counter/tb_counter.py \
--out-dir /tmp/pyc_counter \
--target both \
--jobs 8

Run the normal contributor lanes:

pre-commit run --files <changed-file> [<changed-file> ...]
pytest tests/unit -m unit
bash flows/scripts/run_examples.sh
bash flows/scripts/run_sims.sh

Run the complete Agentic Circuit G0/G1/G2 closure from the integrated checkout:

PYC_GATE_RUN_ID=local-ac-$(date +%Y%m%d-%H%M%S) \
bash flows/scripts/run_agentic_circuit.sh

The script installs the current AC frontend, builds ACIR/ACSim/gfsim, runs the MLIR and C++ suites, and validates canonical ACIR-to-PYC-to-C++/Verilog cases.

System tests require a built toolchain and Verilator:

pytest tests/system -m system

Documentation

Repository governance

PTO-ISA owns product decisions, both Python distributions, releases, package publication, and the default branch. Linx integration changes should be developed so they can be reviewed upstream; the LinxISA fork follows the upstream default branch. The standalone Agentic Circuit repository remains a public migration record until the current QEMU/PYC comparison and operational cutover checklist pass; it is not an active development or publishing source.

Historical gate logs retain their original directory names. Active runtime, trace, and gate contracts use libpyc6_runtime, PYC6TRC3, and run_semantic_regressions_v6.sh.

Repository layout

pyCircuit/
├── python/pycircuit/src/pycircuit/ # Python language frontend
├── python/agentic-circuit/ # Agentic Circuit Python distribution
├── compiler/mlir/ # pyc dialect, passes, pycc, and emitters
├── compiler/acir/ # ACIR/ACSim dialects, passes, and tools
├── library/ # pyCircuit C++ and Verilog libraries
├── simulator/gfsim/ # Agentic Circuit architecture simulator
├── examples/ # pyCircuit and Agentic Circuit examples
├── flows/ # Build and validation orchestration
├── tests/ # Language- and layer-classified tests
└── docs/ # Product and contributor documentation

License

pyCircuit, including the integrated Agentic Circuit sources, is licensed under the BSD 3-Clause License. See LICENSE and the relicensing record.

About

Downstream fork of PTO-ISA/pyCircuit for Linx integration work

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

628 Commits

Folders and files

NameName
Last commit message
Last commit date

pyCircuit 6

LicensepyCircuit Python 3.10 or laterAgentic Circuit Python 3.11 or laterMLIRCIReleaseLatest release

pyCircuit is a Python hardware construction and architecture-modeling repository. The pycircuit frontend lowers cycle-aware designs to verified PYC MLIR and emits synthesizable Verilog and a C++ cycle model. The retained agentic_circuit frontend lowers architecture/process/queue descriptions to ACIR, then targets either ACSim/gfsim or the pyCircuit 6 hardware flow.

PTO-ISA/pyCircuit is the canonical repository, release authority, and only active source of truth for both pyCircuit and Agentic Circuit. LinxISA/pyCircuit is its downstream fork for Linx integration work.

The standalone PTO-ISA/agentic-circuit repository remains public only as a migration and review record. New AC source, issues, releases, and packages belong in PTO-ISA/pyCircuit; the old repository is not archived until the independent QEMU/PYC retirement gate passes.

Why pyCircuit 6

  • Cycle-aware signals:CycleAwareSignal carries logical-cycle provenance.
  • Automatic pipeline balancing: mixed-cycle expressions lower to explicit delay registers.
  • Inferred state:domain.signal() plus <<= or .assign() derives the required register structure.
  • One semantic IR: C++ and Verilog consume the same verified pyc MLIR.
  • Preserved hierarchy: module instances remain visible to simulation, DFX, and emitted RTL.
  • Scalable validation: legality, cycle, depth, clock-domain, trace, and backend-equivalence gates are part of the repository workflow.

Choose a frontend

GoalDistributionPython importPrimary IR and runtime
Construct cycle-aware hardwarepycircuit-hisipycircuitPYC → pycclibpyc6_runtime / Verilog
Model architecture, processes, resources, and queuesagentic-circuitagentic_circuitACPy/ACIR → ACSim/gfsim, or ACIR → PYC

Use pycircuit when the design contract is signals, registers, memories, pipeline timing, and synthesizable hardware. Use agentic_circuit when the source model describes architectural processes, queues, resources, scheduling, or workloads. The namespaces remain separate even when both frontends converge on verified PYC for hardware generation.

See Choose a frontend for the supported entrypoints and first commands.

Install

The canonical pyCircuit 6 source installation is:

git clone https://github.com/PTO-ISA/pyCircuit.git
cd pyCircuit
python3 -m pip install -e ".[dev,docs]"
pre-commit install
bash flows/scripts/pyc build

Install the Agentic Circuit distribution from the same checkout when using ACPy, ACIR, ACSim, or gfsim:

python3 -m pip install -e "python/agentic-circuit[test]"
agentic-circuit --help

The source CLI's schema-backed commands also need the generated AC Python resource tree. The canonical run_agentic_circuit.sh gate configures that tree and supplies the required PYTHONPATH; installation alone is sufficient for imports and --help, not for compiling a workspace.

Release wheels, once published, use the distribution name pycircuit-hisi; the Python import remains pycircuit. The repository does not claim a PyPI release until the corresponding PTO-ISA release workflow has completed.

The staged compiler is installed under .pycircuit_out/toolchain/install/. Set PYC_TOOLCHAIN_ROOT to that directory when running end-to-end builds from a source checkout.

Agentic Circuit and ACIR

ACIR remains an independent, upper-level MLIR dialect. It is not folded into the PYC dialect and does not replace the Cycle-Aware Signal model:

agentic_circuit frontend -> ACPy 0.4 -> ACIR
|-> ACSim -> gfsim
`-> PYC -> pycc -> pyc6 C++ / Verilog
pycircuit frontend -> Cycle-Aware Signal -> PYC -> pycc -> pyc6 C++ / Verilog

The public agentic_circuit import and agentic-circuit CLI remain distinct from pycircuit. AC symbols are not re-exported from pycircuit.__init__. See the ACIR architecture overview and migration record.

First cycle-aware design

frompycircuitimport (
CycleAwareCircuit,
CycleAwareDomain,
cas,
compile_cycle_aware,
wire_of,
)
defcounter(
m: CycleAwareCircuit,
domain: CycleAwareDomain,
width: int=8,
) ->None:
enable=cas(domain, m.input("enable", width=1), cycle=0)
count=domain.signal(width=width, reset_value=0, name="count")
m.output("count", wire_of(count))
domain.next()
count.assign(count+1, when=enable)
if__name__=="__main__":
design=compile_cycle_aware(counter, name="counter", eager=True)
print(design.emit_mlir())

domain.next() advances the authoring-time logical cycle. The assignment to count therefore creates a one-stage state update. When values from different logical cycles meet, the compiler inserts the delay chain needed to align them.

Build and test

Build the repository counter example for both backends:

export PYC_TOOLCHAIN_ROOT="$PWD/.pycircuit_out/toolchain/install"
PYTHONPATH=python/pycircuit/src \
python3 -m pycircuit.cli build \
examples/pycircuit/counter/tb_counter.py \
--out-dir /tmp/pyc_counter \
--target both \
--jobs 8

Run the normal contributor lanes:

pre-commit run --files <changed-file> [<changed-file> ...]
pytest tests/unit -m unit
bash flows/scripts/run_examples.sh
bash flows/scripts/run_sims.sh

Run the complete Agentic Circuit G0/G1/G2 closure from the integrated checkout:

PYC_GATE_RUN_ID=local-ac-$(date +%Y%m%d-%H%M%S) \
bash flows/scripts/run_agentic_circuit.sh

The script installs the current AC frontend, builds ACIR/ACSim/gfsim, runs the MLIR and C++ suites, and validates canonical ACIR-to-PYC-to-C++/Verilog cases.

System tests require a built toolchain and Verilator:

pytest tests/system -m system

Documentation

Repository governance

PTO-ISA owns product decisions, both Python distributions, releases, package publication, and the default branch. Linx integration changes should be developed so they can be reviewed upstream; the LinxISA fork follows the upstream default branch. The standalone Agentic Circuit repository remains a public migration record until the current QEMU/PYC comparison and operational cutover checklist pass; it is not an active development or publishing source.

Historical gate logs retain their original directory names. Active runtime, trace, and gate contracts use libpyc6_runtime, PYC6TRC3, and run_semantic_regressions_v6.sh.

Repository layout

pyCircuit/
├── python/pycircuit/src/pycircuit/ # Python language frontend
├── python/agentic-circuit/ # Agentic Circuit Python distribution
├── compiler/mlir/ # pyc dialect, passes, pycc, and emitters
├── compiler/acir/ # ACIR/ACSim dialects, passes, and tools
├── library/ # pyCircuit C++ and Verilog libraries
├── simulator/gfsim/ # Agentic Circuit architecture simulator
├── examples/ # pyCircuit and Agentic Circuit examples
├── flows/ # Build and validation orchestration
├── tests/ # Language- and layer-classified tests
└── docs/ # Product and contributor documentation

License

pyCircuit, including the integrated Agentic Circuit sources, is licensed under the BSD 3-Clause License. See LICENSE and the relicensing record.

About

Downstream fork of PTO-ISA/pyCircuit for Linx integration work

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

628 Commits

Folders and files

NameName
Last commit message
Last commit date

pyCircuit 6

LicensepyCircuit Python 3.10 or laterAgentic Circuit Python 3.11 or laterMLIRCIReleaseLatest release

pyCircuit is a Python hardware construction and architecture-modeling repository. The pycircuit frontend lowers cycle-aware designs to verified PYC MLIR and emits synthesizable Verilog and a C++ cycle model. The retained agentic_circuit frontend lowers architecture/process/queue descriptions to ACIR, then targets either ACSim/gfsim or the pyCircuit 6 hardware flow.

PTO-ISA/pyCircuit is the canonical repository, release authority, and only active source of truth for both pyCircuit and Agentic Circuit. LinxISA/pyCircuit is its downstream fork for Linx integration work.

The standalone PTO-ISA/agentic-circuit repository remains public only as a migration and review record. New AC source, issues, releases, and packages belong in PTO-ISA/pyCircuit; the old repository is not archived until the independent QEMU/PYC retirement gate passes.

Why pyCircuit 6

  • Cycle-aware signals:CycleAwareSignal carries logical-cycle provenance.
  • Automatic pipeline balancing: mixed-cycle expressions lower to explicit delay registers.
  • Inferred state:domain.signal() plus <<= or .assign() derives the required register structure.
  • One semantic IR: C++ and Verilog consume the same verified pyc MLIR.
  • Preserved hierarchy: module instances remain visible to simulation, DFX, and emitted RTL.
  • Scalable validation: legality, cycle, depth, clock-domain, trace, and backend-equivalence gates are part of the repository workflow.

Choose a frontend

GoalDistributionPython importPrimary IR and runtime
Construct cycle-aware hardwarepycircuit-hisipycircuitPYC → pycclibpyc6_runtime / Verilog
Model architecture, processes, resources, and queuesagentic-circuitagentic_circuitACPy/ACIR → ACSim/gfsim, or ACIR → PYC

Use pycircuit when the design contract is signals, registers, memories, pipeline timing, and synthesizable hardware. Use agentic_circuit when the source model describes architectural processes, queues, resources, scheduling, or workloads. The namespaces remain separate even when both frontends converge on verified PYC for hardware generation.

See Choose a frontend for the supported entrypoints and first commands.

Install

The canonical pyCircuit 6 source installation is:

git clone https://github.com/PTO-ISA/pyCircuit.git
cd pyCircuit
python3 -m pip install -e ".[dev,docs]"
pre-commit install
bash flows/scripts/pyc build

Install the Agentic Circuit distribution from the same checkout when using ACPy, ACIR, ACSim, or gfsim:

python3 -m pip install -e "python/agentic-circuit[test]"
agentic-circuit --help

The source CLI's schema-backed commands also need the generated AC Python resource tree. The canonical run_agentic_circuit.sh gate configures that tree and supplies the required PYTHONPATH; installation alone is sufficient for imports and --help, not for compiling a workspace.

Release wheels, once published, use the distribution name pycircuit-hisi; the Python import remains pycircuit. The repository does not claim a PyPI release until the corresponding PTO-ISA release workflow has completed.

The staged compiler is installed under .pycircuit_out/toolchain/install/. Set PYC_TOOLCHAIN_ROOT to that directory when running end-to-end builds from a source checkout.

Agentic Circuit and ACIR

ACIR remains an independent, upper-level MLIR dialect. It is not folded into the PYC dialect and does not replace the Cycle-Aware Signal model:

agentic_circuit frontend -> ACPy 0.4 -> ACIR
|-> ACSim -> gfsim
`-> PYC -> pycc -> pyc6 C++ / Verilog
pycircuit frontend -> Cycle-Aware Signal -> PYC -> pycc -> pyc6 C++ / Verilog

The public agentic_circuit import and agentic-circuit CLI remain distinct from pycircuit. AC symbols are not re-exported from pycircuit.__init__. See the ACIR architecture overview and migration record.

First cycle-aware design

frompycircuitimport (
CycleAwareCircuit,
CycleAwareDomain,
cas,
compile_cycle_aware,
wire_of,
)
defcounter(
m: CycleAwareCircuit,
domain: CycleAwareDomain,
width: int=8,
) ->None:
enable=cas(domain, m.input("enable", width=1), cycle=0)
count=domain.signal(width=width, reset_value=0, name="count")
m.output("count", wire_of(count))
domain.next()
count.assign(count+1, when=enable)
if__name__=="__main__":
design=compile_cycle_aware(counter, name="counter", eager=True)
print(design.emit_mlir())

domain.next() advances the authoring-time logical cycle. The assignment to count therefore creates a one-stage state update. When values from different logical cycles meet, the compiler inserts the delay chain needed to align them.

Build and test

Build the repository counter example for both backends:

export PYC_TOOLCHAIN_ROOT="$PWD/.pycircuit_out/toolchain/install"
PYTHONPATH=python/pycircuit/src \
python3 -m pycircuit.cli build \
examples/pycircuit/counter/tb_counter.py \
--out-dir /tmp/pyc_counter \
--target both \
--jobs 8

Run the normal contributor lanes:

pre-commit run --files <changed-file> [<changed-file> ...]
pytest tests/unit -m unit
bash flows/scripts/run_examples.sh
bash flows/scripts/run_sims.sh

Run the complete Agentic Circuit G0/G1/G2 closure from the integrated checkout:

PYC_GATE_RUN_ID=local-ac-$(date +%Y%m%d-%H%M%S) \
bash flows/scripts/run_agentic_circuit.sh

The script installs the current AC frontend, builds ACIR/ACSim/gfsim, runs the MLIR and C++ suites, and validates canonical ACIR-to-PYC-to-C++/Verilog cases.

System tests require a built toolchain and Verilator:

pytest tests/system -m system

Documentation

Repository governance

PTO-ISA owns product decisions, both Python distributions, releases, package publication, and the default branch. Linx integration changes should be developed so they can be reviewed upstream; the LinxISA fork follows the upstream default branch. The standalone Agentic Circuit repository remains a public migration record until the current QEMU/PYC comparison and operational cutover checklist pass; it is not an active development or publishing source.

Historical gate logs retain their original directory names. Active runtime, trace, and gate contracts use libpyc6_runtime, PYC6TRC3, and run_semantic_regressions_v6.sh.

Repository layout

pyCircuit/
├── python/pycircuit/src/pycircuit/ # Python language frontend
├── python/agentic-circuit/ # Agentic Circuit Python distribution
├── compiler/mlir/ # pyc dialect, passes, pycc, and emitters
├── compiler/acir/ # ACIR/ACSim dialects, passes, and tools
├── library/ # pyCircuit C++ and Verilog libraries
├── simulator/gfsim/ # Agentic Circuit architecture simulator
├── examples/ # pyCircuit and Agentic Circuit examples
├── flows/ # Build and validation orchestration
├── tests/ # Language- and layer-classified tests
└── docs/ # Product and contributor documentation

License

pyCircuit, including the integrated Agentic Circuit sources, is licensed under the BSD 3-Clause License. See LICENSE and the relicensing record.

About

Downstream fork of PTO-ISA/pyCircuit for Linx integration work

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

628 Commits

Folders and files

NameName
Last commit message
Last commit date

pyCircuit 6

LicensepyCircuit Python 3.10 or laterAgentic Circuit Python 3.11 or laterMLIRCIReleaseLatest release

pyCircuit is a Python hardware construction and architecture-modeling repository. The pycircuit frontend lowers cycle-aware designs to verified PYC MLIR and emits synthesizable Verilog and a C++ cycle model. The retained agentic_circuit frontend lowers architecture/process/queue descriptions to ACIR, then targets either ACSim/gfsim or the pyCircuit 6 hardware flow.

PTO-ISA/pyCircuit is the canonical repository, release authority, and only active source of truth for both pyCircuit and Agentic Circuit. LinxISA/pyCircuit is its downstream fork for Linx integration work.

The standalone PTO-ISA/agentic-circuit repository remains public only as a migration and review record. New AC source, issues, releases, and packages belong in PTO-ISA/pyCircuit; the old repository is not archived until the independent QEMU/PYC retirement gate passes.

Why pyCircuit 6

  • Cycle-aware signals:CycleAwareSignal carries logical-cycle provenance.
  • Automatic pipeline balancing: mixed-cycle expressions lower to explicit delay registers.
  • Inferred state:domain.signal() plus <<= or .assign() derives the required register structure.
  • One semantic IR: C++ and Verilog consume the same verified pyc MLIR.
  • Preserved hierarchy: module instances remain visible to simulation, DFX, and emitted RTL.
  • Scalable validation: legality, cycle, depth, clock-domain, trace, and backend-equivalence gates are part of the repository workflow.

Choose a frontend

GoalDistributionPython importPrimary IR and runtime
Construct cycle-aware hardwarepycircuit-hisipycircuitPYC → pycclibpyc6_runtime / Verilog
Model architecture, processes, resources, and queuesagentic-circuitagentic_circuitACPy/ACIR → ACSim/gfsim, or ACIR → PYC

Use pycircuit when the design contract is signals, registers, memories, pipeline timing, and synthesizable hardware. Use agentic_circuit when the source model describes architectural processes, queues, resources, scheduling, or workloads. The namespaces remain separate even when both frontends converge on verified PYC for hardware generation.

See Choose a frontend for the supported entrypoints and first commands.

Install

The canonical pyCircuit 6 source installation is:

git clone https://github.com/PTO-ISA/pyCircuit.git
cd pyCircuit
python3 -m pip install -e ".[dev,docs]"
pre-commit install
bash flows/scripts/pyc build

Install the Agentic Circuit distribution from the same checkout when using ACPy, ACIR, ACSim, or gfsim:

python3 -m pip install -e "python/agentic-circuit[test]"
agentic-circuit --help

The source CLI's schema-backed commands also need the generated AC Python resource tree. The canonical run_agentic_circuit.sh gate configures that tree and supplies the required PYTHONPATH; installation alone is sufficient for imports and --help, not for compiling a workspace.

Release wheels, once published, use the distribution name pycircuit-hisi; the Python import remains pycircuit. The repository does not claim a PyPI release until the corresponding PTO-ISA release workflow has completed.

The staged compiler is installed under .pycircuit_out/toolchain/install/. Set PYC_TOOLCHAIN_ROOT to that directory when running end-to-end builds from a source checkout.

Agentic Circuit and ACIR

ACIR remains an independent, upper-level MLIR dialect. It is not folded into the PYC dialect and does not replace the Cycle-Aware Signal model:

agentic_circuit frontend -> ACPy 0.4 -> ACIR
|-> ACSim -> gfsim
`-> PYC -> pycc -> pyc6 C++ / Verilog
pycircuit frontend -> Cycle-Aware Signal -> PYC -> pycc -> pyc6 C++ / Verilog

The public agentic_circuit import and agentic-circuit CLI remain distinct from pycircuit. AC symbols are not re-exported from pycircuit.__init__. See the ACIR architecture overview and migration record.

First cycle-aware design

frompycircuitimport (
CycleAwareCircuit,
CycleAwareDomain,
cas,
compile_cycle_aware,
wire_of,
)
defcounter(
m: CycleAwareCircuit,
domain: CycleAwareDomain,
width: int=8,
) ->None:
enable=cas(domain, m.input("enable", width=1), cycle=0)
count=domain.signal(width=width, reset_value=0, name="count")
m.output("count", wire_of(count))
domain.next()
count.assign(count+1, when=enable)
if__name__=="__main__":
design=compile_cycle_aware(counter, name="counter", eager=True)
print(design.emit_mlir())

domain.next() advances the authoring-time logical cycle. The assignment to count therefore creates a one-stage state update. When values from different logical cycles meet, the compiler inserts the delay chain needed to align them.

Build and test

Build the repository counter example for both backends:

export PYC_TOOLCHAIN_ROOT="$PWD/.pycircuit_out/toolchain/install"
PYTHONPATH=python/pycircuit/src \
python3 -m pycircuit.cli build \
examples/pycircuit/counter/tb_counter.py \
--out-dir /tmp/pyc_counter \
--target both \
--jobs 8

Run the normal contributor lanes:

pre-commit run --files <changed-file> [<changed-file> ...]
pytest tests/unit -m unit
bash flows/scripts/run_examples.sh
bash flows/scripts/run_sims.sh

Run the complete Agentic Circuit G0/G1/G2 closure from the integrated checkout:

PYC_GATE_RUN_ID=local-ac-$(date +%Y%m%d-%H%M%S) \
bash flows/scripts/run_agentic_circuit.sh

The script installs the current AC frontend, builds ACIR/ACSim/gfsim, runs the MLIR and C++ suites, and validates canonical ACIR-to-PYC-to-C++/Verilog cases.

System tests require a built toolchain and Verilator:

pytest tests/system -m system

Documentation

Repository governance

PTO-ISA owns product decisions, both Python distributions, releases, package publication, and the default branch. Linx integration changes should be developed so they can be reviewed upstream; the LinxISA fork follows the upstream default branch. The standalone Agentic Circuit repository remains a public migration record until the current QEMU/PYC comparison and operational cutover checklist pass; it is not an active development or publishing source.

Historical gate logs retain their original directory names. Active runtime, trace, and gate contracts use libpyc6_runtime, PYC6TRC3, and run_semantic_regressions_v6.sh.

Repository layout

pyCircuit/
├── python/pycircuit/src/pycircuit/ # Python language frontend
├── python/agentic-circuit/ # Agentic Circuit Python distribution
├── compiler/mlir/ # pyc dialect, passes, pycc, and emitters
├── compiler/acir/ # ACIR/ACSim dialects, passes, and tools
├── library/ # pyCircuit C++ and Verilog libraries
├── simulator/gfsim/ # Agentic Circuit architecture simulator
├── examples/ # pyCircuit and Agentic Circuit examples
├── flows/ # Build and validation orchestration
├── tests/ # Language- and layer-classified tests
└── docs/ # Product and contributor documentation

License

pyCircuit, including the integrated Agentic Circuit sources, is licensed under the BSD 3-Clause License. See LICENSE and the relicensing record.

About

Downstream fork of PTO-ISA/pyCircuit for Linx integration work

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

628 Commits

Folders and files

NameName
Last commit message
Last commit date

pyCircuit 6

LicensepyCircuit Python 3.10 or laterAgentic Circuit Python 3.11 or laterMLIRCIReleaseLatest release

pyCircuit is a Python hardware construction and architecture-modeling repository. The pycircuit frontend lowers cycle-aware designs to verified PYC MLIR and emits synthesizable Verilog and a C++ cycle model. The retained agentic_circuit frontend lowers architecture/process/queue descriptions to ACIR, then targets either ACSim/gfsim or the pyCircuit 6 hardware flow.

PTO-ISA/pyCircuit is the canonical repository, release authority, and only active source of truth for both pyCircuit and Agentic Circuit. LinxISA/pyCircuit is its downstream fork for Linx integration work.

The standalone PTO-ISA/agentic-circuit repository remains public only as a migration and review record. New AC source, issues, releases, and packages belong in PTO-ISA/pyCircuit; the old repository is not archived until the independent QEMU/PYC retirement gate passes.

Why pyCircuit 6

  • Cycle-aware signals:CycleAwareSignal carries logical-cycle provenance.
  • Automatic pipeline balancing: mixed-cycle expressions lower to explicit delay registers.
  • Inferred state:domain.signal() plus <<= or .assign() derives the required register structure.
  • One semantic IR: C++ and Verilog consume the same verified pyc MLIR.
  • Preserved hierarchy: module instances remain visible to simulation, DFX, and emitted RTL.
  • Scalable validation: legality, cycle, depth, clock-domain, trace, and backend-equivalence gates are part of the repository workflow.

Choose a frontend

GoalDistributionPython importPrimary IR and runtime
Construct cycle-aware hardwarepycircuit-hisipycircuitPYC → pycclibpyc6_runtime / Verilog
Model architecture, processes, resources, and queuesagentic-circuitagentic_circuitACPy/ACIR → ACSim/gfsim, or ACIR → PYC

Use pycircuit when the design contract is signals, registers, memories, pipeline timing, and synthesizable hardware. Use agentic_circuit when the source model describes architectural processes, queues, resources, scheduling, or workloads. The namespaces remain separate even when both frontends converge on verified PYC for hardware generation.

See Choose a frontend for the supported entrypoints and first commands.

Install

The canonical pyCircuit 6 source installation is:

git clone https://github.com/PTO-ISA/pyCircuit.git
cd pyCircuit
python3 -m pip install -e ".[dev,docs]"
pre-commit install
bash flows/scripts/pyc build

Install the Agentic Circuit distribution from the same checkout when using ACPy, ACIR, ACSim, or gfsim:

python3 -m pip install -e "python/agentic-circuit[test]"
agentic-circuit --help

The source CLI's schema-backed commands also need the generated AC Python resource tree. The canonical run_agentic_circuit.sh gate configures that tree and supplies the required PYTHONPATH; installation alone is sufficient for imports and --help, not for compiling a workspace.

Release wheels, once published, use the distribution name pycircuit-hisi; the Python import remains pycircuit. The repository does not claim a PyPI release until the corresponding PTO-ISA release workflow has completed.

The staged compiler is installed under .pycircuit_out/toolchain/install/. Set PYC_TOOLCHAIN_ROOT to that directory when running end-to-end builds from a source checkout.

Agentic Circuit and ACIR

ACIR remains an independent, upper-level MLIR dialect. It is not folded into the PYC dialect and does not replace the Cycle-Aware Signal model:

agentic_circuit frontend -> ACPy 0.4 -> ACIR
|-> ACSim -> gfsim
`-> PYC -> pycc -> pyc6 C++ / Verilog
pycircuit frontend -> Cycle-Aware Signal -> PYC -> pycc -> pyc6 C++ / Verilog

The public agentic_circuit import and agentic-circuit CLI remain distinct from pycircuit. AC symbols are not re-exported from pycircuit.__init__. See the ACIR architecture overview and migration record.

First cycle-aware design

frompycircuitimport (
CycleAwareCircuit,
CycleAwareDomain,
cas,
compile_cycle_aware,
wire_of,
)
defcounter(
m: CycleAwareCircuit,
domain: CycleAwareDomain,
width: int=8,
) ->None:
enable=cas(domain, m.input("enable", width=1), cycle=0)
count=domain.signal(width=width, reset_value=0, name="count")
m.output("count", wire_of(count))
domain.next()
count.assign(count+1, when=enable)
if__name__=="__main__":
design=compile_cycle_aware(counter, name="counter", eager=True)
print(design.emit_mlir())

domain.next() advances the authoring-time logical cycle. The assignment to count therefore creates a one-stage state update. When values from different logical cycles meet, the compiler inserts the delay chain needed to align them.

Build and test

Build the repository counter example for both backends:

export PYC_TOOLCHAIN_ROOT="$PWD/.pycircuit_out/toolchain/install"
PYTHONPATH=python/pycircuit/src \
python3 -m pycircuit.cli build \
examples/pycircuit/counter/tb_counter.py \
--out-dir /tmp/pyc_counter \
--target both \
--jobs 8

Run the normal contributor lanes:

pre-commit run --files <changed-file> [<changed-file> ...]
pytest tests/unit -m unit
bash flows/scripts/run_examples.sh
bash flows/scripts/run_sims.sh

Run the complete Agentic Circuit G0/G1/G2 closure from the integrated checkout:

PYC_GATE_RUN_ID=local-ac-$(date +%Y%m%d-%H%M%S) \
bash flows/scripts/run_agentic_circuit.sh

The script installs the current AC frontend, builds ACIR/ACSim/gfsim, runs the MLIR and C++ suites, and validates canonical ACIR-to-PYC-to-C++/Verilog cases.

System tests require a built toolchain and Verilator:

pytest tests/system -m system

Documentation

Repository governance

PTO-ISA owns product decisions, both Python distributions, releases, package publication, and the default branch. Linx integration changes should be developed so they can be reviewed upstream; the LinxISA fork follows the upstream default branch. The standalone Agentic Circuit repository remains a public migration record until the current QEMU/PYC comparison and operational cutover checklist pass; it is not an active development or publishing source.

Historical gate logs retain their original directory names. Active runtime, trace, and gate contracts use libpyc6_runtime, PYC6TRC3, and run_semantic_regressions_v6.sh.

Repository layout

pyCircuit/
├── python/pycircuit/src/pycircuit/ # Python language frontend
├── python/agentic-circuit/ # Agentic Circuit Python distribution
├── compiler/mlir/ # pyc dialect, passes, pycc, and emitters
├── compiler/acir/ # ACIR/ACSim dialects, passes, and tools
├── library/ # pyCircuit C++ and Verilog libraries
├── simulator/gfsim/ # Agentic Circuit architecture simulator
├── examples/ # pyCircuit and Agentic Circuit examples
├── flows/ # Build and validation orchestration
├── tests/ # Language- and layer-classified tests
└── docs/ # Product and contributor documentation

License

pyCircuit, including the integrated Agentic Circuit sources, is licensed under the BSD 3-Clause License. See LICENSE and the relicensing record.

About

Downstream fork of PTO-ISA/pyCircuit for Linx integration work

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

628 Commits

Folders and files

NameName
Last commit message
Last commit date

pyCircuit 6

LicensepyCircuit Python 3.10 or laterAgentic Circuit Python 3.11 or laterMLIRCIReleaseLatest release

pyCircuit is a Python hardware construction and architecture-modeling repository. The pycircuit frontend lowers cycle-aware designs to verified PYC MLIR and emits synthesizable Verilog and a C++ cycle model. The retained agentic_circuit frontend lowers architecture/process/queue descriptions to ACIR, then targets either ACSim/gfsim or the pyCircuit 6 hardware flow.

PTO-ISA/pyCircuit is the canonical repository, release authority, and only active source of truth for both pyCircuit and Agentic Circuit. LinxISA/pyCircuit is its downstream fork for Linx integration work.

The standalone PTO-ISA/agentic-circuit repository remains public only as a migration and review record. New AC source, issues, releases, and packages belong in PTO-ISA/pyCircuit; the old repository is not archived until the independent QEMU/PYC retirement gate passes.

Why pyCircuit 6

  • Cycle-aware signals:CycleAwareSignal carries logical-cycle provenance.
  • Automatic pipeline balancing: mixed-cycle expressions lower to explicit delay registers.
  • Inferred state:domain.signal() plus <<= or .assign() derives the required register structure.
  • One semantic IR: C++ and Verilog consume the same verified pyc MLIR.
  • Preserved hierarchy: module instances remain visible to simulation, DFX, and emitted RTL.
  • Scalable validation: legality, cycle, depth, clock-domain, trace, and backend-equivalence gates are part of the repository workflow.

Choose a frontend

GoalDistributionPython importPrimary IR and runtime
Construct cycle-aware hardwarepycircuit-hisipycircuitPYC → pycclibpyc6_runtime / Verilog
Model architecture, processes, resources, and queuesagentic-circuitagentic_circuitACPy/ACIR → ACSim/gfsim, or ACIR → PYC

Use pycircuit when the design contract is signals, registers, memories, pipeline timing, and synthesizable hardware. Use agentic_circuit when the source model describes architectural processes, queues, resources, scheduling, or workloads. The namespaces remain separate even when both frontends converge on verified PYC for hardware generation.

See Choose a frontend for the supported entrypoints and first commands.

Install

The canonical pyCircuit 6 source installation is:

git clone https://github.com/PTO-ISA/pyCircuit.git
cd pyCircuit
python3 -m pip install -e ".[dev,docs]"
pre-commit install
bash flows/scripts/pyc build

Install the Agentic Circuit distribution from the same checkout when using ACPy, ACIR, ACSim, or gfsim:

python3 -m pip install -e "python/agentic-circuit[test]"
agentic-circuit --help

The source CLI's schema-backed commands also need the generated AC Python resource tree. The canonical run_agentic_circuit.sh gate configures that tree and supplies the required PYTHONPATH; installation alone is sufficient for imports and --help, not for compiling a workspace.

Release wheels, once published, use the distribution name pycircuit-hisi; the Python import remains pycircuit. The repository does not claim a PyPI release until the corresponding PTO-ISA release workflow has completed.

The staged compiler is installed under .pycircuit_out/toolchain/install/. Set PYC_TOOLCHAIN_ROOT to that directory when running end-to-end builds from a source checkout.

Agentic Circuit and ACIR

ACIR remains an independent, upper-level MLIR dialect. It is not folded into the PYC dialect and does not replace the Cycle-Aware Signal model:

agentic_circuit frontend -> ACPy 0.4 -> ACIR
|-> ACSim -> gfsim
`-> PYC -> pycc -> pyc6 C++ / Verilog
pycircuit frontend -> Cycle-Aware Signal -> PYC -> pycc -> pyc6 C++ / Verilog

The public agentic_circuit import and agentic-circuit CLI remain distinct from pycircuit. AC symbols are not re-exported from pycircuit.__init__. See the ACIR architecture overview and migration record.

First cycle-aware design

frompycircuitimport (
CycleAwareCircuit,
CycleAwareDomain,
cas,
compile_cycle_aware,
wire_of,
)
defcounter(
m: CycleAwareCircuit,
domain: CycleAwareDomain,
width: int=8,
) ->None:
enable=cas(domain, m.input("enable", width=1), cycle=0)
count=domain.signal(width=width, reset_value=0, name="count")
m.output("count", wire_of(count))
domain.next()
count.assign(count+1, when=enable)
if__name__=="__main__":
design=compile_cycle_aware(counter, name="counter", eager=True)
print(design.emit_mlir())

domain.next() advances the authoring-time logical cycle. The assignment to count therefore creates a one-stage state update. When values from different logical cycles meet, the compiler inserts the delay chain needed to align them.

Build and test

Build the repository counter example for both backends:

export PYC_TOOLCHAIN_ROOT="$PWD/.pycircuit_out/toolchain/install"
PYTHONPATH=python/pycircuit/src \
python3 -m pycircuit.cli build \
examples/pycircuit/counter/tb_counter.py \
--out-dir /tmp/pyc_counter \
--target both \
--jobs 8

Run the normal contributor lanes:

pre-commit run --files <changed-file> [<changed-file> ...]
pytest tests/unit -m unit
bash flows/scripts/run_examples.sh
bash flows/scripts/run_sims.sh

Run the complete Agentic Circuit G0/G1/G2 closure from the integrated checkout:

PYC_GATE_RUN_ID=local-ac-$(date +%Y%m%d-%H%M%S) \
bash flows/scripts/run_agentic_circuit.sh

The script installs the current AC frontend, builds ACIR/ACSim/gfsim, runs the MLIR and C++ suites, and validates canonical ACIR-to-PYC-to-C++/Verilog cases.

System tests require a built toolchain and Verilator:

pytest tests/system -m system

Documentation

Repository governance

PTO-ISA owns product decisions, both Python distributions, releases, package publication, and the default branch. Linx integration changes should be developed so they can be reviewed upstream; the LinxISA fork follows the upstream default branch. The standalone Agentic Circuit repository remains a public migration record until the current QEMU/PYC comparison and operational cutover checklist pass; it is not an active development or publishing source.

Historical gate logs retain their original directory names. Active runtime, trace, and gate contracts use libpyc6_runtime, PYC6TRC3, and run_semantic_regressions_v6.sh.

Repository layout

pyCircuit/
├── python/pycircuit/src/pycircuit/ # Python language frontend
├── python/agentic-circuit/ # Agentic Circuit Python distribution
├── compiler/mlir/ # pyc dialect, passes, pycc, and emitters
├── compiler/acir/ # ACIR/ACSim dialects, passes, and tools
├── library/ # pyCircuit C++ and Verilog libraries
├── simulator/gfsim/ # Agentic Circuit architecture simulator
├── examples/ # pyCircuit and Agentic Circuit examples
├── flows/ # Build and validation orchestration
├── tests/ # Language- and layer-classified tests
└── docs/ # Product and contributor documentation

License

pyCircuit, including the integrated Agentic Circuit sources, is licensed under the BSD 3-Clause License. See LICENSE and the relicensing record.

About

Downstream fork of PTO-ISA/pyCircuit for Linx integration work

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages