Ultra-low-power synthesizable asynchronous AER encoder design for neuromorphic edge devices. Tree-based architecture with bundled-data protocol and cross-coupled NAND random-priority arbiter for event collision resolution. Activation: neuromorphic encoder, AER design, asynchronous circuit, spiking neural network hardware, edge device neuromorphic, low-power SNN.
Fully synthesizable tree-based Address-Event Representation (AER) encoder for scalable neuromorphic computing systems with ultra-low power consumption.
This skill provides methodology for designing and implementing ultra-low-power asynchronous AER encoders for neuromorphic edge devices. The design uses standard digital cells, enabling full synthesis and place-and-route with commercial EDA tools.
Key Features:
Paper: An Ultra-Low-Power Synthesizable Asynchronous AER Encoder for Neuromorphic Edge Devices
arXiv: 2604.05313v1 (2026)
Authors: Yihui Wang, Sheng-Yu Peng, Sahil Shah
Root Encoder
/ | \
Node1 Node2 Node3
/ \ / \ / \
Leaf Leaf Leaf Leaf Leaf
(Event Sources)
Semi-Decoupled Micropipeline
Random-Priority Arbiter
Tree Encoder
| Metric | Value |
|---|---|
| Technology | 65nm CMOS |
| Event Capacity | 8 events |
| Peak Throughput | 33 MEvent/s |
| Average Latency | 50 ns |
| Delay per Event-Bit | 17 ns |
| Energy per Event | 435 fJ |
| Design Flow | Pure digital standard-cell |
RTL Description → Logic Synthesis → Place & Route → Sign-off
↑ ↓
Verilog/VHDL GDSII
// Request-Acknowledge handshake
module bundled_data_channel (
input req_in,
input ack_out,
output req_out,
output ack_in,
input [DATA_WIDTH-1:0] data_in,
output [DATA_WIDTH-1:0] data_out
);
// Delay line matched to combinational logic
wire delay_out;
delay_line #(.DELAY(COMB_DELAY)) dl (.in(req_in), .out(delay_out));
// Output registration
assign req_out = delay_out;
assign ack_in = ack_out;
endmodule
module nand_arbiter (
input req_a,
input req_b,
output grant_a,
output grant_b
);
wire q_a, q_b;
// Cross-coupled NAND gates
nand n1(q_a, req_a, q_b);
nand n2(q_b, req_b, q_a);
assign grant_a = q_a;
assign grant_b = q_b;
endmodule
module tree_encoder_node (
input [N-1:0] event_in,
input [N-1:0] addr_in,
output event_out,
output [ADDR_WIDTH-1:0] addr_out
);
// Priority encoding with arbiter
wire [N-1:0] grants;
round_robin_arbiter arb (.requests(event_in), .grants(grants));
// Address selection
priority_encoder enc (.in(grants & addr_in), .out(addr_out));
assign event_out = |event_in;
endmodule
Define event source characteristics:
Determine tree depth and fanout:
tree_depth = ceil(log2(num_events))
fanout = 2 # binary tree
Match delay lines to combinational paths:
# SDC constraints
set_max_delay -from [get_pins req_in] -to [get_pins req_out] 2.0
set_min_delay -from [get_pins req_in] -to [get_pins req_out] 1.5
| Design | Throughput | Energy/Event | Synthesizable |
|---|---|---|---|
| This Work | 33 MEvent/s | 435 fJ | Yes |
| Traditional AER | ~10 MEvent/s | ~1 pJ | Partial |
| Custom Cell | 50 MEvent/s | 200 fJ | No |
Spiking Neuron Array → AER Encoder → Communication Channel
(events) (address) (serialized)
[Timestamp] [Address] [Polarity]
16-bit 8-bit 1-bit
Last updated: 2026-04-13
execreadwriteUser: 请帮我应用此技能
Agent: 我将按照标准流程执行...
User: 有更复杂的场景需要处理
Agent: 针对复杂场景,我将采用以下策略...