<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Johan Fernandes</title>
    <description>The latest articles on DEV Community by Johan Fernandes (@johan_fernandes).</description>
    <link>https://dev.to/johan_fernandes</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1891510%2F1322beb9-aff1-47f0-b557-f7d6d191ee71.png</url>
      <title>DEV Community: Johan Fernandes</title>
      <link>https://dev.to/johan_fernandes</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/johan_fernandes"/>
    <language>en</language>
    <item>
      <title>Beyond TOPS: Building an Open-Source Neuromorphic FPGA Benchmarking Suite</title>
      <dc:creator>Johan Fernandes</dc:creator>
      <pubDate>Tue, 20 Oct 2026 10:21:21 +0000</pubDate>
      <link>https://dev.to/johan_fernandes/beyond-tops-building-an-open-source-neuromorphic-fpga-benchmarking-suite-1mme</link>
      <guid>https://dev.to/johan_fernandes/beyond-tops-building-an-open-source-neuromorphic-fpga-benchmarking-suite-1mme</guid>
      <description>&lt;p&gt;&lt;strong&gt;Why traditional AI benchmarks fail for brain-inspired computing, and how we're fixing it with open-source tooling.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 The Problem: Measuring a Sports Car with a Ruler
&lt;/h2&gt;

&lt;p&gt;If you've been following AI hardware trends, you've probably seen benchmarks like MLPerf throwing around impressive numbers: "100 TOPS!" "1000 TOPS!" These metrics work great for traditional deep learning accelerators that crunch dense matrix multiplications.&lt;/p&gt;

&lt;p&gt;But here's the thing: &lt;strong&gt;neuromorphic computing doesn't work like that.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Spiking Neural Networks (SNNs) are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sparse&lt;/strong&gt;: Most neurons are idle most of the time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event-driven&lt;/strong&gt;: Computation only happens when spikes arrive&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asynchronous&lt;/strong&gt;: No global clock ticking away&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Measuring an SNN with TOPS (Tera Operations Per Second) is like measuring a hybrid car's fuel efficiency in gallons per hour instead of miles per gallon. The metric is technically valid, but it completely misses the point.&lt;/p&gt;

&lt;p&gt;What we actually care about for neuromorphic hardware:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Spikes Per Second (SOPS)&lt;/strong&gt;: True event-driven throughput&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Energy per Spike (pJ/spike)&lt;/strong&gt;: The holy grail for ultra-low-power edge AI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Neuron Density&lt;/strong&gt;: How many neurons per LUT/FF?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Routing Efficiency&lt;/strong&gt;: SNNs are highly interconnected; routing is often the real bottleneck&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔍 The Solution: NeuroMetric-FPGA
&lt;/h2&gt;

&lt;p&gt;I've been working on an open-source benchmarking suite called &lt;strong&gt;NeuroMetric-FPGA&lt;/strong&gt; that's specifically designed to evaluate neuromorphic FPGA designs using metrics that actually matter.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture Overview
&lt;/h3&gt;

&lt;p&gt;The suite has three modular layers:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;workloads/&lt;/code&gt;&lt;/strong&gt;: Standardized neuromorphic datasets (N-MNIST, DVS Gesture) converted to spike-train format&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;rtl/&lt;/code&gt;&lt;/strong&gt;: Reference SNN implementations in Verilog (currently a baseline Leaky Integrate-and-Fire neuron array)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;host/&lt;/code&gt;&lt;/strong&gt;: Python telemetry engine that parses Vivado/Quartus reports and auto-generates benchmark reports&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The key innovation? &lt;strong&gt;Automated parsing of FPGA toolchain reports&lt;/strong&gt; to extract real hardware metrics, combined with neuromorphic-specific performance calculations.&lt;/p&gt;

&lt;h2&gt;
  
  
  📊 Real Results: ZedBoard Baseline
&lt;/h2&gt;

&lt;p&gt;Let's look at some actual data from our baseline LIF (Leaky Integrate-and-Fire) neuron array implemented on a Xilinx Zynq-7020 (ZedBoard).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcjftu4b4p4meero8l7bb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcjftu4b4p4meero8l7bb.png" alt="**Key Insight**: This ultra-lightweight design uses less than 1% of the FPGA's resources, leaving massive headroom for scaling up to larger neuron arrays or adding complex routing fabrics." width="670" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Insight&lt;/strong&gt;: This ultra-lightweight design uses less than 1% of the FPGA's resources, leaving massive headroom for scaling up to larger neuron arrays or adding complex routing fabrics.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi8eu03mtxmjjorucwidf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fi8eu03mtxmjjorucwidf.png" alt="**Critical Finding**: Only **20.7%** of the power is used for active computation. The rest is static leakage. This reveals a major optimization opportunity: clock gating and power gating could dramatically improve efficiency for event-driven workloads." width="454" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Critical Finding&lt;/strong&gt;: Only &lt;strong&gt;20.7%&lt;/strong&gt; of the power is used for active computation. The rest is static leakage. This reveals a major optimization opportunity: clock gating and power gating could dramatically improve efficiency for event-driven workloads.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkfujg1wa6cw0n68q6pnt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkfujg1wa6cw0n68q6pnt.png" alt="The difference between " width="670" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The difference between "total" and "dynamic" energy per spike is striking: &lt;strong&gt;4.8x improvement&lt;/strong&gt; when you account for only the active computation. This is exactly the kind of insight that traditional benchmarks miss.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ How It Works
&lt;/h2&gt;

&lt;p&gt;The Python telemetry engine (&lt;code&gt;benchmark.py&lt;/code&gt;) does the heavy lifting:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Parse Vivado utilization report
&lt;/span&gt;&lt;span class="n"&gt;lut_match&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;\|\s*Slice LUTs\s*\|\s*(\d+)\s*\|&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;lut_match&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;hw_metrics&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;LUT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lut_match&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Parse power report
&lt;/span&gt;&lt;span class="n"&gt;total_power_match&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;\|\s*Total On-Chip Power \(W\)\s*\|\s*([\d\.]+)&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;total_power_match&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;power_metrics&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;total_power_w&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;total_power_match&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;group&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

&lt;span class="c1"&gt;# Calculate neuromorphic metrics
&lt;/span&gt;&lt;span class="n"&gt;sops&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;total_spikes&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;time_sec&lt;/span&gt;
&lt;span class="n"&gt;energy_per_spike_pj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;power_w&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;time_sec&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mf"&gt;1e12&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;total_spikes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The script automatically generates a clean Markdown report that's ready to be committed to GitHub and shared with the community.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔮 What's Next?
&lt;/h2&gt;

&lt;p&gt;This is just &lt;strong&gt;Part 1&lt;/strong&gt; of the project. Here's what's on the roadmap:&lt;/p&gt;

&lt;h3&gt;
  
  
  Phase 2: Real-World Workload Validation (Coming Soon)
&lt;/h3&gt;

&lt;p&gt;A baseline is only as good as the data it processes. In the next iteration, we are upgrading the pipeline to handle real neuromorphic workloads:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;AXI4-Stream Integration&lt;/strong&gt;: Replacing the simple button/switch interface with a proper AXI4-Stream data path to ingest high-throughput event data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;N-MNIST / DVS Gesture Pipeline&lt;/strong&gt;: Implementing a full classification pipeline to measure not just raw SOPS, but actual temporal classification accuracy vs. resource trade-offs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design Space Exploration&lt;/strong&gt;: Scaling the neuron array from 8 to 64+ neurons to observe how routing congestion and dynamic power scale non-linearly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Phase 3: Framework Integration (Lava &amp;amp; snnTorch)
&lt;/h3&gt;

&lt;p&gt;Intel's &lt;strong&gt;Lava&lt;/strong&gt; and frameworks like &lt;strong&gt;snnTorch&lt;/strong&gt; are becoming the standard for software-side SNN development. We are exploring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using NeuroMetric-FPGA as a hardware validation backend for Lava models.&lt;/li&gt;
&lt;li&gt;Automating the mapping of software-defined SNN layers to our parameterized FPGA RTL.&lt;/li&gt;
&lt;li&gt;Cross-platform benchmarking: Comparing our FPGA metrics against CPU/GPU software simulations of the same network.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Phase 4: Community Contributions
&lt;/h3&gt;

&lt;p&gt;We're actively seeking contributions for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Intel Quartus support&lt;/strong&gt;: Parse utilization and power reports from Altera/Intel tools&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New datasets&lt;/strong&gt;: DVS Gesture, SHD (Spiking Heidelberg Digits), CIFAR10-DVS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Larger FPGA boards&lt;/strong&gt;: ZCU102, Alveo U250, Lattice iCE40&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced neuron models&lt;/strong&gt;: Izhikevich, Hodgkin-Huxley&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🤝 Join the Hacktoberfest Challenge!
&lt;/h2&gt;

&lt;p&gt;This project is an official submission for the &lt;strong&gt;Hacktoberfest 2026 Open-Source AI Challenge&lt;/strong&gt;, and we need your help!&lt;/p&gt;

&lt;p&gt;Whether you're an FPGA engineer, ML researcher, or Python developer, there's something for you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🟢 &lt;strong&gt;[good first issue]&lt;/strong&gt;: Add a parser for Intel Quartus reports&lt;/li&gt;
&lt;li&gt;🟢 &lt;strong&gt;[good first issue]&lt;/strong&gt;: Convert a new dataset to spike-train format&lt;/li&gt;
&lt;li&gt;🟡 &lt;strong&gt;[help wanted]&lt;/strong&gt;: Implement AXI-Stream telemetry for high-throughput data transfer&lt;/li&gt;
&lt;li&gt;🔵 &lt;strong&gt;[documentation]&lt;/strong&gt;: Improve the API docs or write tutorials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Check out the repo&lt;/strong&gt;: &lt;a href="https://github.com/LiquidSilicion/NeuroMetric-FPGA" rel="noopener noreferrer"&gt;github.com/LiquidSilicion/NeuroMetric-FPGA&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Why This Matters
&lt;/h2&gt;

&lt;p&gt;The neuromorphic computing community is growing rapidly, but we lack standardized, open-source benchmarking tools. Most research groups build their own custom evaluation scripts, making it nearly impossible to compare results across different papers and hardware platforms.&lt;/p&gt;

&lt;p&gt;NeuroMetric-FPGA aims to change that by providing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Standardized metrics&lt;/strong&gt; that actually reflect neuromorphic efficiency&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automated report generation&lt;/strong&gt; for reproducible research&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-source tooling&lt;/strong&gt; that anyone can extend and improve&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If we can get the community to rally around a common benchmarking framework, we'll accelerate innovation in brain-inspired computing and make it easier to identify the most promising architectures for ultra-low-power edge AI.&lt;/p&gt;




&lt;h2&gt;
  
  
  📚 Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;NeuroMetric-FPGA GitHub&lt;/strong&gt;: &lt;a href="https://github.com/LiquidSilicion/NeuroMetric-FPGA" rel="noopener noreferrer"&gt;github.com/LiquidSilicion/NeuroMetric-FPGA&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NeuroBench&lt;/strong&gt;: The foundational neuromorphic benchmarking framework&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intel Lava&lt;/strong&gt;: Open-source neuromorphic software framework&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Catalyst N1/N2&lt;/strong&gt;: Open-source neuromorphic processors with Loihi parity&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built with ❤️ for the open-source hardware community. If you find this project useful, please give it a ⭐ on GitHub and share it with your fellow FPGA engineers!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Questions? Drop a comment below or open an issue on GitHub. Let's build the future of neuromorphic benchmarking together!&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
