The reason to compute with spikes and probability is that both map directly onto logic gates. This page follows a single neuron the whole way down: from an ordinary differential equation, to generated RTL, to a bit-true co-simulation that proves the Python and the Verilog agree cycle-for-cycle, to open Yosys synthesis on a real FPGA, and finally to a formal proof that the hardware cannot misbehave.
A trained network is not "run" on an FPGA; it is lowered onto one. Each stage is a well-defined, checkable transform, and SC-NeuroCore keeps every stage bit-true so the model you trained is provably the circuit you ship.
RTL (register-transfer level) is the description of a circuit as registers and the combinational logic between them — it is the input a synthesis tool turns into gates. SC-NeuroCore emits human-readable SystemVerilog: a fixed-point datapath for the neuron's state update, an event neuron that only recomputes when a spike arrives, and an address-event (AER) router that carries spikes as compact addresses instead of dense vectors. Because idle neurons do no work, the event RTL toggles 15–39× fewer registers than a clocked datapath.
A generated circuit is only trustworthy if it does exactly what the model did. Co-simulation runs the Python neuron and the generated Verilog side by side on the same input and checks they agree. SC-NeuroCore auto-generates a Verilog testbench that drives a constant current for N clock cycles, compiles and runs it with the open Icarus Verilog simulator (iverilog + vvp), and compares the two spike trains. The match is bit-true — cycle-exact, not "close".
Synthesis turns RTL into the actual look-up-tables and flip-flops of an FPGA. SC-NeuroCore targets a fully open-source flow: Yosys maps the SystemVerilog to a gate netlist, nextpnr places and routes it, and a packer writes the bitstream — no vendor licence required. It runs on inexpensive Lattice boards (an iCE40 UP5K iCEBreaker is about €70, an ECP5 board €80–150), with a Xilinx Vivado path for Artix-7/Zynq parts when you need them.
Tests show a circuit works on the inputs you tried; a formal proof shows it cannot fail on any input. SC-NeuroCore attaches SystemVerilog Assertions (e.g. "the accumulator never overflows") to each generated module and discharges them with SymbiYosys using bounded model checking. Over a hundred formal properties across the module tree are proved — the generated hardware modules carry proofs, not just tests.
If $\phi_{\text{BMC}}(k)$ is unsatisfiable, no run of length $k$ from reset can violate the property $P$ — the module is safe up to depth $k$.
You should not have to marry one framework to reach hardware. NIR (Neuromorphic Intermediate Representation) is a shared exchange format — a directed graph of 18 primitives that every major spiking-network framework can export. SC-NeuroCore reads NIR, so a model trained in anyone's tool can enter the pipeline above and come out as proven RTL.
A neuron equation is quantised to fixed-point, emitted as SystemVerilog, checked bit-true against the Python model with Icarus Verilog, synthesised to a real FPGA with the open Yosys flow, and formally proved correct with SymbiYosys — so what you trained is what you ship, and it is provably what it claims to be.