[ B_{} = N_{} , f_s , b b = = ;. ]
Thus each sample is a 16‑bit word (≈ 2 B).
Standard runtimes allocate heap objects, parse structures, and move data between DRAM and core. Dynamic memory‑access energy:
[ _{} = 120240;. ]
For a 16‑bit sample (2 B) the per‑sample energy is
[ E_{} = 2,_{} ;. ]
At the raw data rate
[ {} = N{} f_s = 307.2^{6};, ]
the power dissipated by memory traffic alone is
[ P_{} = {} E{} ;. ]
Heat flow from the implant to surrounding cortical parenchyma is modeled as a steady‑state conduction problem:
[ T = P , R_{}, ]
where (R_{}) is the thermal resistance of the implant‑tissue interface.
At physiological temperature T = 310 K, the minimum energy to erase one bit is
[ E_{} = k_{!B} T = (1.38^{-23},)(310,) ^{-21}, = 2.97;. ]
Conventional memory access (≥ 120 pJ/byte) exceeds (E_{}) by a factor of
[ ^{10}. ]
Thus the dominant dissipation is not fundamental physics but architectural data movement.
Let a spike vector be a fixed‑length binary pattern of length L = 16 bits (one sample) grouped into a detection window of W = 5 samples (80 bit). Classification reduces to a Hamming‑distance test against a template set 𝒯 of size |𝒯| = T.
If the test is performed in‑place using capability‑addressed binary arenas:
Hence per‑window energy
[ E_{} = L W ,_{} = 80 ; = 40;. ]
Window rate equals sample rate (one new sample shifts the window):
[ {} = f_s , E{} = 30^{3}; = 1.2;. ]
For N₍ch₎ = 10 240 channels
[ P_{} = N_{} _{} ;. ]
| Quantity | Value |
|---|---|
| electrodeChannels | 10 240 |
| samplingRateKHz | 30 |
| rawTelemetryBandwidthGbps | 4.92 |
Derivation of the numbers above follows Sections 1‑2; they are reproduced here for traceability.
Sensor‑front‑end: Each electrode feeds a low‑noise analog front‑end (AFE) that samples at 30 kS/s, 16‑bit resolution, and writes directly into a dual‑ported SRAM tile (capability‑addressed arena). No DMA to external memory.
Capability‑addressed binary arena:
In‑place spike classifier:
Below is a minimal RTL fragment (SystemVerilog) that
implements the in‑place window shift and classification for one channel.
The design assumes a 16‑bit wide SRAM arena arena[0:W-1]
addressed by a capability chan_id.
module spike_classifier #(
parameter int W = 5, // window length (samples)
parameter int L = 16, // bits per sample
parameter int T = 32 // number of templates
) (
input logic clk,
input logic rst_n,
input logic [9:0] chan_id, // 10‑bit capability → channel ID
input logic [L-1:0] new_sample, // AFE output
output logic spike_detected
);
// Arena base address computed from capability (fixed stride = W*L bits)
localparam int STRIDE_BITS = W * L;
logic [STRIDE_BITS-1:0] arena_reg [0:1023]; // 1024 channels
// Shift window left by L bits and insert new sample at LSB
always_ff @(posedge clk or negedge rst_n) begin
if (!rst_n) begin
arena_reg[chan_id] <= '0;
end else begin
arena_reg[chan_id] <= {arena_reg[chan_id][STRIDE_BITS-L-1:0], new_sample};
end
end
// Template storage (ROM) – one-hot encoded for simplicity
logic [L*W-1:0] templates [0:T-1];
initial begin
// Example: load templates from a .mif file (omitted for brevity)
end
// Compute Hamming distance to each template, detect if any < THRESH
localparam int THRESH = 4; // ≤4 mismatches → spike
logic [ $clog2(T):0 ] match_count;
always_comb begin
match_count = 0;
for (int i=0; i<T; i++) begin
logic [L*W-1:0] diff = arena_reg[chan_id] ^ templates[i];
int unsigned ones = $countones(diff);
if