<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Chip Insights]]></title><description><![CDATA[Semiconductor Industry Deep Dives]]></description><link>https://chipinsights.net</link><image><url>https://substackcdn.com/image/fetch/$s_!Z-fT!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png</url><title>Chip Insights</title><link>https://chipinsights.net</link></image><generator>Substack</generator><lastBuildDate>Mon, 12 Oct 2026 13:29:32 GMT</lastBuildDate><atom:link href="https://chipinsights.net/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Bharath Suresh]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[chipinsights@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[chipinsights@substack.com]]></itunes:email><itunes:name><![CDATA[Bharath Suresh]]></itunes:name></itunes:owner><itunes:author><![CDATA[Bharath Suresh]]></itunes:author><googleplay:owner><![CDATA[chipinsights@substack.com]]></googleplay:owner><googleplay:email><![CDATA[chipinsights@substack.com]]></googleplay:email><googleplay:author><![CDATA[Bharath Suresh]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Life of an Inference Call]]></title><description><![CDATA[A complete walkthrough of LLM inference running on your computer]]></description><link>https://chipinsights.net/p/life-of-an-inference-call</link><guid isPermaLink="false">https://chipinsights.net/p/life-of-an-inference-call</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Mon, 14 Sep 2026 04:58:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Zu1Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0895c6-7551-429a-afd4-8c006bbb21b5_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s) and are not investment advice.</strong></p><div><hr></div><p><span>In the last few weeks, I&#8217;ve been trying to write a post about certain trends I&#8217;ve observed in Agentic AI hardware - about CPUs, ISAs, Memory, etc. To do this, I read existing commentary from others to defend my hypothesis, but they all ended up in one of these buckets:</span></p><ul><li><p><span>Company marketing highlighting why a specific aspect is more important</span></p></li><li><p><span>Decisions that were made due to the prevailing supply constraints like HBM shortage</span></p></li><li><p><span>A narrow focus on a specific type of agent (typically claude-code style agents)</span></p></li></ul><p><span>Since I&#8217;m not trying to sell you a chip, I can&#8217;t predict the semiconductor supply chain, and I don&#8217;t have a favorite agent, I could never complete the post I wanted to write. Instead, I&#8217;m taking a step back and starting with a more fundamental question:</span></p><p style="text-align: center;"><strong><span>How does LLM Inference run locally on your computer?</span></strong></p><p><span>I&#8217;m not going to claim this post will teach you something fundamentally new. In fact, most of what I&#8217;m going to talk about is just traditional software execution on a system with a CPU and a GPU. But this post serves as the base camp for some other interesting questions I want to raise in later posts.</span></p><div><hr></div><h1><span>What does the software look like?</span></h1><p><span>There are </span><a href="https://getstream.io/blog/best-local-llm-tools/"><span>many different ways</span></a><span> to launch an LLM inference call. For this post, I&#8217;m using a simple Python script that executes the inference using Ollama. This is what the script looks like:</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;a36f500c-caff-420d-aaf9-6bdb04cfaed7&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python"># Import request library to send/recieve HTTP requests
import requests

# Send the LLM Inference call as a HTTP request through Ollama
r = requests.post(
        "http://localhost:11434/api/generate",                           # localhost:11434 indicates that the request should be sent to local Ollama port
    json={                                                               # the model name, prompt, and other settings are passing as the JSON payload
        "model": "qwen3:8b",
        "prompt": "What's more important for Agentic AI - CPU, or GPU?",
        "stream": False,
    },
)

# Print the output of the LLM inference call
print(r.json()["response"])</code></pre></div><p><span>For this post, this is all you need to know about this script:</span></p><ul><li><p><span>The script runs LLM inference using the </span><strong><span>qwen3:8b</span></strong><span> model.</span></p></li><li><p><span>The prompt sent to the LLM is &#8220;What&#8217;s more important for Agentic AI - CPU, or GPU?&#8221;</span></p></li><li><p><span>Streaming is disabled - so the final output will be printed only after all output tokens are produced.</span></p></li></ul><div><hr></div><h1>What does the hardware look like?</h1><p><span>Since the software runs LLM inference locally, (no requests leave the computer where the script was launched) I&#8217;m assuming a standard personal computing setup with a host CPU (which runs the Operating System (OS)) and a discrete GPU.</span></p><p><span>In a system like this, the CPU and GPU typically have separate physical main memories: the CPU accesses System DRAM, while the GPU primarily accesses dedicated Video RAM (VRAM). There is also a large, non-volatile Solid-State Drive (SSD), from which the OS loads data into System DRAM on demand. There are usually more levels in the memory hierarchy, but for simplicity, we will skip these </span><a href="https://www.avikde.me/p/cache-effects-in-object-oriented"><span>cache effects</span></a><span>.</span></p><p><span>At a high level, this is all you need to know about the CPU-GPU system - I&#8217;ll be sharing more details as we walk through the execution.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gNka!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad499ec-39a8-4ed5-87b5-827c32f63557_1345x884.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gNka!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad499ec-39a8-4ed5-87b5-827c32f63557_1345x884.png 424w, https://substackcdn.com/image/fetch/$s_!gNka!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad499ec-39a8-4ed5-87b5-827c32f63557_1345x884.png 848w, https://substackcdn.com/image/fetch/$s_!gNka!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad499ec-39a8-4ed5-87b5-827c32f63557_1345x884.png 1272w, https://substackcdn.com/image/fetch/$s_!gNka!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad499ec-39a8-4ed5-87b5-827c32f63557_1345x884.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gNka!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad499ec-39a8-4ed5-87b5-827c32f63557_1345x884.png" width="1345" height="884" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1ad499ec-39a8-4ed5-87b5-827c32f63557_1345x884.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:884,&quot;width&quot;:1345,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gNka!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad499ec-39a8-4ed5-87b5-827c32f63557_1345x884.png 424w, https://substackcdn.com/image/fetch/$s_!gNka!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad499ec-39a8-4ed5-87b5-827c32f63557_1345x884.png 848w, https://substackcdn.com/image/fetch/$s_!gNka!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad499ec-39a8-4ed5-87b5-827c32f63557_1345x884.png 1272w, https://substackcdn.com/image/fetch/$s_!gNka!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1ad499ec-39a8-4ed5-87b5-827c32f63557_1345x884.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1><strong><span>Is anyone running Local LLMs on their computers?</span></strong></h1><p><span>I expect this question to come up at some point, so I want to get ahead.</span></p><p><span>You might wonder whether a personal computing hardware architecture like this is relevant in the era of large AI data centers. It&#8217;s a fair question, but there are two reasons why I went with local LLM inference on a discrete GPU system:</span></p><ul><li><p><span>Datacenter hardware architectures are vendor specific and evolving so quickly, so it&#8217;s hard to write a post like this without making a lot of assumptions (which I think would dilute the post.)</span></p></li><li><p><span>I own a computer with a CPU and GPU which I can use to run some profiling for future posts.</span></p></li></ul><p><span>But irrespective of the hardware architecture, the fundamental interaction between a CPU running the OS and an accelerator like the GPU will remain largely the same - that&#8217;s going to be the key focus of this post.</span></p><div><hr></div><h1>The shipping analogy</h1><p>I recently drove past the Port of Los Angeles, the busiest seaport in the US. I knew it was big, but looking out at the large ships and the thousands of containers waiting to be loaded in them left an impression on me. So that&#8217;s my excuse to include it as an analogy for this post.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Zu1Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0895c6-7551-429a-afd4-8c006bbb21b5_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Zu1Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0895c6-7551-429a-afd4-8c006bbb21b5_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Zu1Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0895c6-7551-429a-afd4-8c006bbb21b5_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Zu1Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0895c6-7551-429a-afd4-8c006bbb21b5_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Zu1Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0895c6-7551-429a-afd4-8c006bbb21b5_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Zu1Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0895c6-7551-429a-afd4-8c006bbb21b5_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d0895c6-7551-429a-afd4-8c006bbb21b5_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Zu1Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0895c6-7551-429a-afd4-8c006bbb21b5_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Zu1Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0895c6-7551-429a-afd4-8c006bbb21b5_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Zu1Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0895c6-7551-429a-afd4-8c006bbb21b5_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Zu1Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d0895c6-7551-429a-afd4-8c006bbb21b5_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>A shipping port is a good analogy for the AI computing landscape because of the heterogeneity. In addition to ships, a port is also closely connected to major freeways, railway lines, and airports - not too different from </span><a href="https://chipinsights.net/p/the-alphabet-soup-of-processors"><span>the different &#8220;Processing Units&#8221;</span></a><span> that we have in the computing world today.</span></p><p><span>There&#8217;s something else that maps well to Agentic AI in particular - the variety of loads handled by a port. The logistics of shipping perishable goods is not the same as automobiles, and is completely different from how a cruise ship would be managed. I think this can be a good mental model to differentiate the requirements of coding agents, versus, say, a  </span><a href="https://www.avikde.me/p/the-architecture-behind-end-to-end"><span>robotics pipeline</span></a><span>.</span></p><blockquote><p><span>Going forward, any references to this analogy will be in quotes to separate it from the rest of the text. Use it to simplify concepts, or to just give yourself a break.</span></p></blockquote><div><hr></div><h1>Computer Science 101</h1><p><span>I will be using (and have probably already used) a lot of computing terms in this post without properly introducing them, so here&#8217;s a quick glossary covering most of them. Skip ahead if you are already familiar with these.</span></p><ul><li><p><strong><span>Operating System (OS):</span></strong><span> It&#8217;s the system software that manages everything - from the interaction between CPU, GPU and other hardware resources, to managing permissions to processes and device drivers.</span></p></li><li><p><strong><span>Process:</span></strong><span> It is a software abstraction created by the OS that provides a virtual address space and resources for running a program. A process contains one or more threads.</span></p></li><li><p><strong><span>CPU Thread:</span></strong><span> It is an execution context with its own architectural register state and instruction pointer that can be scheduled to run on a CPU core.</span></p></li><li><p><strong><span>CPU Core:</span></strong><span> Physical CPU hardware that can fetch and execute instructions.</span></p></li><li><p><strong><span>Driver:</span></strong><span> It is software that allows the OS and applications to interact with a hardware device like the GPU.</span></p></li><li><p><strong><span>GPU Kernel:</span></strong><span> A function/program executed on the GPU across many parallel threads.</span></p></li><li><p><strong><span>Virtual Address:</span></strong><span> It is the address used in the software world. The OS and hardware translate it to physical hardware addresses through page tables.</span></p></li><li><p><strong><span>HTTP:</span></strong><span> A commonly used request/response protocol that allows one application to talk to another. (either within the same system, or through the internet.)</span></p></li><li><p><strong><span>TCP:</span></strong><span> It is a popular byte-stream protocol used by HTTP connections to transfer data.</span></p></li><li><p><strong><span>JSON:</span></strong><span> A standard format for serializing structured data like lists, arrays, or dictionaries.</span></p></li><li><p><strong><span>UTF-8:</span></strong><span> It is a standard encoding that represents unicode text (in JSON) as bytes (binary).</span></p></li></ul><blockquote><p><span>You can think of the OS like the Port Authority which manages port access for different entities.</span></p><p><span>Each process is like a logistics partner involved in each shipping task - like the company that wants to ship their goods, freight and ship providers, and so on.</span></p><p><span>Each CPU thread is like a Truck that carries Containers (i.e. data) to the GPU (which is like a Ship), and together they complete the shipping task. (i.e. the LLM inference script.)</span></p></blockquote><div><hr></div><h1>LLM Inference Walkthrough</h1><p><span>Enough buildup.</span></p><p><span>Say you have your LLM inference script on a file: </span><strong><span>llm_inference.py</span></strong></p><p><span>Let&#8217;s look at everything that happens when you launch this command on your shell: </span><strong><span>python llm_inference.py</span></strong></p><div><hr></div><h1><span>Phase 1: Prepare the Python script for execution</span></h1><p><strong><span>TL;DR: </span></strong><span>OS creates a Python process, creates bytecode for your script, and prepares objects needed for execution.</span></p><p><strong><span>Hardware Involved:</span></strong><span> CPU, System DRAM, and SSD</span></p><blockquote><p><span>In this phase, we won&#8217;t start physically shipping any goods yet. The Python process is like a company with a shipping request that first gets all the required information and approvals from the port authority (OS) before it can start the shipping task.</span></p></blockquote><h3><span>Step 1: Shell interprets the command</span></h3><p><span>Your shell (Bash, Powershell, etc.) parses the entered text and interprets it as:</span></p><ul><li><p><span>Program to launch: Python</span></p></li><li><p><span>Argument passed: llm_inference.py</span></p></li></ul><h3><span>Step 2: OS creates a Python process</span></h3><p><span>The shell asks the OS to launch the &#8220;Python executable&#8221;. (More on this in step 3.) To do this, the OS creates a new Python process. The new Python process is provided with what it needs to execute:</span></p><ul><li><p><span>A process ID</span></p></li><li><p><span>An initial thread</span></p></li><li><p><span>Virtual address space that it can access</span></p></li></ul><p><span>Whenever we see the Python process &#8220;executing&#8221; something on the CPU, remember that it is done through this initial thread.</span></p><h3><span>Step 3: OS prepares the Python executable</span></h3><p><span>Once the process is created, the OS maps virtual memory addresses needed for the Python executable to System DRAM locations and loads the pre-compiled Python executable and the required libraries from the CPU SSD to the DRAM. I&#8217;m greatly oversimplifying this step since it&#8217;s not the focus of the post, but here are some important notes about this step:</span></p><ul><li><p><span>Python code execution is a little different from a compiled language like C. In C, your program is compiled into machine code, and the CPU fetches and executes the binary representation of each instruction. However, Python is an interpreted language which is executed differently. Instead of compiling your Python script, there is a pre-compiled Python executable which is like a simulator that can run any Python script. (In the case of CPython, this executable is written in C.) Instructions from this pre-compiled executable are sent to the CPU. Your actual script is converted into a bytecode that the pre-compiled executable reads and executes.</span></p></li><li><p><span>The OS usually does not read every byte of CPython and all shared libraries from SSD into DRAM at once to avoid unnecessary RAM use. Instead, the OS only fetches data at (and near) the current virtual address being accessed.</span></p></li></ul><h3><span>Step 4: Python executable converts your script into bytecode</span></h3><ul><li><p><span>The Python executable starts running on your CPU, and very quickly loads the script into the DRAM. (through the SSD if it is being read for the first time.)</span></p></li><li><p><span>The executable then decodes the script text, parses it, and converts your script into an internal representation called bytecode.</span></p></li></ul><p><span>Although this step looks a lot like compilation, this is different because the bytecode is not in assembly language, and it is not directly passed as CPU instructions. It is just a different representation that the Python executable can understand.</span></p><p><span>For example, this is one possible CPython bytecode sequence for printing the value in a variable </span><strong><span>result</span></strong><span>.</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;0d5aaf22-edf1-482e-93b4-0eb371d4d649&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">PUSH_NULL
LOAD_NAME print
LOAD_NAME result
CALL 1
POP_TOP</code></pre></div><p><span>While it looks like assembly instructions, you can&#8217;t run this directly on any CPU.</span></p><h3><span>Step 5: Python executable starts executing the bytecode</span></h3><p><span>Once the bytecode is ready, the Python executable executes it, starting from the top module. For the first time in this walkthrough, let&#8217;s see something related to our LLM call. Since our script needs to send an HTTP request to Ollama, we first need to import the </span><strong><span>requests</span></strong><span> Python package.</span></p><p><span>This is how the Python executable imports a package:</span></p><ul><li><p><span>Find the Python source (or an existing bytecode) for the package</span></p></li><li><p><span>Convert it into bytecode (or load existing bytecode if available)</span></p></li><li><p><span>Execute the top level instantiation from the bytecode, and store the module object for future use.</span></p></li></ul><p><span>Similarly, the Python executable creates objects needed for other variables used in the script like the HTTP address, model name and prompts. These objects all live in the System DRAM and are mapped to unique virtual addresses.</span></p><blockquote><p><span>Say the shipping request is from a factory that manufactures shoes. But the boxes for the shoes need to be fetched from somewhere else. Imports can be thought of like this - they are specific implementations of the shipping request which can be found elsewhere.</span></p></blockquote><h3><span>At the end of Phase 1:</span></h3><p><span>The Python process has set up all the objects, and is ready to execute the first LLM request.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RFK1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbea51eee-712a-4d8c-af62-9b5610477f64_1312x1199.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RFK1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbea51eee-712a-4d8c-af62-9b5610477f64_1312x1199.png 424w, https://substackcdn.com/image/fetch/$s_!RFK1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbea51eee-712a-4d8c-af62-9b5610477f64_1312x1199.png 848w, https://substackcdn.com/image/fetch/$s_!RFK1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbea51eee-712a-4d8c-af62-9b5610477f64_1312x1199.png 1272w, https://substackcdn.com/image/fetch/$s_!RFK1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbea51eee-712a-4d8c-af62-9b5610477f64_1312x1199.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RFK1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbea51eee-712a-4d8c-af62-9b5610477f64_1312x1199.png" width="1312" height="1199" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bea51eee-712a-4d8c-af62-9b5610477f64_1312x1199.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1199,&quot;width&quot;:1312,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!RFK1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbea51eee-712a-4d8c-af62-9b5610477f64_1312x1199.png 424w, https://substackcdn.com/image/fetch/$s_!RFK1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbea51eee-712a-4d8c-af62-9b5610477f64_1312x1199.png 848w, https://substackcdn.com/image/fetch/$s_!RFK1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbea51eee-712a-4d8c-af62-9b5610477f64_1312x1199.png 1272w, https://substackcdn.com/image/fetch/$s_!RFK1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbea51eee-712a-4d8c-af62-9b5610477f64_1312x1199.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2><span>Phase 2: Send the LLM request to Ollama</span></h2><p><strong><span>TL;DR: </span></strong><span>The Python executable executes the </span><strong><span>requests.post</span></strong><span> call - i.e. the Python process sends a local HTTP request to the Ollama process.</span></p><p><strong><span>Hardware Involved:</span></strong><span> CPU, System DRAM</span></p><p><span>The Python process starts executing our script like any other Python script, and quickly runs into the Ollama request:</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;417cd388-2c08-47a1-9e3a-e885c85ac49f&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">r = requests.post(
        "http://localhost:11434/api/generate",
    json={
        "model": "qwen3:8b",
        "prompt": "What's more important for Agentic AI - CPU, or GPU?",
        "stream": False,
    },
)</code></pre></div><p><span>Unlike other Python commands, which are fully executed within the Python process, this HTTP request needs the involvement of the OS, as we will see in the steps below.</span></p><h3><span>Step 1: The Python process encounters a call to the imported bytecode</span></h3><p><span>In the compiled bytecode of our agentic workflow, the </span><strong><span>requests.post()</span></strong><span> call redirects the Python process towards the bytecode that was imported in Phase 1. This is needed because our script&#8217;s bytecode does not know how to execute this command. (Note that we are still within the Python process - we are just reading a different bytecode.)</span></p><h3><span>Step 2: Python process creates a request object</span></h3><p><span>Using the imported bytecode, the Python process creates an HTTP request with the following information:</span></p><ul><li><p><span>Model name</span></p></li><li><p><span>Input prompt</span></p></li><li><p><span>Request settings (streaming, local/online request, etc.)</span></p></li><li><p><span>Information about the tools if applicable</span></p></li></ul><p><span>Essentially, the Python process packages all the information that Ollama might need to run the LLM inference into a single request. This request, typically represented as a Python dictionary, is then stored in System DRAM.</span></p><h3><span>Step 3: Python process serializes the request object to JSON bytes</span></h3><p><span>Although the information needed by Ollama is ready in Step 2, Python objects can&#8217;t be sent directly in an HTTP request through a TCP socket. So the Python process:</span></p><ul><li><p><span>Reads the Python objects (saved in step 2) from the System DRAM</span></p></li><li><p><span>Serializes them using the JSON serializer (also part of the </span><strong><span>requests</span></strong><span> bytecode.)</span></p></li></ul><p><span>The output is a sequence of UTF-8 bytes which is stored back in the System DRAM.</span></p><h3><span>Step 4: Python process initiates an HTTP request to the Ollama process</span></h3><p><span>Now that the data needed for the HTTP request is ready, the Python process constructs the request in this step. Essentially, Python tells the OS to create a TCP connection to:</span></p><ul><li><p><span>IP Address: 127.0.0.1 (</span><strong><span>localhost</span></strong><span> corresponds to this address.)</span></p></li><li><p><span>TCP Port: 11434 (this is the default Ollama listening port)</span></p></li></ul><p><span>The OS establishes the TCP connection through the local loopback interface. (It does not actually leave the computer.) Once connected:</span></p><ul><li><p><span>The Python process requests the OS to send the HTTP request with the JSON bytes from the System DRAM. (Stored there in step 3.)</span></p></li><li><p><span>Once complete, the Python Thread that was executing everything so far moves into a blocked/waiting state.</span></p></li></ul><p><strong><span>This is a key milestone in the CPU execution. Watch out for when this thread is reactivated. (Spoiler alert: It&#8217;s not very soon.)</span></strong></p><blockquote><p><span>Once the shoes are packed in the boxes, they are stored and ready to be picked up. The shoe manufacturer gets in touch with the shipping company to arrange for their shoes to be shipped from their factory to its destination. You can think of the Ollama process as the shipping company. Once the shipping company picks up the boxes, the shoe manufacturer just needs to wait for the delivery.</span></p></blockquote><h3><strong><span>Step 5: The Ollama process accepts and parses the request</span></strong></h3><p><span>While I didn&#8217;t explicitly mention this so far, Ollama is typically already running as a separate process. (Usually started at boot, or manually with the </span><strong><span>ollama serve</span></strong><span> shell command.) The process has a thread that is in the waiting state, and is listening on its default port 11434 - the same port that Python asked to send the LLM inference request.</span></p><p><strong><span>Note that the Ollama thread is still a CPU thread - we have not started the GPU execution just yet.</span></strong></p><blockquote><p><span>Although the shipping company&#8217;s main task is ocean shipping, they still need Trucks (CPU) to move goods to and from the container ship.</span></p></blockquote><p><span>The OS executes the HTTP transfer requested in step 4 on the TCP port by:</span></p><ul><li><p><span>Moving the request bytes from the Python process into the local socket/network stack</span></p></li><li><p><span>Placing the bytes into Ollama&#8217;s socket receive buffer</span></p></li><li><p><span>Marking the Ollama thread as runnable</span></p></li></ul><p><span>The OS then schedules the now ready Ollama thread on an available CPU core. The handshake between the two processes has completed, and the execution will now be taken forward by the Ollama process.</span></p><h3><span>At the end of Phase 2:</span></h3><p><span>The Python process has handed off information for LLM inference to the Ollama process.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lLpY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe441a65c-31ca-482a-9383-ca3117c79c9c_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lLpY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe441a65c-31ca-482a-9383-ca3117c79c9c_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!lLpY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe441a65c-31ca-482a-9383-ca3117c79c9c_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!lLpY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe441a65c-31ca-482a-9383-ca3117c79c9c_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!lLpY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe441a65c-31ca-482a-9383-ca3117c79c9c_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lLpY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe441a65c-31ca-482a-9383-ca3117c79c9c_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e441a65c-31ca-482a-9383-ca3117c79c9c_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lLpY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe441a65c-31ca-482a-9383-ca3117c79c9c_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!lLpY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe441a65c-31ca-482a-9383-ca3117c79c9c_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!lLpY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe441a65c-31ca-482a-9383-ca3117c79c9c_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!lLpY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe441a65c-31ca-482a-9383-ca3117c79c9c_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2><span>Before we continue: What would inference on a cloud model look like?</span></h2><p>Subscribe for free to see this section:</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2><span>Phase 3: Ollama prepares the GPU for LLM inference</span></h2><p><strong><span>TL;DR:</span></strong><span> Ollama finds a compatible GPU (if available) to run inference, sets up a communication channel between the CPU and the GPU, and moves the required data into the GPU VRAM.</span></p><p><strong><span>Hardware Involved:</span></strong><span> CPU, System DRAM, SSD and GPU (and it&#8217;s VRAM)</span></p><p><span>At the end of Phase 2, the Ollama process has received the LLM inference request from the Python process. Now, it&#8217;s time to start the LLM inference. But since LLM inference will be running on a GPU, the Ollama process still has some preparation left to do.</span></p><p><span>Before going into the steps, let me define two key terms used in the context of Ollama execution:</span></p><ul><li><p><strong><span>Ollama server:</span></strong><span> The dispatcher/scheduler that listens to the TCP port, parses LLM inference requests, and routes work to the Ollama runner.</span></p></li><li><p><strong><span>Ollama runner:</span></strong><span> It is a model-specific execution setup - it contains the model&#8217;s architecture metadata, inference backend configuration, pointer to loaded model weights, GPU/CPU memory allocations, KV-cache management, and workspace buffers. Basically, it is a reusable environment for inference using a specific LLM model.</span></p></li></ul><p><span>Everything we have seen so far has only involved the Ollama server and its process. Depending on the Ollama version, backend and platform, a runner may be represented by a separate process/threads. </span></p><p><strong><span>If anyone reading this knows more about how threads are scheduled between the server/runner, I&#8217;d love to hear more in the comments.</span></strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/p/life-of-an-inference-call/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://chipinsights.net/p/life-of-an-inference-call/comments"><span>Leave a comment</span></a></p><blockquote><p><span>In our shipping example, you can think of Ollama server as the entity that manages road operations, while Ollama runner is the entity that manages operations within the port. The former is usually more flexible and can handle different tasks. However, the latter could depend on the specific ship type, loading requirements, etc. In this phase, both entities work together to start loading the ship efficiently.</span></p></blockquote><h3><span>Step 1: The Ollama server matches the request to a runner</span></h3><p><span>The Ollama server parses the HTTP request, reads the JSON bytes, and recreates the model name, prompts, tool schemas and other settings needed for LLM inference. Then, the Ollama server looks at the model name and checks whether it already has a compatible runner.</span></p><ul><li><p><span>If a compatible runner is available, Ollama reuses it.</span></p></li><li><p><span>If no runner exists, Ollama must create one.</span></p></li></ul><p><span>Since this is the first (and only) LLM inference request, let&#8217;s assume the runner does not exist and walk through all the steps.</span></p><h3><span>Step 2: Ollama selects the hardware for LLM inference</span></h3><p><span>The Ollama server examines the hardware and model requirements and decides where the inference can run. If there is no compatible GPU, the LLM inference runs directly on the CPU. While this is  </span><a href="https://itsfoss.com/testing-local-llms-without-gpu/"><span>not impossible for some small models</span></a><span>, this won&#8217;t be the focus of this post.</span></p><p><span>If the system has a compatible GPU, the Ollama server compares the available GPU VRAM space with the memory requirement for the LLM model that&#8217;s requested. Ollama estimates the memory required for inference based on the model, context/KV-cache requirements, GPU configuration, and other runtime allocations.</span></p><p><span>If Ollama determines that the GPU VRAM does not have enough space, then a hybrid CPU/GPU inference path is taken:</span></p><ul><li><p><span>GPU VRAM accommodates data for some of the LLM layers</span></p></li><li><p><span>Data for the other layers is kept in the System DRAM</span></p></li><li><p><span>Some model layers execute on the GPU while others execute on the CPU, with intermediate data transferred between the CPU and GPU</span></p></li></ul><p><span>Hybrid inference is a very interesting problem, but the CPU-GPU transfers can add significant latency and energy overhead. Ideally, we want to run models that fit completely in GPU VRAM - which is what we will assume for the rest of this post.</span></p><blockquote><p><span>Say our shipping destination is accessible by road, train, flight, or ships, then the shipping company can find the best fit depending on the load to be shipped.</span></p></blockquote><h3><span>Step 3: The Ollama runner initializes a GPU execution context</span></h3><p><span>To use the GPU for inference, the Ollama runner asks the GPU runtime (CUDA, ROCm, Metal, etc.) to make a driver call to create the GPU context for the upcoming inference. This means the GPU driver:</span></p><ul><li><p><span>Allows Ollama to use one of the available GPUs</span></p></li><li><p><span>Allocates GPU virtual address space to Ollama and maps it to physical VRAM locations</span></p></li><li><p><span>Creates a command stream/queue between the CPU (Ollama runner process) and the GPU</span></p></li></ul><p><span>Essentially, Ollama can now access the GPU via its driver.</span></p><h3><span>Step 4: The Ollama runner allocates GPU VRAM buffers for model parameters</span></h3><p><span>Once the CPU-GPU communication channel is set up, the Ollama runner informs the GPU about the VRAM allocation for the inference. (This, like any CPU-GPU request, happens via the GPU runtime and driver - I won&#8217;t explicitly mention this going forward for brevity.) This request looks like this:</span></p><ul><li><p><span>Allocate W bytes for GPU-resident weights</span></p></li><li><p><span>Allocate K bytes for KV cache</span></p></li><li><p><span>Allocate A bytes for activations</span></p></li><li><p><span>&#8230;</span></p></li></ul><p><span>The driver looks at this request, checks available VRAM, allocates space, maps it to virtual addresses, and returns the information to the Ollama runner.</span></p><blockquote><p><span>The GPU Driver and runtime represent the container ship crew - the shipping company needs to check with them before loading anything on the ship.</span></p></blockquote><h3><span>Step 5: The Ollama runner reads the local model files</span></h3><p><span>Before this step, it is assumed that the required LLM model is already downloaded onto your SSD using the </span><strong><a href="https://docs.ollama.com/api/pull"><span>ollama pull</span></a></strong><span> command. This model package includes the model configuration (the number of layers, how they are connected, quantization, etc.), model weights, and also the data that will be used by the tokenizer.</span></p><p><span>Before Ollama can start inference:</span></p><ul><li><p><span>It fetches the model package data from the SSD into the System DRAM.</span></p></li><li><p><span>Once the data is in the RAM, the Ollama runner submits a data transfer request to the GPU.</span></p></li><li><p><span>The GPU Direct Memory Access (DMA) engine moves the data into the VRAM spaces allocated earlier, typically through a PCIe interface.</span></p></li></ul><p><span>For the conventional discrete-GPU host-to-device path, even when inference is fully done on the GPU, any data stored in the SSD needs to pass through the System DRAM. This becomes a major bottleneck if the model weights, KV cache, and other inference states cannot be fully stored in GPU VRAM. Datacenter architectures increasingly use specialized data-movement and infrastructure processors to reduce CPU overhead and improve data movement, such as </span><a href="https://www.chiplog.io/p/analysis-of-nvidias-bluefield-4-dpu"><span>Nvidia&#8217;s Bluefield DPU</span></a><span>.</span></p><blockquote><p><span>Moving goods from one mode of transport to another is also a time-consuming task in ports. There are some very creative solutions deployed to speed this up. For example, a log barge (ship that carries wooden logs) simply </span><a href="https://www.youtube.com/watch?v=Xv-hYmKgZfo"><span>dumps its entire load onto the water</span></a><span>, which allows it to quickly continue to its next assignment. </span><a href="https://www.youtube.com/watch?v=0YjUwKRxwac"><span>Ore ships also have special docks</span></a><span> which are directly connected to train tracks to speed up the unloading process.</span></p></blockquote><h3><span>Step 6: The Ollama runner prepares the prompt</span></h3><p><span>So far, Ollama was focused on preparing the model for inference. Now it&#8217;s time to shift focus to the prompt. Before the GPU can run inference, Ollama must turn the structured chat request into a model-specific prompt representation. This means two things:</span></p><ul><li><p><span>Use the model&#8217;s chat template to define how roles (system/user) and tools are represented for the model being used.</span></p></li><li><p><span>Convert the prompt string into tokens. (This step is called </span><a href="https://seantrott.substack.com/p/tokenization-in-large-language-models"><span>tokenization</span></a><span>.)</span></p></li><li><p><span>After tokenization, the prompt is stored in the System DRAM, waiting to be made visible to the GPU.</span></p></li></ul><p><span>I&#8217;m skipping the specifics of this step as it varies based on the models. </span><strong><span>But it&#8217;s noteworthy that these computations are typically handled on the CPU rather than the GPU in systems like this. </span></strong><span>Although it is small relative to the actual inference, it becomes non-trivial for very large prompts, or in a system handling multiple parallel agentic requests.</span></p><h3><span>Step 7: The Ollama runner allocates GPU VRAM buffers for prompt inputs and makes the transfer</span></h3><p><span>Much like what was done with the model package data, the Ollama runner also requests VRAM space for the input tokens and receives pointers to the virtual address space.</span></p><p><span>Once the required model state and input data are available to the GPU, the GPU has the data needed to start inference.</span></p><p><span>Typically, the input size is much smaller than the model size, and is also short-lived. (Although a large context/tool result can make prompt input and KV cache significant.)</span></p><h3><strong><span>At the end of Phase 3:</span></strong></h3><p><span>Ollama has set up a communication channel with the GPU and has placed the model weights and prompt inputs in GPU VRAM.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pIiL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9db1c462-0ca5-4ca3-88df-3f0ef7cbbbc5_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pIiL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9db1c462-0ca5-4ca3-88df-3f0ef7cbbbc5_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!pIiL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9db1c462-0ca5-4ca3-88df-3f0ef7cbbbc5_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!pIiL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9db1c462-0ca5-4ca3-88df-3f0ef7cbbbc5_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!pIiL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9db1c462-0ca5-4ca3-88df-3f0ef7cbbbc5_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pIiL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9db1c462-0ca5-4ca3-88df-3f0ef7cbbbc5_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9db1c462-0ca5-4ca3-88df-3f0ef7cbbbc5_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pIiL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9db1c462-0ca5-4ca3-88df-3f0ef7cbbbc5_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!pIiL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9db1c462-0ca5-4ca3-88df-3f0ef7cbbbc5_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!pIiL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9db1c462-0ca5-4ca3-88df-3f0ef7cbbbc5_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!pIiL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9db1c462-0ca5-4ca3-88df-3f0ef7cbbbc5_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2><span>Phase 4: GPU executes the LLM inference</span></h2><p><strong><span>TL;DR:</span></strong><span> Ollama builds a list of GPU commands for prefill and decode, sends them to the GPU, the GPU runs inference, and computes the final output.</span></p><p><strong><span>Hardware Involved:</span></strong><span> CPU, System DRAM, (SSD if needed), and GPU (and it&#8217;s VRAM)</span></p><p><span>We&#8217;re finally at the long-awaited inference stage. (Longer than I expected too, to be honest.)</span></p><p><span>Since this post is focused more on the interaction between the CPU and GPU, I won&#8217;t be going into all the details of LLMs. There is a </span><a href="https://jamwithai.substack.com/p/llm-inference-101"><span>lot of content</span></a><span> that already talks about this, and I might write a dedicated post myself if I feel I have something unique to add.</span></p><p><span>For this post, we will be looking more generally at how (and how many times) the CPU sends work to the GPU. At a high level, (autoregressive) LLM inference is broken down into two stages:</span></p><ol><li><p><span>Prefill stage: The input prompt is processed to generate the first output token</span></p></li><li><p><span>Decode stage: Additional tokens are generated one at a time. Each selected token becomes input to the next decode pass.</span></p></li></ol><p><span>Another simplifying assumption in this post is that the LLM output is &#8220;non-streaming&#8221; - that means Ollama only sends the output back to the Python process at the end of the decode stage for all the tokens. With streaming outputs, there would be a lot more communication between Ollama and the Python process.</span></p><blockquote><p><span>If the ship&#8217;s journey includes multiple stops, then the prefill stage, and each pass of the decode stage represent the ship&#8217;s journey from one port to the next. A streaming LLM inference call would be like having to unload a few containers at every stop.</span></p></blockquote><p><span>With that said, here&#8217;s how the GPU actually runs inference.</span></p><h3><span>Step 1: The Ollama runner builds a model-specific list of GPU commands</span></h3><p><span>In the last phase, although Ollama was able to move the weights and input prompt into the GPU VRAM, the GPU still does not know what to do with them. The Ollama runner takes the configuration information in the model package read in the last phase to an inference engine (like </span><a href="https://learn.arm.com/learning-paths/servers-and-cloud-computing/llama_cpp_streamline/2_llama.cpp_intro/"><span>llama.cpp</span></a><span>) and comes up with an ordered list of commands. The command sequence would roughly look like this:</span></p><p><span>Prefill stage:</span></p><ul><li><p><span>Run input kernel (embedding/position preparation)</span></p></li><li><p><span>Evaluate transformer layer 0</span></p></li><li><p><span>Evaluate transformer layer 1</span></p></li><li><p><span>&#8230;</span></p></li><li><p><span>Evaluate last transformer layer</span></p></li><li><p><span>Run normalization kernel</span></p></li><li><p><span>Write prompt K/V values to KV cache</span></p></li><li><p><span>Generate the first output token</span></p></li><li><p><span>Record a completion event for the prefill stage</span></p></li></ul><p><span>Decode stage:</span></p><ul><li><p><span>For each new token</span></p><ul><li><p><span>Run input kernel (embedding/position preparation)</span></p></li><li><p><span>Evaluate transformer layer 0</span></p></li><li><p><span>Evaluate transformer layer 1</span></p></li><li><p><span>&#8230;</span></p></li><li><p><span>Evaluate last transformer layer</span></p></li><li><p><span>Run normalization kernel</span></p></li><li><p><span>Append new K/V values to KV cache</span></p></li><li><p><span>Generate the next token</span></p></li></ul></li><li><p><span>At the last token, record a completion event for the decode stage</span></p></li></ul><p><span>What each of these commands means does not matter for this post. I just added them to show that an inference call is broken down into multiple GPU commands, and each of them is composed of one or more kernels, each with a large number of arithmetic operations. For example, a single attention layer might include separate or fused kernels for Q/K/V handling, score computation, causal masking, softmax/reduction, and value accumulation.</span></p><blockquote><p><span>Loading a ship is not always as simple as &#8220;move containers onto the ship as they arrive on the trucks.&#8221; When a large ship is being loaded, there is a </span><a href="https://www.youtube.com/watch?v=KgE_iK_NGmE&amp;pp=ygUcc2hpcHBpbmcgY29udGFpbmVyIGFsZ29yaXRobQ%3D%3D"><span>specific order of operations</span></a><span> to ensure the ship is balanced, deliveries are coordinated, and there is no chemical/combustion risk. The GPU commands for each pass are similar to the ship crew&#8217;s plan to start loading containers to the ship.</span></p></blockquote><h3><span>Step 2: Ollama submits Prefill commands to the GPU command queue</span></h3><p><span>Ollama (through the GPU runtime and driver) submits the ordered list of commands to the GPU command queue.</span></p><p><span>The command queue is not a physical hardware entity - it is a driver abstraction that separates the command generation (by the CPU) from the command consumption (by the GPU).</span></p><h3><span>Step 3: The GPU command processor dispatches work for Prefill</span></h3><p><span>Once the command queue starts to get filled, the GPU command processor and scheduling hardware consume the submitted work and dispatch kernels for execution. This involves:</span></p><ul><li><p><span>Dividing the work into multiple GPU thread blocks</span></p></li><li><p><span>Assigning each thread block to an available execution unit</span></p></li></ul><p><span>In other words, each Ollama command (more precisely, each kernel) specifies what operations to run - but the GPU runtime and hardware execute the kernel across many parallel threads, grouped into thread blocks or equivalent execution units.</span></p><blockquote><p><span>Think of the command queue like the loading area where the trucks drop off the container boxes. And the command processor is </span><a href="https://www.youtube.com/watch?v=vHhYCUtxpoA"><span>the loading arm that moves containers to different parts of the ship</span></a><span> based on the predefined plan.</span></p></blockquote><h3><span>Step 4: GPU computes the Prefill kernels and produces the first token</span></h3><p><span>This is the real &#8220;GPU execution&#8221;.</span></p><p><span>The massively parallel GPU threads execute the arithmetic, logic, and memory operations in the kernels and update the KV cache in the VRAM based on the input prompt. The kernel also generates the first output token.</span></p><p><span>I know that dumping this entire GPU computation in one sentence does great injustice to the advanced microarchitecture of modern GPUs - but those details are vendor specific, and beyond the scope of this post.</span></p><h3><span>Step 5: Ollama reads the token and submits the decode pass</span></h3><p><span>The output token is made available to the CPU/Ollama runner, which may involve transferring a small amount of data from GPU memory to host memory. The Ollama runner then checks the stop condition. (LLMs can generate a special </span><a href="https://www.natebrake.com/blog/end-of-sequence-explained"><span>end-of-sequence (EOS)</span></a><span> token to indicate that generation should stop.)</span></p><p><span>If the generated token is not the last token, Ollama submits commands for the decode pass to the command queue, which is then picked up by the GPU command processor.</span></p><h3><span>Step 6: GPU computes one pass of decode kernels and produces another token</span></h3><p><span>The execution is very similar to steps 3 and 4 - the GPU command processor dispatches work for the decode pass, the GPU threads execute the kernels, and a new token is generated. The KV cache is updated with this new token. The token is sent back to Ollama to trigger the next decode pass. (or end the inference if the stop condition is met.)</span></p><h3><span>Step 7: Ollama hits the stop condition, and the LLM inference completes</span></h3><p><span>Steps 5 and 6 are repeated until the last token is generated. Once the Ollama runner sees the last token, it stops sending decode commands to the GPU command queue, and the LLM inference is officially complete. All the generated tokens are already present in the System DRAM, ready to be used in the next phase. The updated KV cache, along with the model weights can continue to remain in the GPU VRAM in case there are future inference requests. (More on that in future posts.)</span></p><blockquote><p><span>Our shoe manufacturer&#8217;s destination is the stop condition for our shipping request. After reaching there, the ship journey for the shoes would have come to an end.</span></p></blockquote><h3><span>At the end of Phase 4:</span></h3><p><span>Ollama sent commands to the GPU to complete the LLM inference. The output tokens are available in the System DRAM.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pAsa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3f96cb0-813e-4224-b605-83da09bd0246_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pAsa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3f96cb0-813e-4224-b605-83da09bd0246_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!pAsa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3f96cb0-813e-4224-b605-83da09bd0246_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!pAsa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3f96cb0-813e-4224-b605-83da09bd0246_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!pAsa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3f96cb0-813e-4224-b605-83da09bd0246_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pAsa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3f96cb0-813e-4224-b605-83da09bd0246_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f3f96cb0-813e-4224-b605-83da09bd0246_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pAsa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3f96cb0-813e-4224-b605-83da09bd0246_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!pAsa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3f96cb0-813e-4224-b605-83da09bd0246_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!pAsa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3f96cb0-813e-4224-b605-83da09bd0246_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!pAsa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff3f96cb0-813e-4224-b605-83da09bd0246_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h2><span>Phase 5: Ollama returns the inference response and the Python script finishes execution</span></h2><p><strong><span>TL;DR:</span></strong><span> Ollama converts the tokens into text, and sends the response to the Python process. The Python executable completes executing the rest of the script.</span></p><p><strong><span>Hardware Involved:</span></strong><span> CPU, System DRAM</span></p><p><span>The steps in this phase are very similar to what we saw in phases 1 and 2 - except this time, Ollama needs to send data to the Python process.</span></p><blockquote><p><span>We are back on land now. The ship is unloaded, containers are moved into trucks and are driven to their final destinations.</span></p></blockquote><h3><span>Step 1: The Ollama runner converts output tokens into text</span></h3><p><span>This is the opposite of the tokenization process that was done in Phase 4 to the input prompt. Ollama uses the tokenizer to decode the output tokens into human-readable text.</span></p><h3><span>Step 2: The Ollama server process sends an HTTP response with JSON data</span></h3><ul><li><p><span>Ollama server converts the output text into UTF-8 bytes using the JSON serializer.</span></p></li><li><p><span>Then, Ollama creates an HTTP response with the output bytes as the response body.</span></p></li><li><p><span>Finally, Ollama writes the HTTP response to the TCP socket associated with the waiting Python process. (The IP address is still 127.0.0.1 as it is a local HTTP response. TCP port is the one allotted to the Python process by the OS.)</span></p></li></ul><h3><span>Step 3: The Python thread wakes up</span></h3><p><span>After the Python thread sent the HTTP response to Ollama in Phase 2, it was placed in a waiting state - waiting for this very moment.</span></p><p><span>When Ollama writes the response:</span></p><ul><li><p><span>The OS places the response bytes in Python&#8217;s socket receive buffer,</span></p></li><li><p><span>The OS marks the Python thread as runnable.</span></p></li><li><p><span>The OS assigns the thread to an available CPU core.</span></p></li></ul><p><span>This resumes the Python process to execute the rest of the script.</span></p><blockquote><p><span>The destination side entity of the shoe manufacturer is notified of the upcoming delivery.</span></p></blockquote><h3><span>Step 4: Python process parses HTTP and JSON</span></h3><p><span>The active Python thread uses the </span><strong><span>requests</span></strong><span> bytecode to read the HTTP response, extract the JSON body, and create a response object containing Python strings and metadata.</span></p><p><span>Once this object is created, it marks the end of the original source line:</span></p><p><strong><span>r = requests.post(...)</span></strong></p><h3><span>Step 5: The Python executable executes the print command</span></h3><p><span>We are done with the LLM inference.</span></p><p><span>We are done with the Ollama request.</span></p><p><span>Now, Python executes the bytecode for the </span><strong><span>print()</span></strong><span> function, which writes to standard output. The OS writes to the destination connected to stdout, usually displaying the output text in the shell window.</span></p><h3><span>Step 6: Python process is cleaned up</span></h3><p><span>Once the Python executable reaches the end of the script, the OS reclaims the resources allocated to the Python process - which officially marks the end of the script.</span></p><blockquote><p><span>Once the shoes are delivered to the right place, the shipping request can be marked as complete.</span></p></blockquote><h3><span>At the end of Phase 5:</span></h3><p><span>The output from the LLM inference is printed, and the script completes execution.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-lgB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad3550f7-eb02-4b9d-95ed-1366aa38418b_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-lgB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad3550f7-eb02-4b9d-95ed-1366aa38418b_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!-lgB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad3550f7-eb02-4b9d-95ed-1366aa38418b_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!-lgB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad3550f7-eb02-4b9d-95ed-1366aa38418b_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!-lgB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad3550f7-eb02-4b9d-95ed-1366aa38418b_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-lgB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad3550f7-eb02-4b9d-95ed-1366aa38418b_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ad3550f7-eb02-4b9d-95ed-1366aa38418b_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-lgB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad3550f7-eb02-4b9d-95ed-1366aa38418b_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!-lgB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad3550f7-eb02-4b9d-95ed-1366aa38418b_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!-lgB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad3550f7-eb02-4b9d-95ed-1366aa38418b_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!-lgB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fad3550f7-eb02-4b9d-95ed-1366aa38418b_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1><span>Conclusion (Finally!)</span></h1><p><span>Ever since ChatGPT, there has been a lot of chatter about AI hardware that gets oversimplified to sound like this:</span></p><p><span>&#8220;Run LLM inference on the GPU, everything else on the CPU&#8221;</span></p><p><span>My goal was to go one layer below this to understand exactly what the interaction between a CPU and a GPU looks like.</span></p><p><span>It took a lot of time for me to put this post together, but I needed to do this before I could meaningfully participate in the ongoing conversation about Agentic AI hardware.</span></p><p><span>I hope reading the post can help you do the same.</span></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p></p>]]></content:encoded></item><item><title><![CDATA[The Search for the Perfect Microarchitecture]]></title><description><![CDATA[Understanding Area, Power, and Performance using TinyXPU]]></description><link>https://chipinsights.net/p/the-search-for-the-perfect-microarchitecture</link><guid isPermaLink="false">https://chipinsights.net/p/the-search-for-the-perfect-microarchitecture</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Sun, 12 Jul 2026 21:57:08 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/234441d0-74b7-40e2-915d-0edd88f0c695_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s) and are not investment advice.</strong></p><div><hr></div><p><span>TinyXPU is back!</span></p><p><span>In our </span><a href="https://chipinsights.net/p/the-art-of-architectural-analysis"><span>last post</span></a><span>, Avik and I explored the tradeoffs between utilization, throughput, and latency. We first looked at these as abstract concepts, and then related them back to the systolic-array based </span><a href="https://github.com/avikde/tiny-xpu"><span>TinyXPU accelerator we are building</span></a><span>. This post follows a similar format, but shifts our focus deeper into the hardware side. (Or, as </span><a href="https://chipinsights.net/i/187337389/the-push-and-the-pull"><span>Harry would say</span></a><span>, this is where the real push begins.)</span></p><p><span>So far, we&#8217;ve been thinking primarily about architecture. We decided what TinyXPU should do, how data should move through the array, and how different architectural choices affect performance. This time, we&#8217;ll look at the three metrics that keep chip designers up at night: </span><strong><span>Power, Performance (Clock Frequency), and Area</span></strong><span>, commonly referred to as </span><strong><span>PPA</span></strong><span>. Before we dive into the metrics themselves, it&#8217;s worth understanding when this analysis is performed during the chip design process - because the stage at which a metric is measured determines what that number actually means.</span></p><div><hr></div><h1><span>Different stages of Microarchitectural Analysis</span></h1><p><span>There isn&#8217;t just one point where we analyze a design. As a chip moves from RTL to silicon, we repeatedly evaluate its microarchitectural characteristics. Each stage gives us a different level of accuracy, and each comes with its own tradeoff between accuracy and time left before the chip is manufactured.</span></p><ol><li><p><strong><span>Pre-Synthesis</span></strong></p></li></ol><p><span>At the pre-synthesis stage, the design exists only as RTL (Verilog/VHDL code), so PPA estimates are based on analytical models and designer intuition. They are quick to obtain, but fairly inaccurate. Recently, however, </span><a href="https://www.eetimes.com/next-gen-ai-eda-startups-have-potential-to-disrupt-design-automation/"><span>this has become a big focus of AI EDA companies</span></a><span>, with the promise of fast and accurate results.</span></p><ol start="2"><li><p><strong><span>Post-Synthesis</span></strong></p></li></ol><p><span>After synthesis, the RTL has been translated into a gate-level netlist built from standard cells (Logic gates, flip-flops, and other basic digital logic elements). This post-synthesis stage provides much more realistic estimates for area, timing, and power, while still allowing the design to be modified relatively quickly.</span></p><ol start="3"><li><p><strong><span>Post-Implementation</span></strong></p></li></ol><p><span>Implementation is the stage where the design has been placed and routed. (All standard cells are positioned exactly where they would be in the final chip.) Since the physical layout is now known, routing delays and parasitic effects are included, producing results that are much closer to what the final chip will achieve.</span></p><ol start="4"><li><p><strong><span>Post Tape-Out</span></strong></p></li></ol><p><span>Once the chip has been manufactured, measurements from real silicon provide the </span><strong><span>post-tape-out</span></strong><span> results. These are the ground truth, but they also arrive when changes are the most expensive. (Basically, a change = new chip.) Also, since we are no longer in the simulation world, we can only measure PPA at a very high granularity (i.e. One Area, Power, Frequency metric for the whole chip.)</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BC2A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc985bb82-e2a9-417c-9163-20624ecefe7e_1731x909.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BC2A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc985bb82-e2a9-417c-9163-20624ecefe7e_1731x909.png 424w, https://substackcdn.com/image/fetch/$s_!BC2A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc985bb82-e2a9-417c-9163-20624ecefe7e_1731x909.png 848w, https://substackcdn.com/image/fetch/$s_!BC2A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc985bb82-e2a9-417c-9163-20624ecefe7e_1731x909.png 1272w, https://substackcdn.com/image/fetch/$s_!BC2A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc985bb82-e2a9-417c-9163-20624ecefe7e_1731x909.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BC2A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc985bb82-e2a9-417c-9163-20624ecefe7e_1731x909.png" width="1456" height="765" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c985bb82-e2a9-417c-9163-20624ecefe7e_1731x909.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:765,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BC2A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc985bb82-e2a9-417c-9163-20624ecefe7e_1731x909.png 424w, https://substackcdn.com/image/fetch/$s_!BC2A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc985bb82-e2a9-417c-9163-20624ecefe7e_1731x909.png 848w, https://substackcdn.com/image/fetch/$s_!BC2A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc985bb82-e2a9-417c-9163-20624ecefe7e_1731x909.png 1272w, https://substackcdn.com/image/fetch/$s_!BC2A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc985bb82-e2a9-417c-9163-20624ecefe7e_1731x909.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>Microarchitecture analysis is most common at the </span><strong><span>Post-Synthesis</span></strong><span> and </span><strong><span>Post-Implementation</span></strong><span> stage - they are sufficiently accurate, and also provide enough time to make changes to the design before the chip is manufactured. For this post, we&#8217;ll focus on </span><strong><span>post-synthesis</span></strong><span> results.</span></p><div><hr></div><h1>Tools and Setup</h1><p><span>The focus of this post is to explore microarchitecture concepts through the TinyXPU design - so details about the tools are intentionally brief. All the scripts used can be found in the </span><a href="https://github.com/avikde/tiny-xpu"><span>TinyXPU repo</span></a><span>.</span></p><p><span>Our goal was to use an entirely open-source ASIC flow for this analysis - starting with the PDK, for which we picked the Sky130 standard cell library. The RTL was first synthesized with Yosys, which generated the gate-level netlist and provided the area estimates. Then, OpenSTA was used to analyze the synthesized design, extracting both the critical path delay and vectorless power estimates. (The power analysis was available through the OpenSTA engine that ships as part of the </span><a href="https://deepwiki.com/The-OpenROAD-Project/OpenSTA/6-power-analysis"><span>OpenROAD project</span></a><span>.)</span></p><p><span>We ran a simple parameter sweep on the design, and parsed the generated logs to get important PPA metrics. Each TinyXPU configuration is defined by three design parameters.</span></p><p><span>The first is the PE array size </span><strong><span>(parameter ROWS/COLS)</span></strong><span>, which determines the number of Processing Elements (PEs) arranged in a square systolic array. (So ROWS == COLS) If you are curious about other shapes of systolic arrays, </span><a href="https://www.avikde.me/p/systolic-arrays-for-general-robotics"><span>check out this post from min{power}</span></a><span>.</span></p><p><span>The second parameter is the data width </span><strong><span>(parameter DATA_WIDTH)</span></strong><span>, which determines the precision of the input activations and weights. A larger data width allows the accelerator to represent larger numbers and improve numerical precision, but it comes at a cost, as we will see in this post.</span></p><p><span>Finally, we vary the accumulator width </span><strong><span>(parameter ACC_WIDTH)</span></strong><span>, which determines the precision of the partial sums as they propagate through the array. Since each PE performs a multiply-accumulate (MAC) operation every cycle, the accumulator is typically much wider than the inputs to avoid overflow during long accumulation chains.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-3XW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3256ad32-c80c-4fd0-a634-2d8cae691147_1122x1402.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-3XW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3256ad32-c80c-4fd0-a634-2d8cae691147_1122x1402.png 424w, https://substackcdn.com/image/fetch/$s_!-3XW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3256ad32-c80c-4fd0-a634-2d8cae691147_1122x1402.png 848w, https://substackcdn.com/image/fetch/$s_!-3XW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3256ad32-c80c-4fd0-a634-2d8cae691147_1122x1402.png 1272w, https://substackcdn.com/image/fetch/$s_!-3XW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3256ad32-c80c-4fd0-a634-2d8cae691147_1122x1402.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-3XW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3256ad32-c80c-4fd0-a634-2d8cae691147_1122x1402.png" width="1122" height="1402" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3256ad32-c80c-4fd0-a634-2d8cae691147_1122x1402.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1402,&quot;width&quot;:1122,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!-3XW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3256ad32-c80c-4fd0-a634-2d8cae691147_1122x1402.png 424w, https://substackcdn.com/image/fetch/$s_!-3XW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3256ad32-c80c-4fd0-a634-2d8cae691147_1122x1402.png 848w, https://substackcdn.com/image/fetch/$s_!-3XW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3256ad32-c80c-4fd0-a634-2d8cae691147_1122x1402.png 1272w, https://substackcdn.com/image/fetch/$s_!-3XW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3256ad32-c80c-4fd0-a634-2d8cae691147_1122x1402.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1><br><span>The Cooking Analogy (Again!)</span></h1><p><span>We said the format is similar to the last post, so how can we continue without </span><a href="https://chipinsights.net/i/192536198/the-cooking-analogy"><span>the cooking analogy</span></a><span>? For the architecture discussion, the focus was: How do we boil eggs efficiently? We experimented with different strategies: boiling one egg at a time, boiling several together, or using multiple burners. Those were </span><strong><span>architectural decisions</span></strong><span>.</span></p><p><span>But when we are talking about microarchitecture, the focus changes to: </span><strong><span>Can we build a stove that delivers those results within practical constraints? </span></strong><span>Say we decided to use eight burners to boil more eggs in parallel - would a stove like that fit on the counter-top? And can the kitchen draw enough power to keep all those burners running?</span></p><blockquote><p>Such references are used sparingly throughout the post to simplify certain concepts, and are displayed as quotes going forward.</p></blockquote><div><hr></div><h1><span>Metric 1: Area</span></h1><h2><span>Quick Takes</span></h2><h3><span>What is it?</span></h3><p><span>Area measures how much space a design occupies on the chip. Larger designs require more transistors, wires, and space between them, which makes the area larger.</span></p><blockquote><p><span>In our cooking analogy, this is simply the size of the stove we need for the chosen &#8220;egg-boiling&#8221; strategy.</span></p></blockquote><h3>Why does it matter?</h3><p>Smaller chips are cheaper to manufacture, typically consume less power, and can fit in compact electronic equipment.</p><blockquote><p>A compact stove costs less and fits comfortably into a kitchen, while an oversized one may be impractical regardless of how many eggs it boils.</p></blockquote><h3>When does it not matter as much?</h3><p>Quite often these days.</p><p>Area is becoming a secondary concern in high-performance datacenter accelerators, where maximizing throughput is more important than minimizing die size and manufacturing costs. Also, you don&#8217;t need to stick your H100 GPU on a smartphone or smartglass, so a large area isn&#8217;t existential.</p><blockquote><p>In a commercial restaurant, dedicating more floor space to a larger stove may be worthwhile if it allows the kitchen to serve many more customers. </p></blockquote><div><hr></div><h2><span>TinyXPU Area Analysis</span></h2><p><span>Area is arguably the easiest PPA metric to build intuition for. Every additional piece of hardware occupies silicon, whether it is another Processing Element, larger multipliers, or bigger registers.</span></p><h3><span>Experiment 1: Area vs. PE Array Size</span></h3><p><span>Our first experiment varies the size of the systolic array while keeping the accumulator width fixed. Each colored line in the plot represents a different data width.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QBHK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eac261f-1faa-4141-ab5e-786ef9eecbfc_1077x785.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QBHK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eac261f-1faa-4141-ab5e-786ef9eecbfc_1077x785.png 424w, https://substackcdn.com/image/fetch/$s_!QBHK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eac261f-1faa-4141-ab5e-786ef9eecbfc_1077x785.png 848w, https://substackcdn.com/image/fetch/$s_!QBHK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eac261f-1faa-4141-ab5e-786ef9eecbfc_1077x785.png 1272w, https://substackcdn.com/image/fetch/$s_!QBHK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eac261f-1faa-4141-ab5e-786ef9eecbfc_1077x785.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QBHK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eac261f-1faa-4141-ab5e-786ef9eecbfc_1077x785.png" width="1077" height="785" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5eac261f-1faa-4141-ab5e-786ef9eecbfc_1077x785.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:785,&quot;width&quot;:1077,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QBHK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eac261f-1faa-4141-ab5e-786ef9eecbfc_1077x785.png 424w, https://substackcdn.com/image/fetch/$s_!QBHK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eac261f-1faa-4141-ab5e-786ef9eecbfc_1077x785.png 848w, https://substackcdn.com/image/fetch/$s_!QBHK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eac261f-1faa-4141-ab5e-786ef9eecbfc_1077x785.png 1272w, https://substackcdn.com/image/fetch/$s_!QBHK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5eac261f-1faa-4141-ab5e-786ef9eecbfc_1077x785.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><span>Takeaways:</span></strong><span> Two clear trends stand out. First, doubling the dimensions of the systolic array roughly quadruples the chip area because the number of Processing Elements also quadruples. Note that the area axis in this plot is logarithmic - so the actual area scales quadratically with the array size. Second, increasing the data width shifts the entire curve upward. Wider inputs require larger multipliers, adders, registers, and interconnect inside every PE, so even with the same array size, the silicon cost increases significantly.</span></p><blockquote><p><span>Returning to our cooking analogy, increasing the array size is like adding more burners to the stove, while increasing the data width is like replacing every burner with a larger, more powerful one. Both make the stove more capable, but also larger.</span></p></blockquote><div><hr></div><h3><span>Experiment 2: Area vs. Data Width</span></h3><p><span>Next, we keep the array size fixed (16x16) and vary the precision of the inputs and weights. The accumulator width is also unchanged. (32 bits)</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pO8Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b11e13d-9bd2-49bb-878b-ea489ac51449_891x785.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pO8Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b11e13d-9bd2-49bb-878b-ea489ac51449_891x785.png 424w, https://substackcdn.com/image/fetch/$s_!pO8Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b11e13d-9bd2-49bb-878b-ea489ac51449_891x785.png 848w, https://substackcdn.com/image/fetch/$s_!pO8Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b11e13d-9bd2-49bb-878b-ea489ac51449_891x785.png 1272w, https://substackcdn.com/image/fetch/$s_!pO8Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b11e13d-9bd2-49bb-878b-ea489ac51449_891x785.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pO8Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b11e13d-9bd2-49bb-878b-ea489ac51449_891x785.png" width="891" height="785" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b11e13d-9bd2-49bb-878b-ea489ac51449_891x785.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:785,&quot;width&quot;:891,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pO8Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b11e13d-9bd2-49bb-878b-ea489ac51449_891x785.png 424w, https://substackcdn.com/image/fetch/$s_!pO8Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b11e13d-9bd2-49bb-878b-ea489ac51449_891x785.png 848w, https://substackcdn.com/image/fetch/$s_!pO8Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b11e13d-9bd2-49bb-878b-ea489ac51449_891x785.png 1272w, https://substackcdn.com/image/fetch/$s_!pO8Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b11e13d-9bd2-49bb-878b-ea489ac51449_891x785.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><span>Takeaway:</span></strong><span> Increasing the data width increases the complexity of every Processing Element. Wider multipliers, adders, and registers all consume additional silicon, so the effect is amplified across the entire array. Although doubling the data width doubles the number of bits, the area does not increase perfectly linearly. The main reason is that arithmetic units, particularly multipliers, become disproportionately larger as operand widths increase. (Interested readers can see the </span><a href="https://arxiv.org/html/2405.06758v1"><span>comparison between different multiplier architectures published elsewhere</span></a><span>.)</span></p><p><span>This is one reason why modern AI accelerators often prefer INT8 or even INT4 arithmetic whenever the algorithm can tolerate lower precision - in addition to reducing memory usage, they also reduce the silicon area for each processing element. (In other words, you can pack more processing elements within your chip.)</span></p><div><hr></div><h3><span>Experiment 3: Area vs. Accumulator Width</span></h3><p><span>Finally, we fix the array size (16x16) and data precision (8 bits) while varying the accumulator width.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eqm-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0ae231-cdfd-46dc-ad4c-ddb6d848de09_891x785.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eqm-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0ae231-cdfd-46dc-ad4c-ddb6d848de09_891x785.png 424w, https://substackcdn.com/image/fetch/$s_!eqm-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0ae231-cdfd-46dc-ad4c-ddb6d848de09_891x785.png 848w, https://substackcdn.com/image/fetch/$s_!eqm-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0ae231-cdfd-46dc-ad4c-ddb6d848de09_891x785.png 1272w, https://substackcdn.com/image/fetch/$s_!eqm-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0ae231-cdfd-46dc-ad4c-ddb6d848de09_891x785.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eqm-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0ae231-cdfd-46dc-ad4c-ddb6d848de09_891x785.png" width="891" height="785" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb0ae231-cdfd-46dc-ad4c-ddb6d848de09_891x785.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:785,&quot;width&quot;:891,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eqm-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0ae231-cdfd-46dc-ad4c-ddb6d848de09_891x785.png 424w, https://substackcdn.com/image/fetch/$s_!eqm-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0ae231-cdfd-46dc-ad4c-ddb6d848de09_891x785.png 848w, https://substackcdn.com/image/fetch/$s_!eqm-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0ae231-cdfd-46dc-ad4c-ddb6d848de09_891x785.png 1272w, https://substackcdn.com/image/fetch/$s_!eqm-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb0ae231-cdfd-46dc-ad4c-ddb6d848de09_891x785.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><span>Takeaway:</span></strong><span> Unlike increasing the data width, increasing the accumulator width produces an almost linear increase in area. The reason is that the accumulator primarily affects the width of the adders and registers that propagate partial sums through the array, both of which scale approximately linearly with the number of bits. (Adders also don&#8217;t always scale linearly, but within the range we considered, it seems to stay linear.) To reduce area, the accumulator size should be limited to the numerical range that the workload requires.</span></p><blockquote><p><span>For an optimal stove area, make sure that the burners are as big as the pots - anything bigger results in wasted space.</span></p></blockquote><div><hr></div><h1><span>Metric 2: Clock Frequency</span></h1><h2><span>Quick Takes</span></h2><h3><span>What is it?</span></h3><p><span>Clock frequency is the maximum rate at which a design can reliably execute one clock cycle. It is determined by the longest delay through the hardware. See this Chip Insights post for details:</span></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;836680b8-74b3-4bd5-980b-da029b0ede28&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Confessions of a static timing analysis tool&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-07-21T15:11:11.670Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.net/p/confessions-of-a-static-timing-analysis&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:168864393,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:18,&quot;comment_count&quot;:3,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><blockquote><p><span>In our analogy, it is like how quickly the burners can heat the pot, or the rate of gas flow to the burners.</span></p></blockquote><h3><span>Why does it matter?</span></h3><p><span>A higher clock frequency allows the same hardware to perform more work per second, improving overall performance.</span></p><blockquote><p><span>Faster burners boil the eggs sooner.</span></p></blockquote><h3><span>When does it not matter as much?</span></h3><p><span>If the workload is limited by memory bandwidth, communication, or algorithmic dependencies, increasing the clock frequency may provide little benefit. Essentially, if </span><a href="https://chipinsights.net/i/192536198/concept-1-hardware-utilization"><span>utilization</span></a><span> is low, then increasing the frequency wouldn&#8217;t help much.</span></p><blockquote><p><span>If you don&#8217;t have sufficient eggs ready to be boiled in the first place, then even a faster burner won&#8217;t allow you to boil more eggs.</span></p></blockquote><div><hr></div><h2><span>TinyXPU Frequency Analysis</span></h2><p><span>Signals in a chip do not propagate instantaneously. As they pass through multiple logic gates between two flip-flops, each gate introduces a small delay. The longest of these paths, called the critical path, determines the maximum operating frequency of the design. (In other words, the clock period must be at least as long as the time it takes for the signals to propagate through this path.)</span></p><p><span>Timing analysis is typically performed by targeting a specific frequency (and clock period) and analysing the &#8220;slack&#8221;, which is the time available (positive slack), or the additional time (negative slack) needed to meet the timing requirements. If the slack is negative, the designer has two options: modify the design to ensure timing is met, or increase the clock period.</span></p><p><span>For this post, our goal is to simply analyze the clock frequency trends for different TinyXPU configurations. So we picked a clock period of 20ns for all our runs. This resulted in both positive and negative slacks across the runs, but instead of reporting the slack, we extracted the data arrival time of the critical path (the longest combinational path between two sequential elements) and used its reciprocal to estimate the maximum achievable clock frequency.</span></p><h3><span>Experiment 1: Frequency vs Accumulator Width</span></h3><p><span>Fix the data width to 8 bits, and sweep the accumulator width in the 8x8 PE array configuration.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!B17f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3091026b-ff49-48eb-8f6a-967ad724d807_640x480.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B17f!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3091026b-ff49-48eb-8f6a-967ad724d807_640x480.png 424w, https://substackcdn.com/image/fetch/$s_!B17f!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3091026b-ff49-48eb-8f6a-967ad724d807_640x480.png 848w, https://substackcdn.com/image/fetch/$s_!B17f!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3091026b-ff49-48eb-8f6a-967ad724d807_640x480.png 1272w, https://substackcdn.com/image/fetch/$s_!B17f!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3091026b-ff49-48eb-8f6a-967ad724d807_640x480.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!B17f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3091026b-ff49-48eb-8f6a-967ad724d807_640x480.png" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3091026b-ff49-48eb-8f6a-967ad724d807_640x480.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!B17f!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3091026b-ff49-48eb-8f6a-967ad724d807_640x480.png 424w, https://substackcdn.com/image/fetch/$s_!B17f!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3091026b-ff49-48eb-8f6a-967ad724d807_640x480.png 848w, https://substackcdn.com/image/fetch/$s_!B17f!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3091026b-ff49-48eb-8f6a-967ad724d807_640x480.png 1272w, https://substackcdn.com/image/fetch/$s_!B17f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3091026b-ff49-48eb-8f6a-967ad724d807_640x480.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><span>Takeaways:</span></strong><span> Increasing the accumulator width has a clear impact on clock frequency. Since every multiply is followed by an accumulation, wider accumulators require wider adders on the critical path, increasing the delay through each Processing Element. Unlike the data-width experiment, this trend is almost perfectly linear. Doubling the accumulator width roughly doubles the adder delay, reducing the maximum operating frequency.</span></p><blockquote><p><span>The fastest way to boil your egg is to use a small pot on a small burner.</span></p></blockquote><div><hr></div><h3><span>Experiment 2: Frequency vs PE Array Size</span></h3><p><span>Here, we fix the data width to 8 bits, accumulator width to 32 bits, and vary the array size.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UKAL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc80e18cd-182e-46bf-aae9-916faeaa5d00_640x480.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UKAL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc80e18cd-182e-46bf-aae9-916faeaa5d00_640x480.png 424w, https://substackcdn.com/image/fetch/$s_!UKAL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc80e18cd-182e-46bf-aae9-916faeaa5d00_640x480.png 848w, https://substackcdn.com/image/fetch/$s_!UKAL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc80e18cd-182e-46bf-aae9-916faeaa5d00_640x480.png 1272w, https://substackcdn.com/image/fetch/$s_!UKAL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc80e18cd-182e-46bf-aae9-916faeaa5d00_640x480.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UKAL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc80e18cd-182e-46bf-aae9-916faeaa5d00_640x480.png" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c80e18cd-182e-46bf-aae9-916faeaa5d00_640x480.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UKAL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc80e18cd-182e-46bf-aae9-916faeaa5d00_640x480.png 424w, https://substackcdn.com/image/fetch/$s_!UKAL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc80e18cd-182e-46bf-aae9-916faeaa5d00_640x480.png 848w, https://substackcdn.com/image/fetch/$s_!UKAL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc80e18cd-182e-46bf-aae9-916faeaa5d00_640x480.png 1272w, https://substackcdn.com/image/fetch/$s_!UKAL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc80e18cd-182e-46bf-aae9-916faeaa5d00_640x480.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><span>Takeaways:</span></strong><span> Perhaps the most surprising result is that increasing the array size has almost no impact on the maximum clock frequency. This is expected at the post-synthesis stage, where the critical path is contained almost entirely within a single Processing Element. (The long wires that would connect distant registers in a real chip have not yet been accounted for).</span></p><p><span>One interesting exception is the 4&#215;4 array, which achieves a noticeably lower maximum frequency than the larger configurations. At first glance, this seems counterintuitive, as the smallest design should be the fastest, right?</span></p><p><strong><span>We have a theory for why this is happening, but we&#8217;ll leave this as a fun exercise. Leave a comment if you can guess what&#8217;s causing this behavior.</span></strong></p><div><hr></div><h3><span>Experiment 3: Frequency vs Data Width</span></h3><p><span>In this plot, we measure the impact of changing data width by fixing accumulator width to 32 in a 16x16 PE array.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dWFc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9f0516-428a-45ca-85d9-6fda49c3fe4c_640x480.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dWFc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9f0516-428a-45ca-85d9-6fda49c3fe4c_640x480.png 424w, https://substackcdn.com/image/fetch/$s_!dWFc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9f0516-428a-45ca-85d9-6fda49c3fe4c_640x480.png 848w, https://substackcdn.com/image/fetch/$s_!dWFc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9f0516-428a-45ca-85d9-6fda49c3fe4c_640x480.png 1272w, https://substackcdn.com/image/fetch/$s_!dWFc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9f0516-428a-45ca-85d9-6fda49c3fe4c_640x480.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dWFc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9f0516-428a-45ca-85d9-6fda49c3fe4c_640x480.png" width="640" height="480" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb9f0516-428a-45ca-85d9-6fda49c3fe4c_640x480.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:480,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dWFc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9f0516-428a-45ca-85d9-6fda49c3fe4c_640x480.png 424w, https://substackcdn.com/image/fetch/$s_!dWFc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9f0516-428a-45ca-85d9-6fda49c3fe4c_640x480.png 848w, https://substackcdn.com/image/fetch/$s_!dWFc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9f0516-428a-45ca-85d9-6fda49c3fe4c_640x480.png 1272w, https://substackcdn.com/image/fetch/$s_!dWFc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb9f0516-428a-45ca-85d9-6fda49c3fe4c_640x480.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><span>Takeaways:</span></strong><span> Unlike area, the relationship between data width and maximum operating frequency is not monotonic. Although larger multipliers generally require more hardware, the synthesized critical path depends on the specific gate-level implementation chosen by the synthesis tool. Internally, the tool may restructure arithmetic logic, optimize the multiplier and accumulator differently, select alternate standard cells, or balance the surrounding combinational logic.</span></p><p><span>In our experiments, changing the operand width altered both the critical path and the logic structure generated by the optimizer. As a result, the 16-bit configuration achieved the highest operating frequency, outperforming both smaller and larger datapaths.</span></p><p><span>This was the most unexpected result in this study, but we are leaving it here to demonstrate how sensitive microarchitecture analysis could be to the underlying EDA tools and their quirks. We expect that a commercial EDA tool would be better optimized to handle 4 and 8 bit multipliers and result in a more uniform trend.</span></p><div><hr></div><h1><span>Metric 3: Power</span></h1><h2><span>Quick Takes</span></h2><h3><span>What is it?</span></h3><p><span>Power measures the rate at which a chip consumes electrical energy while operating. It includes both the energy spent performing computation and the energy consumed even when parts of the chip are idle. See this Chip Insights post for details about power analysis:</span></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;6f465a51-8953-4b1b-81c9-d8dd7101dd67&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Power essentials for a chip architect&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-06-07T02:37:32.387Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.net/p/power-essentials-for-a-chip-architect&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:165388326,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:35,&quot;comment_count&quot;:3,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><blockquote><p><span>In the kitchen, this is the gas required to keep the stove running.</span></p></blockquote><h3><span>Why does it matter?</span></h3><p><span>Power determines battery life in mobile devices, electricity costs in datacenters, and how much heat the cooling system must remove.</span></p><blockquote><p><span>If you use an extremely power-hungry stove, you will pay more in utility bills.</span></p></blockquote><h3><span>When does it not matter as much?</span></h3><p><span>It always matters, but may not be existential for new architectures (as they are still experimental and not widely deployed), and performance critical applications - as long as it stays </span><a href="https://chipinsights.net/i/165388326/peak-power"><span>below a certain threshold</span></a><span>.</span></p><blockquote><p><span>Say you are having people over for the weekend, and you need to boil a lot of eggs, you might not care how much gas the stove consumes.</span></p></blockquote><div><hr></div><h2><span>TinyXPU Power Analysis</span></h2><p><span>To estimate power consumption, each synthesized design was analyzed using OpenROAD&#8217;s built-in power analysis. For simplicity, instead of picking a specific workload, the analysis was performed in vectorless mode with a toggle rate of 0.5. This means that, on average, every signal is assumed to have a 50% probability of switching on each clock cycle, providing a rough estimate of dynamic activity across the design. </span>(we explain the limitation of this in an upcoming section.)</p><h3><span>Experiment 1: Power vs PE Array Size</span></h3><p><span>With input precision of 8 bits and accumulator width of 32 bits, we look at how power changes for different PE array configurations.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!e55a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c78506c-6460-4c8e-958d-1df822df7e6a_1000x700.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!e55a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c78506c-6460-4c8e-958d-1df822df7e6a_1000x700.png 424w, https://substackcdn.com/image/fetch/$s_!e55a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c78506c-6460-4c8e-958d-1df822df7e6a_1000x700.png 848w, https://substackcdn.com/image/fetch/$s_!e55a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c78506c-6460-4c8e-958d-1df822df7e6a_1000x700.png 1272w, https://substackcdn.com/image/fetch/$s_!e55a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c78506c-6460-4c8e-958d-1df822df7e6a_1000x700.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!e55a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c78506c-6460-4c8e-958d-1df822df7e6a_1000x700.png" width="1000" height="700" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0c78506c-6460-4c8e-958d-1df822df7e6a_1000x700.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:700,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!e55a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c78506c-6460-4c8e-958d-1df822df7e6a_1000x700.png 424w, https://substackcdn.com/image/fetch/$s_!e55a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c78506c-6460-4c8e-958d-1df822df7e6a_1000x700.png 848w, https://substackcdn.com/image/fetch/$s_!e55a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c78506c-6460-4c8e-958d-1df822df7e6a_1000x700.png 1272w, https://substackcdn.com/image/fetch/$s_!e55a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0c78506c-6460-4c8e-958d-1df822df7e6a_1000x700.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><span>Takeaways:</span></strong><span> Unlike clock frequency, power increases dramatically as the PE array grows. This is expected because every additional Processing Element introduces another multiplier, accumulator, registers, and routing logic that consume power whenever they switch. The increase is particularly steep because the total number of processing elements grows quadratically with the array dimension. (If you remember, we </span><a href="https://chipinsights.net/i/192536198/vertical-axis-peak-throughput"><span>did exactly this in our architectural analysis post to claim a higher throughput</span></a><span> - we are paying the cost now!)</span></p><blockquote><p><span>Imagine expanding from a stove with 16 burners to one with 64, then 256, and eventually 1024. Even if each burner consumes the same amount of energy, operating many more of them at once dramatically increases the total power required.</span></p></blockquote><div><hr></div><h3><span>Experiment 2: Power vs Data Width</span></h3><p><span>We vary data width in a 8x8 PE array with 32 bits accumulator width.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!stH-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff01320e0-7fa7-4cb8-9676-8bb9a85f945e_1000x700.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!stH-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff01320e0-7fa7-4cb8-9676-8bb9a85f945e_1000x700.png 424w, https://substackcdn.com/image/fetch/$s_!stH-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff01320e0-7fa7-4cb8-9676-8bb9a85f945e_1000x700.png 848w, https://substackcdn.com/image/fetch/$s_!stH-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff01320e0-7fa7-4cb8-9676-8bb9a85f945e_1000x700.png 1272w, https://substackcdn.com/image/fetch/$s_!stH-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff01320e0-7fa7-4cb8-9676-8bb9a85f945e_1000x700.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!stH-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff01320e0-7fa7-4cb8-9676-8bb9a85f945e_1000x700.png" width="1000" height="700" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f01320e0-7fa7-4cb8-9676-8bb9a85f945e_1000x700.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:700,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!stH-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff01320e0-7fa7-4cb8-9676-8bb9a85f945e_1000x700.png 424w, https://substackcdn.com/image/fetch/$s_!stH-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff01320e0-7fa7-4cb8-9676-8bb9a85f945e_1000x700.png 848w, https://substackcdn.com/image/fetch/$s_!stH-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff01320e0-7fa7-4cb8-9676-8bb9a85f945e_1000x700.png 1272w, https://substackcdn.com/image/fetch/$s_!stH-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff01320e0-7fa7-4cb8-9676-8bb9a85f945e_1000x700.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><span>Takeaways: </span></strong><span>Increasing the data width also raises the total power consumption, although for a different reason. Wider operands require larger multipliers, wider registers, and more combinational logic inside every Processing Element. These additional transistors contribute both more capacitance and more switching activity, increasing the energy consumed on every clock cycle.</span></p><p><span>Unlike the frequency experiment, which showed an irregular trend due to synthesis optimizations, the power results follow a much more intuitive pattern. Regardless of how the synthesis tool implements the arithmetic, wider datapaths require more hardware and therefore consume more power.</span></p><div><hr></div><h3><span>Experiment 3: Power vs Accumulator Width</span></h3><p><span>8 bits of data width, 8x8 PE array configuration.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xbJG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F440f3d94-86f9-4edf-9af7-af0635b3d1bb_1000x700.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xbJG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F440f3d94-86f9-4edf-9af7-af0635b3d1bb_1000x700.png 424w, https://substackcdn.com/image/fetch/$s_!xbJG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F440f3d94-86f9-4edf-9af7-af0635b3d1bb_1000x700.png 848w, https://substackcdn.com/image/fetch/$s_!xbJG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F440f3d94-86f9-4edf-9af7-af0635b3d1bb_1000x700.png 1272w, https://substackcdn.com/image/fetch/$s_!xbJG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F440f3d94-86f9-4edf-9af7-af0635b3d1bb_1000x700.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xbJG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F440f3d94-86f9-4edf-9af7-af0635b3d1bb_1000x700.png" width="1000" height="700" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/440f3d94-86f9-4edf-9af7-af0635b3d1bb_1000x700.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:700,&quot;width&quot;:1000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xbJG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F440f3d94-86f9-4edf-9af7-af0635b3d1bb_1000x700.png 424w, https://substackcdn.com/image/fetch/$s_!xbJG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F440f3d94-86f9-4edf-9af7-af0635b3d1bb_1000x700.png 848w, https://substackcdn.com/image/fetch/$s_!xbJG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F440f3d94-86f9-4edf-9af7-af0635b3d1bb_1000x700.png 1272w, https://substackcdn.com/image/fetch/$s_!xbJG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F440f3d94-86f9-4edf-9af7-af0635b3d1bb_1000x700.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><span>Takeaways:</span></strong><span> The accumulator width has a similarly predictable effect on power. Wider accumulators require larger adders, wider registers, and additional interconnect, all of which contribute to higher switching capacitance, and hence larger power consumption. As the accumulator width increases, every processing element becomes more expensive to operate, causing the total accelerator power to increase steadily.</span></p><blockquote><p><span>This is like replacing every burner with a larger commercial-grade burner. The stove now requires more energy to perform its job, even though the total number of burners remains unchanged.</span></p></blockquote><div><hr></div><h1><span>Analyzing All Metrics Together</span></h1><p><span>Up to this point, we have examined area, frequency, and power independently. In practice, however, hardware architects rarely optimize a single metric in isolation. Instead, they explore a design space, where every point represents a different implementation with its own trade-offs. This plot compares the estimated computational performance of each TinyXPU configuration against its total power consumption. Here, performance is estimated as the product of the number of Processing Elements (PEs) and the maximum operating frequency, and is normalized to the smallest design for easier comparison.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u3ty!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6efcf38-f676-4944-8c10-11198e4e7db2_2048x1527.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u3ty!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6efcf38-f676-4944-8c10-11198e4e7db2_2048x1527.png 424w, https://substackcdn.com/image/fetch/$s_!u3ty!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6efcf38-f676-4944-8c10-11198e4e7db2_2048x1527.png 848w, https://substackcdn.com/image/fetch/$s_!u3ty!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6efcf38-f676-4944-8c10-11198e4e7db2_2048x1527.png 1272w, https://substackcdn.com/image/fetch/$s_!u3ty!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6efcf38-f676-4944-8c10-11198e4e7db2_2048x1527.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u3ty!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6efcf38-f676-4944-8c10-11198e4e7db2_2048x1527.png" width="1456" height="1086" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f6efcf38-f676-4944-8c10-11198e4e7db2_2048x1527.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1086,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!u3ty!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6efcf38-f676-4944-8c10-11198e4e7db2_2048x1527.png 424w, https://substackcdn.com/image/fetch/$s_!u3ty!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6efcf38-f676-4944-8c10-11198e4e7db2_2048x1527.png 848w, https://substackcdn.com/image/fetch/$s_!u3ty!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6efcf38-f676-4944-8c10-11198e4e7db2_2048x1527.png 1272w, https://substackcdn.com/image/fetch/$s_!u3ty!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff6efcf38-f676-4944-8c10-11198e4e7db2_2048x1527.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><span>The blue points (A and B) illustrate the concept of a dominated design. Point A corresponds to a 16&#215;16 PE array with an 8-bit data width and a 32-bit accumulator, while point B uses the same array size and accumulator width but increases the data width to 16 bits. Although B consumes significantly more power, it delivers only a modest increase in performance. Since A achieves nearly the same throughput while using less power, B is said to be dominated. More generally, a design is dominated if another configuration provides equal or better performance while consuming equal or less power. Dominated designs are generally discarded because there is always a better alternative.</span></p><p><span>The red points connected by the red line form the Pareto frontier, representing the set of configurations that are not dominated by any other configuration. Every point on this frontier represents a valid design choice, and moving along the frontier requires trading one metric for another.</span></p><p><span>The green points (C and D) on the Pareto frontier are interesting. Point C corresponds to a 16&#215;16 PE array with a 4-bit data width and a 16-bit accumulator, while D increases only the data width to 8 bits, keeping the array size and accumulator width unchanged. This change increases the normalized performance by only about 3%, but more than doubles the total power consumption. Although neither design dominates the other, the small performance increase comes at a significant energy cost along this part of the Pareto frontier.</span></p><p><span>Finally, notice that the Pareto frontier consists of discrete points rather than a smooth curve. Unlike software, hardware parameters such as array dimensions, data width, and accumulator width can only take on a finite number of valid values. We cannot build a 17-bit datapath or a 20&#215;20 systolic array simply because it would lie on a more favorable part of the curve. Instead, hardware architects evaluate a finite set of candidate designs and select the configuration that best balances performance, power, and area for their target application.</span></p><div><hr></div><h1><strong><span>Some Practical Considerations</span></strong></h1><p><span>While these results were meant to introduce microarchitectural analysis and highlight some high-level trends, they do not capture many physical effects that appear later in the design flow.</span></p><p><span>For area, the reported values represent the total area of the synthesized standard cells, not the final chip size after physical implementation. During placement, additional whitespace is introduced to satisfy routing, congestion, clock tree synthesis, and design rule constraints. Consequently, the final die area is typically larger than the synthesized cell area, especially for larger designs where routing becomes more challenging.</span></p><p><span>For timing, the analysis assumes ideal interconnects. Since the design has not yet been placed and routed, the delays introduced by long wires, clock distribution, and routing parasitics are largely absent. This explains why the maximum operating frequency remains almost independent of the PE array size in our experiments. After place-and-route, these interconnect delays would become a much larger contributor to the critical path, particularly as the array grows.</span></p><p><span>Finally, the power results should be interpreted as rough estimates rather than accurate measurements. The analysis is vectorless, meaning the EDA tools assume a fixed switching activity instead of using real workload traces. As a result, the reported dynamic power can differ significantly from what would be observed under actual operation. In practice, accurate power analysis requires realistic switching activity (SAIF or VCD files), along with extracted interconnect parasitics after place-and-route. Process-voltage-temperature (PVT) variations and clock tree synthesis also have a significant impact on the final power consumption.</span></p><div><hr></div><h1>Why does all this matter to an Algorithm Designer?</h1><p>If you&#8217;re an algorithm designer and you&#8217;ve made it this far, we hope this final message will make it all worth it.</p><p>Architectural ideas are often evaluated using simple models. If doubling the number of processing elements doubles throughput, or increasing the buffer size reduces memory traffic, the idea looks like a clear win. But once someone begins implementing that architecture, physical constraints start to appear.</p><p>A larger systolic array requires more wires connecting processing elements, which makes routing more difficult and can reduce the maximum clock frequency. Adding more parallel compute units increases throughput, but it also increases power consumption and can make the chip too large or too expensive to manufacture. Even something as simple as adding another pipeline stage may improve clock frequency while increasing latency. These tradeoffs are invisible at the architectural level, but they become impossible to ignore during microarchitectural design.</p><p>This doesn&#8217;t mean algorithm designers need to become microarchitects. But keeping one eye on these microarchitectural constraints can lead to better architectural decisions from the very beginning. An algorithm that is designed with area, clock frequency, and power in mind is far more likely to become an efficient hardware implementation. </p><p>That is the essence of hardware-software co-design that we aimed to provide through this series of posts. Here are the previous parts:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;ea0fdb34-f2d4-44f7-89a2-13abc5d57a9b&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Mapping algorithms to custom silicon - Part 1&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:356074997,&quot;name&quot;:&quot;Avik De&quot;,&quot;bio&quot;:&quot;Research and commercialization of safe, efficient robotics. Adjunct Prof @ UPenn, Chief Science Officer @ Ghost Robotics.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0b85a25-ef27-433f-b83d-46a65f29535d_1909x1909.jpeg&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://www.avikde.me/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://www.avikde.me&quot;,&quot;primaryPublicationName&quot;:&quot;min{power}&quot;,&quot;primaryPublicationId&quot;:7287367}],&quot;post_date&quot;:&quot;2026-02-09T00:15:44.482Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f063e77-8634-49db-83c3-bab1a1dff047_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.net/p/mapping-algorithms-to-custom-silicon&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:187337389,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:33,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;9d027ff6-8225-49de-88a4-ea130ea28f7b&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Mapping Algorithms to Custom Silicon - Part 2&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:356074997,&quot;name&quot;:&quot;Avik De&quot;,&quot;bio&quot;:&quot;Research and commercialization of safe, efficient robotics. Adjunct Prof @ UPenn, Chief Science Officer @ Ghost Robotics.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0b85a25-ef27-433f-b83d-46a65f29535d_1909x1909.jpeg&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://www.avikde.me/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://www.avikde.me&quot;,&quot;primaryPublicationName&quot;:&quot;min{power}&quot;,&quot;primaryPublicationId&quot;:7287367}],&quot;post_date&quot;:&quot;2026-03-15T18:42:10.275Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6954c585-f006-40f3-a68b-78a4b1a7e52d_1536x948.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.net/p/mapping-algorithms-to-custom-silicon-efd&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:191037416,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:13,&quot;comment_count&quot;:2,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;5bd97bd8-6cd0-4330-b850-4e9114b38a58&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The Art of Architectural Analysis: Utilization, Throughput, Latency&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:356074997,&quot;name&quot;:&quot;Avik De&quot;,&quot;bio&quot;:&quot;Research and commercialization of safe, efficient robotics. Adjunct Prof @ UPenn, Chief Science Officer @ Ghost Robotics.&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e0b85a25-ef27-433f-b83d-46a65f29535d_1909x1909.jpeg&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://www.avikde.me/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://www.avikde.me&quot;,&quot;primaryPublicationName&quot;:&quot;min{power}&quot;,&quot;primaryPublicationId&quot;:7287367}],&quot;post_date&quot;:&quot;2026-03-30T00:48:09.475Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ab5082a-13dd-4059-b346-316fd31def8f_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.net/p/the-art-of-architectural-analysis&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:192536198,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:16,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p><span>Subscribe to </span><a href="https://chipinsights.net/">Chip Insights</a><span> and </span><a href="https://www.avikde.me/">min{power}</a><span> for more and let us know if there is something else you would like us to explore.</span></p><div><hr></div><p></p>]]></content:encoded></item><item><title><![CDATA[Introducing Context Caching]]></title><description><![CDATA[A new video format on Chip Insights]]></description><link>https://chipinsights.net/p/introducing-context-caching</link><guid isPermaLink="false">https://chipinsights.net/p/introducing-context-caching</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Mon, 22 Jun 2026 04:31:51 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/e5f85dd9-e589-441c-88c2-d54a3ddbe965_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Like a lot of you, I consume a lot of content related to semiconductors: research papers, industry news, company blogs, substacks, and social media posts - the list is endless.</p><p>But lately, I&#8217;ve gotten into this bad habit: I read something, I learn something new, and then I forget about it. I struggle to meaningfully retain information from whatever I consume. </p><p>That&#8217;s the motivation behind a new Chip Insights series I&#8217;m experimenting with: <strong>Context Caching</strong>.</p><p>The name comes from two worlds that I spend a lot of time thinking about. In AI, context determines what information is available to a model at any given moment. In computer architecture, caches keep the most useful data close at hand while less relevant information gets evicted.</p><p>Context Caching is my attempt to do the same thing for semiconductors. Every week, I read through semiconductor industry content and ask two questions:</p><ul><li><p>What idea deserves a place in my mental cache?</p></li><li><p>What idea is becoming less relevant and should be evicted?</p></li></ul><p>In this process, I hope to develop a mental model about the semiconductor industry (and hopefully provide some values to my viewers as well.)</p><p>I&#8217;m also using this as an opportunity to experiment with a new format: video.</p><p>Chip Insights started as a writing project, and long-form writing will continue to be the core of what I do. There&#8217;s no substitute for a detailed deep dive when you&#8217;re trying to understand an architecture, a technology trend, or a historical system.</p><p>But long-form writing, by its very nature, takes a lot of time for me to produce, and also has a significant barrier to entry for new readers. Sometimes an interesting observation, connection, or mental model can be communicated in a minute or two. Video feels like a more accessible format for those moments, and frankly, I&#8217;m curious to see if I enjoy creating it.</p><p>That&#8217;s really all I wanted to share in this post. Writing posts like this helps me convince myself about the &#8220;why&#8221; of doing something new, so thank you for being my audience in that process.</p><p>As I always say about my posts, this is very much an experiment, so I&#8217;d love your feedback about this new series. Here&#8217;s the link to the playlist: <a href="https://www.youtube.com/playlist?list=PLXF-OLVfH4Y54Rgi_heB2RQGwxmp1lYdO">https://www.youtube.com/playlist?list=PLXF-OLVfH4Y54Rgi_heB2RQGwxmp1lYdO</a></p><div id="youtube2-QORgn8oUaxA" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;QORgn8oUaxA&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/QORgn8oUaxA?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p></p>]]></content:encoded></item><item><title><![CDATA[Powering the Machine]]></title><description><![CDATA[Tales of a Time Travelling Computer Architect]]></description><link>https://chipinsights.net/p/powering-the-machine</link><guid isPermaLink="false">https://chipinsights.net/p/powering-the-machine</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Mon, 08 Jun 2026 04:49:51 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/d1c63d04-6e90-45eb-aa23-588fffe7b41b_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s) and are not investment advice.</strong></p><div><hr></div><p></p><p>In a recent post (well not so recent anymore, sorry for the long break), I presented my case for why the story of ENIAC is relevant in the context of today&#8217;s AI datacenter buildout. Check it out if you already haven&#8217;t.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;a5fe0225-7201-4c67-aa3a-cf2847c03746&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;ENIAC and the Workload Problem&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-03-09T05:31:06.672Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6f6da59c-dccd-4de4-9008-b5938c7293d2_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.net/p/eniac-and-the-workload-problem-part&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:190356256,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:12,&quot;comment_count&quot;:4,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>I left the post with two questions I wanted to explore:</p><ol><li><p>Which compute infrastructure can last the longest before we need a clean reset?</p></li><li><p>How effectively can we map future workloads onto the infrastructure we are building today?</p></li></ol><p>At first glance, these questions seem to be about chips, algorithms, and software. But history suggests that the answer often lies elsewhere. Every major shift in computing eventually collides with the physical realities of the world around it. How is it powered? How is it cooled? Where is it housed? What infrastructure must exist before the machine can deliver any useful work?</p><p>That is why I want to begin this exploration not with computation itself, but with the infrastructure that enables it.</p><p>In the 1940s, the builders of ENIAC were not just inventing a new computer. They were discovering what it meant to power, cool, and operate a machine unlike anything that had existed before. Today, as AI companies race to build ever larger datacenters, similar questions are once again coming into focus. The answers, however, may be very different.</p><p>To understand why, I&#8217;d like to tell a story.</p><div><hr></div><p>Setup complete after rewiring. Preparing for Test #23 for the evaluation of errors in axially symmetric supersonic airflow.</p><p>As Homer Spence wrote down these words in the ENIAC service log book, he felt a sense of relief, with a slight dose of anxiety. He had just fixed another loose blob of solder on the ENIAC&#8217;s Accumulator 14 panel, and was one step closer to running the ENIAC without errors.</p><p>The irony of the situation always made Homer chuckle. The fate of the world&#8217;s most complex electronic device, what many considered an &#8220;artificial brain&#8221;, relied on such craft work. But this craft work had been going on for a week now, and Homer really hoped this was it.</p><p>He held up the control box and started ENIAC while an operator monitored the panels. The machine slowly came alive. Thousands of vacuum tubes began to glow with a familiar orange hue, and the room grew noticeably warmer. Homer smiled. After weeks of troubleshooting, the glow was reassuring. It meant the machine was alive.</p><p>Then something felt wrong.</p><p>The brightness kept increasing.</p><p>The room became hotter.</p><p>Homer was sweating profusely as if he was standing in front of a raging forest fire. As his hand reached for the stop button on the control box, his entire field of view turned white.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!otgP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d810bd3-32cf-424c-80fd-79b026f3869d_1402x1122.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!otgP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d810bd3-32cf-424c-80fd-79b026f3869d_1402x1122.png 424w, https://substackcdn.com/image/fetch/$s_!otgP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d810bd3-32cf-424c-80fd-79b026f3869d_1402x1122.png 848w, https://substackcdn.com/image/fetch/$s_!otgP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d810bd3-32cf-424c-80fd-79b026f3869d_1402x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!otgP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d810bd3-32cf-424c-80fd-79b026f3869d_1402x1122.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!otgP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d810bd3-32cf-424c-80fd-79b026f3869d_1402x1122.png" width="1402" height="1122" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d810bd3-32cf-424c-80fd-79b026f3869d_1402x1122.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1122,&quot;width&quot;:1402,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3288867,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.net/i/201097809?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d810bd3-32cf-424c-80fd-79b026f3869d_1402x1122.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!otgP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d810bd3-32cf-424c-80fd-79b026f3869d_1402x1122.png 424w, https://substackcdn.com/image/fetch/$s_!otgP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d810bd3-32cf-424c-80fd-79b026f3869d_1402x1122.png 848w, https://substackcdn.com/image/fetch/$s_!otgP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d810bd3-32cf-424c-80fd-79b026f3869d_1402x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!otgP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d810bd3-32cf-424c-80fd-79b026f3869d_1402x1122.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The next time Homer opened his eyes, the bright white light was replaced by complete darkness. As he looked around, the familiar contours calmed him down. He was laying on the sofa-bed he had placed in his office for all the late nights he spent at work. Maybe he was completely exhausted and blacked out during the last test, and someone helped him to his office.</p><p>Homer checked for burn wounds and was relieved to find none. The concern was not irrational. ENIAC consumed more than 150 kilowatts during normal operation, and everyone on the project knew what that could mean. A fire the previous year had damaged one of the panels after insulation around a power wire ignited. Ever since, discussions about transformers, fuses, and power distribution had become almost as common as discussions about computation itself.</p><p>It was late, and Homer decided to head home. But first, he wanted to check that everything was fine in the ENIAC room.</p><p>He grabbed his notebook and opened the office door.</p><p>Homer expected to see the familiar rows of ENIAC panels stretching across the room.</p><p>Instead, he froze.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!j3-D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619a3183-3702-46c8-8efd-54fdd4d89ded_1402x1122.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j3-D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619a3183-3702-46c8-8efd-54fdd4d89ded_1402x1122.png 424w, https://substackcdn.com/image/fetch/$s_!j3-D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619a3183-3702-46c8-8efd-54fdd4d89ded_1402x1122.png 848w, https://substackcdn.com/image/fetch/$s_!j3-D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619a3183-3702-46c8-8efd-54fdd4d89ded_1402x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!j3-D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619a3183-3702-46c8-8efd-54fdd4d89ded_1402x1122.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!j3-D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619a3183-3702-46c8-8efd-54fdd4d89ded_1402x1122.png" width="1402" height="1122" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/619a3183-3702-46c8-8efd-54fdd4d89ded_1402x1122.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1122,&quot;width&quot;:1402,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2458167,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.net/i/201097809?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619a3183-3702-46c8-8efd-54fdd4d89ded_1402x1122.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!j3-D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619a3183-3702-46c8-8efd-54fdd4d89ded_1402x1122.png 424w, https://substackcdn.com/image/fetch/$s_!j3-D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619a3183-3702-46c8-8efd-54fdd4d89ded_1402x1122.png 848w, https://substackcdn.com/image/fetch/$s_!j3-D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619a3183-3702-46c8-8efd-54fdd4d89ded_1402x1122.png 1272w, https://substackcdn.com/image/fetch/$s_!j3-D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F619a3183-3702-46c8-8efd-54fdd4d89ded_1402x1122.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A modern datacenter is an engineering marvel. The space itself is nothing to write home about. White walls, bright lights, and a constant hum from equipment hidden somewhere beyond sight. Yet Homer immediately sensed that this was not a building designed for people.</p><p>The room was filled with tall rectangular cabinets arranged in perfectly ordered rows. (Each of these rectangular containers, not too dissimilar to a refrigerator, is called a server rack.) They stood shoulder to shoulder, forming long corridors that stretched farther than Homer could see. At first glance, they reminded him of ENIAC&#8217;s panels. But where ENIAC&#8217;s cabinets exposed switches, cables, and glowing vacuum tubes, these appeared sealed and anonymous.</p><p>From a distance, the fronts of the cabinets looked alive. Hundreds of tiny lights blinked continuously, each following a rhythm known only to the machine. Homer found himself staring at them. They reminded him of the warm orange glow of vacuum tubes, except these lights were colder, sharper, and far more numerous. A closer look revealed multiple rows, each holding a small rectangular box. (Each of these is called a server.) A thick bunch of cables could also be seen leaving the top of each server rack and disappearing into vents in the ceiling.</p><p>Homer Spence had seen nothing like this before. The ENIAC room he expected to find on the other side of the door had vanished, replaced by what appeared to be an endless maze of cabinets, cables, and blinking lights. For a brief moment, he wondered whether he was still dreaming. As he stood frozen in the middle of the aisle, a voice interrupted his thoughts.</p><p>&#8220;Hi there. Can I help you?&#8221;</p><p>Homer turned to find a bespectacled man wearing a black leather jacket. Still trying to make sense of his surroundings, Homer skipped the pleasantries.</p><p>&#8220;Where am I?&#8221;</p><p>The man, now smiling like a proud father, responded.</p><p>&#8220;You&#8217;re standing in one of the world&#8217;s largest AI datacenters.&#8221;</p><p>Homer looked around once more.</p><p>&#8220;This entire building?&#8221;</p><p>The man laughed.</p><p>&#8220;No. This is just one hall.&#8221;</p><p>For the first time that night, Homer felt genuinely unsettled.</p><p>Back at the Moore School, ENIAC occupied a single room. Every panel, every accumulator, every cable was within walking distance. Here, the machine seemed to extend far beyond the limits of his vision.</p><p>The man continued.</p><p>&#8220;This facility has a power capacity of five gigawatts. When fully populated, it will contain more than five hundred thousand Rubin Ultra processors. Right now, we&#8217;re using it to train one of the largest artificial intelligence models ever built.&#8221;</p><p>Homer barely registered anything after &#8220;five gigawatts&#8221;. The number echoed in his head.</p><p>When ENIAC was being designed, supplying 150 kilowatts of power had proven to be a formidable challenge.</p><p>&#8220;How is this facility powered?&#8221; Homer asked.</p><p>&#8220;Powering this facility is no mean feat. We started with utility power from the grid - the same thing that&#8217;s used in homes around the world. But the local grid simply cannot support our capacity yet. So we had to improvise and build our own power plants right next to this datacenter. They are mostly turbines powered by natural gas, which is often how the central grid is powered anyway. But we plan to move to renewable sources like solar and wind, and are also exploring nuclear power as an option.&#8221;</p><p>The detailed answer surprised him. When ENIAC was being designed, power infrastructure was largely a means to an end. The objective was to build the computer. Everything else followed from that. Only later did the team discover how difficult it would be to supply 150 kilowatts reliably to a machine filled with nearly eighteen thousand vacuum tubes.</p><p>The challenge became apparent when the time came to procure the transformers. Different parts of ENIAC operated at different voltage levels, ultimately requiring twenty-eight separate transformer units. Securing them proved far more difficult than anyone anticipated. General Electric could not deliver one soon due to other military commitments, so they paid three times as much to have Maguire Industries expedite the process. Maguire only shipped 4 out of the 28 units promised, and the rushed timelines also meant that certain specifications about the insulation were ignored. Eventually, the order was fulfilled by J. J. Nothelfer Winding Laboratories and the testing could only begin after a long wait.</p><p>Even then, the challenges were not over. The reliability of ENIAC depended heavily on the quality of the incoming power. Voltage fluctuations from the utility grid affected both the accuracy and lifetime of the vacuum tubes, forcing the engineers to develop custom equipment to stabilize the supply. Years later, they would go even further, installing a dynamo coupled to a massive flywheel to smooth out power disturbances. Yet even this system remained connected to the city&#8217;s electrical grid. The objective was never to generate power independently. It was simply to make utility power good enough for computation.</p><p>Homer realized that the ENIAC team had treated power as a dependency of the computer. The engineers of the future (where he was now convinced he was) appeared to be doing the opposite.</p><p>As the conversation continued, Homer became increasingly bothered by something. Standing in the ENIAC room for extended periods was an uncomfortable ordeal. ENIAC&#8217;s vacuum tubes, not too dissimilar to incandescent light bulbs, produced enormous amounts of heat and quickly transformed the room into something resembling a tropical summer afternoon. Yet he was standing in a facility that consumed over 30,000 times more power, and the air felt no different than an office building.</p><p>Where was all the heat going?</p><p>&#8220;How do you keep this place cool?&#8221; Homer finally asked.</p><p>The man smiled and led him down one of the narrow aisles between the server racks. At first glance, the racks appeared quiet and uneventful. But as Homer looked more closely, he noticed thick pipes running overhead. Some disappeared directly into the racks, while others connected to even larger pipes that stretched across the building.</p><p>The man pointed toward them.</p><p>&#8220;Air is simply not efficient enough at these power levels,&#8221; he explained. &#8220;Traditional datacenters for cloud storage and web hosting typically operated at power densities of five to ten kilowatts per rack, where air cooling was sufficient. These racks contain many high-performance processors operating together and can exceed one hundred kilowatts per rack. At that point, liquid cooling becomes unavoidable.&#8221;</p><p>He paused before continuing.</p><p>&#8220;But that&#8217;s only part of the story.&#8221;</p><p>Homer listened carefully.</p><p>&#8220;Building this cooling system was enormously expensive. The pipes, pumps, heat exchangers, cooling towers, and control systems cost far more than the cooling equipment found in traditional datacenters. But once the infrastructure is in place, liquid cooling removes heat much more efficiently. Over the lifetime of the facility, the operating costs can be significantly lower.&#8221;</p><p>Homer was unfamiliar with this way of thinking. During the development of ENIAC, cooling was never approached this way. The machine was cooled by moving air through the room because it worked and because it was inexpensive. If the room became too warm, you opened a vent, added another fan, or simply endured the discomfort. Most of the cost was incurred only when the machine was operating - which was not very common due to various other limitations.</p><p>Here, the philosophy seemed reversed. The engineers had spent enormous sums of money even before a single calculation was performed. This facility had been designed around an expectation that workloads would run continuously. This would justify the initial costs.</p><div><hr></div><p>For several minutes, neither man spoke. Homer couldn&#8217;t help but be impressed by everything he heard. He had spent many nights with the ENIAC team worrying about the challenges of power delivery, cooling, and maintenance. This often slowed the progress of making ENIAC better at the computations it was built for.</p><p>By planning for power and cooling years in advance, these engineers were building computers that could scale far beyond anything imaginable in ENIAC&#8217;s era. But Homer couldn&#8217;t shake a lingering thought. Every transformer ordered for ENIAC had a purpose. Every vacuum tube installed would eventually perform a calculation. The luxury of building infrastructure years ahead of demand did not exist.</p><p>He turned to the man with the question that started everything.</p><p>&#8220;Where am I?&#8221;</p><div><hr></div><h1><strong>A few concrete takeaways</strong></h1><p>I have written this post in an experimental format - some of you may like it, others won&#8217;t. (I&#8217;m happy to hear from you in the comments either way.)</p><p>But I want to explicitly call out a few lessons that stood out for me:</p><h2><strong>1. Compute does not scale alone</strong></h2><p>Power and cooling are first-order design variables. It is becoming increasingly difficult to separate the computer architecture from the infrastructure. A specific architecture in the datacenter exists due to its supporting infrastructure, and vice-versa.</p><h2><strong>2. Infrastructure choices are really workload assumptions in disguise.</strong></h2><p>ENIAC&#8217;s infrastructure was built around a machine that spent much of its life idle, being debugged, rewired, or waiting for the next problem. Most of the cost was incurred when the machine was actually running.</p><p>Modern AI datacenters are built around the opposite assumption. Training workloads can keep hundreds of thousands of processors busy at near 100% utilization for weeks or months at a time - this has made it seem more rational to spend enormous amounts on power delivery and liquid cooling infrastructure upfront.</p><h2><strong>3. The bottleneck is shifting from execution to foresight.</strong></h2><p>ENIAC engineers had to solve engineering problems in real time. Modern datacenter builders increasingly have to solve prediction problems: how much power, cooling, and demand will exist years before workloads arrive.</p><div><hr></div><p>That concludes Part 2 of this series. If you like what I just said, follow along for upcoming posts in this series by subscribing below:</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h1>References</h1><p>My primary reference for this study is the book &#8220;ENIAC in Action&#8221; which goes into an impressive level of detail about many aspects of this computer.</p><p>Here are some other references I used for this post:</p><ul><li><p><a href="https://blogs.microsoft.com/blog/2025/09/18/inside-the-worlds-most-powerful-ai-datacenter/">Inside the world&#8217;s most powerful AI datacenter - The Official Microsoft Blog</a></p></li><li><p><a href="https://techcrunch.com/2025/07/14/mark-zuckerberg-says-meta-is-building-a-5gw-ai-data-center/?utm_source=chatgpt.com">Mark Zuckerberg says Meta is building a 5GW AI data center | TechCrunch</a></p></li><li><p><a href="https://newsletter.semianalysis.com/p/how-ai-labs-are-solving-the-power">(2) How AI Labs Are Solving the Power Crisis: The Onsite Gas Deep Dive</a></p></li><li><p><a href="https://www.mdpi.com/1996-1073/19/3/722">Power for AI Data Centers: Energy Demand, Grid Impacts, Challenges and Perspectives</a></p></li></ul><div><hr></div><p></p>]]></content:encoded></item><item><title><![CDATA[The Art of Architectural Analysis: Utilization, Throughput, Latency]]></title><description><![CDATA[Putting TinyXPU Under the Microscope]]></description><link>https://chipinsights.net/p/the-art-of-architectural-analysis</link><guid isPermaLink="false">https://chipinsights.net/p/the-art-of-architectural-analysis</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Mon, 30 Mar 2026 00:48:09 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/9ab5082a-13dd-4059-b346-316fd31def8f_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s) and are not investment advice.</strong></p><div><hr></div><p>In this post, we introduce the art of architectural analysis through three key concepts and use them to evaluate the <a href="https://github.com/avikde/tiny-xpu">TinyXPU architecture</a> - a systolic array based 2D matrix multiplication accelerator we designed to study the evolving trends in custom silicon. The ability to analyze architectures is becoming an increasingly valuable skill - especially in a world of rapidly growing custom architectures. So, whether you&#8217;re a software or hardware engineer, you will benefit from reading about these concepts.</p><p>If you are new here, this post is part of our ongoing series on custom accelerators. In the first part of this series, we motivated the need for a bridge between a software engineer (Alice) to a new architecture developed by a hardware engineer (Harry).</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;0fb3b5a2-59a2-46ab-8a9f-2ec6faf33829&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Mapping algorithms to custom silicon - Part 1&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:356074997,&quot;name&quot;:&quot;Avik De&quot;,&quot;bio&quot;:&quot;Safe, efficient robotics &amp; AI -- Robotics Ph.D. and founder&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!E5et!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30589b07-e0a0-4de5-8997-78db1ed3f65b_1290x1290.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://www.avikde.me/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://www.avikde.me&quot;,&quot;primaryPublicationName&quot;:&quot;min{power}&quot;,&quot;primaryPublicationId&quot;:7287367}],&quot;post_date&quot;:&quot;2026-02-09T00:15:44.482Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f063e77-8634-49db-83c3-bab1a1dff047_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.net/p/mapping-algorithms-to-custom-silicon&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:187337389,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:26,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>In the second part, we introduced our <a href="https://github.com/avikde/tiny-xpu">TinyXPU project</a> - a practical demonstration of the hardware-software bridge.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;65cbb397-c80a-46e9-9cde-28b8681c5da9&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Mapping Algorithms to Custom Silicon - Part 2&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:356074997,&quot;name&quot;:&quot;Avik De&quot;,&quot;bio&quot;:&quot;Safe, efficient robotics &amp; AI -- Robotics Ph.D. and founder&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!E5et!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30589b07-e0a0-4de5-8997-78db1ed3f65b_1290x1290.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://www.avikde.me/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://www.avikde.me&quot;,&quot;primaryPublicationName&quot;:&quot;min{power}&quot;,&quot;primaryPublicationId&quot;:7287367}],&quot;post_date&quot;:&quot;2026-03-15T18:42:10.275Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6954c585-f006-40f3-a68b-78a4b1a7e52d_1536x948.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.net/p/mapping-algorithms-to-custom-silicon-efd&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:191037416,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:10,&quot;comment_count&quot;:2,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>While we recommend reading the first two parts, it&#8217;s not a prerequisite as this post takes a slightly different direction. </p><p></p><h1>Why does Architectural Analysis matter?</h1><p>So far, we&#8217;ve focused on how Alice and Harry can work together more effectively. Using a framework like ONNX, we showed that Alice can now target many different architectures (and many different Harrys) with relative ease.</p><p>This naturally leads to the next question: <strong>How does Alice decide which Harry to choose?</strong></p><p>At first glance, the answer seems simple: <strong>Alice would pick the &#8220;best architecture&#8221; for her algorithm. </strong>But what does &#8220;best&#8221; actually mean?</p><p>From Alice&#8217;s perspective, it could mean:</p><ul><li><p>I want my algorithm to finish faster</p></li><li><p>I want to start seeing outputs as early as possible</p></li><li><p>I want it to fit within a smartwatch, a robot, or a datacenter</p></li></ul><p>From Harry&#8217;s perspective, the architecture might be &#8220;best&#8221; because:</p><ul><li><p>It reduces the number of arithmetic operations or data movement</p></li><li><p>It runs at a higher clock frequency than competitors</p></li><li><p>It occupies less chip area than other implementations</p></li></ul><p>Clearly, Alice and Harry are both trying to communicate. But they are speaking completely different languages. If Harry wants to convince Alice to use his architecture, and Alice wants to make the right choice, they need a shared vocabulary for analyzing architectures. This is where understanding concepts in architectural analysis becomes important.</p><div><hr></div><p></p><h1><strong>The Cooking Analogy</strong></h1><p>To build intuition for the ideas in this post, we&#8217;ll use a simple analogy: cooking.</p><p>More specifically:</p><ul><li><p><strong>The Algorithm:</strong> Boiling eggs</p></li><li><p><strong>The Hardware:</strong> A kitchen stove</p></li></ul><p>Boiling eggs is simple, but it can be done in many different ways.</p><p>You might cook eggs one at a time or in batches. You might prioritize getting the first egg ready as quickly as possible or finishing all of them as fast as you can.</p><p>Similarly, each stove is different. One might have more burners. Another might heat up faster. A third might support a larger pot but heats up slower.</p><p>This is not too different from the problem Alice and Harry are trying to solve.</p><blockquote><p>For clarity, all future references to this analogy are displayed as quotes.</p></blockquote><div><hr></div><p></p><h1><strong>Recap: The TinyXPU Terminology</strong></h1><p>We briefly introduced the parameters used in the <a href="https://github.com/avikde/tiny-xpu">TinyXPU project</a> and the matrix sizes in <a href="https://chipinsights.net/i/191037416/the-hardware-architecture">part 2 of our series of posts</a>. Here&#8217;s a quick recap of variables that will be used in the rest of the post.</p><ul><li><p>The Input Matrix X has M rows and K columns.</p></li><li><p>The Weight Matrix W has K rows and N columns.</p></li><li><p>The PEs are arranged as a 2D array with HW_ROWS rows and HW_COLS columns. In this post, we will only explore the 16*16 configuration.</p></li></ul><div><hr></div><p></p><h1>Concept 1: Hardware Utilization</h1><h2>Quick Takes</h2><h3>What is it?</h3><p>How much of the hardware is being used to produce useful output.</p><blockquote><p>In our cooking analogy, if your kitchen stove has 4 burners but you only use 3 simultaneously, the utilization is 75%.</p></blockquote><h3>Why does it matter?</h3><p>High utilization means more of the hardware is active at the same time. In general, this implies that more sub-operations (additions, multiplications, data movement) are happening in parallel.</p><blockquote><p>If more burners on your stove are on, it means more eggs are being boiled.</p></blockquote><h3>When does it not matter as much?</h3><p>In general-purpose architectures like CPUs and GPUs, the hardware is almost never fully utilized. In these systems, overall utilization matters less than the utilization of specific components (such as ALUs).</p><p>However, an accelerator is designed for a very specific purpose. It is therefore wasteful to build hardware that cannot be effectively utilized. In most accelerators, high utilization is close to a non-negotiable.</p><blockquote><p>Having low utilization is like using a 4-burner stove when you only need to boil one egg.</p></blockquote><div><hr></div><h2>PE Utilization in TinyXPU</h2><p>In TinyXPU, the size of the systolic array is fixed in hardware (16&#215;16 in our case), but the matrices we run on it are not. This mismatch is the primary reason utilization becomes an important metric.</p><p>The goal is simple: <strong>keep as many PEs busy as possible for as long as possible.</strong></p><blockquote><p>In our cooking analogy, this is equivalent to keeping all burners active. If you only have enough eggs for two burners, the remaining burners sit idle, even though the stove could do more work.</p></blockquote><h3>Where does underutilization come from?</h3><h4>1. When the workload is smaller than the array</h4><p>If the weight matrix is smaller than the systolic array, for example fewer than 16 rows or columns, some PEs will not map to useful computation. To maintain correctness, we typically pad the matrix with zeros. These PEs still perform MAC operations, but their outputs are discarded.</p><blockquote><p>This is like turning on burners with empty pots. Heat is being generated, but no eggs are being cooked.</p></blockquote><h4>2. When the workload is larger than the array</h4><p>If the matrix is larger than the array, we process it in tiles. While tiling allows us to handle arbitrarily large matrices, the last tile is often smaller than the array, leading again to underutilization. We will skip the details of tiling in this post, but this edge effect is quite common in practice.</p><h3>Startup overhead: why utilization is not 100%</h3><p>Even when the workload maps perfectly to the array, utilization is not immediately 100%. This is because not all cycles contribute to useful work. At the start of execution, the systolic array needs a few cycles before all PEs begin performing meaningful computations. Similarly, toward the end, some PEs become idle as the computation completes.</p><p>From a utilization perspective, these cycles are overhead. The hardware is active, but not all of it is doing useful work.</p><blockquote><p>Before you can boil eggs, you need to fill the pot and wait for the water to heat up. During this time, the stove is on, but no eggs are being cooked.</p></blockquote><p>Considering this overhead, we define utilization as:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{PE Utilization} = \\frac{M}{M + \\text{pipeline latency}} = \\frac{M}{M + HW\\_ROWS + N - 2}&quot;,&quot;id&quot;:&quot;QNRZVWRMGT&quot;}" data-component-name="LatexBlockToDOM"></div><p></p><p>This shows that utilization improves as the workload grows, because the fixed overhead is amortized over more useful work.</p><h3>PE Utilization vs Batch Size</h3><p>The impact of matrix sizes on PE utilization is shown in this plot:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GjWG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10588ab4-72f0-4055-a125-143a1e21b208_671x516.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GjWG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10588ab4-72f0-4055-a125-143a1e21b208_671x516.png 424w, https://substackcdn.com/image/fetch/$s_!GjWG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10588ab4-72f0-4055-a125-143a1e21b208_671x516.png 848w, https://substackcdn.com/image/fetch/$s_!GjWG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10588ab4-72f0-4055-a125-143a1e21b208_671x516.png 1272w, https://substackcdn.com/image/fetch/$s_!GjWG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10588ab4-72f0-4055-a125-143a1e21b208_671x516.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GjWG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10588ab4-72f0-4055-a125-143a1e21b208_671x516.png" width="671" height="516" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/10588ab4-72f0-4055-a125-143a1e21b208_671x516.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:516,&quot;width&quot;:671,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:112380,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.net/i/192536198?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10588ab4-72f0-4055-a125-143a1e21b208_671x516.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GjWG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10588ab4-72f0-4055-a125-143a1e21b208_671x516.png 424w, https://substackcdn.com/image/fetch/$s_!GjWG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10588ab4-72f0-4055-a125-143a1e21b208_671x516.png 848w, https://substackcdn.com/image/fetch/$s_!GjWG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10588ab4-72f0-4055-a125-143a1e21b208_671x516.png 1272w, https://substackcdn.com/image/fetch/$s_!GjWG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10588ab4-72f0-4055-a125-143a1e21b208_671x516.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Key takeaways:</strong></p><ul><li><p>The 16&#215;16 case asymptotically approaches 100% utilization, as the pipeline overhead becomes negligible compared to useful work.</p></li><li><p>The other shapes (4&#215;16, 8&#215;8, 16&#215;4) all have 64 total weights, and therefore can only utilize 64 out of 256 PEs, which corresponds to a maximum of 25% utilization.</p></li><li><p>For small values of M, utilization is low across all configurations due to pipeline overhead.</p></li><li><p>As M increases, all curves improve, but they plateau at different levels depending on how well the workload matches the hardware.</p></li></ul><p>Utilization is a useful analytical metric. It tells us how much of the hardware is actively doing useful work and highlights inefficiencies due to pipeline overhead.</p><div><hr></div><h2>How architects use this metric in real chips</h2><p>In real chips, utilization is rarely exposed as a single number. Instead, architects infer it using performance counters, stall analysis, and activity factors across compute units. A classic example is <a href="https://arxiv.org/pdf/1704.04760">the TPU v1 paper</a>, where the authors show that achieving high utilization of the 256&#215;256 systolic array was critical to performance. They analyze how different workloads map to the array and highlight cases where underutilization leads to significant efficiency loss.</p><div><hr></div><p></p><h1>Concept 2: Throughput</h1><h2>Quick Takes</h2><h3>What is it?</h3><p>The number of useful operations completed per unit time.</p><blockquote><p>In our cooking analogy, this is the number of eggs you can boil per hour.</p></blockquote><h3>Why does it matter?</h3><p>Throughput directly determines how fast an algorithm completes. If more operations are finished per unit time, the total execution time is lower.</p><h3>When does it not matter as much?</h3><p>In many systems, overall throughput is limited by the slowest component. Even if one part of the system achieves very high throughput, it may not translate into end-to-end performance improvements.</p><p>Custom accelerators are typically designed to maximize throughput. However, understanding what limits that throughput is just as important.</p><div><hr></div><h2>From Throughput to the Roofline Model</h2><p>So far, we have treated throughput as a single number. In reality, it is constrained by two fundamental limits:</p><ul><li><p>How fast the hardware can compute</p></li><li><p>How fast data can be moved to and from the hardware</p></li></ul><p>The roofline model captures both of these limits in a single diagram, which is why it is a better representation of our throughput analysis.</p><blockquote><p>In our cooking analogy, the number of eggs you can boil per hour is not just determined by how many burners your stove has. It is also limited by how quickly you can bring water, eggs, and utensils to the stove. If you have many burners but can only carry a few eggs at a time, most burners will sit idle. On the other hand, if you can supply eggs very quickly but only have a small stove, the burners themselves become the bottleneck.</p></blockquote><div><hr></div><h2>TinyXPU Roofline Model</h2><h3>Vertical Axis: Peak Throughput</h3><p>For a systolic array, if the workload fully utilizes the array, the peak compute throughput is:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{Throughput}_{\\text{max}} = R \\times C&quot;,&quot;id&quot;:&quot;QTAXMYUDWS&quot;}" data-component-name="LatexBlockToDOM"></div><p></p><p>For our 16&#215;16 array, this gives a peak of <strong>256 MACs per cycle</strong>. However, if the weight matrix is smaller than the array, only K&#215;N PEs perform useful work. This represents the vertical axis of our roofline model.</p><h3>Horizontal Axis: Arithmetic intensity</h3><p>Arithmetic intensity is the number of MACs executed for each byte of data read from the memory. For our matrix multiplication example:</p><ul><li><p>Weights are loaded once: K&#215;N bytes (we ignore this as batch size is usually large)</p></li><li><p>Inputs contribute: M&#215;K bytes</p></li><li><p>Outputs contribute M&#215;N values, each 4 bytes (we assume output values are 32-bit integers)</p></li></ul><p>This gives:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{Total Bytes} = M \\times (K + 4N)&quot;,&quot;id&quot;:&quot;DHWBOGTGKK&quot;}" data-component-name="LatexBlockToDOM"></div><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{Total MACs} = M \\times K \\times N&quot;,&quot;id&quot;:&quot;GNRMRHNQLY&quot;}" data-component-name="LatexBlockToDOM"></div><p></p><p>So, the arithmetic intensity (AI) becomes:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{AI} = \\frac{K \\times N}{K + 4N}&quot;,&quot;id&quot;:&quot;HAXIYXLOKK&quot;}" data-component-name="LatexBlockToDOM"></div><p></p><h3>Roofline Plot</h3><p>Based on the definitions above, the roofline plot for TinyXPU is shown here:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wyjK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a22cf2f-cba0-4900-ad5d-ad0b021f7880_680x519.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wyjK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a22cf2f-cba0-4900-ad5d-ad0b021f7880_680x519.png 424w, https://substackcdn.com/image/fetch/$s_!wyjK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a22cf2f-cba0-4900-ad5d-ad0b021f7880_680x519.png 848w, https://substackcdn.com/image/fetch/$s_!wyjK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a22cf2f-cba0-4900-ad5d-ad0b021f7880_680x519.png 1272w, https://substackcdn.com/image/fetch/$s_!wyjK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a22cf2f-cba0-4900-ad5d-ad0b021f7880_680x519.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wyjK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a22cf2f-cba0-4900-ad5d-ad0b021f7880_680x519.png" width="680" height="519" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a22cf2f-cba0-4900-ad5d-ad0b021f7880_680x519.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:519,&quot;width&quot;:680,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:157445,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.net/i/192536198?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a22cf2f-cba0-4900-ad5d-ad0b021f7880_680x519.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wyjK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a22cf2f-cba0-4900-ad5d-ad0b021f7880_680x519.png 424w, https://substackcdn.com/image/fetch/$s_!wyjK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a22cf2f-cba0-4900-ad5d-ad0b021f7880_680x519.png 848w, https://substackcdn.com/image/fetch/$s_!wyjK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a22cf2f-cba0-4900-ad5d-ad0b021f7880_680x519.png 1272w, https://substackcdn.com/image/fetch/$s_!wyjK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a22cf2f-cba0-4900-ad5d-ad0b021f7880_680x519.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Each point on the plot represents a specific workload running on the hardware. The <strong>horizontal axis</strong> is arithmetic intensity and the peak throughput. The roofline plot also includes two lines which are important:</p><ul><li><p>The <strong>horizontal line</strong> represents the peak compute capability of the hardware</p></li><li><p>The <strong>sloped lines</strong> represent memory bandwidth limits</p></li></ul><p>Several insights emerge from this single diagram:</p><ul><li><p>If the weight matrix is smaller than the array, peak compute throughput cannot be reached due to underutilization (this aligns with our earlier analysis on PE utilization.)</p></li><li><p>Among shapes with the same number of weights, taller matrices perform better than wider ones. This happens for two reasons:</p><ul><li><p>Idle rows waste more hardware than idle columns</p></li><li><p>Output traffic scales with N, and outputs are larger in size</p></li></ul></li></ul><ul><li><p>The 4&#215;16 shape is more bandwidth-limited than 16&#215;4, since it produces more output data</p></li><li><p>Most configurations in this example are memory-bound unless bandwidth exceeds 64 bytes per cycle (which is <a href="https://www.avikde.me/p/cache-effects-in-object-oriented">rare in CPU L1 caches as seen from this post on min{power}</a>)</p></li></ul><p>Using a roofline plot, it becomes clear how throughput can be maximized:</p><ul><li><p>Move upward by increasing compute efficiency (Larger batch sizes)</p></li><li><p>Move right by increasing arithmetic intensity (Taller matrices)</p></li></ul><p>By being in the top right, we get the best throughput.</p><div><hr></div><h2>How architects use this metric in real chips</h2><p>The <a href="https://people.eecs.berkeley.edu/~kubitron/cs252/handouts/papers/RooflineVyNoYellow.pdf">roofline model</a> is one of the most widely used tools for reasoning about throughput limits. Modern accelerators frequently use roofline-style analysis. For example, NVIDIA presents roofline-inspired performance characterizations in its architecture whitepapers, (For example, <a href="https://images.nvidia.com/aem-dam/en-zz/Solutions/data-center/nvidia-ampere-architecture-whitepaper.pdf">NVIDIA A100 Architecture</a>) where compute throughput and memory bandwidth limits are analyzed together.</p><p>In fact, the roofline plot we obtained for TinyXPU is not too different from the plot shared in the <a href="https://arxiv.org/pdf/1704.04760">TPU v1 paper</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PVLb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd53d46ac-b71f-48fc-8fb9-0002f8d61555_1148x980.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PVLb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd53d46ac-b71f-48fc-8fb9-0002f8d61555_1148x980.png 424w, https://substackcdn.com/image/fetch/$s_!PVLb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd53d46ac-b71f-48fc-8fb9-0002f8d61555_1148x980.png 848w, https://substackcdn.com/image/fetch/$s_!PVLb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd53d46ac-b71f-48fc-8fb9-0002f8d61555_1148x980.png 1272w, https://substackcdn.com/image/fetch/$s_!PVLb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd53d46ac-b71f-48fc-8fb9-0002f8d61555_1148x980.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PVLb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd53d46ac-b71f-48fc-8fb9-0002f8d61555_1148x980.png" width="1148" height="980" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d53d46ac-b71f-48fc-8fb9-0002f8d61555_1148x980.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:980,&quot;width&quot;:1148,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:457532,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.net/i/192536198?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F062ab955-09e2-4f91-a17a-d23082fe0e20_1148x980.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PVLb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd53d46ac-b71f-48fc-8fb9-0002f8d61555_1148x980.png 424w, https://substackcdn.com/image/fetch/$s_!PVLb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd53d46ac-b71f-48fc-8fb9-0002f8d61555_1148x980.png 848w, https://substackcdn.com/image/fetch/$s_!PVLb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd53d46ac-b71f-48fc-8fb9-0002f8d61555_1148x980.png 1272w, https://substackcdn.com/image/fetch/$s_!PVLb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd53d46ac-b71f-48fc-8fb9-0002f8d61555_1148x980.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p style="text-align: center;">Source: <a href="https://arxiv.org/pdf/1704.04760">https://arxiv.org/pdf/1704.04760</a></p><div><hr></div><p></p><h1>Concept 3: Latency</h1><h2>Quick Takes</h2><h3>What is it?</h3><p>Latency is the time it takes to produce the first useful output after the first input is provided.</p><blockquote><p>In our cooking analogy, this is the time between turning on the stove and having the first boiled egg ready.</p></blockquote><h3>Why does it matter?</h3><p>Latency matters when partial results are useful before the entire computation is complete. For example, modern LLM-based systems stream outputs token by token. As soon as the first token is ready, it is displayed to the user. In such systems, latency directly impacts user experience.</p><h3>When does it not matter?</h3><p>Latency matters less when the full output is required before any further computation can proceed. For example, in a classification task such as predicting whether an image contains a cat or a dog, the final decision can only be made after all computations are complete. In such cases, throughput is often the more relevant metric.</p><div><hr></div><h2>Latency in TinyXPU</h2><p>To analyze latency, we first need to define what we mean by the &#8220;first output.&#8221; In matrix multiplication, we define the first output as the result corresponding to the <strong>first row of the input matrix X</strong>.</p><p>For readers familiar with LLMs, consider the computation of the query matrix:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{Q} = X \\times W_q&quot;,&quot;id&quot;:&quot;TARRPUEFVL&quot;}" data-component-name="LatexBlockToDOM"></div><p></p><p>Each row of X corresponds to the embedding of an input token. The first row of Q therefore corresponds to the first token. The time taken to produce this row is a key component of <strong>time to first token (TTFT)</strong>.</p><h3>Where does latency come from?</h3><p>Even if the input matrix X has many rows, the first result that emerges from the systolic array corresponds to the first row. This delay is caused by the time it takes for data to propagate through the array.</p><blockquote><p>In the cooking analogy, this is like the time it takes to heat the water and cook the first egg. Even if you plan to cook many eggs, the first one still takes the same amount of time.</p></blockquote><p>For a weight-stationary systolic array, the latency to first output is:</p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\text{Latency} = \\text{HW_ROWS} + \\text{N} - \\text{2}&quot;,&quot;id&quot;:&quot;QUMWTMEIKA&quot;}" data-component-name="LatexBlockToDOM"></div><p></p><p>Essentially, the latency only depends on the number of rows in the hardware array and the number of output columns. It is independent of the batch size M.</p><h2>Throughput vs Latency Tradeoff</h2><p>The plot below shows throughput on the vertical axis and latency on the horizontal axis for different matrix shapes. Each curve corresponds to a fixed number of rows K, while varying the number of columns N. The batch size (M) is fixed to 256. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bgk-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2083951-dfeb-474c-b8b8-c3bac97adbba_629x518.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bgk-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2083951-dfeb-474c-b8b8-c3bac97adbba_629x518.png 424w, https://substackcdn.com/image/fetch/$s_!bgk-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2083951-dfeb-474c-b8b8-c3bac97adbba_629x518.png 848w, https://substackcdn.com/image/fetch/$s_!bgk-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2083951-dfeb-474c-b8b8-c3bac97adbba_629x518.png 1272w, https://substackcdn.com/image/fetch/$s_!bgk-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2083951-dfeb-474c-b8b8-c3bac97adbba_629x518.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bgk-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2083951-dfeb-474c-b8b8-c3bac97adbba_629x518.png" width="629" height="518" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e2083951-dfeb-474c-b8b8-c3bac97adbba_629x518.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:518,&quot;width&quot;:629,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:108050,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.net/i/192536198?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2083951-dfeb-474c-b8b8-c3bac97adbba_629x518.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bgk-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2083951-dfeb-474c-b8b8-c3bac97adbba_629x518.png 424w, https://substackcdn.com/image/fetch/$s_!bgk-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2083951-dfeb-474c-b8b8-c3bac97adbba_629x518.png 848w, https://substackcdn.com/image/fetch/$s_!bgk-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2083951-dfeb-474c-b8b8-c3bac97adbba_629x518.png 1272w, https://substackcdn.com/image/fetch/$s_!bgk-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2083951-dfeb-474c-b8b8-c3bac97adbba_629x518.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This plot clearly shows the inherent tradeoff between throughput and latency.</p><ul><li><p>Increasing N increases throughput, since more PEs are active</p></li><li><p>However, increasing N also increases latency</p></li></ul><p>This means designs with the same total compute capacity (total number of PEs) can have very different latency and throughput characteristics. If you want fast response to the first output, you prefer smaller matrices with lower latency. If you want higher overall throughput, you prefer larger matrices that utilize more of the hardware. </p><blockquote><p>In the cooking analogy, this is like choosing between boiling one egg quickly or boiling many eggs at once. Using a larger pot allows you to cook more eggs simultaneously, but it may take longer before the first one is ready.</p></blockquote><p>This throughput-latency tradeoffs starts to become even more interesting in accelerator designs with pipelined PEs to achieve higher clock frequencies, and full-system implementations with non-zero instruction and memory latencies - topics we will explore in future posts.</p><div><hr></div><h2>How architects use this metric in real chips</h2><p>Latency is typically modeled using a combination of analytical models and cycle-accurate simulations that capture pipeline depth and data movement delays. For example, Google discusses latency-sensitive inference in the <a href="https://edge.seas.harvard.edu/sites/g/files/omnuum6351/files/edge/files/mlperf_inference.pdf">MLPerf Inference Benchmark</a>, which includes metrics like time-to-first-token and tail latency.</p><div><hr></div><p></p><p>As you can see from the discussion, architectural analysis is as much art as it is science. It&#8217;s more like appreciating a painting than reading a book. An experienced art connoisseur can analyze a painting at a glance. But that ability comes from a shared understanding of color, brushwork, and design principles between the artist and the observer.</p><p>This post aims to build a mental model for architectural analysis, using our basic TinyXPU implementation as a concrete example. As we continue to expand TinyXPU by adding activation functions, mapping it to an FPGA, and <a href="https://www.avikde.me/p/systolic-arrays-for-general-robotics">exploring unorthodox systolic networks</a>, we&#8217;ll build on these ideas and introduce new ones along the way.</p><p>Subscribe to <a href="https://chipinsights.net/">Chip Insights</a> and <a href="https://www.avikde.me/">min{power}</a> to follow along as we do that.</p><div><hr></div><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Mapping Algorithms to Custom Silicon - Part 2]]></title><description><![CDATA[Running matrix multiplication on a TPU-style architecture]]></description><link>https://chipinsights.net/p/mapping-algorithms-to-custom-silicon-efd</link><guid isPermaLink="false">https://chipinsights.net/p/mapping-algorithms-to-custom-silicon-efd</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Sun, 15 Mar 2026 18:42:10 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6954c585-f006-40f3-a68b-78a4b1a7e52d_1536x948.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s) and are not investment advice.</strong></p><div><hr></div><p>This post is the second in our series on custom hardware accelerators. In part 1, we introduced the hardware-software interface problem that has kept the two domains as separate islands and limited co-innovation. We also introduced two approaches to overcome this gap. If you haven&#8217;t done so already, check out that post here:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;e4718d2e-cbd6-4479-b3c4-3ca0f5a168b1&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Mapping algorithms to custom silicon - Part 1&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:356074997,&quot;name&quot;:&quot;Avik De&quot;,&quot;bio&quot;:&quot;Safe, efficient robotics &amp; AI -- Robotics Ph.D. and founder&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!E5et!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30589b07-e0a0-4de5-8997-78db1ed3f65b_1290x1290.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://www.avikde.me/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://www.avikde.me&quot;,&quot;primaryPublicationName&quot;:&quot;min{power}&quot;,&quot;primaryPublicationId&quot;:7287367}],&quot;post_date&quot;:&quot;2026-02-09T00:15:44.482Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f063e77-8634-49db-83c3-bab1a1dff047_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.net/p/mapping-algorithms-to-custom-silicon&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:187337389,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:22,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>In this part, we present <a href="https://github.com/avikde/tiny-xpu">TinyXPU, an open-source, extensible project</a> we are building in conjunction with this series of posts. In this post, we focus on two pieces:</p><ul><li><p>The hardware architecture of TinyXPU</p></li><li><p>The software interface that allows it to run ONNX models</p></li></ul><p>The goal of this project is to show what the bridge between software and hardware looks like in practice, and is a stepping stone to the architectural analysis we have planned in upcoming posts.</p><div><hr></div><p></p><h1><strong>Why Matrix Multiplication</strong></h1><p>The first important decision is to pick the right algorithm to study. We picked Matrix Multiplication, primarily because of its widespread use in many of today&#8217;s most important software domains. Here are a few representative examples:</p><ul><li><p><a href="https://docs.pytorch.org/docs/stable/generated/torch.nn.Linear.html">Deep Learning</a>: Neural network layers compute weighted sums using matrix multiplications.</p></li><li><p><a href="https://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms">Robotics</a>: BLAS, in particular the Level 3 GEMM routine, is used in many robotics libraries</p></li><li><p><a href="https://docs.vulkan.org/features/latest/features/proposals/VK_NV_cooperative_vector.html">Computer Graphics</a>: Shaders use matrix math for transformations; modern APIs like Vulkan have started exposing this directly.</p></li></ul><p>Matrix multiplication also stresses both compute throughput (number of arithmetic operations completed per second) and memory bandwidth (the number of bits read from memory per second). This helps us identify both compute and memory bottlenecks - a topic we will explore in future posts.</p><div><hr></div><p></p><h1><strong>Why build an accelerator from scratch</strong></h1><p>We are not the first to focus on matrix multiplication, and we certainly won&#8217;t be the last. As <a href="https://chipinsights.net/p/the-alphabet-soup-of-processors">mentioned in an earlier post</a>, there has been an explosion of &#8220;processing units&#8221; like TPUs and NPUs that, at their core, accelerate matrix multiplication. In fact, modern GPUs and even CPUs now support <a href="https://developer.arm.com/community/arm-community-blogs/b/architectures-and-processors-blog/posts/arm-scalable-matrix-extension-introduction">matrix multiplication extensions</a> and dedicated units to handle the operation efficiently. There are also a number of &#8220;tinyTPU&#8221; projects out there with an architecture very similar to the one we will be demonstrating. (Some examples are <a href="https://github.com/tiny-tpu-v2/tiny-tpu/tree/main">tiny-tpu-v2/tiny-tpu</a> and <a href="https://github.com/Alanma23/tinytinyTPU">Alanma23/tinytinyTPU</a>.) So before we go any further, we wanted to explain why we are doing this from scratch.</p><p>Our main motivation is that building from scratch allows us to understand (and hopefully explain) everything we are doing from first principles. As you will see, we are only starting with two simple SystemVerilog files. This way, we do not have to make any assumptions or shoot in the dark to understand architectural decisions. This also allows us the flexibility to scale or modify the architecture for future posts in this series.</p><p>It&#8217;s not just the hardware architecture that could be confusing. As we <a href="https://chipinsights.net/p/mapping-algorithms-to-custom-silicon">mentioned in Part 1, the software interface is messy and still evolving</a>. As this is the first implementation in our series, we wanted to keep a simple but still operational software interface. Setting up this interface is important to obtain performance metrics that will be used for architectural analysis in future posts in this series.</p><p>With that motivation, we can now look at the two parts of the TinyXPU project: the hardware architecture and the software interface.</p><div><hr></div><p></p><h1><strong>The Hardware Architecture</strong></h1><p>We built the first version of our matrix multiplication accelerator based on the weight stationary systolic array architecture: the same one at the heart of Google&#8217;s TPUs. While this post will not go into the details of this architecture, here&#8217;s a dedicated post that&#8217;s got you covered:</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:190643644,&quot;url&quot;:&quot;https://www.avikde.me/p/systolic-arrays-for-general-robotics&quot;,&quot;publication_id&quot;:7287367,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;min{power}&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z7FY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ea21ccc-90aa-4750-861d-eb48a6144608_176x176.png&quot;,&quot;title&quot;:&quot;Systolic arrays for general robotics, AI, and scientific computing&quot;,&quot;truncated_body_text&quot;:null,&quot;date&quot;:&quot;2026-03-12T15:09:36.193Z&quot;,&quot;like_count&quot;:8,&quot;comment_count&quot;:0,&quot;bylines&quot;:[{&quot;id&quot;:356074997,&quot;name&quot;:&quot;Avik De&quot;,&quot;handle&quot;:&quot;avikde&quot;,&quot;previous_name&quot;:&quot;Avik De, PhD&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!E5et!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30589b07-e0a0-4de5-8997-78db1ed3f65b_1290x1290.png&quot;,&quot;bio&quot;:&quot;Safe, efficient robotics &amp; AI -- Robotics Ph.D. and founder&quot;,&quot;profile_set_up_at&quot;:&quot;2025-09-01T11:05:25.762Z&quot;,&quot;reader_installed_at&quot;:&quot;2025-12-14T02:43:43.888Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:7436599,&quot;user_id&quot;:356074997,&quot;publication_id&quot;:7287367,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:false,&quot;publication&quot;:{&quot;id&quot;:7287367,&quot;name&quot;:&quot;min{power}&quot;,&quot;subdomain&quot;:&quot;minpower&quot;,&quot;custom_domain&quot;:&quot;www.avikde.me&quot;,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Explorations in computing and robotics focused on power-efficiency and safety -- personal posts by Avik De, robotics Ph.D. and founder&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5ea21ccc-90aa-4750-861d-eb48a6144608_176x176.png&quot;,&quot;author_id&quot;:356074997,&quot;primary_user_id&quot;:356074997,&quot;theme_var_background_pop&quot;:&quot;#FF6719&quot;,&quot;created_at&quot;:&quot;2025-12-16T12:24:04.343Z&quot;,&quot;email_from_name&quot;:&quot;Avik De from min{power}&quot;,&quot;copyright&quot;:&quot;Avik De&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:null}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:1,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:1,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[1063960],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://www.avikde.me/p/systolic-arrays-for-general-robotics?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!Z7FY!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5ea21ccc-90aa-4750-861d-eb48a6144608_176x176.png" loading="lazy"><span class="embedded-post-publication-name">min{power}</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Systolic arrays for general robotics, AI, and scientific computing</div></div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">7 months ago &#183; 8 likes &#183; Avik De</div></a></div><p></p><h2><strong>The Processing Element (PE)</strong></h2><p>The core block in TinyXPU is called a Processing Element (PE), a term that originated in <a href="https://ieeexplore.ieee.org/document/1653825">H. T. Kung&#8217;s seminal work in 1982</a>. Here&#8217;s the block diagram of our PE (the <a href="https://github.com/avikde/tiny-xpu/blob/main/src/pe.sv">SystemVerilog implementation can be found in pe.sv</a>):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!--KK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f982c4-784f-4fc3-9985-b8965b84d9a1_932x665.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!--KK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f982c4-784f-4fc3-9985-b8965b84d9a1_932x665.png 424w, https://substackcdn.com/image/fetch/$s_!--KK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f982c4-784f-4fc3-9985-b8965b84d9a1_932x665.png 848w, https://substackcdn.com/image/fetch/$s_!--KK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f982c4-784f-4fc3-9985-b8965b84d9a1_932x665.png 1272w, https://substackcdn.com/image/fetch/$s_!--KK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f982c4-784f-4fc3-9985-b8965b84d9a1_932x665.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!--KK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f982c4-784f-4fc3-9985-b8965b84d9a1_932x665.png" width="932" height="665" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b9f982c4-784f-4fc3-9985-b8965b84d9a1_932x665.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:665,&quot;width&quot;:932,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:45772,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.net/i/191037416?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f982c4-784f-4fc3-9985-b8965b84d9a1_932x665.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!--KK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f982c4-784f-4fc3-9985-b8965b84d9a1_932x665.png 424w, https://substackcdn.com/image/fetch/$s_!--KK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f982c4-784f-4fc3-9985-b8965b84d9a1_932x665.png 848w, https://substackcdn.com/image/fetch/$s_!--KK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f982c4-784f-4fc3-9985-b8965b84d9a1_932x665.png 1272w, https://substackcdn.com/image/fetch/$s_!--KK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb9f982c4-784f-4fc3-9985-b8965b84d9a1_932x665.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This PE block executes the following operation:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;c4bf8843-def5-4fe2-9882-25a1ff272038&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">acc_out = data_in * weight_in + acc_in</code></pre></div><p>However, this operation is executed in two phases:</p><ol><li><p>Weight Loading Phase: In this phase, the value of weight_in is stored in the register weight_r when weight_ld is set to 1.</p></li><li><p>Multiply Accumulate Phase: Here, the stored value weight_r is multiplied with data_in, and acc_in is added to get the final result. When en is set to 1, this result is sent as the output.</p></li></ol><p>The reason for having these two phases comes from its primary use case in neural networks, where we typically process multiple inputs (called &#8220;batches&#8221;) using the same weights - so loading the weights once prevents the need to continuously broadcast its value during the computation. This is called a "weight-stationary" architecture, indicating that the weights don't move through the array in the Multiply Accumulate Phase.</p><p>It&#8217;s also important to highlight that the Multiply Accumulate Phase has a latency of 1 cycle - which means that the output of the PE is ready one cycle after the inputs. This pipeline stage is needed to break the combinational logic path when two PEs are connected together, in order to achieve a high clock frequency. (If you are new to digital design, <a href="https://chipinsights.net/p/confessions-of-a-static-timing-analysis">this post on Static Timing Analysis</a> would help you understand why this matters.)</p><div><hr></div><p></p><h2><strong>Matrix Multiplication on a PE array</strong></h2><p>The functionality of a single PE can be achieved using the Arithmetic and Logic Unit (ALU) in most CPUs. So, to really understand the benefit of a PE array, let&#8217;s consider a PE array with 2 rows and 2 columns, and map a matrix operation on it. Specifically, we will be implementing this operation:</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wwyr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af4603d-5621-4381-92d2-3d90e89ea2a8_693x150.png 424w, https://substackcdn.com/image/fetch/$s_!wwyr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af4603d-5621-4381-92d2-3d90e89ea2a8_693x150.png 848w, https://substackcdn.com/image/fetch/$s_!wwyr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af4603d-5621-4381-92d2-3d90e89ea2a8_693x150.png 1272w, https://substackcdn.com/image/fetch/$s_!wwyr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af4603d-5621-4381-92d2-3d90e89ea2a8_693x150.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wwyr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af4603d-5621-4381-92d2-3d90e89ea2a8_693x150.png" width="693" height="150" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7af4603d-5621-4381-92d2-3d90e89ea2a8_693x150.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:150,&quot;width&quot;:693,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:9271,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.net/i/191037416?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af4603d-5621-4381-92d2-3d90e89ea2a8_693x150.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wwyr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af4603d-5621-4381-92d2-3d90e89ea2a8_693x150.png 424w, https://substackcdn.com/image/fetch/$s_!wwyr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af4603d-5621-4381-92d2-3d90e89ea2a8_693x150.png 848w, https://substackcdn.com/image/fetch/$s_!wwyr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af4603d-5621-4381-92d2-3d90e89ea2a8_693x150.png 1272w, https://substackcdn.com/image/fetch/$s_!wwyr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7af4603d-5621-4381-92d2-3d90e89ea2a8_693x150.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></div></figure></div><p>Our PE array performs matrix multiplication by arranging PEs in a grid where data flows between neighboring elements. Each PE stores one weight value and performs a multiply-accumulate operation every cycle. As input values move across the array, partial sums are passed between PEs until the final output values emerge from the last column. We depict the cycle-by-cycle dataflow in this diagram:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ccvc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5520f78-99fd-46fa-86a8-e6e606ea175c_1191x622.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ccvc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5520f78-99fd-46fa-86a8-e6e606ea175c_1191x622.png 424w, https://substackcdn.com/image/fetch/$s_!ccvc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5520f78-99fd-46fa-86a8-e6e606ea175c_1191x622.png 848w, https://substackcdn.com/image/fetch/$s_!ccvc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5520f78-99fd-46fa-86a8-e6e606ea175c_1191x622.png 1272w, https://substackcdn.com/image/fetch/$s_!ccvc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5520f78-99fd-46fa-86a8-e6e606ea175c_1191x622.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ccvc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5520f78-99fd-46fa-86a8-e6e606ea175c_1191x622.png" width="1191" height="622" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a5520f78-99fd-46fa-86a8-e6e606ea175c_1191x622.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:622,&quot;width&quot;:1191,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61833,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.net/i/191037416?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5520f78-99fd-46fa-86a8-e6e606ea175c_1191x622.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ccvc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5520f78-99fd-46fa-86a8-e6e606ea175c_1191x622.png 424w, https://substackcdn.com/image/fetch/$s_!ccvc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5520f78-99fd-46fa-86a8-e6e606ea175c_1191x622.png 848w, https://substackcdn.com/image/fetch/$s_!ccvc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5520f78-99fd-46fa-86a8-e6e606ea175c_1191x622.png 1272w, https://substackcdn.com/image/fetch/$s_!ccvc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5520f78-99fd-46fa-86a8-e6e606ea175c_1191x622.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p>In the first cycle, X11 is passed as input to PE with weight W11</p></li><li><p>In the second cycle, X11 moves on to the next PE. (with weight W12.) Simultaneously, X21 and X12 are passed to the first PE column. (with weights W11 and W21.)</p></li><li><p>In the third cycle, X21 and X12 move to the second PE column.( with weights W12 and W22.) Also, X22 is passed to PE with weight W21. In this cycle, we also have the first output value ready:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;87924e6d-eeaf-4775-9b72-cdbcc6d08e08&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Y11 = X11 &#215; W11 + X12 &#215; W21</code></pre></div><p>Note that the latency (time from first input to first output) is 2 cycles in this example. As the number of rows of the PE array increases, this latency also increases. After the first output, new outputs are ready in every adjacent cycle, as we will see.</p></li><li><p>In cycle 4, X22 moves to the second PE column. We also get output Y21 and Y12 from both the PE columns.</p></li><li><p>Finally, in cycle 5, the last output Y22 is ready in the second PE column.</p></li></ul><div><hr></div><p></p><h2><strong>What makes this an accelerator?</strong></h2><p>The biggest advantage of this PE architecture is that we read the operands only once from memory. In the above example:</p><ul><li><p>Weights W11, W12, W21, W22 are only read in the Weight Loading Phase and are then stored in the PEs</p></li><li><p>Although Inputs X11, X12, X21, X22 are used twice during the matrix multiplication, they are only read once (For example, after X11 is read in Cycle 1, it is just passed to the next PE in Cycle 2 - it does not have to be read again.)</p></li></ul><p>In a standard CPU, the intermediate values would need to be stored somewhere. It could be stored in a fast register for small matrices, but might need to spill to slower caches and main memory as the matrix size increases.</p><p>Our PE array avoids repeatedly fetching operands from memory because values propagate directly between neighboring PEs. This is what makes the PE array architecture great for matrix multiplication. (This statement assumes PE array size and matrix sizes are the same - the <a href="https://github.com/avikde/tiny-xpu/blob/main/src/array.sv">PE array SystemVerilog implementation</a> in TinyXPU is parametrized to support different number of rows and columns. In our upcoming posts, we will explore the impact of these different configurations on the performance of our chip.)</p><p>Finally, although our current implementation is just a PE array, we want to highlight that a real accelerator has other components in its microarchitecture which we are skipping here for the sake of simplicity:</p><ul><li><p>We need to define an <a href="https://chipinsights.net/p/the-isa-debate">Instruction Set Architecture (ISA)</a> and include an instruction decode unit</p></li><li><p>We need a Unified Buffer (typically SRAM) to hold the matrix data before streaming it into the PE array. (Typically, a DMA controller would stream data from CPU DRAM to the local SRAM.)</p></li></ul><p>As this project evolves, some of these components will be (and must be) included in the design.</p><div><hr></div><p></p><h1><strong>The Software Bridge</strong></h1><p>In the previous section, we described the hardware implementation of our TinyXPU Matrix Multiplier. Hopefully, you are convinced that the PE array is an improvement over using general-purpose CPUs for matrix multiplication. If you are a hardware engineer, many of your projects stop here with this question: how do you connect your hardware with the existing software ecosystem and actually run matrix multiplication on your chip? <a href="https://chipinsights.net/i/187337389/the-two-bridges">In part 1, we described two approaches to solve this problem</a> - Runtime-level and Compiler level integration. In this section, we will implement runtime-level integration using an ONNX Runtime Execution Provider.</p><p></p><h2><strong>The ONNX Runtime Flow</strong></h2><p>The flow used in our project is intentionally simple.</p><p>First, a small ONNX model containing a matrix multiplication operation is <a href="https://github.com/avikde/tiny-xpu/blob/main/scripts/matmul.py">generated using a Python script</a>. An ONNX model represents a computation as a graph, where each node corresponds to an operation such as matrix multiplication. In our implementation, the generated ONNX file includes a <a href="https://onnx.ai/onnx/operators/onnx__MatMulInteger.html">MatMulInteger operator</a>, as shown in this code snippet:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;cpp&quot;,&quot;nodeId&quot;:&quot;df923a2b-7cf7-4b78-88b5-a3fe3f3d7568&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-cpp">X = helper.make_tensor_value_info("X", TensorProto.INT8, [None, W_data.shape[0]])
Y = helper.make_tensor_value_info("Y", TensorProto.INT32, [None, W_data.shape[1]])
W_init = numpy_helper.from_array(W_data, name="W")
node = helper.make_node("MatMulInteger", inputs=["X", "W"], outputs=["Y"])
graph = helper.make_graph(
[node],
"MatMulInteger_4x4",
[X],
[Y],
initializer=[W_init],
)</code></pre></div><p>Next, a<a href="https://github.com/avikde/tiny-xpu/blob/main/scripts/run_matmul.py"> Python driver loads this model</a> using ONNX Runtime and registers the<a href="https://github.com/avikde/tiny-xpu/blob/main/onnx-plugin/src/tinyxpu_ep.cpp"> TinyXPU Execution Provider (EP)</a>, as shown in this code snippet:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;cpp&quot;,&quot;nodeId&quot;:&quot;3e606b32-be23-4437-8af7-8aabf0876b2c&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-cpp">ort.register_execution_provider_library("SampleEP", path_to_dll)
session_options = ort.SessionOptions()
session_options.add_provider_for_devices(tinyxpu_devices, {})</code></pre></div><p>The goal of the EP is to inspect the ONNX model, looking for an eligible operation: in our case, it would be MatMulInteger. (See the <a href="https://github.com/avikde/tiny-xpu/blob/main/onnx-plugin/src/tinyxpu_ep.cpp">GetCapabilityImpl() method in the TinyXPU EP</a> for details.) The ONNX Runtime will call the function where we registered our ability to execute MatMulInteger when the session is instantiated.</p><p>When the runtime encounters the matrix multiplication operation, it dispatches that operation to the TinyXPU backend (via the <a href="https://github.com/avikde/tiny-xpu/blob/main/onnx-plugin/src/tinyxpu_ep.cpp">ComputeImpl() hook)</a> instead of executing it on the CPU (which is the default option when no match is found.) This way, we are able to connect the TinyXPU hardware directly to software without requiring a custom compiler - a major benefit of this approach.</p><div><hr></div><p></p><h2><strong>Practical Constraints</strong></h2><p>Much like the hardware implementation, our current ONNX interface has some constraints that we would like to highlight.</p><p>Firstly, instead of exporting a Pytorch/Tensorflow implementation into the ONNX format, we directly use <a href="https://github.com/avikde/tiny-xpu/blob/main/scripts/matmul.py">a Python script</a> to generate an ONNX model containing a single MatMulInteger operation. This keeps the software stack minimal while still exercising the same ONNX Runtime execution flow that would be used with real models. <a href="https://docs.pytorch.org/tutorials/beginner/onnx/export_simple_model_to_onnx_tutorial.html">Pytorch</a> and <a href="https://onnxruntime.ai/docs/tutorials/tf-get-started.html">Tensorflow</a> both support functions to export to ONNX, so this additional step is fairly trivial. In fact, ONNX is a common intermediate exchange format before going to many hardware APIs including TensorRT for NVIDIA embedded devices, Qualcomm Hexagon, and others.</p><p>As mentioned in the previous section, we do not yet have an FPGA or ASIC implementation of our design for this part. That&#8217;s where Verilator comes into the picture. The SystemVerilog implementation of the TinyXPU systolic array is compiled into a cycle-accurate C++ model using Verilator. The TinyXPU Execution Provider links directly against this generated C++ model. When ONNX Runtime dispatches a matrix multiplication operation (MatMulInteger) to TinyXPU, the Execution Provider performs three steps (See the <a href="https://github.com/avikde/tiny-xpu/blob/main/onnx-plugin/src/tinyxpu_ep.cpp">ComputeImpl() method in the TinyXPU EP</a> for details):</p><ol><li><p>Read input tensors from ONNX Runtime</p></li><li><p>Drive the Verilator simulation input signals and toggle the clock</p></li><li><p>Collect output signals from the simulation</p></li></ol><p>So, in our implementation, the ONNX runtime connects the software world with a cycle-accurate simulation of the hardware, as shown in this diagram below (The &#8220;real silicon&#8221; version of this diagram was included in <a href="https://chipinsights.net/i/187337389/1-runtime-level-integration">part 1</a>):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TNuy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad66433-7426-41ef-8ae3-92c3880dcf62_1018x747.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TNuy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad66433-7426-41ef-8ae3-92c3880dcf62_1018x747.png 424w, https://substackcdn.com/image/fetch/$s_!TNuy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad66433-7426-41ef-8ae3-92c3880dcf62_1018x747.png 848w, https://substackcdn.com/image/fetch/$s_!TNuy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad66433-7426-41ef-8ae3-92c3880dcf62_1018x747.png 1272w, https://substackcdn.com/image/fetch/$s_!TNuy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad66433-7426-41ef-8ae3-92c3880dcf62_1018x747.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TNuy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad66433-7426-41ef-8ae3-92c3880dcf62_1018x747.png" width="1018" height="747" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ad66433-7426-41ef-8ae3-92c3880dcf62_1018x747.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:747,&quot;width&quot;:1018,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:85480,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.net/i/191037416?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad66433-7426-41ef-8ae3-92c3880dcf62_1018x747.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TNuy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad66433-7426-41ef-8ae3-92c3880dcf62_1018x747.png 424w, https://substackcdn.com/image/fetch/$s_!TNuy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad66433-7426-41ef-8ae3-92c3880dcf62_1018x747.png 848w, https://substackcdn.com/image/fetch/$s_!TNuy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad66433-7426-41ef-8ae3-92c3880dcf62_1018x747.png 1272w, https://substackcdn.com/image/fetch/$s_!TNuy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ad66433-7426-41ef-8ae3-92c3880dcf62_1018x747.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It&#8217;s important to mention that irrespective of whether we are running on a Verilator-generated simulation, custom hardware implemented on FPGAs or as an ASIC, or existing processors on an SoC like CPUs, GPUs, or NPUs - this implementation successfully abstracts the hardware away from the software - our stated goal from <a href="https://chipinsights.net/i/187337389/the-push-and-the-pull">Part 1</a>.</p><div><hr></div><p></p><p>Part 2 ends here. Although the current implementation is intentionally minimal, it already gives us a complete system: a software stack capable of dispatching matrix multiplication operations to a cycle-accurate simulation of our accelerator. This demonstrates how runtime-level integration works, and more importantly, provides a useful platform for experimentation.</p><p>In the next post, we use this framework to analyze the architecture in more detail, exploring how design parameters such as the size of the array compared to the workload and memory bandwidth affect throughput, latency and utilization. Check it out here:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;5e4908da-8b02-442d-acd8-d07f32e601c2&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The Art of Architectural Analysis: Utilization, Throughput, Latency&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:356074997,&quot;name&quot;:&quot;Avik De&quot;,&quot;bio&quot;:&quot;Safe, efficient robotics &amp; AI -- Robotics Ph.D. and founder&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!E5et!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30589b07-e0a0-4de5-8997-78db1ed3f65b_1290x1290.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://www.avikde.me/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://www.avikde.me&quot;,&quot;primaryPublicationName&quot;:&quot;min{power}&quot;,&quot;primaryPublicationId&quot;:7287367}],&quot;post_date&quot;:&quot;2026-03-30T00:48:09.476Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ab5082a-13dd-4059-b346-316fd31def8f_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.net/p/the-art-of-architectural-analysis&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:192536198,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:4,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>The <a href="https://github.com/avikde/tiny-xpu">TinyXPU project</a> will also expand to support activation functions to run complete ONNX ML models that can be deployed on an FPGA. To get notified about all this and more, subscribe to both <a href="https://chipinsights.net/">Chip Insights</a> and <a href="https://www.avikde.me/">Min{power}</a>. And if you have some experience taking up similar projects, or have an interesting direction for us to explore, let us know in the comments.</p>]]></content:encoded></item><item><title><![CDATA[ENIAC and the Workload Problem]]></title><description><![CDATA[Why studying ENIAC Matters - Especially now.]]></description><link>https://chipinsights.net/p/eniac-and-the-workload-problem-part</link><guid isPermaLink="false">https://chipinsights.net/p/eniac-and-the-workload-problem-part</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Mon, 09 Mar 2026 05:31:06 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6f6da59c-dccd-4de4-9008-b5938c7293d2_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s) and are not investment advice.</strong></p><div><hr></div><p>This is the first post in a series aimed at understanding the ENIAC architecture and the lessons that remain relevant in today&#8217;s computing landscape. In this post, I introduce the ENIAC story and explain why it still matters.</p><div><hr></div><h1><strong>The First Workload Problem</strong></h1><p>On December 7, 1941, the attack on Pearl Harbor became a key moment in computing history. The US, having now entered World War II, commissioned the Army&#8217;s Ballistic Research Laboratory (BRL) with a project: To improve the accuracy of artillery strikes. This effort led to the creation of artillery firing tables: one of the first large computing workloads.</p><p>When I was in school, some of our mathematics and physics exams did not allow the use of calculators. Instead, when complex arithmetic problems were involved, we were allowed to bring in something called log tables: collections of precalculated values used to solve complex arithmetic problems in place of a calculator. (I never understood the point then, but maybe it was all for this moment.) An artillery firing table was essentially the Army version of a log table. Instead of telling you what 10.14 &#247; 2.38 equals, it turns complex ballistic calculations into simple lookups that a gun crew can use to quickly determine the correct elevation or angle before firing at a target.</p><p>Unlike arithmetic, which does not change with time, firing tables were different based on the gun type, barrel wear, and environmental conditions. To generate the data for each of these situations, ballistic trajectories had to be solved numerically. Human calculators could not produce these tables with the speed and accuracy the war demanded. BRL used a Differential Analyzer, the state-of-the-art computer of the time, to run these calculations. They brought down the computation time from 3 days to just 15 minutes per trajectory. This was still too slow, and the results were often inaccurate, requiring human verification. The most important computational workload of that time was still waiting for a faster machine.</p><p>In 1943, the Army approved a proposal from J. Presper Eckert and John Mauchly at the University of Pennsylvania to build a machine with a completely new architecture. This computer, called the Electronic Numerical Integrator and Computer (ENIAC), had one goal: calculate firing tables at an exponentially faster rate to help with the US&#8217;s World War II defense. On September 2, 1945, just two years after the ENIAC project was approved, Japan surrendered, and this officially marked the end of World War II. ENIAC served its purpose and has its place in history as one of the most influential computers.</p><p>Well&#8230; that&#8217;s not quite how the story goes. Sure, ENIAC was commissioned to calculate firing tables, and its architecture actually improved the speed of trajectory calculations, reducing the time taken from 15 minutes on the Differential Analyzer to about 30 seconds. ENIAC also made giant strides to improve the setup time and accuracy when running ballistic calculations. But one detail surprised me: ENIAC was announced complete in February 1946. <strong>This means ENIAC was never used to compute a single entry in the artillery firing tables used during World War II.</strong> From 1943 to 1945, ENIAC experienced major delays, and also went significantly over its initial budget. ENIAC also consumed on the order of 150-200 kW of power, and sometimes contributed to power outages in the Philadelphia area. When the war ended, ENIAC was just an expensive infrastructure investment whose primary workload was no longer important.</p><div><hr></div><h1><strong>Why ENIAC Still Matters</strong></h1><p>Despite a lack of demand for ballistic calculations, the ENIAC project continued after the war. In fact, this is where the ENIAC story really starts, and was my motivation to write this post.</p><p>ENIAC has lived through what I would call an &#8220;interesting architectural life.&#8221; It was rushed into existence to handle one specific workload. But that&#8217;s not why we remember ENIAC today. The ENIAC architecture is widely regarded as the first modern computing architecture. It was one of the first computers capable of running a program. ENIAC went on to effectively run weather models, nuclear simulations, and scientific computations. These workloads fell well outside the scope of military applications that it was designed for. At one point, the demand for ENIAC was so high, that renting ENIAC for two days cost as much as buying a new car.</p><p>This period of immense success also came with financial and political pressures on ENIAC to live up to the tag of a &#8220;general purpose computer.&#8221; That&#8217;s when the wheels started to come off, and the architectural deficiencies started to become evident. Eventually, it became clear that the ENIAC architecture could not be repurposed anymore to handle emerging workloads, and it had to be retired. The computing industry is less than 100 years old. It sounds like a lot of time, but it takes a long time for a new architecture to get adopted, and even longer for it to completely be abandoned. The ENIAC story is one of the few stories that has come full-circle, and has also been well documented. This presents a rare opportunity to analyze decisions that worked, and more importantly, decisions that failed.</p><p>There is another reason why ENIAC matters. Fundamentally, ENIAC looks nothing like modern computers. Many aspects of ENIAC are no longer directly relevant today, starting from the fact that ENIAC&#8217;s fundamental building block is a vacuum tube, not a transistor. However, since ENIAC essentially gave birth to modern computing, the ENIAC computer is simple enough (by today&#8217;s standards) that we can try to understand all aspects of the design. This includes the hardware architecture, software decisions, infrastructure challenges, supply chain issues, and interpersonal dynamics that were involved in the design. These details, in addition to making for a great story, are important to explain both the good and bad decisions that shaped ENIAC. In my opinion, attempting the same exercise with a modern computer, while more relevant, is almost impossible due to the sheer complexity involved.</p><p>This is why ENIAC is worth your time. But why now?</p><div><hr></div><h1><strong>The New Infrastructure Buildout</strong></h1><p>Studying ENIAC is not just an academic exercise. Today, we are racing to build advanced computers that fill warehouses. They consume gigawatts of power, cost tens of billions of dollars to build, and are optimized for a single dominant workload: large-scale LLM training. This is not very different from how ENIAC began.</p><p>There are a lot of debates happening around the world about whether this investment is justified. I don&#8217;t see a lot of value in these debates because I think we are well past that point - today this infrastructure buildout is now inevitable. But if there is one thing that the ENIAC story tells us, it is this: the workload won&#8217;t remain the same. When projects attracts large investment, especially from traditionally &#8220;non-tech&#8221; sources like sovereign funds, it is expected to outlive its first workload. Cities do not build large bridges merely to connect two houses on opposite sides of a river; these projects are funded to enable large-scale economic growth in multiple different ways.</p><p>Language models are the first dominant workload of today&#8217;s compute infrastructure, and they are expected to keep this it fully utilized in the near term. But I am certain we will see new workloads soon. It could be as simple as a different approach to advance AI. Or it could be something well beyond AI - astrophysics, quantum algorithms, genomics. Regardless of which buzzword you choose to believe in, two important questions emerge:</p><ol><li><p>Which compute infrastructure can last the longest before we need a clean reset?</p></li><li><p>How effectively can we map future workloads onto the infrastructure we are building today?</p></li></ol><p>By studying ENIAC, I hope to build a mental model to help answer these questions. <a href="https://www.youtube.com/watch?v=rsbT8MDHKFA">As Nvidia CEO Jensen Huang put it</a>, even if you are not the first one to catch the metaphorical apple that falls from the tree, this mental model can help you become the first person to pick up the apple from the ground.</p><div><hr></div><p>That concludes Part 1 of this series. If you like what I just said, follow along for upcoming posts in this series, starting with this:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;89489590-694a-42f3-9ba6-b3b78909b951&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Powering the Machine&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-06-08T04:49:51.244Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d1c63d04-6e90-45eb-aa23-588fffe7b41b_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.net/p/powering-the-machine&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:201097809,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3><strong>Sources:</strong></h3><p>My primary reference for this study is the book &#8220;ENIAC in Action&#8221; which goes into an impressive level of detail about many aspects of this computer.</p><p>If you know any other resources to help with this project, leave a comment!</p>]]></content:encoded></item><item><title><![CDATA[Mapping algorithms to custom silicon - Part 1]]></title><description><![CDATA[An introduction to the messy middle between software and microarchitecture]]></description><link>https://chipinsights.net/p/mapping-algorithms-to-custom-silicon</link><guid isPermaLink="false">https://chipinsights.net/p/mapping-algorithms-to-custom-silicon</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Mon, 09 Feb 2026 00:15:44 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8f063e77-8634-49db-83c3-bab1a1dff047_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s) and are not investment advice.</strong></p><div><hr></div><p>This is part of a series of posts on custom accelerators. Here&#8217;s a link to all parts:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;63e6dc50-4d42-4370-b56c-d906dfda1578&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Mapping algorithms to custom silicon - Part 1&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:356074997,&quot;name&quot;:&quot;Avik De&quot;,&quot;bio&quot;:&quot;Safe, efficient robotics &amp; AI -- Robotics Ph.D. and founder&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!E5et!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30589b07-e0a0-4de5-8997-78db1ed3f65b_1290x1290.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://www.avikde.me/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://www.avikde.me&quot;,&quot;primaryPublicationName&quot;:&quot;min{power}&quot;,&quot;primaryPublicationId&quot;:7287367}],&quot;post_date&quot;:&quot;2026-02-09T00:15:44.482Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f063e77-8634-49db-83c3-bab1a1dff047_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.net/p/mapping-algorithms-to-custom-silicon&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:187337389,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:30,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;5297f738-bd24-4084-b85c-07c58309f0ae&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Mapping Algorithms to Custom Silicon - Part 2&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:356074997,&quot;name&quot;:&quot;Avik De&quot;,&quot;bio&quot;:&quot;Safe, efficient robotics &amp; AI -- Robotics Ph.D. and founder&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!E5et!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30589b07-e0a0-4de5-8997-78db1ed3f65b_1290x1290.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://www.avikde.me/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://www.avikde.me&quot;,&quot;primaryPublicationName&quot;:&quot;min{power}&quot;,&quot;primaryPublicationId&quot;:7287367}],&quot;post_date&quot;:&quot;2026-03-15T18:42:10.275Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6954c585-f006-40f3-a68b-78a4b1a7e52d_1536x948.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.net/p/mapping-algorithms-to-custom-silicon-efd&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:191037416,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:13,&quot;comment_count&quot;:2,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;13230e35-4598-42d2-ac76-2bdac5ce82cc&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The Art of Architectural Analysis: Utilization, Throughput, Latency&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:356074997,&quot;name&quot;:&quot;Avik De&quot;,&quot;bio&quot;:&quot;Safe, efficient robotics &amp; AI -- Robotics Ph.D. and founder&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!E5et!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30589b07-e0a0-4de5-8997-78db1ed3f65b_1290x1290.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://www.avikde.me/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://www.avikde.me&quot;,&quot;primaryPublicationName&quot;:&quot;min{power}&quot;,&quot;primaryPublicationId&quot;:7287367}],&quot;post_date&quot;:&quot;2026-03-30T00:48:09.476Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9ab5082a-13dd-4059-b346-316fd31def8f_1536x1024.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.net/p/the-art-of-architectural-analysis&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:192536198,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:12,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><p></p><p>Unless you have been living under a large silicon wafer, you would have heard some version of &#8220;custom silicon is the future.&#8221;<a href="https://chipinsights.net/p/the-alphabet-soup-of-processors"> In an earlier post</a>, I attempted the classification of this exploding set of XPUs. While classification would help someone understand how to best match today&#8217;s chip with today&#8217;s algorithms, the real billion dollar question (literally) is: <strong>how can we ensure that tomorrow&#8217;s chips are best suited to run tomorrow&#8217;s algorithms.</strong></p><p>One of the biggest problems in hardware-software co-design is that hardware and software have always existed on separate islands. So, the right way to answer this question is by bringing the two a little closer. In that spirit, this post (and hopefully many more to come) is the result of my collaboration with<a href="https://www.avikde.me/"> Avik De</a>. Together in this post, we explore the &#8220;messy middle&#8221; between algorithms and silicon.</p><div><hr></div><h1>The push and the pull</h1><p>To make custom silicon work, it needs both a &#8220;push&#8221; and a &#8220;pull&#8221;. There is a &#8220;push&#8221; from the side of the hardware designer (who we will call Harry) to get more developers to use their chip, and a &#8220;pull&#8221; from the algorithm writer (who we will call Alice) to find the best platform on which to run their software.</p><p>The algorithm writer (Alice) wants to be able to frame their algorithm in a high-level language. This algorithm could be anything, ranging from the numerous advancements in<a href="https://vbml.substack.com/p/a-personal-map-of-ml-hardware-trade?r=5vzx85&amp;triedRedirect=true"> machine learning</a>, to algorithms from emerging domains like<a href="https://www.avikde.me/p/the-architecture-behind-end-to-end"> robotics</a>. Although Alice is confident about the value of her algorithm, she is unaware of the best hardware architecture to run it on. This is the &#8220;pull&#8221; - Alice needs to be able to find hardware to run her algorithm while staying within her software ecosystem of comfort.</p><p>Harry, on the other hand, has a great idea for a power-efficient way to compute matrix products by optimizing the operations, the instruction overhead, or the memory movement. He develops the design and synthesizes it on an FPGA. He knows it&#8217;s better than any other hardware architecture out there, but he has no idea how to get people to try it. This is the &#8220;push&#8221; - Harry wants to get his ideas out there, but needs to bridge it to Alice&#8217;s &#8220;pull.&#8221;</p><p>In theory, this looks like a match made in heaven - can&#8217;t Alice just take her algorithm and &#8220;run it&#8221; on Harry&#8217;s chip? Well, not quite, because of an idea that has been around as long as computing, but continues to be challenging.</p><div><hr></div><h1>An old analogy</h1><p>The idea that Alice should be able to &#8220;just run&#8221; her code on Harry&#8217;s hardware is not new. In fact, it is the idea that made general-purpose computing work. A CPU solves this problem using the idea of Code Abstraction.</p><p>Say Alice was mapping an algorithm to run on a general purpose CPU - she would simply write the language using a high-level language like C++ or Python, &#8220;compile&#8221; this code, and run it on an x86 or ARM CPU. The reason why this process is so simple is the emergence of the idea of an Instruction Set Architecture (ISA) - which in simple words is a contract to map high-level languages to certain general purpose hardware. (This post skips the details of ISA and compilers, but if you are interested, check-out<a href="https://chipinsights.net/p/the-isa-debate"> this older Chip Insights post</a>.)</p><p>The mapping between Alice&#8217;s algorithm and Harry&#8217;s hardware using a standard ISA can be understood using this diagram:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Dixk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc292b170-a60e-4727-a1f1-4c2c71d6a5a9_1048x1445.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Dixk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc292b170-a60e-4727-a1f1-4c2c71d6a5a9_1048x1445.png 424w, https://substackcdn.com/image/fetch/$s_!Dixk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc292b170-a60e-4727-a1f1-4c2c71d6a5a9_1048x1445.png 848w, https://substackcdn.com/image/fetch/$s_!Dixk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc292b170-a60e-4727-a1f1-4c2c71d6a5a9_1048x1445.png 1272w, https://substackcdn.com/image/fetch/$s_!Dixk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc292b170-a60e-4727-a1f1-4c2c71d6a5a9_1048x1445.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Dixk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc292b170-a60e-4727-a1f1-4c2c71d6a5a9_1048x1445.png" width="1048" height="1445" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c292b170-a60e-4727-a1f1-4c2c71d6a5a9_1048x1445.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1445,&quot;width&quot;:1048,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:185671,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.net/i/187337389?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc292b170-a60e-4727-a1f1-4c2c71d6a5a9_1048x1445.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Dixk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc292b170-a60e-4727-a1f1-4c2c71d6a5a9_1048x1445.png 424w, https://substackcdn.com/image/fetch/$s_!Dixk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc292b170-a60e-4727-a1f1-4c2c71d6a5a9_1048x1445.png 848w, https://substackcdn.com/image/fetch/$s_!Dixk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc292b170-a60e-4727-a1f1-4c2c71d6a5a9_1048x1445.png 1272w, https://substackcdn.com/image/fetch/$s_!Dixk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc292b170-a60e-4727-a1f1-4c2c71d6a5a9_1048x1445.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>One of the key advantages of specifying an ISA is that it allows software developers to write code that can run on evolving hardware without needing to know the specifics. Say Alice compiled her algorithm using an x86 compiler like<a href="https://gcc.gnu.org/install/index.html"> GCC</a>, when the next generation of x86 CPU is released, she will have to do one of the following:</p><ul><li><p>In majority of the cases, as the hardware microarchitecture improves, the same binary can benefit from improvements without needing to be rebuilt.</p></li><li><p>Even if a major hardware improvements need to be accompanied by changes to instruction encoding or order (for example, <a href="https://en.wikipedia.org/wiki/Advanced_Vector_Extensions">Advanced Vector Extensions (AVX)</a>), it is managed by &#8220;the compiler&#8221; - Alice simply needs to recompile the same high-level language code with the latest version of the compiler in order to enjoy the benefits of the new and improved hardware.</p></li></ul><p>This separation worked spectacularly well, because:</p><ul><li><p>Hardware designers like Harry innovated on pipelines, caches, branch predictors, and out-of-order execution.</p></li><li><p>Software designers like Alice largely ignored those details and built software that lived for decades.</p></li><li><p>Compilers absorbed the complexity at the boundary.</p></li></ul><p>However, custom accelerators break this assumption.</p><div><hr></div><h1><strong>Why isn&#8217;t there a standard ISA for custom silicon?</strong></h1><p>In the early days of CPUs, every CPU provider had their own custom ISA, largely because hardware constraints and software ecosystems were still tightly coupled. Over time, a few winners emerged, leaving us with just 3-4 significant ISAs, each supported by mature compilers and software ecosystems. This convergence was possible because general-purpose programs share a common structure: scalar control flow, pointer-based memory access, and relatively uniform performance characteristics across workloads.</p><p>There is a common misconception that custom accelerators would evolve in the same way - that over time, a standard ISA would emerge, and every accelerator would support it. But this idea is fundamentally flawed. To truly understand why a standard ISA cannot exist for custom accelerators, let&#8217;s consider a thought experiment. Assume that Harry defines a standard ISA for his accelerators. Let&#8217;s try to think about how that ISA would look for an operation like matrix multiplication.</p><p>If Alice is using<a href="https://docs.pytorch.org/docs/stable/generated/torch.matmul.html"> PyTorch</a>, the operation would look something like this:</p><p><strong>result = torch.matmul(A, B)</strong></p><p>There are certain aspects of matrix A and matrix B that inform Harry how to execute this operation efficiently on his specific hardware. Crucially, these aspects influence not what computation is performed, but how it is scheduled and mapped onto hardware resources. For example, the shapes of A and B can be used to decide:</p><ul><li><p>Tiling strategy: How many chunks should the matrix multiplication be split into based on the available hardware resources</p></li><li><p>Buffering techniques: what data can be stored in the fast, on-chip SRAM, and what should be moved to DRAM.</p></li><li><p>Data layout: For the specific size of A and B, is column major better, or does a tiled layout reduce memory accesses?</p></li></ul><p>This is a short list that only considers the matrix shape - several other factors, like the data types, sparsity, etc. can be exploited to map this operation efficiently in hardware.</p><p>However, Harry needs to define a standard ISA that encompasses all these possibilities - the same ISA must work for a large square matrix with significant sparsity, as well as for matrices with just a single row or column. The compiler alone is of limited help here, because many of the most performance-critical decisions like tiling, buffering, and layout are instance-specific and cannot be encoded directly into an instruction set contract.</p><p>If Harry tries to account for all these possibilities within an ISA, he must either:</p><ul><li><p>Over-specify behavior, resulting in an unoptimized, CPU-style ISA and microarchitecture</p></li><li><p>Stick to a very low-level abstraction (resulting in bloated hardware - like one large matrix multiplier with huge amounts of memory.)</p></li></ul><p>In either case, a standard ISA would strip away the very benefits that customization is meant to provide. So where does that leave Harry and Alice?</p><div><hr></div><h1>The two bridges</h1><p>Since Harry can&#8217;t simply expose a standard AI ISA and call it a day, the question becomes: how does his hardware connect to Alice&#8217;s world at all?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9HXg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a2dde5-f726-4588-84da-9c8f8ccd400b_955x1176.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9HXg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a2dde5-f726-4588-84da-9c8f8ccd400b_955x1176.png 424w, https://substackcdn.com/image/fetch/$s_!9HXg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a2dde5-f726-4588-84da-9c8f8ccd400b_955x1176.png 848w, https://substackcdn.com/image/fetch/$s_!9HXg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a2dde5-f726-4588-84da-9c8f8ccd400b_955x1176.png 1272w, https://substackcdn.com/image/fetch/$s_!9HXg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a2dde5-f726-4588-84da-9c8f8ccd400b_955x1176.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9HXg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a2dde5-f726-4588-84da-9c8f8ccd400b_955x1176.png" width="955" height="1176" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55a2dde5-f726-4588-84da-9c8f8ccd400b_955x1176.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1176,&quot;width&quot;:955,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:128835,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.net/i/187337389?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a2dde5-f726-4588-84da-9c8f8ccd400b_955x1176.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9HXg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a2dde5-f726-4588-84da-9c8f8ccd400b_955x1176.png 424w, https://substackcdn.com/image/fetch/$s_!9HXg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a2dde5-f726-4588-84da-9c8f8ccd400b_955x1176.png 848w, https://substackcdn.com/image/fetch/$s_!9HXg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a2dde5-f726-4588-84da-9c8f8ccd400b_955x1176.png 1272w, https://substackcdn.com/image/fetch/$s_!9HXg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55a2dde5-f726-4588-84da-9c8f8ccd400b_955x1176.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Today, there are two practical bridges between them.</p><h2><strong>1. Runtime-level integration</strong></h2><p>In the first approach, Alice expresses her model in a standardized, framework-agnostic format. A shared runtime is responsible for executing that model and deciding which parts run on which device. From Alice&#8217;s perspective, almost nothing changes. She writes PyTorch or TensorFlow code and exports a model. From Harry&#8217;s perspective, the integration surface is narrow and predefined: he implements support for a fixed menu of operations, and the runtime takes care of everything else.</p><p>A useful analogy here is a <strong>food court appliance</strong>. Alice places an order by pointing to items on a menu: &#8220;grill this,&#8221; &#8220;blend that,&#8221; &#8220;heat this up.&#8221; The food court manager (the runtime) decides which appliance handles which step. Harry builds a specialized appliance that performs certain actions very efficiently. If the order matches the appliance&#8217;s menu, the runtime sends the work to Harry&#8217;s hardware and it shines. If not, the runtime quietly routes those steps to a different device that knows how to handle them. (which is typically a CPU or a GPU.)</p><p>This is exactly how runtime-level integration works:</p><ul><li><p>The model is a graph of predefined operations</p></li><li><p>Each operation is stateless and self-contained</p></li><li><p>Control flow and orchestration live outside the accelerator</p></li></ul><p>A concrete example of this approach is ONNX Runtime Execution Providers, where hardware vendors accelerate supported operators while delegating unsupported parts of the model to a fallback device. This diagram explains how Alice&#8217;s software and Harry&#8217;s hardware can talk to each other using ONNX.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r7gO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe16248-8b84-48c2-8d63-f2588269504c_1920x1409.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r7gO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe16248-8b84-48c2-8d63-f2588269504c_1920x1409.png 424w, https://substackcdn.com/image/fetch/$s_!r7gO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe16248-8b84-48c2-8d63-f2588269504c_1920x1409.png 848w, https://substackcdn.com/image/fetch/$s_!r7gO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe16248-8b84-48c2-8d63-f2588269504c_1920x1409.png 1272w, https://substackcdn.com/image/fetch/$s_!r7gO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe16248-8b84-48c2-8d63-f2588269504c_1920x1409.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r7gO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe16248-8b84-48c2-8d63-f2588269504c_1920x1409.png" width="1456" height="1068" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ebe16248-8b84-48c2-8d63-f2588269504c_1920x1409.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1068,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:215405,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.net/i/187337389?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe16248-8b84-48c2-8d63-f2588269504c_1920x1409.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!r7gO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe16248-8b84-48c2-8d63-f2588269504c_1920x1409.png 424w, https://substackcdn.com/image/fetch/$s_!r7gO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe16248-8b84-48c2-8d63-f2588269504c_1920x1409.png 848w, https://substackcdn.com/image/fetch/$s_!r7gO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe16248-8b84-48c2-8d63-f2588269504c_1920x1409.png 1272w, https://substackcdn.com/image/fetch/$s_!r7gO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febe16248-8b84-48c2-8d63-f2588269504c_1920x1409.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This model works well for inference workloads, where computation is a fixed graph of tensor operations. However, because execution and control flow remain outside the accelerator, it limits how much of the hardware structure (custom memory hierarchies, interconnect flow) can be exposed.</p><div><hr></div><h2><strong>2. Compiler-level integration</strong></h2><p>In the second approach, the bridge moves deeper into the stack. Instead of plugging into a runtime API, Harry integrates at the compiler level, where programs are transformed before execution. Alice still writes high-level code, but now the compiler is responsible for mapping that computation onto the hardware - deciding how loops are formed, how memory is reused, and how execution flows on the device.</p><p>The analogy here is a custom-built kitchen.</p><p>Instead of ordering from a menu, Alice hands over a recipe. Harry designs the kitchen itself: where ingredients are stored, how cooks move, which steps happen in parallel, and how decisions are made mid-cooking. The recipe is compiled into a precise plan tailored to that kitchen.</p><p>This may sound similar to targeting a standard ISA, but the distinction is critical. A standard ISA fixes the instruction set and execution model that all software must target, forcing hardware innovation to happen below that boundary. Compiler-level integration, in contrast, fixes only the meaning of the program. The compiler is free to reshape loops, memory usage, and control flow to match the hardware, without exposing a stable instruction set to the programmer. This allows each accelerator to express its architectural strengths without being constrained by a one-size-fits-all ISA.</p><p>This approach requires much more effort from Harry, because he must:</p><ul><li><p>define how programs are lowered,</p></li><li><p>expose memory and synchronization primitives,</p></li><li><p>and implement a runtime that can execute compiled programs.</p></li></ul><p>But in return, Harry can support:</p><ul><li><p>data-dependent control flow,</p></li><li><p>irregular or sparse computation,</p></li><li><p>custom memory layouts,</p></li><li><p>and long-lived, stateful programs.</p></li></ul><p>A representative example of this model is IREE, which provides a compiler, optimizer, and runtime along with a hardware abstraction layer. Instead of mapping individual operators, Harry defines how programs execute on his device. This turns the accelerator from a co-processor that executes individual operations into a programmable compute target that runs complete programs independently, as shown in this diagram.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cF7G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c7be0-c7d0-4aab-9834-00f602c19aac_1489x1705.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cF7G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c7be0-c7d0-4aab-9834-00f602c19aac_1489x1705.png 424w, https://substackcdn.com/image/fetch/$s_!cF7G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c7be0-c7d0-4aab-9834-00f602c19aac_1489x1705.png 848w, https://substackcdn.com/image/fetch/$s_!cF7G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c7be0-c7d0-4aab-9834-00f602c19aac_1489x1705.png 1272w, https://substackcdn.com/image/fetch/$s_!cF7G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c7be0-c7d0-4aab-9834-00f602c19aac_1489x1705.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cF7G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c7be0-c7d0-4aab-9834-00f602c19aac_1489x1705.png" width="1456" height="1667" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/121c7be0-c7d0-4aab-9834-00f602c19aac_1489x1705.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1667,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:263545,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.net/i/187337389?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c7be0-c7d0-4aab-9834-00f602c19aac_1489x1705.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cF7G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c7be0-c7d0-4aab-9834-00f602c19aac_1489x1705.png 424w, https://substackcdn.com/image/fetch/$s_!cF7G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c7be0-c7d0-4aab-9834-00f602c19aac_1489x1705.png 848w, https://substackcdn.com/image/fetch/$s_!cF7G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c7be0-c7d0-4aab-9834-00f602c19aac_1489x1705.png 1272w, https://substackcdn.com/image/fetch/$s_!cF7G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F121c7be0-c7d0-4aab-9834-00f602c19aac_1489x1705.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It&#8217;s worth emphasizing that IREE can ingest programs from multiple frontends, including ONNX, before lowering them through its compiler stack. The distinction between runtime-level and compiler-level integration is therefore not about which framework Alice starts from, but where hardware-specific decisions are made.</p><h1><strong>Conclusion</strong></h1><p>We&#8217;re entering a phase where meaningful gains in AI performance and efficiency are increasingly coming from custom silicon. But the success of that silicon depends less on raw compute and more on where it connects into the software stack.</p><p>This post was intentionally a high-level overview of that connection point. The space is complex, fast-moving, and still evolving, but at a distance, two broad patterns are already visible. Runtime-level integration offers a fast path to deployment by fitting new hardware into an existing execution model, while compiler-level integration demands more effort but unlocks far greater control over how computation actually runs. Neither approach is &#8220;better&#8221; in the abstract - each reflects a different tradeoff between ease of integration and expressive power.</p><p>In the next parts of this series, we&#8217;ll make these ideas concrete. On <a href="https://chipinsights.net/">Chip Insights</a>, we&#8217;ll walk through building a simple runtime-level backend, starting with a CPU implementation and then extending it toward custom hardware on an FPGA. In parallel, on <a href="https://www.avikde.me/">min{power}</a>, we&#8217;ll look at the problem from Alice&#8217;s side: how different classes of AI and robotics workloads place fundamentally different demands on hardware, and why those differences increasingly matter.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>You can find the next part of this series here:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;24b1f30d-739a-4e74-b672-974586df1643&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Mapping Algorithms to Custom Silicon - Part 2&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:356074997,&quot;name&quot;:&quot;Avik De&quot;,&quot;bio&quot;:&quot;Safe, efficient robotics &amp; AI -- Robotics Ph.D. and founder&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!E5et!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F30589b07-e0a0-4de5-8997-78db1ed3f65b_1290x1290.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://www.avikde.me/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://www.avikde.me&quot;,&quot;primaryPublicationName&quot;:&quot;min{power}&quot;,&quot;primaryPublicationId&quot;:7287367}],&quot;post_date&quot;:&quot;2026-03-15T18:42:10.275Z&quot;,&quot;cover_image&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6954c585-f006-40f3-a68b-78a4b1a7e52d_1536x948.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.net/p/mapping-algorithms-to-custom-silicon-efd&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:191037416,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:3,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div>]]></content:encoded></item><item><title><![CDATA[The Accidental Comeback of Verilog]]></title><description><![CDATA[How Generative AI is ending the HDL vs HLS debate]]></description><link>https://chipinsights.net/p/the-accidental-comeback-of-verilog</link><guid isPermaLink="false">https://chipinsights.net/p/the-accidental-comeback-of-verilog</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Sat, 17 Jan 2026 05:00:49 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/5ccf855a-c7b5-4efd-97be-7de3af76c146_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s) and are not investment advice.</strong></p><div><hr></div><p>In 2022, a graduate-level chip design course at UCLA gave me a glimpse of what felt like the future. Instead of writing RTL in Verilog, we were required to use a Python framework that generated synthesizable Verilog under the hood. I had already been using Verilog for a few years by this point, so this new workflow felt strange at first. But after a few weeks, something clicked. I started to enjoy it. So much so that I made my final project a head-to-head comparison: plain Verilog versus this Python-based approach across several types of RTL IP. The results seemed clear. Yes, the Verilog implementations had slightly better power, performance, and area (PPA) metrics. But the Python framework won on almost everything else that mattered to an RTL designer: it scaled better, made reuse trivial, and produced RTL that was far easier to read and reason about.</p><p>I walked away convinced that this was the direction chip design was headed. Higher-level frameworks would replace handwritten Verilog. That&#8217;s where I was ready to place my bets.</p><p>Lucky for me, I didn&#8217;t have the money to bet - because I was completely wrong.</p><div><hr></div><h2><strong>Verilog Is Fine. What Next?</strong></h2><p>If you have been reading Chip Insights long enough, you&#8217;ll know about <a href="https://chipinsights.net/p/evolution-of-hdls-part-1-the-birth">my two-part HDL saga</a> documenting the story of how Verilog became what it is today. I ended this story in the mid-2000s, when EDA companies started to push for the widespread adoption of SystemVerilog. From this point forward, the Verilog family (plain Verilog and SystemVerilog) emerged as clear winners in the HDL wars. However, there was a parallel storyline which I did not cover in that post.</p><p>The story of HDLs was closely related to the emergence of a new simulation technique called behavioral simulation - as designs got bigger, gate-level simulations became slow and unusable for routine functional checks. Cadence enabled behavioral simulation in Verilog through Verilog Compiled Simulation (VCS) - Verilog was first compiled into C, and this C program was then used to run simulations. Great story. The bedrock of modern logic simulation. But that&#8217;s not the point here. If you can convert an HDL like Verilog into a high-level language like C, why can&#8217;t we start with a high-level language directly?</p><p>In 1998, Forte Design Systems came up with a tool called Cynthesizer (a pretty clever name, I must add), which allowed a designer to build synthesizable logic using SystemC. In 2001, Sony became the first company to tape out a chip using this approach, which would later be known as High-Level Synthesis (HLS). As transistor scaling continued in the 2000s, design cost and complexity grew rapidly. Even the most modern HDL of the time, SystemVerilog, was inadequate for human productivity to catch up with Moore&#8217;s law. This made HLS a compelling candidate.</p><p>There are two primary reasons why HLS was so attractive. The first is obvious: high-level languages provide constructs that HDLs lack which would boost the productivity of chip designers. The second reason was even more compelling. HLS represented a fundamental &#8220;shift left&#8221; strategy to move hardware design earlier in the development cycle and closer to software design. In other words, anyone who can code should be able to design the hardware to run their code. Believers of HLS shared the same optimism that I did when I used Python for RTL design. In fact, in the mid 2000s, Professor Jason Cong built the xPilot HLS system in the same UCLA building. xPilot pioneered a lot of algorithmic innovations that made HLS more than just a convenience - the PPA metrics started to improve as well. xPilot became AutoESL Design Technologies, was acquired by Xilinx (now AMD) in 2011.</p><p>So far, this sounds more like a success story of HLS than what my title suggests. So what happened? HLS definitely proved to be useful in certain cases - like rapid prototyping and deployment on FPGAs. (The core technology of xPilot powers Vivado HLS, which is still used widely today.) However, HLS could never fully replace Verilog, because the promise of HLS was too good to be true. Even today, HLS-generated designs often consume more hardware resources and achieve significantly worse clock frequencies compared to handwritten RTL. More importantly, HLS never truly became what it promised. The fundamental mismatch between software-oriented C/C++ languages and hardware structures meant that HLS tools still can&#8217;t reliably produce synthesizable designs that integrate well with existing EDA tools which remain overwhelmingly Verilog-centric.</p><p>As a compromise, the idea of a Hardware Construction Language (HCL) was born. While HLS tools were intended to automatically infer the best microarchitecture from high-level algorithms, HCLs are high-level language extensions that allow designers to express hardware structure, while simultaneously leveraging powerful software constructs. Chisel, an extension of Scala, was developed at UC Berkeley in 2012 and is one of the most successful examples of an HCL. By the way, the Python framework I mentioned at the start of this post was also an HCL.</p><p>While HLS and HCLs were not perfect, they seemed like early versions of what the future of chip design would look like. HLS algorithmic innovations continue to improve PPA metrics, and a lot of new processor designs are built using frameworks like Chisel. All this while, the Verilog family has not made any major strides. If I had written this post a few years ago, this would be the end of the HDL story. But almost overnight, a new playbook has emerged.</p><div><hr></div><h2><strong>You Can Have Your Cake and Eat It Too</strong></h2><p>The original promise of HLS and HCLs was never about replacing Verilog for the sake of it. It was about building chips faster: by increasing designer productivity, reuse, and scalability. These benefits came with tradeoffs like worse PPA and painful EDA integration. As they say, there are no free lunches.</p><p>Generative AI changes this equation in a fundamental way.</p><p>With GenAI-assisted Verilog, you get many of the same benefits that HLS and HCLs aimed to provide, without abandoning the Verilog ecosystem. The productivity gains are the most obvious. Writing boilerplate RTL, parameterizing modules, refactoring interfaces, or instantiating complex microarchitectural patterns are all tasks that LLMs handle remarkably well. What once justified a higher-level language now often collapses into a single prompt. You still end up with Verilog, but you get there faster, with fewer errors, and with much less cognitive overhead.</p><p>More interestingly, GenAI quietly revives one of the most compelling arguments for HLS: the &#8220;shift left.&#8221; While this shift was long promised, HLS never reliably delivered on it. PPA was difficult to estimate accurately at the HLS abstraction, and those estimation errors were often more costly than starting from RTL in the first place.</p><p>Generative AI flips this dynamic entirely. Instead of postponing RTL, it accelerates its creation. High-level specifications, performance targets, and even informal design intent can now be translated directly into functional RTL models early in the design cycle. Hardware and software can evolve in parallel, not because RTL is avoided, but because it is cheap to generate, modify, and discard. In other words, GenAI enables a shift left, without a shift away from Verilog.</p><div><hr></div><h2><strong>Why Verilog Was Ready for This Moment</strong></h2><p>Verilog didn&#8217;t reinvent itself for the GenAI era. The GenAI era quietly reinvented itself around Verilog.</p><p>First, Verilog sits at the center of the EDA ecosystem. Decades of tool development have gone into taking Verilog as input and squeezing out the best possible PPA. Synthesis, place-and-route, timing closure, power analysis: these flows are deeply optimized for RTL written in Verilog and SystemVerilog. The switching costs are enormous.</p><p>Second, in the already limited chip design data available to train large language models, Verilog dominates. This creates a powerful flywheel effect. Verilog is used to train LLMs, which then generate more Verilog, further reinforcing its position as the language of digital design.</p><p>Today, we are seeing a combination of these two factors, in the form of closed-loop RTL design agents. Verilog code is both a cycle-accurate, and formally checkable artifact, which can be used to generate accurate reward signals to improve the AI. (I&#8217;m not going into details of these systems here, but all signs are pointing towards such RL environments becoming the future.) The implication of this is that GenAI won&#8217;t just lead to more Verilog, it will lead to better Verilog. Over time, this creates a compounding effect - Verilog will become the most optimized way to design chips, even if that Verilog is generated by an AI agent.</p><p>In the world I just described, HCLs and HLS tools seem irrelevant. If Verilog is cheap to generate, easy to iterate on, and continuously optimized by feedback, the incentive to move away from it fades. Verilog survived long enough to see the light at the end of the tunnel. Now, the future looks brighter than ever.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p></p>]]></content:encoded></item><item><title><![CDATA[The Computer Architecture Calendar]]></title><description><![CDATA[An annual ritual of hype, validation, and existential dread]]></description><link>https://chipinsights.net/p/the-computer-architecture-calendar</link><guid isPermaLink="false">https://chipinsights.net/p/the-computer-architecture-calendar</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Sun, 04 Jan 2026 00:59:07 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a3d71bde-a121-4394-9098-668919bae0d9_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s) and are not investment advice.</strong></p><div><hr></div><p><strong>Another disclaimer: The characters and events in this post are fictitious (but the conferences are real). Any resemblance to real people is purely coincidental (though statistically inevitable in my audience). For the record, I have not faithfully followed all of these conferences in the past. This post exists mainly because I&#8217;d like to start doing so this year and thought I might as well share ten conferences I think are useful. Unfortunately, I couldn&#8217;t resist making the whole thing a little funny, so here we go&#8230;</strong></p><div><hr></div><p></p><p>The protagonist of this story is someone I&#8217;m sure you have crossed paths with. They forget birthdays, miss tax deadlines, and couldn&#8217;t name a single band on tour - but they know exactly when and where every major computer architecture conference is held.</p><p>Their calendar isn&#8217;t divided into months. It&#8217;s divided into trade shows.</p><p>This is how a year in that person&#8217;s life looks.</p><div><hr></div><p></p><h2><strong>CES: Between hope and hype</strong></h2><p>Our protagonist loves speculation. Branch prediction, speculative execution, prefetching: all the performance gains they deliver are built on confidently guessing what will happen next. So there is no better way to start the year than CES in January. While CES isn&#8217;t always about chips, the recent AI accelerator mania has turned it into the perfect launchpad for the year. Bold claims, ambitious roadmaps, and just enough technical detail provide our protagonist with exactly the right mix of signals and buzzwords to carry them through the months ahead.</p><p><strong>Why it matters</strong></p><p>CES tells you what&#8217;s being productized and will therefore shape algorithms and architectures of the future.</p><p><strong>How to follow it efficiently</strong></p><p>Watch the keynotes. Skim the announcements. Pay attention to products that actually exist, not just the slides describing them.</p><p><strong>One thing to watch in 2026</strong></p><p>Has anyone built a useful, physical product where AI is solving a genuine problem.</p><div><hr></div><p></p><h2><strong>ISSCC: Let&#8217;s get real</strong></h2><p>By February, our protagonist&#8217;s speculation bubble goes through a silicon trial by fire. ISSCC is where we stop guessing and start measuring. Statements and projections from CES slides are replaced by die photos, power numbers, and phrases that begin with &#8220;fabricated in&#8230;&#8221;. Each one either validates past optimism or quietly resets expectations.</p><p><strong>Why it matters</strong></p><p>ISSCC is a good way to understand how performance and power scale between architectural simulations and real silicon.</p><p><strong>How to follow it efficiently</strong></p><p>Skim broadly to identify the most relevant designs. Then read one or two papers deeply to understand the true state of the art. Watch out for assumptions.</p><p><strong>One thing to watch in 2026</strong></p><p>How is Moore&#8217;s Law really progressing? Are improvements coming from architecture, process nodes, or both?</p><div><hr></div><p></p><h2><strong>GTC: Crowning the Starboy</strong></h2><p>March belongs to the Taylor Swift concert of today&#8217;s tech world. Our protagonist once followed GTC for innovations in parallel computing architectures. Now, it&#8217;s a coronation ceremony for Nvidia&#8217;s platform and its developers. Everyone listens to Jensen Huang carefully, because this is where the industry&#8217;s vocabulary for the next twelve months is minted.</p><p><strong>Why it matters</strong></p><p>GTC now defines the AI narrative and vocabulary that everyone else ends up adopting.</p><p><strong>How to follow it efficiently</strong></p><p>Watch the keynote. Then pick a handful of genuinely technical sessions. Ignore the excessive press coverage and stock-price astrology.</p><p><strong>One thing to watch in 2026</strong></p><p>What does Nvidia&#8217;s platform roadmap look like for inference&#8212;especially in a post Groq license world?</p><div><hr></div><p></p><h2><strong>Computex: Board yet?</strong></h2><p>Computex reminds our protagonist that chips do not exist in isolation. This is where architecture turns into motherboards, racks, cooling solutions, and deeply uncomfortable power budgets. It&#8217;s less about novelty and more about integration. More recently, it has also become the place where vendors launch their latest SoCs for, you guessed it, AI.</p><p><strong>Why it matters</strong></p><p>Computex shows what it actually takes to turn a good architecture into a usable product. It&#8217;s important to be aware of what&#8217;s happening outside the cores.</p><p><strong>How to follow it efficiently</strong></p><p>Get a high-level view of system architectures for the latest SoCs. Pay attention to reference designs and power, thermal, and memory numbers when they&#8217;re provided.</p><p><strong>One thing to watch in 2026</strong></p><p>Whether the industry finally agrees on what an &#8220;AI PC&#8221; is, and if any new players enter that space.</p><div><hr></div><p></p><h2><strong>ISCA: Sheer elegance</strong></h2><p>ISCA is where our protagonist feels intellectually nourished. The best ideas in computer architecture are here in their purest form. Some are brilliant. Some are fictional. A few will quietly influence designs a decade later. No product timelines, no market requirements. Just elegant computer architecture.</p><p><strong>Why it matters</strong></p><p>ISCA sharpens your architectural intuition by offering new ways to think about familiar problems.</p><p><strong>How to follow it efficiently</strong></p><p>Skim all abstracts. Then invest real time in a few papers that genuinely intrigue you. Ask whether ideas from one domain could transfer to another.</p><p><strong>One thing to watch in 2026</strong></p><p>How are CPU architectures evolving in the era of accelerated computing?</p><div><hr></div><p></p><h2><strong>DAC: Ship faster</strong></h2><p>All the old-school, hype-free academic computer architecture study leads our protagonist to wonder if AI is just a bubble. DAC arrives at exactly the right time, reassuring them with claims that AI-powered tools can reduce the time to ship a new chip from years to seconds. It also serves as a reminder of the less glamorous innards of chip design, like verification and physical design.</p><p><strong>Why it matters</strong></p><p>An architecture is only as good as its ability to be built, and more importantly, built on time. DAC shows how semiconductor tooling is evolving to close the gap between ideas and tape-out.</p><p><strong>How to follow it efficiently</strong></p><p>Skim panels to understand what&#8217;s new in tooling. Before getting excited, always check whether these tools actually work on industry-scale designs.</p><p><strong>One thing to watch in 2026</strong></p><p>If, and how AI-assisted design flows are being deployed in the industry.</p><div><hr></div><p></p><h2><strong>Hot Chips: Industry, minus the hype</strong></h2><p>As summer draws to a close, our protagonist finds themselves desperately searching for the truth. This leads them to Hot Chips, where architects speak slowly, precisely, and with slides that took their companies months to approve. Tradeoffs are admitted. Constraints are acknowledged. Reality is explained. Our protagonist trusts this conference more than almost any other.</p><p><strong>Why it matters</strong></p><p>Hot Chips is an industry conference that is unusually light on marketing. The goal is to simply explain what was shipped and why.</p><p><strong>How to follow it efficiently</strong></p><p>This is worth spending time on. Watch the talks. Read the slides carefully. Take notes.</p><p><strong>One thing to watch in 2026</strong></p><p>How many meaningfully different AI architectures do we really have?</p><div><hr></div><p></p><h2><strong>SEMICON Taiwan: Supply chain magic</strong></h2><p>By September, the story shifts to the heartland of semiconductor manufacturing. Here, our protagonist listens to conversations about yield, packaging, and process limits. The names of many exhibitors sound unfamiliar, but a closer look reveals them to be critical players in the semiconductor supply chain. It&#8217;s a reminder that architecture is important, but only a small part of a vastly more complex world.</p><p><strong>Why it matters</strong></p><p>Manufacturing constraints increasingly shape architectural decisions. They can&#8217;t be ignored.</p><p><strong>How to follow it efficiently</strong></p><p>Use this as a chance to understand the supply chain better. Process roadmap and packaging sessions are the most valuable.</p><p><strong>One thing to watch in 2026</strong></p><p>What&#8217;s new in the world of advanced packaging and 3D ICs that are actually ready for volume production.</p><div><hr></div><p></p><h2><strong>MICRO: Grounding ideas to reality</strong></h2><p>If ISCA feeds our protagonist&#8217;s love for elegant ideas, MICRO satisfies their need to see those ideas survive contact with reality. This is where high-level architectural concepts are dragged into the microarchitecture and explained cycle by cycle. MICRO isn&#8217;t for the casual computer architecture enthusiast. The diagrams are denser, the assumptions sharper, and the discussions expect real chip-design experience.</p><p><strong>Why it matters</strong></p><p>MICRO bridges the gap between architectural ideas and real implementations, exposing the costs, tradeoffs, and complexity that abstractions tend to hide.</p><p><strong>How to follow it efficiently</strong></p><p>Focus on papers that include detailed evaluations and realistic assumptions. Pay attention to how architectural ideas translate into microarchitectural blocks.</p><p><strong>One thing to watch in 2026</strong></p><p>Are there credible examples of AI influencing microarchitectural decisions better than a human designer can?</p><div><hr></div><p></p><h2><strong>IEDM: A glimpse of the future</strong></h2><p>The busy computer architecture calendar comes to a close at IEDM. Our protagonist listens to talks about devices, confidently thinking they won&#8217;t matter for years. Soon, a quiet fear sets in that, when these devices finally do matter, they might change everything. The thought sends a chill down their spine, and pushes them to search for notes from the one device physics class they took in undergrad.</p><p><strong>Why it matters</strong></p><p>IEDM defines what architectures may even be possible a decade from now. Following it is a form of long-term career insurance.</p><p><strong>How to follow it efficiently</strong></p><p>Don&#8217;t get stuck on the physics. Assume the devices work, then ask how they would reshape memory hierarchies, compute models, and system architectures.</p><p><strong>One thing to watch</strong></p><p>Which emerging technologies, like quantum, neuromorphic, and novel memories, are close to being deployed in real chip</p><div><hr></div><p></p><p>By the end of the year, our protagonist is carrying a heavy mental load: half-remembered acronyms, conflicting roadmaps, benchmark caveats, packaging buzzwords, and just enough existential dread to stay alert. They&#8217;ve learned when to believe, when to squint, and when to politely wait for silicon. And just as they start to feel like they&#8217;ve finally made sense of it all, the year resets. New nodes. New models. New claims. Same conferences. So, they clear their calendar, open a fresh notebook, and show up again, because <strong>as stressful and confusing as it sounds, somehow, it&#8217;s still fun.</strong></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h3><strong>Want to follow this year&#8217;s conferences with me?</strong></h3><p>I&#8217;ve created a shareable Google Calendar with all of these conference dates pre-filled, for anyone who wants their existential dread to be neatly scheduled. <strong>Subscribers will receive a link to this calendar - consider this a gentle nudge to subscribe if you haven&#8217;t already.</strong></p><p>If there are other conferences that every computer architect should mentally budget for, let me know in the comments. The calendar, like the study of computer architecture, is never truly complete.</p><div><hr></div>]]></content:encoded></item><item><title><![CDATA[The Alphabet Soup of Processors]]></title><description><![CDATA[Not sure which will end first: Moore&#8217;s Law, or alphabets used to describe processors?]]></description><link>https://chipinsights.net/p/the-alphabet-soup-of-processors</link><guid isPermaLink="false">https://chipinsights.net/p/the-alphabet-soup-of-processors</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Mon, 15 Dec 2025 02:00:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!846s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe79c457f-cd01-46c5-afe3-9e0559195b76_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s) and are not investment advice.</strong></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!846s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe79c457f-cd01-46c5-afe3-9e0559195b76_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!846s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe79c457f-cd01-46c5-afe3-9e0559195b76_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!846s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe79c457f-cd01-46c5-afe3-9e0559195b76_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!846s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe79c457f-cd01-46c5-afe3-9e0559195b76_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!846s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe79c457f-cd01-46c5-afe3-9e0559195b76_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!846s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe79c457f-cd01-46c5-afe3-9e0559195b76_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e79c457f-cd01-46c5-afe3-9e0559195b76_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2876327,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/181619479?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe79c457f-cd01-46c5-afe3-9e0559195b76_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!846s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe79c457f-cd01-46c5-afe3-9e0559195b76_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!846s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe79c457f-cd01-46c5-afe3-9e0559195b76_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!846s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe79c457f-cd01-46c5-afe3-9e0559195b76_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!846s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe79c457f-cd01-46c5-afe3-9e0559195b76_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>CPU. GPU. TPU. NPU. DPU. IPU. LPU.</p><p>Every year, the alphabet soup gets richer. But I wonder if it&#8217;s adding any value? Over the last two years, GPUs were the unquestioned champions of the AI boom. Right now, TPUs are having a moment as the new architecture that is supposedly better for AI than GPUs. NPUs reliably show up during some product keynotes, often accompanied by &#8220;inference&#8221; or &#8220;low power.&#8221; Meanwhile, CPUs still have their audience of PC and smartphone enthusiasts.</p><p>At this point, the industry&#8217;s obsession with new &#8220;PUs&#8221; is starting to look uncomfortably familiar. <a href="https://chipinsights.substack.com/p/demystifying-the-semiconductor-process">We&#8217;ve seen this movie before - with process nodes</a>. Once upon a time, node names conveyed real, comparable information. Then they became branding. &#8220;7nm&#8221; stopped meaning 7nm. &#8220;3nm&#8221; stopped being smaller than someone else&#8217;s &#8220;5nm.&#8221; The label survived; the meaning didn&#8217;t. I think processor acronyms are heading down the same path. Pick a new letter. Add &#8220;accelerator,&#8221; &#8220;custom,&#8221; or &#8220;ASIC.&#8221; Publish a carefully chosen benchmark. Congrats, you have a new processing unit.</p><p>The problem isn&#8217;t that TPUs, NPUs, or GPUs aren&#8217;t important or innovative. The problem is that the acronym leaves out the essence of the architecture: what it&#8217;s actually optimized for, what tradeoffs it makes, and where its real value comes from. If you squint hard enough, almost anything can be called an accelerator. If you zoom out far enough, almost everything looks like a CPU. This does not sit well with me.</p><p>Continuing with <a href="https://chipinsights.substack.com/p/what-should-i-write-if-ai-can-write">the theme of my last post</a>, I don&#8217;t think the right question is &#8220;Is this a GPU or an NPU?&#8221; It&#8217;s whether we&#8217;re even using the right vocabulary to evaluate compute architectures at all. Instead of arguing over letters, we should be asking sharper questions - questions that force clarity instead of reinforcing branding. I think the following four questions are a far more informative way to classify chips.</p><div><hr></div><p></p><h2>Question 1. Host relationship: Is your product the boss, a helper, or just another block on the die?</h2><p><strong>Categories:</strong></p><ul><li><p><strong>Standalone:</strong> Boots an OS and owns the system.</p></li><li><p><strong>Co-processor:</strong> Lives behind PCIe or a fabric. Needs a host to schedule work, manage memory, and keep the lights on.</p></li><li><p><strong>Integrated IP:</strong> One of many blocks inside an SoC, visible to software only through drivers or libraries.</p></li></ul><p><strong>Why it matters:</strong></p><p>Host relationship determines who controls the system. Standalone processors shape the entire software stack and system architecture. Co-processors live and die by host integration and software orchestration. Integrated IP blocks rarely escape the platform they&#8217;re embedded in, no matter how impressive the pure-silicon performance is. Two chips with identical compute units can have wildly different impact depending on whether they&#8217;re in charge, or waiting for instructions.</p><div><hr></div><p></p><h2>Question 2. Domain coverage: How many different major software domains (at least a million developers) can this architecture serve effectively?</h2><p>To clarify, I consider the following as major software domains of today.</p><ul><li><p><strong>System software:</strong> OS kernels, language runtimes, compilers, CLI tools</p></li><li><p><strong>User Interfaces:</strong> desktop/mobile apps, browsers, light graphics</p></li><li><p><strong>Data processing:</strong> SQL databases, analytics, streaming</p></li><li><p><strong>Media &amp; graphics:</strong> Video encoding/decoding, 2D/3D graphics pipelines</p></li><li><p><strong>High Performance Computing:</strong> simulation, scientific computing, linear algebra</p></li><li><p><strong>ML/AI workloads:</strong> training and inference across model families</p></li></ul><p><strong>Categories:</strong></p><ul><li><p><strong>General purpose:</strong> The chip is competitive or better than the incumbent across 3 or more domains</p></li><li><p><strong>Domain specific:</strong> The chip excels only in 1-2 domains</p></li></ul><p><strong>Why it matters:</strong></p><p>Domain coverage is the difference between <em>platforms</em> and <em>point solutions</em>. General-purpose architectures benefit from massive software ecosystems, long lifetimes, and constant reuse. Domain-specific chips can deliver spectacular gains, but only as long as the workload stays stable. When you are looking at a domain-specific chip, the domain matters as much, if not more, that the silicon innovation. (<a href="https://chipinsights.substack.com/i/157692695/pick-the-right-domain">As Jensen Huang puts it, pick &#8220;Zero Billion Dollar&#8221; markets.&#8221;</a>)</p><div><hr></div><p></p><h2>Question 3. Execution paradigm: What architectural feature delivers throughput?</h2><p><strong>Categories:</strong></p><ul><li><p><strong>MIMD (Multiple Instruction, Multiple Data):</strong> Many independent cores, each running its own control flow. Classic multicore and many-core CPUs live here.</p></li><li><p><strong>SIMT (Single Instruction, Multiple Threads):</strong> Groups of lanes share an instruction stream with per-lane masking. This is the beating heart of modern GPUs.</p></li><li><p><strong>Custom:</strong> Fixed or semi-fixed dataflow architectures designed around specific computation patterns (e.g., systolic arrays, spatial fabrics).</p></li></ul><p><strong>Why it matters:</strong></p><p>Execution paradigm reveals what kind of parallelism the architecture is betting on. MIMD favors flexibility and irregular control flow. SIMT thrives on massive data parallelism. Custom paradigms trade generality for efficiency. Once you understand this axis, performance claims stop sounding magical and start looking like predictable outcomes of design choices.</p><div><hr></div><p></p><h2>Question 4. Programmability model: How does a programmer get work done from your chip?</h2><p><strong>Categories:</strong></p><ul><li><p><strong>Native ISA:</strong> General-purpose compilers (C/C++) target it directly.</p></li><li><p><strong>Kernel-compiled:</strong> You write kernels in a language extension like CUDA, OpenCL, HIP, or a domain-specific language.</p></li><li><p><strong>Graph-compiled:</strong> You describe computation as a graph (often via an ML framework like PyTorch or TensorFlow), and a compiler maps it to the hardware. In graph-compiled systems, the graph is the primary abstraction for the programmer, not the kernel. (Graph-compiled systems still use kernels underneath.)</p></li><li><p><strong>Bitstream configured:</strong> You configure the hardware fabric itself. For example, FPGA bitstreams or CGRA configurations.</p></li></ul><p><strong>Why it matters:</strong></p><p>Programmability determines who can use the hardware and how fast ecosystems form. Native ISAs scale with developer count. Kernel models reward specialists and expert programmers. Graph-based systems trade flexibility for convenience: they work extremely well when your problem fits the graph, and poorly when it doesn&#8217;t. Bitstream-based approaches offer ultimate hardware control, but at the cost of accessibility. Many promising architectures fail not because of silicon, but because the programming model never escapes a niche audience.</p><div><hr></div><p></p><p>Taken together, these questions offer a better way to think about modern compute architectures. Once you look at chips through these lenses, debates like GPU vs TPU vs NPU start to feel oddly shallow. Architectures stop being mysterious, and performance claims start to look like the predictable outcomes of very specific tradeoffs. For instance, below is a classification of several chips that are often loosely grouped under the label &#8220;accelerators.&#8221; This classification forces each architecture to reveal its position along concrete design axes: who controls the system, how broad the user base is, where throughput actually comes from, and how programmers interact with the hardware. Chips that are often lumped together as &#8220;accelerators&#8221; end up in very different places once you apply these questions, and those differences explain far more about real-world impact, adoption, and longevity than any three-letter acronym ever could.</p><div class="captioned-image-container"><figure><div class="image-link image2" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_wyD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce3391fb-b979-41fa-87c4-a66355fbbda8_2037x407.png 424w, https://substackcdn.com/image/fetch/$s_!_wyD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce3391fb-b979-41fa-87c4-a66355fbbda8_2037x407.png 848w, https://substackcdn.com/image/fetch/$s_!_wyD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce3391fb-b979-41fa-87c4-a66355fbbda8_2037x407.png 1272w, https://substackcdn.com/image/fetch/$s_!_wyD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce3391fb-b979-41fa-87c4-a66355fbbda8_2037x407.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_wyD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce3391fb-b979-41fa-87c4-a66355fbbda8_2037x407.png" width="1456" height="291" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ce3391fb-b979-41fa-87c4-a66355fbbda8_2037x407.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:291,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:99797,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/181619479?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce3391fb-b979-41fa-87c4-a66355fbbda8_2037x407.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_wyD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce3391fb-b979-41fa-87c4-a66355fbbda8_2037x407.png 424w, https://substackcdn.com/image/fetch/$s_!_wyD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce3391fb-b979-41fa-87c4-a66355fbbda8_2037x407.png 848w, https://substackcdn.com/image/fetch/$s_!_wyD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce3391fb-b979-41fa-87c4-a66355fbbda8_2037x407.png 1272w, https://substackcdn.com/image/fetch/$s_!_wyD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fce3391fb-b979-41fa-87c4-a66355fbbda8_2037x407.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></div></figure></div><p><strong>If you haven&#8217;t subscribed yet, here&#8217;s a reason to: when you subscribe, you&#8217;ll receive the link to the full list with other categories and explanations.</strong></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>If you have read so far, I&#8217;m curious - what other questions would add value to chip architecture classification?</p><p></p>]]></content:encoded></item><item><title><![CDATA[What should I write if AI can write everything?]]></title><description><![CDATA[What next for Chip Insights]]></description><link>https://chipinsights.net/p/what-should-i-write-if-ai-can-write</link><guid isPermaLink="false">https://chipinsights.net/p/what-should-i-write-if-ai-can-write</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Sun, 07 Dec 2025 07:17:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s) and are not investment advice.</strong></p><div><hr></div><p>It&#8217;s been more than two months since I wrote my last post. One of the reasons I took a pause was to deliberate over a question that just wasn&#8217;t leaving me: <strong>Does a technical newsletter like Chip Insights matter in a world where GenAI keeps getting better?</strong> To answer this, I need to first define what &#8220;matters&#8221; means. The reality is, this newsletter will only ever reach a small fraction of people who are interested in a very niche topic - so traditional content metrics like views or subscribers make no sense. The only true feedback for my work comes from this question: <strong>&#8220;Would I read this post if it was written by someone else.&#8221;</strong> With today&#8217;s AI tools, that question really becomes: <strong>&#8220;Is it easier to generate this post on an AI chatbot, that write it?&#8221;</strong></p><div><hr></div><h2><strong>Things we tell ourselves to feel better</strong></h2><p>One of the most common arguments in defense of humans is that &#8220;AI makes mistakes.&#8221; I don&#8217;t think this is a strong argument to hide behind. Sure, chatbots hallucinate and make mistakes, but so do humans - even the most decorated content creators. Like a lot of technologies we have seen in the past, I&#8217;m sure the errors will reduce over time, and AI answers could become a reliable source of information. In my opinion, content creators saying their content is better because it&#8217;s more accurate, are willing to challenge an ever-improving machine backed by trillions of research dollars. Personally, I think that&#8217;s a losing battle.</p><p>There is another defense of traditional content which never sat well with me. I&#8217;ve seen a lot of arguments about how consuming difficult technical content is &#8220;inherently noble&#8221;, and AI provides processed answers which are &#8220;cheats&#8221; and will shrink your brain. In my opinion, difficulty, by itself, should never be a virtue to strive for. Before humans discovered fire, digestion was hard, consuming a lot of energy. Cooking made food easier to process, freeing energy for other activities like thinking, building, and evolving. I&#8217;m quite sure AI-generated educational content will have a very similar positive effect.</p><p>So before dismissing AI, we should acknowledge the aspects that AI excels at.</p><div><hr></div><h2><strong>Is AI is coming for my posts?</strong></h2><p>Today&#8217;s AI is extraordinary at compressing information. It can digest long, messy documents and explain them in simpler terms. Interestingly, this is what most traditional content creation has centered around. (Including some of my posts, I&#8217;ll admit.) I think we are getting very close to the point where the returns from such content won&#8217;t justify the investment - it will be so much easier to generate such content on demand.</p><p>AI is also a fantastic tool to explore content related to a specific topic you are interested in. This has been my favorite use of AI: I can easily get a list of 5-10 sources I want to explore for my research on a topic, bypassing the SEO-engineered, often irrelevant links. In my experience of doing this, I have found that a few in-depth engaging sources, along with the AI summary on the topic, are sufficient for my research - I don&#8217;t want to jump multiple links where parts of the information are spread out.</p><p>Essentially, if the purpose of a piece of writing is simply to transfer information from one form to another, or one place to another, AI will inevitably outperform humans on speed, breadth, and efficiency.</p><div><hr></div><h2><strong>So where does that leave me?</strong></h2><p>The point of this exercise was not to say that AI will replace content creation entirely. The concept of generative AI fundamentally cannot displace certain types of content - which is specifically what I want to focus on.</p><p>My north star for content creation has been the Acquired podcast. For those who don&#8217;t know, the idea behind Acquired is to tell the story of a company, with all of its gory details, in episodes that sometimes last 4 hours. Today&#8217;s AI struggles with such analysis, and there are fundamental reasons why it might be this way for a long time. An LLM lacks a &#8220;mental model&#8221; - understanding of concepts like time, hierarchies and abstractions. Models also gravitate towards a median of possibilities. While this makes AI excellent at flattening complexity, maintaining engagement sometimes requires expanding complexity into a narrative form. The failure to do this is what makes AI sound &#8220;robotic.&#8221; While you can get away with a robotic tone if you have &#8220;explain the differences between a CPU and a GPU,&#8221; it&#8217;s important to keep the audience engaged if you want to &#8220;share a deep dive on the evolution of GPU architectures&#8221;.</p><p>Another problem with AI content is that it is user driven - the value of the answer depends on the question you are asking. AI might have all the answers, but AI isn&#8217;t curious. Good content, therefore, should prompt the audience to ask more questions - questions about bottlenecks, architectural shifts, industry narratives, or places where assumptions are beginning to bend. Questions like these generally emerge from judgment, from noticing patterns, and from wondering what others might be missing - something that AI cannot replicate.</p><p>This is what I&#8217;ve been thinking about during my break: <strong>that the real value of technical content isn&#8217;t in being a source of information, but in being a source of interpretation.</strong> I&#8217;m looking forward to returning to writing with these ideas in mind.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p></p>]]></content:encoded></item><item><title><![CDATA[Letter to the subscribers - Year 1]]></title><description><![CDATA[Thoughts on a year writing Chip Insights]]></description><link>https://chipinsights.net/p/letter-to-the-subscribers-year-1</link><guid isPermaLink="false">https://chipinsights.net/p/letter-to-the-subscribers-year-1</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Sat, 20 Sep 2025 14:49:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s) and are not investment advice.</strong></p><div><hr></div><p>This post is not about chips. It&#8217;s not even about AI like <a href="https://chipinsights.substack.com/p/2025-yc-ai-startup-school-round-up">that one post</a> was. This is about me.</p><p>As I&#8217;m writing this, it&#8217;s been a year since I wrote my first post on Chip Insights. So, I thought I&#8217;ll reflect a little and open up about my plans for the future.</p><div><hr></div><h1><strong>Why did I start Chip Insights?</strong></h1><p>Ideally, this should have been a part of my first post. But I did not have a good answer. Instead, I chose to write about Moore&#8217;s law:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;33a5703e-a188-453a-9b51-f3776c503a6c&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Moore&#8217;s Law and the Performance Promise&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-09-16T01:58:55.098Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.substack.com/p/moores-law-and-the-performance-promise&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:148941455,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:5,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Turns out, Moore&#8217;s law was actually the perfect way to start, because, like the number of transistors in a chip, <strong>ideas compound exponentially</strong>. Every new post I have written here has made me an exponentially better thinker. So more than anything, Chip Insights is my training ground; the place where I take half-baked ideas and make them concrete. <strong>I learn more from Chip Insights than any of my readers.</strong></p><p>Well if that&#8217;s my reason, one could ask (and a lot of people have asked) why I post this content publicly. I have found that there is a huge difference in the way I think in private, versus when I need to present my ideas. The vulnerability associated with public content has pushed me to think more deeply than I would have in a private brainstorming session. For instance, I always thought I knew what CPU bitness was, but when I decided to write a post about it, I realized how complex that number truly is.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;f98f3ca9-fc80-4734-aff9-42e80716f506&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;What does CPU bitness mean?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-12-21T17:29:37.606Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.substack.com/p/what-does-cpu-bitness-mean&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:153459070,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:5,&quot;comment_count&quot;:2,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h1><strong>What do I offer?</strong></h1><p>I&#8217;m aware that in a post addressing my subscribers, the right way to answer the &#8220;why&#8221; question is to say something altruistic, something like &#8220;I want to pass on my learnings to students.&#8221; It&#8217;s nice when that happens, but I would be lying to myself if I said everything I do is towards that goal. However, I have two ways of thinking that one might consider altruistic.</p><p>First, I am convinced that the positioning of computer engineering as a career needs some work. There are a few attributes that computer engineering has acquired over time which does not sit well with me: slow-moving, hard, and risk-averse come to mind. A lot of very talented students are put-off by these attributes. The emergence of AI has made semiconductors cool again, and I want to use this opportunity to reframe how the industry is perceived. For example, not a lot of people know how fast-paced the EDA world was - a story I covered here.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;3d3aeff8-5e0a-4680-bbbf-e8b8f7dcb1c7&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;EDA Deep Dive - Part 1: The History&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-11-16T18:31:42.506Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.substack.com/p/eda-deep-dive-part-1-the-history&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:151751360,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:5,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>There&#8217;s another issue. Even if you like this industry and want to pursue your career here, there are too many roadblocks, which eventually kills potential talent. I am not in a position to bring about structural changes to the industry, but one thing I can do is to reduce some anxiety in the process of making it, which is what led to posts like this.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;01aefb57-a869-4601-82d3-c8cef313bba3&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The Computer Engineering Game&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-03-22T03:59:31.903Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.substack.com/p/the-computer-engineering-game&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:159596495,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:38,&quot;comment_count&quot;:3,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h1><strong>How is Chip Insights different?</strong></h1><p>I have done some technical writing before Chip Insights - in school, at work, and also authoring research papers. But the advantage of a medium like this is the freedom it provides. I have used this freedom in three ways.</p><p>First, I was able to bypass the need to explain concepts from the ground up - as you would do in a typical college program. For example, the right way to understand power consumption in chip design is to first understand exactly how a transistor works. But I have always found this to be a bit restrictive - in the case of chip power, only engineers with visibility to the transistor level contribute ideas, and they are often quite similar. If a software engineer wants to understand what makes a chip power efficient, they would be scared off by all the complex transistor-level terminology and would make no progress. My post on power optimization was an attempt to see how much I could abstract out without being inaccurate - turns out, quite a lot.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;dde6bdcd-1088-4d96-98b4-3a1af9e1c2db&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Power essentials for a chip architect&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-06-07T02:37:32.387Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.substack.com/p/power-essentials-for-a-chip-architect&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:165388326,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:31,&quot;comment_count&quot;:3,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Another theme in most of my technical post is the idea of analogies - comparing chip design concepts to something relatable - to make them stick in your mind a little longer. I know some people, especially the &#8220;academic&#8221; types, find analogies to be juvenile. But I have actually found that thinking in terms of analogies, and stretching them out as much as possible really strengthens your understanding of something. For example, I tried that with on-chip networks by comparing them to airline routes in this post.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;9c116894-d32e-4590-ba8a-5765ecd9bd15&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Understanding on-chip networks&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-08-25T04:30:46.059Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!5OF0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9b0a9-88e1-4a1a-a08c-144fc6b6dc39_1046x751.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.substack.com/p/understanding-on-chip-networks&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:171857530,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:14,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Finally, there is world building. I think this is the hardest to crack, because building interesting worlds isn&#8217;t easy - if it were, The Walt Disney Company wouldn&#8217;t be worth $200 billion. But if you can build a world that is compelling enough, then even reading about a pedestrian topic like Static Timing Analysis can be made fun, which is what I tried here.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;62675c5c-5f67-4809-86a5-18135fcfc0c0&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Confessions of a static timing analysis tool&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-07-21T15:11:11.670Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.substack.com/p/confessions-of-a-static-timing-analysis&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:168864393,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:15,&quot;comment_count&quot;:3,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h1><strong>How has my writing evolved?</strong></h1><p>I never realized this, but a lot of my early posts were based on topics which had very little scope for subjectivity - for example, this post about pipelining, which walks through how a traditional CPU pipeline has always looked like.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;1429b67e-cf10-4e93-b106-7e6c96ee8d40&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;In-Order Instruction Pipelining in Processors&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2024-09-29T23:24:51.011Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.substack.com/p/computer-architecture-101-series&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:149584645,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:4,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>I think a part of me was unsure about how new ideas would be perceived - especially from someone who lacks authority. But as I went forward on this journey, I think my writing has become more assertive. I wrote a post on how AI will influence EDA, which was away from my comfort zone, because, well, nobody still knows the answer.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;0b74d26e-9c47-47f2-8451-dc6dc4147e48&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;EDA Deep Dive - Part 3: The AI Era&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-01-11T17:29:32.777Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.substack.com/p/eda-deep-dive-part-3-the-ai-era&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:154626822,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:5,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>A bolder version of this was my more recent post about full-stack chip design, and idea that <a href="https://news.ycombinator.com/item?id=44486541">irked a lot of readers on Hacker News</a>, but something that I believe is a well thought out analysis.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;54448de2-155e-4943-9e75-679b4652c485&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The era of full-stack chip designers&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-07-06T22:08:24.120Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.substack.com/p/the-era-of-full-stack-chip-designers&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:167679014,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:14,&quot;comment_count&quot;:4,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>I also expanded to cover aspects beyond technical knowledge, because I think the kind of person you are strongly influences the kind of engineer you would be, and we engineers are very bad at understanding this. I aim to do more of this, but one place where I see this mattering a lot is technical interviews, which prompted me to write this post.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;8a4164e2-9f8e-43c8-bfc2-9d707f14be55&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The psychology of a technical interview&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-08-04T06:02:37.496Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.substack.com/p/the-psychology-of-a-technical-interview&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:170059945,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:9,&quot;comment_count&quot;:1,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h1><strong>How to predict the future?</strong></h1><p>With the great power of assertiveness comes a great responsibility - the responsibility of being right. (More often than not, at least.) So how can someone get better at that? The best way I know to predict the future is to learn from the past - that&#8217;s the only formula that seems to work. (When AI takes over, I&#8217;m pretty sure they&#8217;ll tell us the same thing.) Exploring semiconductor history has been one of the most rewarding experiences of this journey, and posts like this will continue to be a big part of Chip Insights.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;07d272d0-18ea-453e-9448-5664f44342ec&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Evolution of HDLs - Part 1: The birth of VHDL and Verilog&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-03-08T15:35:42.317Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.substack.com/p/evolution-of-hdls-part-1-the-birth&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:158652416,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:14,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>The other way to predict the future is to learn about great companies and their strategies. Patterns in business repeat themselves - success is about finding the right pattern. I captured my learnings from one of the most successful companies of our time in this post.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;53669d4e-024f-4534-8a53-054ed5ef8ab7&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How to build a new chip architecture, ft. Nvidia&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-07-13T18:06:00.000Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.substack.com/p/how-to-build-a-new-chip-architecture&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:157692695,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:8,&quot;comment_count&quot;:0,&quot;publication_id&quot;:2850528,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div><hr></div><h1><strong>So, what&#8217;s the future of Chip Insights?</strong></h1><p>Posting an article (almost) every week for the last year has been a great experience - I learn a lot each time I do it, and hopefully could pass on some of my learnings in the process. But something that I have enjoyed even more than that has been the feeling that writing unlocks in me - every time I plan to write a new article, I want to reinvent myself and try something different. This feeling is powerful, and I have seen that it spreads across all aspects of my life - not just writing. But I am realizing that the best way to reinvent is not always to do it more often&#8230;</p><p>In chip design companies, a common practice used to innovate better is called the &#8220;tick-tock&#8221; model. Here, a &#8220;tick&#8221; project involves incremental improvements that can be completed quickly. But after a few ticks, companies pursue a &#8220;tock&#8221; project - a big structural change, usually dubbed as the next chip generation. In the last year, Chip Insights has seen a lot of ticks that I&#8217;ve highlighted in this post, but it&#8217;s time for a tock. There are few new ideas that I would like to pursue, which needs me to take a <strong>break from writing.</strong></p><div><hr></div><p>Whether this is the first post of mine you are reading, or you are that one subscriber who subscribed even before I wrote my first ever post, (that really happened, still don&#8217;t know why, but I&#8217;ll take it.) or maybe you came in somewhere along the way, <strong>thank you so much for showing that you care.</strong></p><p>I urge you to stay subscribed, because the love for writing hasn&#8217;t left me. (And it never will.) I&#8217;ll be back soon with Chip Insights 2.0, and it will be worth your wait. Until then, I bid adieu.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div>]]></content:encoded></item><item><title><![CDATA[Understanding on-chip networks]]></title><description><![CDATA[How different components of your chip talk to each other]]></description><link>https://chipinsights.net/p/understanding-on-chip-networks</link><guid isPermaLink="false">https://chipinsights.net/p/understanding-on-chip-networks</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Mon, 25 Aug 2025 04:30:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5OF0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9b0a9-88e1-4a1a-a08c-144fc6b6dc39_1046x751.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s) and are not investment advice.</strong></p><div><hr></div><p>Most content in computer architecture courses, and also my newsletter, focus on how a computing chip &#8220;computes&#8221; - by exploring how the processor core, memory, I/O, and other parts of the chip work in isolation. But in reality, a large portion of time and energy consumed by computing chips is a result of the interactions between the different components of the chip. (called &#8220;nodes.&#8221;) For instance, moving data from memory and I/O to and from the processor core, or moving data between processor cores. For a long time, these have been assumed to be trivial. (and in reality, they were.) But with increasing number of cores and deeper memory hierarchies, efficiently moving data across a chip can make a huge difference to the overall chip performance. This post intends to introduce the concept to absolute beginners. (If you have been reading my newsletter long enough, you should sense an analogy coming&#8230;)</p><div><hr></div><h1>Welcome to your new venture - an airline company</h1><p>The logistics of airlines has always fascinated me - so that&#8217;s the vehicle (pun intended) we are going to use to understand on-chip networks. Imagine this: you read all my posts, became a semiconductor legend, made a lot of money, and have now purchased two Airbus A320 planes, and started a new airline company. Your first task is to decide which routes your airline should operate between, and the logistics behind making this happen. Turns out, designing an on-chip network is surprisingly similar&#8230;</p><p>Going forward in this post, you can consider the following terms to be analogous:</p><ul><li><p>An airport is similar to a node in the chip (could be a processor core, memory, or I/O component)</p></li><li><p>An airline route can be treated like a chip bus (bus here is not the transport kind, you can think of it as a collection of wires that can transfer high/low voltage.)</p></li></ul><div><hr></div><h2>Model 1: Point to point connection</h2><p>If you have two planes, what&#8217;s the simplest thing you can do? You can have two exclusive routes that can operate independently, and in parallel - say one route between Los Angeles (LAX) and San Francisco (SFO), and the other between LAX and New York. (JFK.)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PmJW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F213ca0a0-cc64-4d54-9bb1-7167aa9e8b63_636x588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PmJW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F213ca0a0-cc64-4d54-9bb1-7167aa9e8b63_636x588.png 424w, https://substackcdn.com/image/fetch/$s_!PmJW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F213ca0a0-cc64-4d54-9bb1-7167aa9e8b63_636x588.png 848w, https://substackcdn.com/image/fetch/$s_!PmJW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F213ca0a0-cc64-4d54-9bb1-7167aa9e8b63_636x588.png 1272w, https://substackcdn.com/image/fetch/$s_!PmJW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F213ca0a0-cc64-4d54-9bb1-7167aa9e8b63_636x588.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PmJW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F213ca0a0-cc64-4d54-9bb1-7167aa9e8b63_636x588.png" width="636" height="588" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/213ca0a0-cc64-4d54-9bb1-7167aa9e8b63_636x588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:588,&quot;width&quot;:636,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:35013,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/171857530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F213ca0a0-cc64-4d54-9bb1-7167aa9e8b63_636x588.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PmJW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F213ca0a0-cc64-4d54-9bb1-7167aa9e8b63_636x588.png 424w, https://substackcdn.com/image/fetch/$s_!PmJW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F213ca0a0-cc64-4d54-9bb1-7167aa9e8b63_636x588.png 848w, https://substackcdn.com/image/fetch/$s_!PmJW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F213ca0a0-cc64-4d54-9bb1-7167aa9e8b63_636x588.png 1272w, https://substackcdn.com/image/fetch/$s_!PmJW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F213ca0a0-cc64-4d54-9bb1-7167aa9e8b63_636x588.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Different nodes in a chip can also be connected in the same way - just have a bus connecting different components with each other, and transfer data through these buses. This is called a &#8220;bus-based architecture&#8221; and although it seems simple, it is one of the most commonly used networking architecture. (Remember, most airlines continue to operate all-year daily flights between two fixed locations - the logistics can&#8217;t be simpler than this.) However, this approach comes with it&#8217;s limitations, like:</p><p><strong>1. Poor scalability</strong></p><p>If you want to increase the number of nodes, you need to increase the number of buses. This makes placement and routing very challenging in the chip. (Do you really want to buy a new plane for each new destination you want to serve?)</p><p><strong>2. Limited Flexibility</strong></p><p>Having one bus assigned for each connection makes the design very inflexible: Say during execution, two nodes in your chip need to transfer more data than two other nodes, they both still have similar buses with the same bandwidth. It&#8217;s like operating an empty flight from LAX to JFK, even though the LAX-SFO route is overbooked!</p><p>As you might imagine, the flexibility problem isn&#8217;t too hard to solve - you own the airline, so you can be flexible with the routes. That&#8217;s the idea of arbitration.</p><div><hr></div><h2>Model 2: Arbitration</h2><p>Let&#8217;s say you want to add a new destination for your Airline to serve - Miami. (MIA.) However, unlike SFO and JFK, travel to Miami is seasonal, peaking during the holidays. In this case, instead of buying a new plane to serve this route, wouldn&#8217;t it make more sense to redirect your flights based on the demand? You can &#8220;arbitrate&#8221; by:</p><ul><li><p>Operating flights from LAX to SFO and JFK during the week</p></li><li><p>Changing one, or both of the routes to LAX-MIA during the weekends or major holidays</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2_DX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01ecce4e-0d7a-4684-b93c-577c339ed489_695x491.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2_DX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01ecce4e-0d7a-4684-b93c-577c339ed489_695x491.png 424w, https://substackcdn.com/image/fetch/$s_!2_DX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01ecce4e-0d7a-4684-b93c-577c339ed489_695x491.png 848w, https://substackcdn.com/image/fetch/$s_!2_DX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01ecce4e-0d7a-4684-b93c-577c339ed489_695x491.png 1272w, https://substackcdn.com/image/fetch/$s_!2_DX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01ecce4e-0d7a-4684-b93c-577c339ed489_695x491.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2_DX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01ecce4e-0d7a-4684-b93c-577c339ed489_695x491.png" width="695" height="491" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/01ecce4e-0d7a-4684-b93c-577c339ed489_695x491.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:491,&quot;width&quot;:695,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:24534,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/171857530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01ecce4e-0d7a-4684-b93c-577c339ed489_695x491.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2_DX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01ecce4e-0d7a-4684-b93c-577c339ed489_695x491.png 424w, https://substackcdn.com/image/fetch/$s_!2_DX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01ecce4e-0d7a-4684-b93c-577c339ed489_695x491.png 848w, https://substackcdn.com/image/fetch/$s_!2_DX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01ecce4e-0d7a-4684-b93c-577c339ed489_695x491.png 1272w, https://substackcdn.com/image/fetch/$s_!2_DX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01ecce4e-0d7a-4684-b93c-577c339ed489_695x491.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This idea of arbitration can also be used in chips to connect more nodes without adding new buses - by sharing existing buses. Arbitration can be done in many different ways (called arbitration policies) each with it&#8217;s pros and cons. While I&#8217;m not going to cover all of them in detail, here are some examples:</p><ul><li><p><strong>Round robin arbitration:</strong> Every node gets a turn to use the bus, and then waits for all other nodes to be done before using the bus again.</p></li><li><p><strong>Daisy chain arbitration:</strong> All nodes can access the bus simultaneously, but there is a predefined priority order. (Something like this: If both SFO and MIA are in demand, always pick SFO)</p></li><li><p>Collision-based arbitration: These are more advanced, and rely on real time chip behavior. (For example: If there are no bookings for next week&#8217;s flights to JFX, cancel them and open bookings to MIA.)</p></li></ul><p>As you can guess, arbitration adds complexity to your chip. (In case of your airline company, you can think of this like hiring someone to manage the routes.) But in some cases, arbitration is a great way to reduce the number of buses in the chip - Say you have two cores connected to a memory, but your chip mostly runs tasks on one of the cores - then the bus between the two cores and the memory can be shared.) However, as your chip becomes complex, the shortcomings of arbitration become evident:</p><p><strong>1. Bandwidth is limited</strong></p><p>Remember, although we are able to serve three destinations now by arbitrating between two planes, we can still only serve two destinations at a time. Let&#8217;s say each flight can hold 150 passengers, the maximum number of unique passengers you can transport each day is 300 each way - which is the same as it would be if you operated as a point-to-point connection. In chip language, the maximum amount of data that can be moved from one node to another at a given time is called the bandwidth. Although arbitration will help manage multiple nodes, the bandwidth is still limited by the number of buses in a bus-based architecture.</p><p><strong>2. Single point of failure</strong></p><p>Arbitration has another issue. Say you have decided to fly one of your planes from LAX to SFO and back on a Friday, but from LAX to MIA on Saturday. (And the other plane is going to JFK both days.) However, thunderstorms hit SFO on Friday, grounding all flights. This means the flight won&#8217;t be back to LAX in time for the trip to MIA. So this flight becomes a single point of failure for two of your routes. While the weather does not affect electrons in your chip, failures of other types are possible - say you are using a round-robin arbiter, but one of your core runs into an infinite loop - that core does not release the bus and stops the entire chip from executing. That&#8217;s the risk with arbitration-based approaches.</p><div><hr></div><h2>Model 3: The crossbar, a.k.a hub and spoke model</h2><p>If you have ever flown in one of the major international airlines like Emirates or Qatar airways, you would have experienced a layover at one of their &#8220;hubs&#8221; like Dubai or Doha. These airlines operate based on a very popular airline routing model called the hub and spoke model. (Inspired from it&#8217;s resemblance to your bicycle wheel.) Now that you are a seasoned manager of an airline, let&#8217;s take inspiration from this model and add a fourth destination to our airline - Seattle. (SEA.) However this time, the flight schedules are adjusted in such a way that LAX becomes the hub:</p><ul><li><p>Two flights leave each morning from SFO and SEA, respectively, and land in LAX at 11 AM</p></li><li><p>The same two flights depart from LAX at 3 PM - one to JFK, and the other to MIA</p></li></ul><p>With this model, the airline can sell tickets for the following routes:</p><ul><li><p>SFO-LAX, SEA-LAX, LAX-JFX, LAX-MIA with no layover</p></li><li><p>SFO-JFK, SEA-JFK, SFO-MIA, SEA-MIA with a layover at LAX</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_iB-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bdee037-ee4e-4dc4-b495-e093ebf01990_611x452.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_iB-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bdee037-ee4e-4dc4-b495-e093ebf01990_611x452.png 424w, https://substackcdn.com/image/fetch/$s_!_iB-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bdee037-ee4e-4dc4-b495-e093ebf01990_611x452.png 848w, https://substackcdn.com/image/fetch/$s_!_iB-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bdee037-ee4e-4dc4-b495-e093ebf01990_611x452.png 1272w, https://substackcdn.com/image/fetch/$s_!_iB-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bdee037-ee4e-4dc4-b495-e093ebf01990_611x452.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_iB-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bdee037-ee4e-4dc4-b495-e093ebf01990_611x452.png" width="611" height="452" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4bdee037-ee4e-4dc4-b495-e093ebf01990_611x452.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:452,&quot;width&quot;:611,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:38392,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/171857530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bdee037-ee4e-4dc4-b495-e093ebf01990_611x452.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_iB-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bdee037-ee4e-4dc4-b495-e093ebf01990_611x452.png 424w, https://substackcdn.com/image/fetch/$s_!_iB-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bdee037-ee4e-4dc4-b495-e093ebf01990_611x452.png 848w, https://substackcdn.com/image/fetch/$s_!_iB-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bdee037-ee4e-4dc4-b495-e093ebf01990_611x452.png 1272w, https://substackcdn.com/image/fetch/$s_!_iB-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4bdee037-ee4e-4dc4-b495-e093ebf01990_611x452.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As you can see, LAX is the key to making this happen - it&#8217;s where the &#8220;crossover&#8221; of incoming and outgoing passengers happens. In chip networking, we use a similar arrangement called a crossbar. A crossbar is a collection of programmable switches which can decide which inputs need to be routed to which outputs. (Your airline&#8217;s staff in LAX will do this check at the boarding gate.) This allows multiple different nodes in the chip to communicate with each other without the need for direct connections between all the nodes.</p><p>Crossbars effectively address both the shortcomings that we saw with arbitration. First, they are able to ensure that all nodes can communicate with each other simultaneously. (The crossbar is assumed to have an ability to monitor these transactions and handle them correctly.) In our airplane example with a hub, we are theoretically able to transport 600 unique passengers in a day. (300 in the morning from SEA/SFO to LAX, and 300 later to JFK/MIA.) Also, the presence of a crossbar means that each failure is restricted to it&#8217;s own node - if one of the cores in the chip hit&#8217;s an infinite loop, the other cores can still talk to the other nodes through the crossbar.</p><p>At first glance, you might think that a crossbar arrangement is very similar to a point to point connection since both cases ensure all nodes can be connected simultaneously. But there&#8217;s a subtle difference here - using a crossbar, we are able to achieve the same bandwidth as point-to-point connection, but with fewer bus connections. If a chip has N nodes, (N &gt; 2.) then:</p><ul><li><p>Point-to-point connection would need (N-1)*(N-2) buses</p></li><li><p>Crossbar connection needs N buses</p></li></ul><p>This is the main advantage of a crossbar. However, in order to maintain the full bandwidth, crossbars usually need to store transactions and have complex control mechanisms, which makes the crossbar an additional piece of silicon taking up area and consuming power. Also, crossbars cannot scale indefinitely - each additional node adds some wire latency, and a very large number of nodes could make this intolerable. Remember, if you have 10 nodes in a crossbar, they all contribute to the wire latency - even if you only use a few nodes repeatedly. Transistor scaling also cannot be relied on - reduction in wire latency has not kept up with Moore&#8217;s law, which makes the future of crossbars very uncertain. Basically, as your airline business scales to multiple destinations, you need to hire a lot of staff, and reserve many boarding gates - even on days with low occupancy on your flights. Not ideal&#8230;</p><div><hr></div><p>All of the approaches discussed so far were sufficient for the pre-SoC era: with a small core count, and few memory and I/O nodes that needed networking. But as we entered the era of parallel compute with SoCs having more than a thousand cores, interconnects needed to get more sophisticated. A &#8220;Southwest Airlines&#8221; moment was needed&#8230;</p><div><hr></div><h2><strong>Model 4: The &#8220;Network&#8221;</strong></h2><p>In 1971, Southwest airlines launched their first flights in Texas - changing the aviation business model forever. Let&#8217;s learn from their approach and make our airlines more efficient.</p><p>Despite everything we discussed so far, the truth is, point-to-point non-stop flights are the most desirable options. So let&#8217;s go back to our <a href="https://chipinsights.substack.com/i/171857530/model-point-to-point-connection">first model</a>, and see if we can take it in a different &#8220;direction&#8221;. (Pun intended.) I mentioned that one of the issues with point to point connections is the flexibility - how can you best manage different bandwidth requirements on each route? We looked at <a href="https://chipinsights.substack.com/i/171857530/model-arbitration">arbitration in model 2</a>, but there is a more efficient approach - operate smaller flights. Smaller flights are cheaper to fly, and easier to sell-out, hence giving you more bang for buck on each route without the need to arbitrate.</p><p>The other limitation was the &#8220;buy a new flight for each new route&#8221; requirement that point-to-point connections require. Smaller flights will also partially address this issue, because you can afford to buy more flights. (and hence operate more routes simultaneously.) But as you expand your destinations, this might still become impractical - so we will remove this requirement from the model, making it pseudo-point-to-point. (i.e. not all connections can be point-to-point, as you will see.)</p><p>Let&#8217;s incorporate all this flexibility and build a network for our 5 destinations that looks like a ring. Much like the crossbar model, this topology connects all our destinations. (using as few as one flight!)</p><ul><li><p>Point-to-point connections: SEA-SFO, SFO-LAX, LAX-MIA, MIA-JFK, JFK-SEA</p></li><li><p>Pseudo point-to-point connections (with 1 stop): SEA-LAX, SFO-MIA, LAX-JFK, MIA-SEA, JFK-SFO</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yaej!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbe146aa-f0a2-4722-87ab-16ea10107802_735x511.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yaej!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbe146aa-f0a2-4722-87ab-16ea10107802_735x511.png 424w, https://substackcdn.com/image/fetch/$s_!yaej!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbe146aa-f0a2-4722-87ab-16ea10107802_735x511.png 848w, https://substackcdn.com/image/fetch/$s_!yaej!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbe146aa-f0a2-4722-87ab-16ea10107802_735x511.png 1272w, https://substackcdn.com/image/fetch/$s_!yaej!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbe146aa-f0a2-4722-87ab-16ea10107802_735x511.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yaej!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbe146aa-f0a2-4722-87ab-16ea10107802_735x511.png" width="735" height="511" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dbe146aa-f0a2-4722-87ab-16ea10107802_735x511.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:511,&quot;width&quot;:735,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:133312,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/171857530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbe146aa-f0a2-4722-87ab-16ea10107802_735x511.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yaej!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbe146aa-f0a2-4722-87ab-16ea10107802_735x511.png 424w, https://substackcdn.com/image/fetch/$s_!yaej!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbe146aa-f0a2-4722-87ab-16ea10107802_735x511.png 848w, https://substackcdn.com/image/fetch/$s_!yaej!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbe146aa-f0a2-4722-87ab-16ea10107802_735x511.png 1272w, https://substackcdn.com/image/fetch/$s_!yaej!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbe146aa-f0a2-4722-87ab-16ea10107802_735x511.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Adding a destination to this model is trivial. Say you want to add a new destination, Dallas (DFW), in the same topology, you can add the node like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AKPr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc76b2e02-d737-4873-b186-e2bea74fa577_735x508.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AKPr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc76b2e02-d737-4873-b186-e2bea74fa577_735x508.png 424w, https://substackcdn.com/image/fetch/$s_!AKPr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc76b2e02-d737-4873-b186-e2bea74fa577_735x508.png 848w, https://substackcdn.com/image/fetch/$s_!AKPr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc76b2e02-d737-4873-b186-e2bea74fa577_735x508.png 1272w, https://substackcdn.com/image/fetch/$s_!AKPr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc76b2e02-d737-4873-b186-e2bea74fa577_735x508.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AKPr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc76b2e02-d737-4873-b186-e2bea74fa577_735x508.png" width="735" height="508" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c76b2e02-d737-4873-b186-e2bea74fa577_735x508.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:508,&quot;width&quot;:735,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:147349,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/171857530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc76b2e02-d737-4873-b186-e2bea74fa577_735x508.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AKPr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc76b2e02-d737-4873-b186-e2bea74fa577_735x508.png 424w, https://substackcdn.com/image/fetch/$s_!AKPr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc76b2e02-d737-4873-b186-e2bea74fa577_735x508.png 848w, https://substackcdn.com/image/fetch/$s_!AKPr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc76b2e02-d737-4873-b186-e2bea74fa577_735x508.png 1272w, https://substackcdn.com/image/fetch/$s_!AKPr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc76b2e02-d737-4873-b186-e2bea74fa577_735x508.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Unlike the crossbar architecture, which adds a strain (more staff, larger number of boarding gates, and so on.) on your &#8220;hub&#8221; for each new destination, this ring-style approach does not stress any single node. (Remember, in chip terms, this &#8220;stress&#8221; means wire latency.) However, you might already see a problem here - we have introduced connections with 2 stops which would never exist in a crossbar model. (For example, SFO-MIA.) If such 2-stop routes are undesirable, then a simple connection above can fix that - add a direct route between SFO and MIA.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MQHQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3372318c-8806-455d-8859-d7ad3a03f7a2_723x516.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MQHQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3372318c-8806-455d-8859-d7ad3a03f7a2_723x516.png 424w, https://substackcdn.com/image/fetch/$s_!MQHQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3372318c-8806-455d-8859-d7ad3a03f7a2_723x516.png 848w, https://substackcdn.com/image/fetch/$s_!MQHQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3372318c-8806-455d-8859-d7ad3a03f7a2_723x516.png 1272w, https://substackcdn.com/image/fetch/$s_!MQHQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3372318c-8806-455d-8859-d7ad3a03f7a2_723x516.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MQHQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3372318c-8806-455d-8859-d7ad3a03f7a2_723x516.png" width="723" height="516" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3372318c-8806-455d-8859-d7ad3a03f7a2_723x516.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:516,&quot;width&quot;:723,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:157878,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/171857530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3372318c-8806-455d-8859-d7ad3a03f7a2_723x516.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MQHQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3372318c-8806-455d-8859-d7ad3a03f7a2_723x516.png 424w, https://substackcdn.com/image/fetch/$s_!MQHQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3372318c-8806-455d-8859-d7ad3a03f7a2_723x516.png 848w, https://substackcdn.com/image/fetch/$s_!MQHQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3372318c-8806-455d-8859-d7ad3a03f7a2_723x516.png 1272w, https://substackcdn.com/image/fetch/$s_!MQHQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3372318c-8806-455d-8859-d7ad3a03f7a2_723x516.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>With just one new route, we are able to maintain access all our destinations with one stop or lower. Also, you can pick between one large flight, or multiple small flights - the network can be adjusted accordingly. This is the biggest advantage of the network model - it allows the flexibility to modify the topology based on your resources and latency requirements. Such networks exist in all modern chips, and they are called, simply, a Network on Chip, or NoC. We will look at them more formally in the next section.</p><div><hr></div><h1><strong>An overview of Network on Chip (NoC) architectures</strong></h1><p>In the previous section, I (hopefully) convinced you that an NoC architecture allows you to move data efficiently and provide maximum flexibility on chips with a large number of nodes. With great flexibility, comes great challenge - and in this section, I want to walk you through three architecture decisions that need to be made, and the trade-offs involved.</p><div><hr></div><h2><strong>1. What should my network look like?</strong></h2><p>As you saw from the airline analogy, changing which nodes are connected to each other makes a huge difference to the path that needs to be taken to go from one node to the other. In NoC language, each such connection is called a <strong>&#8220;Link.&#8221;</strong> By changing the number of links, and the nodes they connect, we get different <strong>&#8220;Topologies.&#8221;</strong> We use two key metrics to understand how good a topology is:</p><ul><li><p><strong>Path diversity:</strong> How many unique paths can you find between two nodes in your network (formally called &#8220;Bisectional Bandwidth,&#8221; which I think raises more questions than provides answers, so I won&#8217;t use that term.)</p></li><li><p><strong>Path distance:</strong> The maximum distance between any two nodes in the network. (Again, the formal term is &#8220;Diameter&#8221;; I&#8217;m not going to use that.)</p></li></ul><p>As you might expect, adding additional links would increase path diversity, and reduce the path distance. But each link adds hardware complexity. (More wires, and as we will see later, complex routers.) Here&#8217;s an example with three simple topologies that highlights this trade-off.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5OF0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9b0a9-88e1-4a1a-a08c-144fc6b6dc39_1046x751.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5OF0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9b0a9-88e1-4a1a-a08c-144fc6b6dc39_1046x751.png 424w, https://substackcdn.com/image/fetch/$s_!5OF0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9b0a9-88e1-4a1a-a08c-144fc6b6dc39_1046x751.png 848w, https://substackcdn.com/image/fetch/$s_!5OF0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9b0a9-88e1-4a1a-a08c-144fc6b6dc39_1046x751.png 1272w, https://substackcdn.com/image/fetch/$s_!5OF0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9b0a9-88e1-4a1a-a08c-144fc6b6dc39_1046x751.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5OF0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9b0a9-88e1-4a1a-a08c-144fc6b6dc39_1046x751.png" width="1046" height="751" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a1c9b0a9-88e1-4a1a-a08c-144fc6b6dc39_1046x751.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:751,&quot;width&quot;:1046,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:193696,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/171857530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9b0a9-88e1-4a1a-a08c-144fc6b6dc39_1046x751.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5OF0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9b0a9-88e1-4a1a-a08c-144fc6b6dc39_1046x751.png 424w, https://substackcdn.com/image/fetch/$s_!5OF0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9b0a9-88e1-4a1a-a08c-144fc6b6dc39_1046x751.png 848w, https://substackcdn.com/image/fetch/$s_!5OF0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9b0a9-88e1-4a1a-a08c-144fc6b6dc39_1046x751.png 1272w, https://substackcdn.com/image/fetch/$s_!5OF0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa1c9b0a9-88e1-4a1a-a08c-144fc6b6dc39_1046x751.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>There are more nuances in designing the best topology, but for now, all you need to take away from this section is: <strong>Pick a topology that provides sufficient path diversity with the smallest number of links, while also ensuring that your path distance isn&#8217;t too much.</strong></p><div><hr></div><h2><strong>2. How do I split up my data?</strong></h2><p>It might seem like ages ago, but if you remember from the start of this post, the purpose of on-chip networks is to move data from one point in a chip to another. Due to the complexity of NoC architectures, we have a dedicated unit in each node to manage the sending and receiving of this data - called a <strong>Router</strong>. So far in this post, we assumed that all the data that we need to send out is sent together. (As a single transaction.) But in reality, it&#8217;s not practical to do this - for instance, if you want to move 1 GB worth of data as a single transaction, you would need 8,589,934,592 wires (i.e. one for each bit.) in each link. Instead, it is broken down into multiple pieces. Here&#8217;s what they are called:</p><ul><li><p><strong>Message:</strong> The is the full data that you want to send from one node to another</p></li><li><p><strong>Packet:</strong> Each message is broken down into multiple packets. All bits in a packet must follow the same path (or route) to reach the destination node.</p></li><li><p><strong>Flit (Flow Control Digit):</strong> Each packet has multiple flits. A router always stores all bits in a flit together.</p></li><li><p><strong>Phit (Physical Digit):</strong> Although a router stores a Flit together, it does not have to be sent out as a single transaction. Each flit can be broken down into multiple Phits, and each Phit must be sent out in a single cycle.</p></li></ul><p>This figure highlights how a message is broken down and transmitted from a sender to a receiver node.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wDFD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdcd74a-8be3-499d-92bb-ed9b7c5485aa_1240x467.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wDFD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdcd74a-8be3-499d-92bb-ed9b7c5485aa_1240x467.png 424w, https://substackcdn.com/image/fetch/$s_!wDFD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdcd74a-8be3-499d-92bb-ed9b7c5485aa_1240x467.png 848w, https://substackcdn.com/image/fetch/$s_!wDFD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdcd74a-8be3-499d-92bb-ed9b7c5485aa_1240x467.png 1272w, https://substackcdn.com/image/fetch/$s_!wDFD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdcd74a-8be3-499d-92bb-ed9b7c5485aa_1240x467.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wDFD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdcd74a-8be3-499d-92bb-ed9b7c5485aa_1240x467.png" width="1240" height="467" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dbdcd74a-8be3-499d-92bb-ed9b7c5485aa_1240x467.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:467,&quot;width&quot;:1240,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:209292,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/171857530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdcd74a-8be3-499d-92bb-ed9b7c5485aa_1240x467.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wDFD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdcd74a-8be3-499d-92bb-ed9b7c5485aa_1240x467.png 424w, https://substackcdn.com/image/fetch/$s_!wDFD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdcd74a-8be3-499d-92bb-ed9b7c5485aa_1240x467.png 848w, https://substackcdn.com/image/fetch/$s_!wDFD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdcd74a-8be3-499d-92bb-ed9b7c5485aa_1240x467.png 1272w, https://substackcdn.com/image/fetch/$s_!wDFD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbdcd74a-8be3-499d-92bb-ed9b7c5485aa_1240x467.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>At this point, it might seem like we took a simple idea of moving data and added a lot of complexity to it. But each of these terms has an impact on the network performance.</p><ul><li><p>The size of the phit decides the number of bits transferred in each link. So the phit size decides the maximum bandwidth of our network. A higher phit size is desirable, but comes with challenges to place and route the large number of wires. (Remember our discussion about large vs small flights from earlier?)</p></li><li><p>Flit size is the hardest to optimize. Since the router must store all bits of a flit together, a very large flit size could increase the latency. (Since all phits of a flit must be sent out before the next flit can be routed.) However, if your flit size is too small, then you may have too many flits to send - which could worsen the network congestion. So this needs careful consideration.</p><ul><li><p>Think of it this way: To reach your a physical destination, would you rather take a train, which is infrequent, but fast, or drive your car, which you can do anytime, but carries with it a risk that you would be stuck in traffic?</p></li></ul></li><li><p>And finally, the packet size. A smaller packet size means more packets, which means more potential routes to take from the sender node to the receiver node. However, only a topology with sufficient path diversity can really benefit from this - if not, you are just adding to the congestion by having more packets.</p></li></ul><p>I know I&#8217;m doing injustice to this topic with my &#8220;hand-wavy&#8221; analysis, but the point I really wanted to convey is that the way you split your message has a big role in the eventual performance of your network.</p><div><hr></div><h2><strong>3. What path should I take to reach my destination?</strong></h2><p>Now that you know what your network looks like, and how your data is split, life&#8217;s great - you just need to send the data, right? Well, not quite. You also need to decide which route your packet will take to reach your destination. I&#8217;m not going to go into the details here, as this is an introductory post, but I&#8217;ll leave you with a few questions to think about:</p><ul><li><p>Do I need to know the full route to reach the receiver node even before my packet leaves the sender node? Or is it sufficient for me to just decide what&#8217;s the next best node?</p></li><li><p>The agreement was that each packet must follow the same path. But does that mean I should wait for all flits in my packet to arrive at each intermediate node? Or can I send out each flit independently on the same path?</p></li><li><p>What happens if two packets want to go to the same node? Which one should I prioritize?</p></li></ul><p>This topic deserves its own post. (Maybe someday, if your airline business fails, we could explore a job as a traffic controller - a great analogy to understand routing algorithms.)</p><div><hr></div><p>This is as far as we&#8217;ll go in this introduction to on-chip networks. In an era of parallel computing, moving data efficiently is as important, if not more important than the computation itself. My biggest learning from doing this research was that to build the best on-chip network architecture, the two extremes of the computing stack must come together:</p><ul><li><p>Algorithms will decide how your data is arranged</p></li><li><p>The state of semiconductor physics will decide how many wires is too many wires</p></li></ul><p>Irrespective of which side of the stack you are on, I hope this post inspires you to explore this topic further and build the best on-chip networks for the next generation of computers.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h1>References:</h1><ul><li><p><a href="https://liacs.leidenuniv.nl/~stefanovtp/courses/ES/papers/Ch15_NoC_Design.pdf">https://liacs.leidenuniv.nl/~stefanovtp/courses/ES/papers/Ch15_NoC_Design.pdf</a></p></li><li><p><a href="http://cva.stanford.edu/publications/2001/onchip_dac01.pdf">http://cva.stanford.edu/publications/2001/onchip_dac01.pdf</a></p></li><li><p><a href="https://srsarangi.github.io/files/advbook/Chapter_8-noc.pptx">https://srsarangi.github.io/files/advbook/Chapter_8-noc.pptx</a></p></li></ul><div><hr></div><p></p><p></p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[The bad old days of debugging]]></title><description><![CDATA[The computer engineering version of &#8220;kids, back in our time&#8230;&#8221;]]></description><link>https://chipinsights.net/p/the-bad-old-days-of-debugging</link><guid isPermaLink="false">https://chipinsights.net/p/the-bad-old-days-of-debugging</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Mon, 18 Aug 2025 03:06:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!TpLp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee77a33a-4cc4-4614-af1c-4b520a603f0c_1567x1048.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s) and are not investment advice.</strong></p><div><hr></div><p>I recently read &#8220;The soul of a new machine&#8221; by Tracy Kidder, a book about the design of a new computer called Eagle, undertaken during the 1970s by a small team within the company Data General. I have always liked this genre of books - it&#8217;s nice to read about people working together to build something special. I usually leave at the end feeling inspired. But at the end of this book, I felt something else: <strong>I felt grateful.</strong></p><p>If you have been an engineer long enough, you would relate to this set of events: You find a bug during testing. You spend hours (maybe days) staring at the screen trying to figure out what is causing that bug - a period of intense frustration for you. (and sometimes, the people around you.) You finally find the root cause for the bug, experience a (short-lived) feeling of pride, before the next bug hits you. That&#8217;s the debugging emotional rollercoaster in a nutshell: And computer engineers go through it on a regular basis.</p><p>Like a lot of others, when I&#8217;m stuck debugging the same bug for a very long time, I feel like I have the worst job in the world. But looking back at chip design in the 1970s gave me a sense of how much better we all have it today&#8230;</p><div><hr></div><h1><strong>Getting your hands dirty</strong></h1><p>In the era before HDLs and EDA tools, hardware engineering meant working on real hardware. The Eagle computer was not a monolithic piece of silicon like modern SoCs - it was a collection of integrated circuits, spread across 7 different &#8220;wire-wrapped boards&#8221; with wires in the back connecting different pins. As the author Tracy Kidder puts it, the boards looked like &#8220;<strong>thin plates, each with one side covered by a profusion of tiny wires. Small cables, flat like tapeworms, ran among the boards. Oh my, there were a lot of wires.&#8221;</strong> If those words don&#8217;t speak to you, here is a picture of one such board. (Source: <a href="https://commons.wikimedia.org/wiki/File:Vector_Slit-N-Wrap_system.jpg">Wikimedia Commons</a>)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TpLp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee77a33a-4cc4-4614-af1c-4b520a603f0c_1567x1048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TpLp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee77a33a-4cc4-4614-af1c-4b520a603f0c_1567x1048.png 424w, https://substackcdn.com/image/fetch/$s_!TpLp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee77a33a-4cc4-4614-af1c-4b520a603f0c_1567x1048.png 848w, https://substackcdn.com/image/fetch/$s_!TpLp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee77a33a-4cc4-4614-af1c-4b520a603f0c_1567x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!TpLp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee77a33a-4cc4-4614-af1c-4b520a603f0c_1567x1048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TpLp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee77a33a-4cc4-4614-af1c-4b520a603f0c_1567x1048.png" width="1456" height="974" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ee77a33a-4cc4-4614-af1c-4b520a603f0c_1567x1048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:974,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3522449,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/171238164?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee77a33a-4cc4-4614-af1c-4b520a603f0c_1567x1048.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TpLp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee77a33a-4cc4-4614-af1c-4b520a603f0c_1567x1048.png 424w, https://substackcdn.com/image/fetch/$s_!TpLp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee77a33a-4cc4-4614-af1c-4b520a603f0c_1567x1048.png 848w, https://substackcdn.com/image/fetch/$s_!TpLp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee77a33a-4cc4-4614-af1c-4b520a603f0c_1567x1048.png 1272w, https://substackcdn.com/image/fetch/$s_!TpLp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee77a33a-4cc4-4614-af1c-4b520a603f0c_1567x1048.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>While in modern debugging, finding the root cause for a bug is the harder problem, a setup like this made fixing the bug equally challenging. When a change was needed, existing wires had to be carefully unwrapped using hollow-tipped tools, and if you were successfully able to do that, you then had to wrap new wires with the same precision. In this process, no other wires should be disturbed - but it does happen often, and results in new bugs. As the hardware lead Ed Rasala puts it, this process feels like one is performing an open-heart surgery.</p><p>This need to add or remove connections is not always a one-time thing: sometimes, in order to isolate where the bug originates from, different blocks in the design need to be disconnected, and later connected back. The book talks about an example involving the Instruction Processor and its associated I-cache - the engineers needed to run multiple experiments, each with one of the two blocks disconnected. (needing them to perform the &#8220;open-heart surgery&#8221; multiple times.) In modern debugging, isolating two such blocks would be as simple as modifying a few lines of RTL code.</p><div><hr></div><h1><strong>Keeping the paper business alive</strong></h1><p>Today, when engineers say paperwork, we never actually work with paper. But in the world where Eagle was being designed, paper still had it&#8217;s place.</p><p>Part of the debugging process involved understanding how different blocks in the computer worked. This information was compiled into a two-hundred page physical document that was written by the architect Steve Wallach. This document was like the Eagle team&#8217;s Bible - in fact, it was divided into multiple chapters, and each chapter started with a famous quote. This all sounds great, until engineers had to search through them for a specific piece of information to help with their debug.</p><p>But this was not the worst part of paper. Debugging a wire-wrapped board is vastly different from the way we add signals to a waveform today - a device called Logic Analyzer was used to probe different pins, and a snapshot of the signal had to be noted down on paper. This was improved by automatically capturing some signals in the system console - but this still needed to be printed before the values could be analyzed. Remember, signals change many times each second - so a large number of values need to be printed. In describing the console prints for one of the debugs, the author writes: &#8220;<strong>Stretched out, the sheet would run across the room and back again several times. You could fit a fairly detailed description of American history from the Civil War to the present on it.&#8221;</strong> Analyzing this large data dump with no ability to search must have been a nightmare&#8230;</p><p>Once a fix for a bug has been found, all the console log papers can be cleared out - but the paperwork does not end there. In order to correctly make this fix in all the prototypes, the exact changes in connections had to be marked on a large diagram with the schematic of the computer. This was called an Engineering Change Order, or ECO. By looking at this ECO diagram, engineers working on different prototype had to modify the wiring in their prototype each morning before they started debugging other issues. Today, a change is only called ECO very late in the project, and is done on a software abstraction of wires called Netlist. Such ECOs are rare - not an everyday occurrence like in the Eagle project.</p><div><hr></div><h1><strong>You can&#8217;t spell &#8220;Hardware&#8221; without &#8220;Hard&#8221;</strong></h1><p>Once the Eagle project was finalized, new engineers had to be hired to the team. When I read the hiring philosophy in the team, I couldn&#8217;t help but think that the challenges of debugging highlighted earlier had a lot to do with it.</p><p>During the interviews, Carl Alsing, the microcode lead, always presented the project as a tough one that involved long hours - at times even calling it a &#8220;suicide mission.&#8221; Those long hours were a direct result of the debugging challenges of the time. The team also screened for &#8220;a lack of family life&#8221; - they believed that someone with a family could not deliver on the intense commitment of the debugging schedule. Higher grades were valued, but it was not because it signified superior skills or smartness - it was merely seen as another indicator of hard work. In fact, the Eagle team even had a rite of initiation for their new hires, where they made a commitment to <strong>"do whatever was necessary for success, including forsaking, if needed, family, hobbies, and friends.&#8221;</strong></p><p>While good old hard work still has it&#8217;s place in debugging today, the best engineers I have worked with rely more on a methodical approach that makes the most of tools available at their disposal. Today&#8217;s designers have the tools to prepare in advance for a majority of the debugs they might face - with faster and more accurate simulations, better logging capabilities, and approaches like formal verification. While Alsing and co. lacked these tools and had to push engineers to work 60-80 hour debugging workweeks, it is not a requirement to be successful at debugging anymore.</p><div><hr></div><h1><strong>So, I get my turn to debug at 4 AM?</strong></h1><p>Let&#8217;s say you had all the smarts and energy it takes to debug any issue that your chip throws. If you walked into the Westborough building to debug Eagle, chances are, you will be asked to come back later. That&#8217;s because, unlike today&#8217;s world of simulation, directly debugging a real chip means, well, you need a real chip. But there were only a limited number of these prototypes, which meant not everyone could debug the Eagle computer at the same time.</p><p>The Eagle team were on a tight timeline. In order to maximize debugging time, they had a debugging schedule that had to be strictly followed, which assigned each engineer specific times throughout the day (and night) for debugging. So, if inspiration strikes you while having dinner, you would still need to wait for your shift to test your theory.</p><p>Although shifts were never more than 8 hours, the nature of debugging meant that most engineers stayed longer. Since debugging is a very personal activity, it is often easier to push yourself to work longer hours, than explaining your finding to the next engineer. (Which btw, was also &#8220;paperwork.&#8221;) The book talks about many such stories - Jim Guyer, for instance, spent many nights alone in the lab to debug issues in the Instruction Processor. Ken Holberger noted that it was often dark when he got in, and dark when he left work - leading him to lose track of the day and time when he was home.</p><p>Remember, adding more prototypes is not a sustainable solution - if you had 100 different prototypes of the computer, then each ECO would need to be implemented on each of these 100 prototypes. There were diminishing returns to scale in 1970s debugging.</p><div><hr></div><h1><strong>Flakey and Bogeyman: The supervillains of the debugging world</strong></h1><p>In the story, "flakey" and "bogeyman" were terms used by the engineers working on Eagle to describe specific types of problems or fears encountered during the debugging of the Eagle computer. A flakey refers to a <strong>failure that occurs erratically and is often hard to diagnose</strong>. Some example of this include loose connections, stray voltages, or worst of all, an IC from another vendor is buggy. The main issue with a flakey is that it is hard to reproduce consistently. The first step in fixing something is getting it to break - and with a flakey, engineers needed to spend additional time reproducing the bug, before finding a way to fix it.</p><p>The experienced engineers in the Eagle team had seen a lot of flakeys in their life, and not all of them were caught before their computer was sold. This led to a fear that there will always be one bug that would go unnoticed, but cause their machine to stop working - they called this a bogeyman. The Eagle project lead Tom West defines it as <strong>"the infinite page fault you didn&#8217;t anticipate. The bogeyman is the space your mind can&#8217;t comprehend."</strong> The fear of the bogeyman was real - Ed Rasala talks about some nights where he would wake up worrying about a bug they are yet to find, feeling like <strong>&#8220;the bogeyman was in his bedroom.&#8221;</strong> Like I mentioned in <a href="https://chipinsights.substack.com/p/the-most-important-law-every-chip">another post</a>, bugs continue to be seen in chips even today. However, verification has been largely left-shifted now - by starting verification very early, and at different levels of abstraction, the chances of encountering such bugs reduces greatly.</p><div><hr></div><h1><strong>Long-term tiredness</strong></h1><p>Nobody likes to make mistakes. But the likelihood of not detecting a bug was much higher in the 1970s than it is today. This took it&#8217;s toll on the engineers involved.</p><p>Jim Veres, who helped design the Instruction Processor and its I-cache, felt annoyed by the fact that his component was blamed for a lot of bugs. Although he would often prove that the problem was elsewhere, he said that the constant blame placed a lot of pressure on him. He felt like the block he designed was a "part of him now," and he didn't like to see it picked on unfairly.</p><p>Jon Blau experienced <strong>"difficulty forming sentences,"</strong> his <strong>"mind&#8217;ll go blank,"</strong> and felt <strong>"pieces of your life get dribbled away"</strong> due to the internal pressure to hurry and finish his code. When he took over debugging the ALU, he was <strong>"terribly excited by it, then very frightened,"</strong> leading him to take a week off. Ed Rasala summed this up nicely, by calling it a &#8220;long-term tiredness.&#8221; He said that engineers on the debug schedule felt tired, but not in a traditional way that going home to their loved ones could fix. They were always thinking about the current issue they are debugging, while being concerned about the next bug they might hit. That&#8217;s what it was like to debug a computer in the 1970s.</p><div><hr></div><p>While debugging is still a challenge today, and tools can be better, reading &#8220;The soul of a new machine&#8221; gave me a new perspective on what we have today. It&#8217;s been about 50 years since this saga unfolded. Who knows, 50 years later, someone might write a sorry tale about the way we debug chips today&#8230;</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>By the way, this post only talks about a small part of this book that resonated with me. For a fuller analysis, I highly recommend this post by the Chip Letter.</p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:157192680,&quot;url&quot;:&quot;https://thechipletter.substack.com/p/the-soul-of-an-old-machine&quot;,&quot;publication_id&quot;:1063960,&quot;embedding_publication_id&quot;:null,&quot;publication_name&quot;:&quot;The Chip Letter&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!vwjY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffe682d7-ab93-463b-b714-8f98c0c072d2_1280x1280.png&quot;,&quot;title&quot;:&quot;The Soul of an Old Machine&quot;,&quot;truncated_body_text&quot;:&quot;\&quot;That fellow West is a good man in a storm.\&quot; &#8230; \&quot;He didn't sleep for four nights! Four whole nights.\&quot; And if that trip had been his idea of a vacation, where, the psychologist wanted to know, did he work?&quot;,&quot;date&quot;:&quot;2025-04-01T00:01:39.312Z&quot;,&quot;like_count&quot;:56,&quot;comment_count&quot;:36,&quot;bylines&quot;:[{&quot;id&quot;:102722254,&quot;name&quot;:&quot;Babbage&quot;,&quot;handle&quot;:&quot;thechipletter&quot;,&quot;previous_name&quot;:&quot;The Chip Letter&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F82525b9c-ee3c-4996-916c-54267a4d354b_416x416.png&quot;,&quot;bio&quot;:&quot;Computer history and architecture&quot;,&quot;profile_set_up_at&quot;:&quot;2022-08-28T13:07:25.701Z&quot;,&quot;reader_installed_at&quot;:&quot;2022-10-20T11:45:48.505Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:1012118,&quot;user_id&quot;:102722254,&quot;publication_id&quot;:1063960,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:1063960,&quot;name&quot;:&quot;The Chip Letter&quot;,&quot;subdomain&quot;:&quot;thechipletter&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Computer history and architecture&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ffe682d7-ab93-463b-b714-8f98c0c072d2_1280x1280.png&quot;,&quot;author_id&quot;:102722254,&quot;primary_user_id&quot;:102722254,&quot;theme_var_background_pop&quot;:&quot;#FF6B00&quot;,&quot;created_at&quot;:&quot;2022-08-28T13:07:52.880Z&quot;,&quot;email_from_name&quot;:&quot;The Chip Letter&quot;,&quot;copyright&quot;:&quot;The Chip Letter&quot;,&quot;founding_plan_name&quot;:&quot;Founding Member&quot;,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;enabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;newspaper&quot;,&quot;is_personal_mode&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:100}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://thechipletter.substack.com/p/the-soul-of-an-old-machine?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!vwjY!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffe682d7-ab93-463b-b714-8f98c0c072d2_1280x1280.png" loading="lazy"><span class="embedded-post-publication-name">The Chip Letter</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">The Soul of an Old Machine</div></div><div class="embedded-post-body">"That fellow West is a good man in a storm." &#8230; "He didn't sleep for four nights! Four whole nights." And if that trip had been his idea of a vacation, where, the psychologist wanted to know, did he work&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">2 years ago &#183; 56 likes &#183; 36 comments &#183; Babbage</div></a></div>]]></content:encoded></item><item><title><![CDATA[The psychology of a technical interview]]></title><description><![CDATA[The non-technical aspects that no one talks about]]></description><link>https://chipinsights.net/p/the-psychology-of-a-technical-interview</link><guid isPermaLink="false">https://chipinsights.net/p/the-psychology-of-a-technical-interview</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Mon, 04 Aug 2025 06:02:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s), and are not investment advice.</strong></p><div><hr></div><p>This post is a little different from what I usually write. I want to preface by saying that I&#8217;m not going to talk about the knowledge and skills needed to crack technical interviews - they are very important, but are also specific to the job role you are applying to, and the stage of your career. I compiled some resources for a few such roles in computer engineering in this post, if that&#8217;s what you are looking for:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;47dd83ec-ae43-42cd-bd0b-b8c799dbfca2&quot;,&quot;caption&quot;:&quot;Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s), and are not investment advice.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Hardware Engineering Interview Resources&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-02-25T16:20:05.886Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.substack.com/p/hardware-engineering-interview-resources&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:157896671,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:17,&quot;comment_count&quot;:1,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>When I had finalized my plans to move to the US for graduate school, I started to proactively apply for internships. Even before I landed here, a recruiter from what was at that time my &#8220;dream company&#8221; reached out to me, and set up interviews pretty soon. It was perfect - I had the skills and experience for the role, and I had prepared quite well. At least I thought so&#8230;</p><p>It&#8217;s been about 3 years since that interview, but I still remember that day very clearly. I completely froze during the interview. It wasn&#8217;t the hardest interview I have given. It wasn&#8217;t even the least prepared I was. And yet, it was my worst interview. Looking back, it hasn&#8217;t made too much of a difference, I&#8217;m happy that things panned out the way they did for me. But I&#8217;ve always wondered what happened on that day. Was it me? Was it a poorly conducted interview?</p><p>Recently, I conducted a few mock interviews for my alma mater. In preparation, I spoke to some experienced interviewers, and also reviewed some accounts of good and bad interviews. Being on the other side gave me more perspective on what makes an interview good - both for the interviewer and interviewee. Surprisingly, it&#8217;s less about how knowledgeable each side is - certain behavioral aspects play a key role. This post is centered around these aspects of a technical interview.</p><div><hr></div><p></p><h1><strong>Who should read this?</strong></h1><p>I know that a lot of people reading this would be interviewees, not interviewers. As interviewees, we are conditioned to believe that the fate of an interview lies solely in our hands. I don&#8217;t think this is true - it&#8217;s just that interviewers aren&#8217;t evaluated to the same degree.</p><p>A lot of interviewers brag about the fact that most interviewees fail their round. I&#8217;ve found this to be quite amusing. Interviewers assume that their interviews are technically advanced and the quality of candidates is low, but that&#8217;s hardly ever the truth. If a lot of interviewees struggle to answer your questions, there is something wrong with your interviewing style.</p><p><strong>I know this post would reach a lot of interviewees, but I&#8217;m writing this in the hope that it also reaches some interviewers.</strong></p><div><hr></div><p></p><h1><strong>The six ingredients that make a good interview</strong></h1><h2><strong>1. Perfect your pitch</strong></h2><p>Very often, interviewees start their interview by introducing themselves. When I was interviewing, I think I handled this question quite poorly - I had a good number of projects on my resume, and I thought the best idea is to make them the stars. I went into the technicalities of my projects very quickly - after all, it was a technical interview. But from my experiences being on the other side, I realize how pointless this is. As an interviewee, you need to remember that no one cares as much about your projects as you do - so the minor technical details that you find fascinating are not going to impress anyone.</p><p>Some of the best candidates I interviewed approached this question very differently - they had a simple, but impressive pitch that spoke about themselves. Say you are someone with projects in computer architecture, and interned in a government funded lab, here&#8217;s one example each for a bad, and good pitch:</p><ul><li><p><strong>Bad pitch:</strong> Talk about the technical details in each of the projects (basically reading out your resume)</p></li><li><p><strong>Good pitch:</strong> Talk about the importance of computer architecture for the future of your country, and the role you want to play in that</p></li></ul><p>It doesn&#8217;t matter if you think your experiences are ordinary - every story is unique, and crafting a good story can completely change the tone of the rest of the interview.</p><p>Interviewees usually figure this out over time, but a lot of interviewers forget that they need to pitch too. I can&#8217;t tell you the number of times this does not happen. I don&#8217;t think it is enough for interviewers to ask an open ended question like &#8220;do you have anything you want to ask me.&#8221; Interviewers should start the interview by setting expectations - about the interview, the job, and the company. I would go one step further to carefully review the candidate&#8217;s resume and mention what aspects would be a great fit for the team.</p><p>I have given so many interviews where I have no clue what is expected of me if I join the team, and whether they even care if I join. A short pitch can make a candidate feel special. Taking a few minutes to do this can make the difference between good candidates joining your team, or passing up your offer. Remember that good candidates will always have options, and their decision won&#8217;t always be driven by the money offered. Hiring is the most important aspect of a team, and as an interviewer you have an opportunity to attract the best talent.</p><div><hr></div><p></p><h2><strong>2. Don&#8217;t experiment too much</strong></h2><p>When I was taking mock interviews, I experimented with the way I framed questions. (Part of me was already thinking about writing a post like this.) I realized that too much experimentation as an interviewer is not a good thing - it will result in an unfair evaluation. Me, and a lot of others I talk to, discuss how boring the interview format is, and how we would design a very interesting interview when we get the opportunity. But it&#8217;s important to understand why some interviews are the way they are: standardization is the best way to ensure fairness across candidates.</p><p>If I ask candidate A a standard textbook question, but I reframe the question to mimic a real life scenario when I interview candidate B - candidate B may have the more interesting interview experience, but the vagueness of the format will also make it unfair if they cannot answer the question correctly. So my suggestion is to avoid experimenting too much, unless you are sure you can replicate it across multiple candidates. It is important to remember this as an interviewee too. Answering technical questions is very different from the pitch I mentioned previously - here, uniqueness isn&#8217;t rewarded. Sometimes, I have tried to be too cheeky in interviews - using clever analogies, or out of the box terminology to answer basic questions. It has never ended well - in the worst case, I ended up confusing myself and the interviewer. In the best case, I answered one question right. (I don't think creativity gets any brownie points in technical interviews.)</p><p><strong>Whether you are an interviewer or an interviewee, follow the advice that Michael Scott gave to Dwight Schrute in &#8220;The Office&#8221;: Keep It Simple, Stupid.</strong></p><div><hr></div><p></p><h2><strong>3. The curse of &#8220;the know it all&#8221;</strong></h2><p>This is a problem I noticed while interviewing a lot of smart, knowledgeable, well-prepared candidates. When I asked a question, they made a lot of assumptions about what I might be asking, and went on multiple different tangents. Everything they said was technically correct - the only issue was, it was not what I asked. If I have to evaluate the candidate for the question, I would still have to say that the question wasn&#8217;t answered correctly. Therein lies the problem.</p><p>Sometimes, interview questions are vague - could be by design, or could be accidental. Even if you know what the answer might be, asking a couple of clarifying questions before jumping in with an answer is a good idea. This could even earn you brownie points - if you actually remind the interviewer of a point they forgot to mention, it is a great sign.</p><p>I think the problem of oversharing exists with interviewers too (unfortunately, it goes unchecked.) Some interviewers get into the habit of explaining why the interviewee is wrong (and why they are right.) I know a lot of interviewers who justify this, by saying they want to help the candidate do better in other interviews. I don&#8217;t buy this argument; as someone that has been explained to multiple times, I can confidently say that none of it has gone into my head in that moment. Interviews are too short and stressful to be conducive for learning. All you are doing as an interviewer is wasting valuable time that could be spent evaluating other skills of the candidate. If you really care about the candidate learning something, offer to help the candidate on a call or email after the interviews. (I would gladly take up this opportunity to learn, but no one has made that offer - some companies have a policy against this - but let&#8217;s not get into this.)</p><div><hr></div><p></p><h2><strong>4. Sweat the small stuff</strong></h2><p>Like a lot of interviews today, the mock interviews I took were remote too. Remote interviews introduce non-uniformity that is often ignored. This includes:</p><ul><li><p>A reliable Internet connection</p></li><li><p>Clear audio and video</p></li><li><p>The ability to write and draw something, and share it (preferably on the computer)</p></li></ul><p>I know not everyone has the privilege to invest in the best equipment, but even those who do, sometimes don&#8217;t pay enough attention to it. I had a lot of such &#8220;tech issues&#8221; happen that completely disrupt the flow of the interview. Even if they aren&#8217;t completely disruptive, your interviewer cannot evaluate you if they cannot hear you correctly, or cannot understand what you write or draw. You might think these are minor things that don&#8217;t affect the eventual interview outcome, but when I asked experienced interviewers, they told me about some interviews where the lack of audio and video clarity resulted in candidates being passed on.</p><p>Those who have watched the 2013 movie &#8220;The Internship&#8221; can relate to what I am saying - don&#8217;t take an interview in a loud public setting like Nick and Billy:</p><div id="youtube2-XYG6tAMWFIo" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;XYG6tAMWFIo&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/XYG6tAMWFIo?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p>Interviewers are guilty of this too - more often than you think. I remember interviews where after a point, I had no choice but to ask the interviewer to change their headphone because their audio kept breaking. If you are using visuals or text to ask questions, ensure that they are clearly visible. And finally, my biggest pet peeve - please, please, please turn on your video during interviews. There&#8217;s nothing worse than answering technical questions from an icon on the screen with scratchy audio.</p><div><hr></div><p></p><h2><strong>5. Play the player, not the cards</strong></h2><p>There&#8217;s a saying about the best poker players - their strategy depends not on the cards they hold; it depends on the players they are up against. I think it would really help if interviewers and especially interviewees develop the ability to read the person they are talking to.</p><p>In my experience, there are three main types of technical interviewers:</p><ul><li><p><strong>The no-nonsense type:</strong> is only focused on your technical knowledge</p></li><li><p><strong>The curious type:</strong> like to hear about new and interesting projects and ideas</p></li><li><p><strong>The manager type:</strong> is concerned about whether you are a good fit for the teams needs</p></li></ul><p>If you can make an assessment of the type of interviewer you are talking to, you can shift the tone of the interview to match their expectations - give short but precise answers to the no-nonsense type; talk about interesting projects with the curious type; and show that you have the right skillset to the manager type. This isn&#8217;t the easiest skill to master, but will definitely help you leave a better impression.</p><p>This skill adds value for an interviewer too - especially if you want to lure a high quality candidate to join your team. Matching the energy of the person you are interviewing will definitely improve the quality of the interview, and provide better insights to make your decision.</p><div><hr></div><p></p><h2><strong>6. Don&#8217;t be a jerk</strong></h2><p>I&#8217;ve saved the most important point for last. Interviewers and interviewees think of the technical interview as some kind of battle of intellect. In the process, one, or both parties can be jerks.</p><p>Interviewers are more notorious for this. I have seen that some interviewers have a tendency to demonstrate their intellectual superiority - in the form of snarky comments, exasperation, and concerning expressions. It could even be something simpler - asking questions like &#8220;Are you sure this is right?&#8221; when the answer is actually right. (In a vulnerable, emotional state, most interviewees will say &#8220;no&#8221; to a question like this.) Actions like these in no way contribute to the evaluation of the technical skills of a candidate - they are merely shows of dominance. Since most interviews span multiple rounds, it is possible that a candidate had a bad interview with you, but is still offered the job, and is going to be your future teammate. Do you really want your first interaction to be like this?</p><p>If you are an interviewer, always remember that you are the support cast in the interview - it is not your stage to demonstrate anything. Your role is merely to conduct a fair evaluation to help your team hire the right candidate.</p><p>In defense of the interviewers, I must say that interviewees can be jerks too. I have heard cases where the interviewer being wrong (which can happen) triggers unpleasant disagreements in the midst of an interview. Even if you are sure you are right, I don&#8217;t think having a full blown argument is the right thing to do. Often, candidates are evaluated by the number of questions they answer correctly, so the time you spend arguing is time lost from another question. The better approach would be to table the conversation - you can say that there might be a misunderstanding, and that you would like to visit this question again at the end if time permits. I would not even mind a polite email after the interview with the clarification. (But &#8220;polite&#8221; is very important here - otherwise it could backfire.)</p><p>It&#8217;s important to remember that both interviewers and interviewees have the same end goal - to contribute towards the progress of technology. If you stay with this goal long enough, you will cross paths once again. And humans have a tendency to remember negative emotional experiences - a simple technical interview should not be one of those.</p><p><strong>So please smile, and have a pleasant technical interview experience.</strong></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div>]]></content:encoded></item><item><title><![CDATA[Confessions of a static timing analysis tool]]></title><description><![CDATA[All about STA, from the horse's mouth]]></description><link>https://chipinsights.net/p/confessions-of-a-static-timing-analysis</link><guid isPermaLink="false">https://chipinsights.net/p/confessions-of-a-static-timing-analysis</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Mon, 21 Jul 2025 15:11:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s), and are not investment advice.</strong></p><div><hr></div><p>Hello there. If you are reading this, we have probably already interacted in the past. I was created a long time ago, inspired by a project management tool called Program Evaluation and Review Technique (PERT), that was used to identify the critical path and slack time in projects. I still carry some of these terms with me - from 1966 all the way till today. You may know me today by different names like Synopsys PrimeTime, or Cadence Tempus - does that ring a bell? No? It&#8217;s okay, I know I am not as popular as those pretentious synthesis tools that bully me around. But I play an important role in your life, and I&#8217;m here to tell you why&#8230;</p><div><hr></div><h1><strong>The harsh truth your synthesis tool didn&#8217;t tell you</strong></h1><p>As you may have guessed, what I do is called &#8220;Static Timing Analysis&#8221;. The cool kids call it STA, so let&#8217;s stick to that. You know how you use a modern hardware description language like Verilog to describe your digital design? Well those languages might make your life easy, but tools like me can&#8217;t comprehend all the fancy slang you use there. Am I supposed to know what &#8220;always @ posedge&#8221; means? No thank you. All I understand are the basics:</p><ul><li><p>What are the inputs and outputs (Called &#8220;<strong>IO&#8221;</strong>)</p></li><li><p>Simple logic components, like gates (AND, OR, etc.) and MUXes (Called <strong>&#8220;Cells&#8221;</strong>)</p></li><li><p>Storage elements like Flip-Flops, Latches (Called <strong>&#8220;Registers&#8221;</strong>) and SRAMs (Called <strong>&#8220;Memories&#8221;</strong>)</p></li><li><p>Connections between them (called <strong>&#8220;Nets&#8221;</strong>)</p></li></ul><p>So before you come asking for my help, you need to convert your fancy HDL design into something I understand called a &#8220;<strong>Netlist&#8221;</strong>. (A list of nets, get it?) That&#8217;s where the synthesis tools come in - they are just fancy translators who understand your HDL design, and break it down into the simple netlist that I understand. They don&#8217;t check whether it is even possible to have the connections you have described - they just want to please you by saying yes to everything you say. No wonder you like them so much.</p><p>But let me tell you the harsh truth - not everything you describe is realistic. You might think you are the god of chip design, but in my world, you must bow down to our god - Physics. What you are designing is not software - a chip is a physical entity that works by moving electrons. They&#8217;re much faster than anything you&#8217;ve ever seen, but they still take time to move from one place to another in the chip. Due to this fact, any logic you add in the chip will also add a delay. Your favorite synthesis tool conveniently left all this out.</p><p>Finding out exactly what this delay would be is challenging - remember, at this stage, I am doing this with no knowledge about how the chip is going to look at the very end. But even at this stage, I have something valuable that no one else has - estimated delays of different cells for the technology that the chip would be manufactured in. (In other words, a direct line to Dr. Morris Chang - ever heard of him?) I write down this information in a place called the <strong>&#8220;Cell Library&#8221;</strong> - I&#8217;m going to need to refer to this often once I get started with my work. But I still haven&#8217;t told you what my work is, have I? Before I do that, I will tell you why my job exists in the first place.</p><div><hr></div><h1><strong>Welcome to my synchronized world</strong></h1><p>Now that you know delays are a thing in the real world, let me introduce you to the idea of synchronization in digital design. Consider this design I once worked on, where there were 5 inputs - <strong>A</strong>, <strong>B</strong>, <strong>C</strong>, <strong>D</strong>, and <strong>E</strong>, used to get the final output <strong>O</strong>. When I saw the netlist, I noticed that this design includes an <strong>AND</strong> gate, two <strong>OR</strong> gates, and a <strong>MUX</strong>, connected like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ty4O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd98dcd-9d7e-45cd-852c-9d57e12aa1a7_837x431.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ty4O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd98dcd-9d7e-45cd-852c-9d57e12aa1a7_837x431.png 424w, https://substackcdn.com/image/fetch/$s_!ty4O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd98dcd-9d7e-45cd-852c-9d57e12aa1a7_837x431.png 848w, https://substackcdn.com/image/fetch/$s_!ty4O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd98dcd-9d7e-45cd-852c-9d57e12aa1a7_837x431.png 1272w, https://substackcdn.com/image/fetch/$s_!ty4O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd98dcd-9d7e-45cd-852c-9d57e12aa1a7_837x431.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ty4O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd98dcd-9d7e-45cd-852c-9d57e12aa1a7_837x431.png" width="837" height="431" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2fd98dcd-9d7e-45cd-852c-9d57e12aa1a7_837x431.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:431,&quot;width&quot;:837,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:35733,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/168864393?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd98dcd-9d7e-45cd-852c-9d57e12aa1a7_837x431.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ty4O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd98dcd-9d7e-45cd-852c-9d57e12aa1a7_837x431.png 424w, https://substackcdn.com/image/fetch/$s_!ty4O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd98dcd-9d7e-45cd-852c-9d57e12aa1a7_837x431.png 848w, https://substackcdn.com/image/fetch/$s_!ty4O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd98dcd-9d7e-45cd-852c-9d57e12aa1a7_837x431.png 1272w, https://substackcdn.com/image/fetch/$s_!ty4O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2fd98dcd-9d7e-45cd-852c-9d57e12aa1a7_837x431.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As you can see, I have also added the delays of each cell by checking the cell library. (You&#8217;re welcome.) Assuming no input delays, the time taken to observe the correct output <strong>O</strong> can be obtained by adding all the delays in the path between an input and the output. However, there are multiple different paths from the input and output, each with a different delay:</p><ul><li><p>Path 1: Input <strong>A</strong>/<strong>B</strong> &#8594; <strong>U0</strong> &#8594; <strong>U1</strong> &#8594; <strong>U3</strong> &#8594; Output <strong>O</strong> (Delay = 6 ns)</p></li><li><p>Path 2: Input <strong>C</strong> &#8594; <strong>U1</strong> &#8594; <strong>U3</strong> &#8594; Output <strong>O</strong> (Delay = 4 ns)</p></li><li><p>Path 3: Input <strong>C/D</strong> &#8594; <strong>U2</strong> &#8594; <strong>U3</strong> &#8594; Output <strong>O</strong> (Delay = 4 ns)</p></li><li><p>Path 4: Input <strong>E</strong> &#8594; <strong>U3</strong> &#8594; Output <strong>O</strong> (Delay = 3 ns)</p></li></ul><p>The purpose of any digital design, is to find the output when the input changes. Since the delays are different, you don&#8217;t exactly know when the output is ready - it could be 3 ns, or 6 ns after the inputs are applied. This makes the design pretty much useless. How do we deal with this problem? In the above example, let&#8217;s say that the input can only change once every 10 ns, and the output is also sampled with the same frequency - then, irrespective of the path between input and output, we are guaranteed to get the correct output value. In other words, by restricting when inputs to a design can change, and outputs from a design are sampled, we can ensure correct execution across many different paths - an idea called synchronization.</p><p>In order to maintain synchronization, we need to ensure that the input remains unchanged. But we have no idea where these inputs are coming from, so each input may have it&#8217;s own delays. This means we need to have a way to store the values of the inputs periodically, and use these stored values to calculate the output. This is done using a storage element like a latch or flip-flop - the general term for this is a <strong>Register</strong>. Let&#8217;s add registers <strong>R0</strong> and <strong>R1</strong> at the input and output of our design, respectively.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!51TF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd61985bb-6352-4469-a41f-5ba596350bd6_886x521.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!51TF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd61985bb-6352-4469-a41f-5ba596350bd6_886x521.png 424w, https://substackcdn.com/image/fetch/$s_!51TF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd61985bb-6352-4469-a41f-5ba596350bd6_886x521.png 848w, https://substackcdn.com/image/fetch/$s_!51TF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd61985bb-6352-4469-a41f-5ba596350bd6_886x521.png 1272w, https://substackcdn.com/image/fetch/$s_!51TF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd61985bb-6352-4469-a41f-5ba596350bd6_886x521.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!51TF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd61985bb-6352-4469-a41f-5ba596350bd6_886x521.png" width="886" height="521" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d61985bb-6352-4469-a41f-5ba596350bd6_886x521.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:521,&quot;width&quot;:886,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:38901,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/168864393?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd61985bb-6352-4469-a41f-5ba596350bd6_886x521.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!51TF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd61985bb-6352-4469-a41f-5ba596350bd6_886x521.png 424w, https://substackcdn.com/image/fetch/$s_!51TF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd61985bb-6352-4469-a41f-5ba596350bd6_886x521.png 848w, https://substackcdn.com/image/fetch/$s_!51TF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd61985bb-6352-4469-a41f-5ba596350bd6_886x521.png 1272w, https://substackcdn.com/image/fetch/$s_!51TF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd61985bb-6352-4469-a41f-5ba596350bd6_886x521.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Each register also needs to know when to store the next input. (every 10 ns in our example.) To achieve this, we introduce a new input, and an STA tool&#8217;s best friend, the clock signal. (also known by the nickname <strong>clk</strong>.) The clock signal periodically changes from 0 to 1, and then back to 0 - each such transition is called a clock cycle. The time taken for the signal to complete this transition is called the <strong>Clock Period</strong>. In a typical register, the input to the register gets stored in the register when the clock signal goes from 0 to 1, called the positive clock edge. This allows us to store the inputs in the register <strong>R0</strong> during a positive clock edge, then complete the evaluation of the logic, and store the final output in register <strong>R1</strong> during the next positive clock edge.</p><p>Here&#8217;s a timing diagram to show how in the above example, input <strong>E</strong> and the intermediate output <strong>O&#8217;</strong> are only sampled at the positive clock edge, ensuring that the correct inputs and outputs are seen after every 10 ns. (Inputs <strong>A</strong>, <strong>B</strong>, <strong>C</strong> and <strong>D</strong> are not changing in this case.)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r8Ns!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa575638e-3bfa-4c43-80d6-11fb2f993dec_882x826.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r8Ns!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa575638e-3bfa-4c43-80d6-11fb2f993dec_882x826.png 424w, https://substackcdn.com/image/fetch/$s_!r8Ns!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa575638e-3bfa-4c43-80d6-11fb2f993dec_882x826.png 848w, https://substackcdn.com/image/fetch/$s_!r8Ns!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa575638e-3bfa-4c43-80d6-11fb2f993dec_882x826.png 1272w, https://substackcdn.com/image/fetch/$s_!r8Ns!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa575638e-3bfa-4c43-80d6-11fb2f993dec_882x826.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r8Ns!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa575638e-3bfa-4c43-80d6-11fb2f993dec_882x826.png" width="882" height="826" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a575638e-3bfa-4c43-80d6-11fb2f993dec_882x826.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:826,&quot;width&quot;:882,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:30653,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/168864393?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa575638e-3bfa-4c43-80d6-11fb2f993dec_882x826.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!r8Ns!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa575638e-3bfa-4c43-80d6-11fb2f993dec_882x826.png 424w, https://substackcdn.com/image/fetch/$s_!r8Ns!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa575638e-3bfa-4c43-80d6-11fb2f993dec_882x826.png 848w, https://substackcdn.com/image/fetch/$s_!r8Ns!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa575638e-3bfa-4c43-80d6-11fb2f993dec_882x826.png 1272w, https://substackcdn.com/image/fetch/$s_!r8Ns!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa575638e-3bfa-4c43-80d6-11fb2f993dec_882x826.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As you can see, <strong>E&#8217;</strong> (output of register <strong>R0</strong>) and <strong>O</strong> (Output of register <strong>R1</strong>) do not change between clock cycles - this is important, because each of these signals can be used as part of other logic with the assumption that the data won&#8217;t change during the clock cycle - this is very important to make your designs larger without increasing the delays indefinitely. But this synchronization comes with strings attached, and my job is to ensure you abide by certain rules.</p><div><hr></div><h1><strong>We have needs too, feat. Registers</strong></h1><p>When I spoke about the role of registers in maintaining synchronization <a href="https://chipinsights.substack.com/i/168864393/welcome-to-my-synchronized-world">earlier</a>, I might have given you the impression that registers are a gift from the heavens to save all digital designs. Maybe you think registers should be the ones doing the talking here. Let me tell you something, these registers aren&#8217;t as generous as you think. While registers help solve the synchronization problem, they introduce new problems in the process.</p><p>Remember how I said a register stores data when it sees the positive clock edge - I left out some of the nuances here. There are some registers out there that decide to store data at the negative clock edge instead, but everything that I talk about applies to those registers too - so let&#8217;s generalize by calling it a <strong>clock event</strong>. For the input data to be stored correctly at a clock event, the register enforces some strict rules. (Thanks again to the physics gods.) In my world, we use specific terms to express these &#8220;needs.&#8221;</p><p>The first term is <strong>Setup Time</strong>, which is the minimum time for which the input data to a register must be stable <strong>before</strong> a clock event. I&#8217;m not going to tell you the complete origin story of setup time here, but just know this - if you change the input to a register too close to a clock event, the registers cannot guarantee that they checked the correct value. Think of it like this - you are supposed to turn in your assignment by 10 AM, but you decide to make some last minute updates at 11 AM - a register is like that strict professor who says: &#8220;Sorry, I cannot promise that your updates would be graded.&#8221; Ah, if only registers were a good sport&#8230;</p><p>Their needs don&#8217;t end here - in addition to setup time, registers also have something called <strong>Hold Time</strong> - the minimum time for which the input data should be held stable <strong>after</strong> the clock event. This might seem excessive to you - this sounds like a professor who not only wants the assignment submitted by 10 AM, but also wants you to show up to their office, wait for 30 minutes while they review your assignment, and leave only after that. Seems unfair? I get it, but registers rule my world, and they are pretty high maintenance. You have no choice but to abide by their rules.</p><p>If you think our nightmare ends there, I&#8217;m sorry to burst your bubble. Remember that these registers, like everything else in a chip, work by moving electrons around. That means just like the cells we discussed earlier, they have propagation delays too. Typically, there are two different delays, since the path taken by the clock signal and input data are different. Here&#8217;s what we call them:</p><ul><li><p><strong>Clk&#8594;Q Delay</strong>: The delay in output resulting from the clock input</p></li><li><p><strong>D &#8594; Q Delay</strong>: The delay in output resulting from the data input</p></li></ul><p>Lot of information, huh? Looks like somebody needs help tracking all this. That&#8217;s where I come in. My job is to ensure that all the delays are accounted for, and the registers can guarantee that your design works as expected. The first thing I do, is call up my dear friend Dr. Morris Chang (or one of his friends that is going to manufacture this chip.) and get the setup time, hold time, and propagation delays of the registers. Remember, I already know the propagation delays of the other cells. With all this information, I&#8217;m like a fortune teller that can predict the future of your chip - except that unlike your fortune teller, I&#8217;m always right.</p><div><hr></div><h1><strong>Show me the slack!</strong></h1><p>For me to check if your chip will work correctly, I need to ensure that your design meets all of the register&#8217;s needs. Let&#8217;s start by looking at setup time. Use the diagram below to follow along. To start with, I select a register, say <strong>R0</strong> from the design, and pick one of it&#8217;s inputs - let&#8217;s call it <strong>In</strong>. At a positive clock edge, <strong>R0</strong> stores the data from In. (When I do this analysis, I assume the input register, <strong>R0</strong> in this case, does not violate Setup Time. This analysis is done for all registers, so trust me, it will all work out in the end.) Due to the propagation delay in <strong>R0</strong>, the stored data <strong>In&#8217;</strong> is only seen after some delay. As I mentioned, a register can have two kinds of delays - but when I&#8217;m checking if setup time is met, I pick the larger of the two - because I want your chip to work under all circumstances. Once we get past <strong>R0</strong>, we see a familiar foe - the combinational delay which I <a href="https://chipinsights.substack.com/i/168864393/welcome-to-my-synchronized-world">spoke about in an earlier section</a>. Adding both these delays gives us the time it takes to get the correct data for <strong>Out&#8217;</strong> - the input to register <strong>R1</strong>. The register <strong>R1</strong> expects to store this data at the next positive clock edge - it&#8217;s schedule is decided by the clock period. But as I mentioned earlier, the register does not like last minute changes to it&#8217;s input - so our real deadline is actually a little earlier than the next positive edge - to ensure that the data is held stable longer than the setup time of R1. This requirement can be expressed using fancy math operators, and this is called the <strong>Setup Time Constraint</strong>. My job is to check whether this constraint is met:</p><ul><li><p>If YES, that means this path between In and Out &#8220;<strong>meets setup time</strong>&#8221;. The extra time you have before the setup time deadline is called P<strong>ositive Slack</strong>.</p></li><li><p>If NO, the path &#8220;<strong>violates setup time.</strong>&#8221; The amount by which your delays exceed the deadline is called N<strong>egative Slack</strong>.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QjXR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc61043c5-d2c7-40d9-9c21-e89979844db6_1680x1920.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QjXR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc61043c5-d2c7-40d9-9c21-e89979844db6_1680x1920.png 424w, https://substackcdn.com/image/fetch/$s_!QjXR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc61043c5-d2c7-40d9-9c21-e89979844db6_1680x1920.png 848w, https://substackcdn.com/image/fetch/$s_!QjXR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc61043c5-d2c7-40d9-9c21-e89979844db6_1680x1920.png 1272w, https://substackcdn.com/image/fetch/$s_!QjXR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc61043c5-d2c7-40d9-9c21-e89979844db6_1680x1920.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QjXR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc61043c5-d2c7-40d9-9c21-e89979844db6_1680x1920.png" width="1456" height="1664" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c61043c5-d2c7-40d9-9c21-e89979844db6_1680x1920.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1664,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:209853,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/168864393?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc61043c5-d2c7-40d9-9c21-e89979844db6_1680x1920.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QjXR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc61043c5-d2c7-40d9-9c21-e89979844db6_1680x1920.png 424w, https://substackcdn.com/image/fetch/$s_!QjXR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc61043c5-d2c7-40d9-9c21-e89979844db6_1680x1920.png 848w, https://substackcdn.com/image/fetch/$s_!QjXR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc61043c5-d2c7-40d9-9c21-e89979844db6_1680x1920.png 1272w, https://substackcdn.com/image/fetch/$s_!QjXR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc61043c5-d2c7-40d9-9c21-e89979844db6_1680x1920.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1><strong>Not so fast&#8230;</strong></h1><p>As I said earlier, registers also need data to be held for some time (called hold time) before it is safe for the input value to change. In the same scenario I described earlier for setup time, when the data from <strong>Out&#8217;</strong> is being stored in register <strong>R1</strong>, a new value of In is being stored in <strong>R0</strong>, and then passing through the combinational logic to replace the current value at <strong>Out&#8217;</strong>. If this happens too fast, then the value of <strong>Out&#8217;</strong> changes before the hold time of register <strong>R1</strong> has passed - which would result in a <strong>Hold Time Violation</strong>. This gives me another constraint to check for - called the <strong>Hold Time Constraint</strong>. (You can think of it like a speeding ticket.) Similar to the setup time check, my goal is to ensure that the chip works at all circumstances - so when I am looking for a hold time violation, I take the smaller of the two propagation delays of register <strong>R0</strong>. Remember, smaller delays are bad when it comes to hold time.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9p5T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f438a4-9c80-44d8-8b55-5855a9a35ab9_1920x1920.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9p5T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f438a4-9c80-44d8-8b55-5855a9a35ab9_1920x1920.png 424w, https://substackcdn.com/image/fetch/$s_!9p5T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f438a4-9c80-44d8-8b55-5855a9a35ab9_1920x1920.png 848w, https://substackcdn.com/image/fetch/$s_!9p5T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f438a4-9c80-44d8-8b55-5855a9a35ab9_1920x1920.png 1272w, https://substackcdn.com/image/fetch/$s_!9p5T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f438a4-9c80-44d8-8b55-5855a9a35ab9_1920x1920.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9p5T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f438a4-9c80-44d8-8b55-5855a9a35ab9_1920x1920.png" width="1456" height="1456" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2f438a4-9c80-44d8-8b55-5855a9a35ab9_1920x1920.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:187931,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/168864393?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f438a4-9c80-44d8-8b55-5855a9a35ab9_1920x1920.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9p5T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f438a4-9c80-44d8-8b55-5855a9a35ab9_1920x1920.png 424w, https://substackcdn.com/image/fetch/$s_!9p5T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f438a4-9c80-44d8-8b55-5855a9a35ab9_1920x1920.png 848w, https://substackcdn.com/image/fetch/$s_!9p5T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f438a4-9c80-44d8-8b55-5855a9a35ab9_1920x1920.png 1272w, https://substackcdn.com/image/fetch/$s_!9p5T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2f438a4-9c80-44d8-8b55-5855a9a35ab9_1920x1920.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h1><strong>Showing (off) my work</strong></h1><p>Now that you know what I do, let me show you how I would actually do it, using <a href="https://chipinsights.substack.com/i/168864393/welcome-to-my-synchronized-world">the example design I described earlier</a>. In this design, although there are just two registers, there are six different paths between inputs and outputs. (Four of them have unique combinational delays.) For each of these paths, I need to ensure that the setup and hold time constraints are met. Dr. Morris Chang was busy, so I made up some numbers for the register&#8217;s setup time , hold time , and propagation delays. With these numbers:</p><ul><li><p>Path 2 and 3 meet both setup and hold time conditions - they are good to go</p></li><li><p>Path 1 fails setup time - it takes 8 ns for data to reach <strong>O&#8217;</strong>, but <strong>R1</strong> expects it at 7 ns</p></li><li><p>Path 4 fails hold time - The path from <strong>E</strong> to <strong>O&#8217;</strong> is just 4 ns long, giving <strong>R1</strong> insufficient time to store the previous input</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T6_C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a52fd0-d3d3-41d8-82c3-f6e0edfe8ae2_767x731.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T6_C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a52fd0-d3d3-41d8-82c3-f6e0edfe8ae2_767x731.png 424w, https://substackcdn.com/image/fetch/$s_!T6_C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a52fd0-d3d3-41d8-82c3-f6e0edfe8ae2_767x731.png 848w, https://substackcdn.com/image/fetch/$s_!T6_C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a52fd0-d3d3-41d8-82c3-f6e0edfe8ae2_767x731.png 1272w, https://substackcdn.com/image/fetch/$s_!T6_C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a52fd0-d3d3-41d8-82c3-f6e0edfe8ae2_767x731.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T6_C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a52fd0-d3d3-41d8-82c3-f6e0edfe8ae2_767x731.png" width="767" height="731" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9a52fd0-d3d3-41d8-82c3-f6e0edfe8ae2_767x731.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:731,&quot;width&quot;:767,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60628,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/168864393?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a52fd0-d3d3-41d8-82c3-f6e0edfe8ae2_767x731.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T6_C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a52fd0-d3d3-41d8-82c3-f6e0edfe8ae2_767x731.png 424w, https://substackcdn.com/image/fetch/$s_!T6_C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a52fd0-d3d3-41d8-82c3-f6e0edfe8ae2_767x731.png 848w, https://substackcdn.com/image/fetch/$s_!T6_C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a52fd0-d3d3-41d8-82c3-f6e0edfe8ae2_767x731.png 1272w, https://substackcdn.com/image/fetch/$s_!T6_C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9a52fd0-d3d3-41d8-82c3-f6e0edfe8ae2_767x731.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This analysis (i.e. Static Timing Analysis) clearly shows that this design does not pass timing. It also tells you exactly which paths are causing violations, and by how much. I have to repeat this analysis for every combination of input and output registers, and every possible path between the inputs and outputs. Even if one out of a million such paths has a setup or hold violation, I will find that for you, and prevent you from making a billion dollar mistake. That&#8217;s what makes me special&#8230;</p><div><hr></div><p>Still not convinced of my value in your life? That&#8217;s okay, I have some more experiences to share from the real world that might just convince you. So share this story, and stay tuned for future installments of this series.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div>]]></content:encoded></item><item><title><![CDATA[The most important law every chip designer should know about]]></title><description><![CDATA[It's not Moore's Law. It's not Huang's Law.]]></description><link>https://chipinsights.net/p/the-most-important-law-every-chip</link><guid isPermaLink="false">https://chipinsights.net/p/the-most-important-law-every-chip</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Mon, 14 Jul 2025 02:01:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s), and are not investment advice.</strong></p><div><hr></div><h1><strong>Story time</strong></h1><p>In 1989, a chip design team started work on one of the most ambitious PC processors of the time - one with a superscalar architecture, branch prediction, and a much faster floating point unit. Over the next two years, hundreds of engineers were involved in the design, simulation, and extensive verification, which culminated in a test chip. The testing continued - by running major operating systems with the most popular applications of the time - for an estimated 100 million clock cycles. After all the bugs were resolved in 1993, the final chip was shipped to all the biggest computer OEMs of the time - with a new brand name called &#8220;Pentium&#8221;. The chip was an instant hit - the reviews were positive, and as a result, Intel&#8217;s microprocessor sales doubled in 1993. The new floating point unit impressed - with a 10x improvement over the previous generation of Intel chips. It was another feather in Intel&#8217;s cap - extending their dominance in the PC processor market. It seemed like they had done everything right, and nothing could go wrong&#8230;</p><p>The Pentium chip had millions of users over the years, but one of them has a special place in history. Dr. Thomas Nicely and Intel couldn&#8217;t be further apart - he was a Mathematics professor at Lynchburg College in Virginia, away from the hustle and loud marketing that Silicon Valley was known for. About 18 months after the release of the Pentium processor, Dr. Nicely noticed something - the results from his research on twin prime numbers were slightly off. Like a typical academic would, instead of ignoring it as a &#8220;random error&#8221;, he started to dig deeper - which led him to the conclusion that the Pentium processor was making mistakes when running some floating point division operations. He posted his findings online, and this opened up a can of worms that would cost Intel dearly.</p><div><hr></div><h1><strong>Triaging the bug</strong></h1><p>Remember the long division method from high school? Microprocessors in the 1990s used a similar method to divide floating point numbers. Although it worked, this method was quite slow - making floating point division one of the slowest arithmetic operations in a microprocessor. To make this operation execute faster, Intel implemented a different approach called &#8220;Sweeney-Robertson-Tocher (SRT) method&#8221;. I&#8217;ll skip the details here, but for the purposes of this post, all you need to know is that in order to implement SRT in hardware, a lookup table was needed to provide the quotient digit based on different input combinations. It was in this lookup table that the now famous Pentium FDIV bug originated.</p><p>In order to implement this lookup table, the Pentium team used a Programmable Logic Array, or PLA. A PLA is a type of Read-Only Memory (ROM), but can be used to store structured data more efficiently in a smaller area - by representing the data as a logic function. In the 1990s, memory was still very expensive, which made PLAs an attractive alternative. The word &#8220;programmable&#8221; in PLA could be misleading in today&#8217;s context - programming a PLA means &#8220;fusing&#8221;, or allowing current to flow through certain transistors to get the desired logic. This was done permanently, before shipping the chip out to the customer. This transistor fuse mapping (i.e. which connections exist) is very important in deciding what the final output would be. For example, the figure below shows a 3 input, 2 row, 2 output PLA, where different programming (Blue and Green dots) result in different output logic.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CXmv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc734101e-7404-4026-b58a-64ce32957391_1342x645.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CXmv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc734101e-7404-4026-b58a-64ce32957391_1342x645.png 424w, https://substackcdn.com/image/fetch/$s_!CXmv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc734101e-7404-4026-b58a-64ce32957391_1342x645.png 848w, https://substackcdn.com/image/fetch/$s_!CXmv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc734101e-7404-4026-b58a-64ce32957391_1342x645.png 1272w, https://substackcdn.com/image/fetch/$s_!CXmv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc734101e-7404-4026-b58a-64ce32957391_1342x645.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CXmv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc734101e-7404-4026-b58a-64ce32957391_1342x645.png" width="1342" height="645" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c734101e-7404-4026-b58a-64ce32957391_1342x645.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:645,&quot;width&quot;:1342,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:70401,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://chipinsights.substack.com/i/168256756?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc734101e-7404-4026-b58a-64ce32957391_1342x645.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CXmv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc734101e-7404-4026-b58a-64ce32957391_1342x645.png 424w, https://substackcdn.com/image/fetch/$s_!CXmv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc734101e-7404-4026-b58a-64ce32957391_1342x645.png 848w, https://substackcdn.com/image/fetch/$s_!CXmv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc734101e-7404-4026-b58a-64ce32957391_1342x645.png 1272w, https://substackcdn.com/image/fetch/$s_!CXmv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc734101e-7404-4026-b58a-64ce32957391_1342x645.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To implement the SRT division method, the Pentium team used a 22 input, 120 row, 2 output PLA - which means there are 2880 potential transistors to fuse. (Of these, only 2048 values were used.) Unfortunately for Intel, 5 of these were programmed incorrectly. Whenever these incorrect values were picked up from the lookup table, the result of the floating point division was incorrect. This was the cause for the FDIV bug in Pentium.</p><div><hr></div><h1><strong>How did this bug go unnoticed?</strong></h1><p>Looking back, this sounds like a trivial issue that should have been caught much earlier in the testing process. But remember, we are talking about the best microprocessor company of the time - which begs the question - how did they miss this bug? There are a few theories floating around:</p><ul><li><p>Intel&#8217;s whitepaper claims this was a clerical error - the C script written by an engineer to load the final transistor mapping into the PLA had an error, which resulted in 5 entries not being loaded in the PLA. The values were tested before loading to the PLA, but the values in the PLA were not checked.</p></li><li><p>Robert Colwell, architect of the Pentium Pro, mentions in his book "The Pentium Chronicles&#8221; that this error was caused by a last minute request (actually, order) from management to shrink the size of the PLA, which made the engineers pursue an optimization that was not properly verified.</p></li><li><p>Some postmortem studies claim that the engineers misunderstood the SRT method, and applied the wrong rule for lowering thresholds - which means this was not an error in any step in the chip design process - the table was mathematically wrong in the first place</p></li><li><p><strong>Aliens manipulated the final chip layout in order to scale back human progress (I&#8217;m not kidding. Intel made a movie about this, called &#8220;<a href="https://www.youtube.com/watch?v=eI4HxFQROJE">Intel: The Journey Inside</a>&#8221; with this plot.)</strong></p></li></ul><p>Irrespective of the reason, it&#8217;s interesting that the bug went unnoticed for close to 2 years after the chip was released. (Although Intel claims they were aware of the problem in the summer of 1994, months before Dr. Nicely made it public.) This is because, the odds of hitting this bug were extremely low:</p><ul><li><p>The division must access the 5 incorrect values out of the 2048 in the PLA, a 0.24% chance</p></li><li><p>Intel claimed a typical user would encounter this problem once every 27,000 years. Another way of putting this was that an error would take place once for every 9 billion random divisions.</p></li><li><p>The error typically shows up in the 9th or 10th decimal digit (at worst, the 4th decimal digit.) There are very few applications that require such high precisions</p></li></ul><p>Although a lot of people claimed to have been impacted by this, Dr. Nicely was the only person who noticed the bug in regular use. (All other scenarios seem to be artificially designed to hit the bug.) When it comes to bugs, Intel won the lottery. (if winning the lottery means creating a bug that is being talked about 30 years later.)</p><div><hr></div><h1><strong>Consequences</strong></h1><p>Although the bug was clearly not great news for Intel. But in a way, they got lucky - the odds of this bug having any real impact was ridiculously low. (If we go by Intel&#8217;s numbers, the odds are lower than that of plane crashes.) Yet, Intel did not get away with this.</p><p>Intel&#8217;s early response was to shrug it off as an unlikely scenario, which led to a lot of flak. News about Dr. Nicely&#8217;s findings spread like wildfire, and even CNN ran a segment on the issue. IBM, who were simultaneously Intel&#8217;s biggest customer and competitor (with the Power PC) claimed that the issue was more common than Intel estimated. AMD ran <a href="https://bsky.app/profile/trevorkevorson.bsky.social/post/3lcnv6h65hc26">an advertisement</a> that said their chips &#8220;Can actually handle the rigors of complex calculations like division.&#8221; - a clear dig at Intel&#8217;s bug.</p><p>Ultimately, Intel had to <a href="https://static.righto.com/images/pentium-fdiv/apology.jpg">issue a public apology</a> and offered a free replacement to anyone with a Pentium processor that reached out to them. This was estimated to have costed Intel about $500 million - and a lot of damage to their reputation.</p><p>This is the impact that even a seemingly harmless chip design bug can have.</p><div><hr></div><h1><strong>The most important law in chip design&#8230;</strong></h1><p>This brings me to the title of this post, and the reason why I narrated the story of Intel&#8217;s famous FDIV bug. This is not just a story about Intel&#8217;s mistakes. Every major chip company in existence has had a similar story to this, and I&#8217;m sure every chip company in the future will. There is a lesson to learn from stories like this.</p><p>It is in the nature of chip design and computing that even the unlikeliest outcomes can occur, and should therefore be accounted for. Over the years, architectures have changed, workloads have changed, but this fact continues to remain true. <strong>Hence, the most important law in chip design is actually Murphy&#8217;s law: If something can go wrong, it will go wrong.</strong></p><p>We talk a lot about transistor nodes and chip performance, but it is important to remember that the first priority will always be: <strong>build a chip without bugs.</strong> Maintaining such a high standards at the scale of trillions of transistors, each a few nanometers wide, and switching more than a billion times per second, is what makes the chip design industry truly unique.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h1><strong>References</strong></h1><ul><li><p>Few facts about the Pentium processor</p><ul><li><p><a href="https://en.wikipedia.org/wiki/Pentium_(original)">https://en.wikipedia.org/wiki/Pentium_(original)</a></p></li><li><p><a href="https://www.tomshardware.com/picturestory/710-history-of-intel-cpus.html">https://www.tomshardware.com/picturestory/710-history-of-intel-cpus.html</a></p></li></ul></li><li><p>Dr. Thomas Nicely notes on his FDIV bug discovery</p><ul><li><p><a href="https://faculty.lynchburg.edu/~nicely/pentbug/pentbug.html">https://faculty.lynchburg.edu/~nicely/pentbug/pentbug.html</a></p></li></ul></li><li><p>About the SRT division method</p><ul><li><p><a href="https://www.osti.gov/biblio/4157138">https://www.osti.gov/biblio/4157138</a></p></li></ul></li><li><p>A great deep dive into the bug</p><ul><li><p><a href="https://www.righto.com/2024/12/this-die-photo-of-pentium-shows.html">https://www.righto.com/2024/12/this-die-photo-of-pentium-shows.html</a></p></li></ul></li><li><p>Explanations for the bug</p><ul><li><p><a href="https://web.archive.org/web/20060209005434/http://www.byte.com/art/9503/sec13/art1.htm">https://web.archive.org/web/20060209005434/http://www.byte.com/art/9503/sec13/art1.htm</a></p></li><li><p><a href="https://link.springer.com/chapter/10.1007/3-540-59293-8_189">https://link.springer.com/chapter/10.1007/3-540-59293-8_189</a></p></li><li><p><a href="https://ieeexplore.ieee.org/book/5989703">https://ieeexplore.ieee.org/book/5989703</a></p></li><li><p><a href="https://oldbytes.space/@kenshirriff/113606898880486330">https://oldbytes.space/@kenshirriff/113606898880486330</a></p></li></ul></li><li><p>Media coverage after the bug became mainstream</p><ul><li><p><a href="https://bsky.app/profile/did:plc:s23o544nudvw6hxeib2fjqse/post/3lcnv6h65hc26?ref_src=embed">AMD&#8217;s 1994 advertisement</a></p></li><li><p><a href="https://static.righto.com/images/pentium-fdiv/apology.jpg">https://static.righto.com/images/pentium-fdiv/apology.jpg</a></p></li></ul></li></ul><div><hr></div>]]></content:encoded></item><item><title><![CDATA[How to build a new chip architecture, ft. Nvidia]]></title><description><![CDATA[A case study in computer architecture]]></description><link>https://chipinsights.net/p/how-to-build-a-new-chip-architecture</link><guid isPermaLink="false">https://chipinsights.net/p/how-to-build-a-new-chip-architecture</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Sun, 13 Jul 2025 18:06:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s), and are not investment advice. </strong></p><div><hr></div><p>Over the last year, I have spent many hours following stories about Nvidia and their meteoric rise. This post is an attempt to consolidate all those learnings. My goal is to look back at Nvidia&#8217;s history to try and generalize the principles behind making a new computing architecture succeed.</p><p>A few caveats before I get into the post:</p><ul><li><p>This is not a post about business strategy. There are many good resources covering that already. I have tried to stay away from generic advice like &#8220;to be successful, build the picks and shovels in a gold rush&#8221;.</p></li><li><p>This post is not forward looking - I&#8217;m not claiming that Nvidia has won and everyone should invest in their stock. It is simply a case study in computer architecture. In fact, a lot of my learnings come from the early days of Nvidia</p></li></ul><p>With that out of the way, let me share what I think is key to successfully build a new architecture.</p><div><hr></div><h1><strong>Pick the right domain</strong></h1><p>Architectural changes cannot happen overnight. So its very important to pick the right target domain. There are a few ideal characteristics:</p><ul><li><p><strong>It&#8217;s barely possible to execute applications with current architectures.</strong></p><p>This means at least one the following factors:</p><ul><li><p>It takes too long to run</p></li><li><p>It needs very expensive compute resources</p></li><li><p>It needs advanced programming skills that only few possess</p></li></ul><p>When Nvidia was founded in 1993, they picked computer graphics. For graphics to be realistic, it needs fast compute. In the 1990s, 3D graphics was only possible using either:</p><ul><li><p>Expensive workstations from companies like SGI</p></li><li><p>Advanced software rendering techniques in games like Doom</p></li></ul><p>These were both not accessible to the average consumer and developer. In addition, 1992 had two key developments that could enable graphics cards:</p><ul><li><p>The PCI bus protocol was adopted as a standard by all computer manufacturer. This means anyone could make a new chip, and attach it with any computer, and it could work</p></li><li><p>Microsoft released Windows 3.1, which was a big jump in operating systems graphics</p></li></ul><p>All this made computer graphics a great domain for Nvidia to try and disrupt.</p></li><li><p><strong>There are general patterns in the workloads that can be exploited</strong></p><p>I think the word &#8220;general&#8221; is key. Let me explain with the example of graphics.</p><p>Nvidia recognized, over time, that the key pattern in computer graphics is this: <strong>Computations on each pixel is independent of the other</strong>. No other pattern is as important. This led them towards a massively parallel architecture that is still programmable.</p><p>There were architectures inspired by other approaches too. For example, early graphics chips focused heavily on fixed-function accelerators. Here, the idea was to pick a specific part of the graphics pipeline (like Tessellation, Rasterization, Shading), and make your architecture optimal for these steps. In fact, Nvidia also had a fixed function approach for a long time.</p><p>There are two problem with going narrow with architecture decisions</p><ul><li><p>Algorithms in your domain can change. Your architecture may not optimally support those changes</p></li><li><p>Your architecture can never scale to other similar domains.</p></li></ul><p>If you cannot find a general pattern in your domain, it is a bad idea to build an architecture around this domain. Often, such niche domains get commoditized as part of a bigger architecture - this is what Intel did for audio cards, and even 3D graphics to an extent over the years. But Nvidia survived this because of their architecture was sufficiently general by that point.</p></li><li><p><strong>Solving for this domain should provide big opportunities</strong></p><p>This is what Nvidia calls a &#8220;zero billion dollar&#8221; market. Its hard to specify exactly which domains would fall in this category, but a good approach I suggest is to ask this question: <strong>&#8220;If you build it, and they come, what can they do?&#8221;</strong></p><p>When Nvidia first bet the company on computer graphics, their vision was: If graphics could be made accessible to everyone, it would be the greatest storytelling medium. This was around the time when Jurassic Park was released, and power of computer graphics was becoming evident.</p><p>I also found something else that was interesting in my research - <a href="https://www.nvidia.com/content/PDF/GTC/GTC2010_Catalog_Machine_Learning_&amp;_Artificial_Intelligence_2010_09_01.pdf">Nvidia had AI applications added to their GTC lineup as early as 2010</a>. Although AI was still in its nascent stages, they were thinking about potential applications like computer vision, speech recognition, and robotics - the promise of a world powered by AI was massive, prompting Nvidia to pursue that domain aggressively.</p><p>Establishing an architecture needs huge time investment - so it is very important that your target domain has huge potential.</p></li></ul><div><hr></div><h1><strong>Your architecture should fit your target workloads - not the other way around</strong></h1><p>If you want to build a standardized architecture, that means that other developers will be building software for your architecture. This presents a major challenge to architecture companies. Usually, when there is an change in algorithms or APIs that your architecture support, architecture companies are presented with two options:</p><ol><li><p>Build an translation layer through your drivers, or compiler, to support the new workloads on the same architecture</p></li><li><p>Modify your architecture to better suit the new workloads</p></li></ol><p>The first approach is often easier, and can be done on-the-fly (in the same chip generation). So this is the preferred method. However, a lot of chip companies ignore the second approach completely - if it works, why fix it? There are two stories from Nvidia about this which are interesting to study.</p><p>In 2003, Nvidia had established itself as the leader in computer graphics, and was preparing to launch its next chip, NV30. Around the same time, Microsoft had just released the new Direct3D 9 API. NV30 did not fully support Direct3D 9 - so they created software workarounds to support the new software features. This turned out to be a disaster - the NV30 received bad reviews, had heating problems. This was a major learning for Nvidia.</p><p>Over the next few years, as Nvidia&#8217;s programmable shaders started to gain popularity, many researchers started using them for scientific computing. During the early days, the same GeForce cards used for graphics were being repurposed for scientific computing through some cumbersome programming. Although this was better than anything available at the time, it was still not optimal - much of the GPU architecture was still optimized towards graphics applications.</p><p>This time though, Nvidia saw the trend early - instead of keeping the same chip architecture for graphics and scientific computing, they started to build chips that were specifically meant for non-graphics applications, by maximizing the number of parallel floating points computations supported. In 2016, they also introduced FP16 support on their GPUs - because most Deep Learning workloads used FP16. These factors went on to play a massive role in their dominance in the data-center - which is mostly comprised of AI workloads.</p><div><hr></div><h1><strong>Have a unified and backward compatible architecture.</strong></h1><p>Two basic rules of life are: 1) Change is inevitable. 2) Everybody resists change.</p><p>To build a standardized architecture, making it backward compatible is key. Having a unified architecture naturally creates a flywheel:</p><ul><li><p><strong>All the libraries developed over the years work on your architecture</strong></p></li><li><p><strong>Developers are incentivized to write more libraries for your architecture</strong></p></li></ul><p>Getting developers into a new architecture is key - that&#8217;s what Intel was able to do in PCs, ARM in mobile (PowerPC and DEC Alpha are examples where this did not happen). A unified architecture is very &#8220;developer friendly&#8221; - a community (ideally, open-source) starts to build around your architecture. This is exactly what Nvidia achieved with CUDA - since 2006, all Nvidia GPUs are CUDA compatible, giving CUDA developers an install base of about 500 million devices, with about 300 libraries and 600 AI models.</p><p>CUDA is Nvidia&#8217;s moat, and a lot had been said about this already. For the purposes on this post, I want to talk specifically about some of the challenges with maintaining backward compatibility:</p><ul><li><p><strong>Clunky hardware:</strong> To support legacy architecture features, often, additional hardware complexity needs to be maintained. This will result in poorer Power, Performance, Area (PPA) metrics over time</p></li><li><p><strong>Restricting Innovation:</strong> Very often, something new and better cannot be implemented in your architecture because it breaks some legacy constraints.</p></li><li><p><strong>Expensive Development:</strong> As the number of architectural features increases, it needs a bigger workforce, and more knowledge transfer - which costs time and money.</p></li></ul><p>I think over time, every architecture company gets hamstrung by their legacy architectural features - A case in point is Intel, and the x86 architecture (<a href="https://chipinsights.substack.com/p/the-isa-debate">I have a earlier post on ISAs with more details</a>). This makes maintaining backward compatibility one of the most challenging aspects of computer architecture.</p><p>So far, Nvidia has managed this well, primarily owing to these factors:</p><ul><li><p>Nvidia&#8217;s developers operate at a very high level of abstraction. CUDA by itself is a fairly high-level language (like C). Also, most developers build using CUDA libraries like CuBLAS and CuDNN, which are optimized for Nvidia&#8217;s architectures. This gives Nvidia more opportunities to improve their architecture while maintaining backward compatibility. In other words, they can maintain backward compatibility at the developer level, but break compatibility at the microarchitectural level - bridged using their driver and compiler. This differentiates them from Intel, who for the most part were dependent on Windows developers doing a good job at using their architecture.</p></li><li><p>Their architecture is still fairly general and simple - it is centered around parallel programming, and floating point computations. A lot of issues in Intel&#8217;s architecture stemmed from complexities added over the years - like variable length instructions and complex arithmetic.</p></li></ul><p>So far, Nvidia has navigated the backward compatibility challenge well - but their workloads are fairly new, so it will be interesting to see how this continues in the long run.</p><div><hr></div><h1><strong>Build infrastructure to move faster</strong></h1><p>The nature of workloads keep changing all the time. One of the most impressive aspects of Nvidia is their ability to pivot when an opportunity present itself. They started as a graphics card, pivoted to programmable graphics, and then expanded into high performance computing. Nvidia was able to grab opportunities better than anyone else, because they were able to make big architectural changes quickly.</p><p>From early days, Nvidia was a strong believer in simulation and automation. I think it stems from Jensen&#8217;s early days at LSI logic, the company that pioneered many EDA innovations. (<a href="https://chipinsights.substack.com/p/eda-deep-dive-part-1-the-history">I have covered many such stories in my EDA series</a>). During his time at LSI, Jensen worked on a new chip architecture called &#8220;sea-of-gates&#8221; - which was a very early version of an FPGA emulator. Emulation would go on to play a big role in the development of RIVA128 - widely regarded as the chip that saved Nvidia.</p><p>Traditionally, once the chip was designed, it was sent out to the fab, and a test chip was sent back. This test chip was used to run software, find bugs, and resolve them. There are multiple iterations of this, until all bugs are resolved. Then, a final, large order of chips gets &#8220;taped out&#8221;. This whole process usually took 2 years.</p><p>Nvidia first two chips - NV1 and NV2, were poorly received. Nvidia needed to make major architectural changes in a very short time - which forced them to adopt emulation. Using emulation, once the design is ready, it is loaded on to an &#8220;Emulator&#8221;, which is then used to test software on the chip prototype even before it was manufactured. To do this, Nvidia went to a failing company called Ikos, invested heavily in their emulators (each one cost $1 million!), and essentially bet the company on emulation. It was a cumbersome process, but it worked - RIVA128 made one of biggest leap in computer graphics, and made Nvidia the leaders in computer graphics.</p><p>Although the RIVA128 story was born out of desperation, moving fast then became a part of Nvidia&#8217;s culture. Nvidia continues to invest heavily on infrastructure to help them innovate faster than the competition. Nvidia also incorporated a feature called &#8220;virtualized objects&#8221; into their architecture. In simple words, this was a mini-OS baked into the hardware (called &#8220;Resource Manager&#8221;) that could be used to emulate certain late hardware features that could not make it in time for the chip production. Although it incurred a minor performance cost, Nvidia adopted this because they greatly valued the ability to move quickly.</p><p>Generally at Nvidia, this obsession with efficiency is referred to as the &#8220;speed of light&#8221; approach, which says: <strong>every project must be executed at the fastest possible rate, and all obstacles in the process should be removed.</strong> This is an underrated aspect of chip design that a lot of companies neglect, making them slower, and less receptive to new opportunities.</p><div><hr></div><h1><strong>Understand bottlenecks outside your core architecture</strong></h1><p>If building a computing platform is like building a car - the architecture is like the engine. Even if you have built the fastest engine, your car can&#8217;t go fast if you have weak tires, or there is bumper-to-bumper traffic on the road. Although your architecture is just one part of the computing stack, all the end user cares about is: <strong>how fast is my workload running</strong>. So its very important to analyze where the bottlenecks are, and work on managing them better.</p><p>One fundamental bottleneck every architect must think about is transistor scaling - i.e. how is Moore&#8217;s law progressing at the time your are building your architecture. (<a href="https://chipinsights.substack.com/p/moores-law-and-the-performance-promise">I covered Moore&#8217;s law in more detail in an earlier post</a>). Nvidia learnt this the hard way.</p><p>Nvidia&#8217;s first graphics card, the NV1, was designed to render 3D surfaces in 2D using quadrilaterals (4 vertices) instead of triangles (3 vertices). Nvidia&#8217;s had a good reason to do this - memory costs were very high, and using quadrilaterals would allow them to build their chip with a smaller memory, allowing them to price their graphics card competitively. However, what they didn&#8217;t see was that Moore&#8217;s law started to accelerate around the same time, making memory much cheaper. The software ecosystem at the time standardized on triangles, and their competitors were able to support this using larger memory at comparable prices. Despite having one of the best architecture, Nvidia could not remain competitive because they had a small memory.</p><p>Many years later, in the datacenter business, Nvidia knew that their architecture alone cannot push them to the top. Not a lot of people know this, but Nvidia was in the cloud business very early - in 2013, they released Nvidia Grid, an early version of their cloud gaming platform, known today as GeForce Now. There is another fact that is not well known - Nvidia had an LLM of their own, much before ChatGPT became popular. In 2019, they built an open-source LLM called Megatron.</p><p>Both these experiences taught Nvidia about all the components needed to make the best datacenter servers. As a result, Nvidia has expanded well beyond their GPU architecture in datacenters, to offer:</p><ul><li><p>Very high bandwidth memory using CoWoS 2.5D stacking (very important for LLMs)</p></li><li><p>Faster networking between cards through NVLink, enabled by their acquisition of Mellanox</p></li><li><p>A very efficient ARM-based CPU for the datacenter (in fact, they tried to acquire ARM)</p></li></ul><p>This gave them control of a bigger portion of the computing stack, and allowed them to optimize it further. Vertical integration as an architecture company also buys you time - even if Nvidia GPU architecture is not the best for a generation, the full solution they provide might still be better than anything on offer. Finally, a full solution is much easier for enterprises to deploy.</p><p>Although most architecture companies cannot start here, it&#8217;s very important to move towards that direction as your company evolves. This is how you can move from a <strong>great technology to a great product.</strong></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p><strong>References:</strong></p><ul><li><p>The Nvidia Way, a book about Nvidia&#8217;s story by Tae Kim</p></li></ul><ul><li><p>Nvidia episodes from Acquired</p><ul><li><p><a href="https://open.spotify.com/episode/6G85ReuFsSkqIuwwwEhJeG?si=5bb4da30ad614f88">Nvidia Part 1: The GPU Company (1993-2006)</a></p></li><li><p><a href="https://open.spotify.com/episode/75VXqCGAV1igZViPFO8LIE?si=dac01128910b4a0c">Nvidia Part 2: The Machine Learning Company (2006-2022)</a></p></li><li><p><a href="https://open.spotify.com/episode/0ax1sBKJ1ombOYGwWl0hEq?si=2b39d59a07214b4a">Nvidia Part 3: The Dawn of the AI Era (2022-2023)</a></p></li><li><p><a href="https://open.spotify.com/episode/6MmkzOxBUeA2Ur1fLDmQRk?si=86db2b72c33b4f3b">Nvidia CEO Jensen Huang</a></p></li></ul></li><li><p><a href="https://open.spotify.com/episode/47oFfRhzqQK2dgObjZsf4D?si=0dcbfa011cf24f6e">NVIDIA's Jensen Huang on AI Chip Design, Scaling Data Centers, and his 10-Year Bets</a></p></li><li><p><a href="https://open.spotify.com/episode/0pt8FAP3UKdZhgKHfAWPdC?si=84ca54dc24694a86">Ep17. Welcome Jensen Huang | BG2 w/ Bill Gurley &amp; Brad Gerstner</a></p></li><li><p><a href="https://www.youtube.com/watch?v=7ARBJQn6QkM&amp;t=2732s">NVIDIA CEO Jensen Huang's Vision for the Future</a></p></li></ul><div><hr></div>]]></content:encoded></item><item><title><![CDATA[The era of full-stack chip designers]]></title><description><![CDATA[What are chip design teams going to look like in the future?]]></description><link>https://chipinsights.net/p/the-era-of-full-stack-chip-designers</link><guid isPermaLink="false">https://chipinsights.net/p/the-era-of-full-stack-chip-designers</guid><dc:creator><![CDATA[Bharath Suresh]]></dc:creator><pubDate>Sun, 06 Jul 2025 22:08:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div><hr></div><p><strong>Disclaimer: Opinions shared in this, and all my posts are mine, and mine alone. They do not reflect the views of my employer(s), and are not investment advice.</strong></p><div><hr></div><p>A few years back, when I was talking to a student that was interested in both the front-end and back-end stages in chip design, I made a cheeky remark that they should become a &#8220;Full Stack Chip Designer&#8221;. (I can&#8217;t remember who I was talking to, but if you are reading this, this post is dedicated to you!) It was a term I took from software engineering - a full stack engineer is someone that has the skillsets to work on both the front-end and back-end aspects of a software application. When I said &#8220;full-stack&#8221; in the chip design context, I just meant it as a joke - there are very few people that actively work on all the steps in the RTL-to-GDS chip design flow, especially when designing complex, real-world chips. I must admit I have never done full stack software engineering, but from what I gather, the skills are more transferrable between front-end and back-end software design, compared to chip design. But with AI in the picture, something tells me we might be heading towards the era of full-stack chip designers.</p><div><hr></div><h2><strong>What I mean by &#8220;Full-Stack Chip Designer&#8221;</strong></h2><p>I briefly introduced the idea earlier, but let me be more specific here. The typical digital chip design process can be divided into two broad categories:</p><ul><li><p><strong>Front-End</strong>, which involves designing microarchitecture specifications and describing the logic using Hardware Description Languages (HDLs) like Verilog. (the resulting &#8220;code&#8221; is called Register Transfer Language, or RTL.)</p></li><li><p><strong>Back-End</strong>, which involves taking the RTL, and converting it into a layout (called GDS) that a foundry can use to manufacture the chip. This is a multi-step process that uses EDA tools from companies like Cadence and Synopsys.</p></li></ul><p>Typically, teams managing these two aspects work in isolation to each other - the front-end team finalizes the RTL, then hands it off to the back-end team to generate the GDS. There are a few &#8220;leads&#8221; involved in the back-and-forth between the teams, but their role is to pass feedback to each other&#8217;s teams. The leads have a good understanding of both front-end and back-ends, but typically do not directly work on implementing in either. On the contrary, when I refer to a full-stack chip designer, I mean an individual (or a small team) that can take a design idea through from front-end to back-end - fully implementing all the steps in the process.</p><div><hr></div><h2><strong>Why is Full-Stack Chip Design hard?</strong></h2><p>There are a lot of smart people in chip design - so if I could think of this idea, you can be sure that a lot of people have thought of it. In fact, a lot of early chip designers were truly full-stack - they worked on all the steps themselves. I can even say that if you have ever taped-out a chip for a project at your university, you are technically a full stack chip designer too. So it&#8217;s clearly not an impossible problem to solve - it is just very hard to solve at the scale of today&#8217;s commercial chips with billions of transistors. There are two main reasons for this:</p><h3><strong>1. Back-end tools aren&#8217;t intuitive; Neither are HDLs</strong></h3><p>I think this is a well documented problem. (I have also talked about it in <a href="https://chipinsights.substack.com/p/eda-deep-dive-part-1-the-history">one of my earlier posts</a>.) Due to a large design space, EDA tools are complex to use, and produce reports filled with convoluted terminology. As a result, it is not straightforward for a front-end designer to dive into back-end tools. To make matters worse, bugs in the back-end design process are very hard to spot, and if left unattended, could result in a chip that does not function (a chip re-spin is a billion dollar affair, so no one wants that.)</p><p>I also think writing good RTL is an art that takes time to master - unlike high level languages, HDLs are less intuitive, which makes it harder for back-end experts to pick up. All this has meant that back-end designers spend all their time training to be experts in the tools they are working with, while front-end engineers prefer to do what they do best.</p><h3><strong>2. Front-end and Back-end design happens at different granularities</strong></h3><p>This aspect is more nuanced and is not seen in small chips or university projects. When working on industry-scale chips, front-end and back-end designers have different priorities. Front-end designers start by becoming experts on a small part of the design. In order to make this happen, all other parts of the design need to be treated like black-boxes. However, for back-end design to be effective, it needs to happen at a bigger granularity - if a chip has two blocks, but the back-end is handled for each block separately, the interactions between the blocks (signals routed across, how often they access hard macros, and so on) would not be captured well - which would result in a low-quality layout. Hence, the goals of a back-end designer are quite different - it is to gain a basic understanding of all parts of the design, by sacrificing depth in a single part.</p><p>Essentially, when it comes to understand the chip, a front-end designer should be a specialist, while a back-end designer should be a generalist. Getting an individual (or team) to do both is a challenge.</p><div><hr></div><h2><strong>What do you gain by being a Full-Stack Chip Designer?</strong></h2><p>Short answer: Time. </p><p>Although front-end and back-end work in isolation, they are working towards the same goal - to build a better chip. However, there is a long feedback loop between the two stages: Typically, once the RTL is delivered by the front-end teams, back-end teams find ways to optimize the layout which need changes in the front-end. The front-end team now needs to distil out the feedback, figure out if the request is even feasible, and if so, implement the change. This takes weeks, or sometimes even months. Projects have multiple iterations like this, which either massively increases chip design timelines, or results in a sub-par chip getting shipped.</p><p>Bringing both front-end and back-end into the same umbrella can massively shrink this timeline, by:</p><ul><li><p>Making the iteration time faster (&#8221;I know exactly what needs to change for a better layout, and whether that&#8217;s possible to do in the RTL&#8221;)</p></li><li><p>Reducing the number of iterations (&#8221;When I write RTL, I also know how it is going to impact the layout&#8221;)</p></li></ul><p>This time saving is crucial - since the semiconductor industry is highly cyclical, when the chip you build is hot, quickly coming up with better versions is key to dominate your industry.</p><div><hr></div><h2><strong>How can AI help to make this possible?</strong></h2><p>I spoke about the potential of AI in chip design EDA in an earlier post - I think reading this would add value to this discussion:</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;4a9ece92-16af-4220-a91b-9bded73eedf0&quot;,&quot;caption&quot;:&quot;&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;EDA Deep Dive - Part 3: The AI Era&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:178190448,&quot;name&quot;:&quot;Bharath Suresh&quot;,&quot;bio&quot;:&quot;Engineer and Writer&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23b7c14a-5bd1-4a78-9ac8-c5d6eda62bfc_2048x2048.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2025-01-11T17:29:32.777Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://chipinsights.substack.com/p/eda-deep-dive-part-3-the-ai-era&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:154626822,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:0,&quot;publication_id&quot;:null,&quot;publication_name&quot;:&quot;Chip Insights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Z-fT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F74222e4c-9d04-46aa-82ba-7d82759b48b9_512x512.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>In addition to the points mentioned there, I want to specifically talk about the two ways I feel AI can make full-stack chip design a reality:</p><h3><strong>1. Using AI for Knowledge Transfer</strong></h3><p>If you look at both the reasons why full-stack is hard in chip design, they boil down to the same thing - knowledge transfer is hard. I think AI, even in it&#8217;s current form, can solve this problem to a good extent.</p><p>For instance, it is possible to develop and maintain a database with all the scripts, best practices, and terminologies associated with back-end tools - effectively allowing an expert in front-end design to move ahead with back-end flows. Similarly, if LLM based RTL generation can be solved effectively, that allows a back-end designer to also manage front-end changes.</p><p>I also think LLMs are going to play a big role in documentation and teaching - if basic questions about all parts of a design could be answered immediately, then you can have a specialist in one part of the design expand into being a generalist when needed.</p><h3><strong>2. Automation is coming</strong></h3><p>Although I didn&#8217;t mention it so far, having different front-end and back-end teams is also important to maintain realistic working hours - from the conversations I have had, chip designers work more hours than software engineers, especially close to deadlines. So in the current state, even if an individual can manage both front-end and back-end, it&#8217;s not practical to have them work on both. This is where I feel AI&#8217;s big productivity promise is going to play a role.</p><p>I think an agentic RTL-to-GDS flow is coming soon, which would automate a lot of mundane tasks that chip designers must do today. I think this would greatly help with the workload problem, and make the idea of a full stack chip designer practical.</p><div><hr></div><h2><strong>Why economic incentives might make this inevitable?</strong></h2><p>So far, I talked about going &#8220;full-stack&#8221; like an opportunity - if someone wants to do both front-end and back-end, they might be able to do it in the near future and build better chips. This is actually how it works in software engineering today - some developers become full-stack, but others choose to stay with one. But can chip design afford to offer this flexibility?</p><p>I can imagine a future where becoming a full-stack chip designer may not just be an option - it could become the norm. To understand why I feel this way, let&#8217;s look at the economics of chip design. At a high level, chip design companies spend money on the following:</p><ul><li><p>Payroll for chip designers</p></li><li><p>Cost to manufacture wafers</p></li><li><p>EDA tool licenses</p></li></ul><p>With the way things are headed today, manufacturing costs are increasing sharply - each new node is becoming more challenging to implement, and as a result, more expensive. So this is going to start eating into the profit margins of most chip design companies.</p><p>The next factor is EDA licenses. There are many AI-first EDA startups coming up today, but they still don&#8217;t have access to the Process Design Kit (PDK) from chip manufacturers. (If you don&#8217;t know what a PDK is, think of it as a secret recipe that a manufacturer like TSMC provides to EDA vendors like Cadence and Synopsys in order to correctly map chip designs to a layout that can be manufactured.) As long as PDKs remain under tight control, the legacy EDA vendors cannot be replaced. This leaves two possible outcomes:</p><ul><li><p>AI EDA tools add a new agentic layer in chip design</p></li><li><p>Legacy EDA vendors do all the AI themselves and become more dominant</p></li></ul><p>Either way, I see the cost related to EDA going up. (Not to mention, a lot of chip design companies also need to upgrade compute to handle the new AI workflow.) So to maintain their profit margins, chip design companies might raise their prices - but that may not be sustainable unless they have a very strong moat.</p><p>This leads us to the point I&#8217;m trying to make - companies need to innovate, and improve productivity with smaller teams. <strong>What better way to do this, than with full stack chip designers?</strong> (By the way, when I say smaller teams, I don&#8217;t necessarily think jobs are going away - on the contrary, I expect shorter design timelines, and a large variety of chips customized for different use cases.)</p><div><hr></div><h2><strong>Some other definitions of full-stack</strong></h2><p>I took front-end and back-end design as an example here since the analogy fits nicely with the software engineering world. But chip design actually has many more steps, and could see consolidation at other levels too. Here are a few I could think of:</p><ul><li><p>RTL Design and Functional Verification (software engineering has largely consolidated Programming and Verification)</p></li><li><p>Different aspects of Verification (like Functional, Power, Performance, and so on)</p></li><li><p>Architecture Simulation and RTL Design (through High-Level-Synthesis)</p></li></ul><p>If you can think of some other aspects in chip design that can be consolidated, I&#8217;d love to hear as a comment below :)</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://chipinsights.net/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Chip Insights! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div>]]></content:encoded></item></channel></rss>