FPGA Horizons Journal Issue 4

(This article is from Issue 4 of the FPGA Horizons Journal. If you’d like to read more FPGA-related articles, you can download a PDF of the issue right now.)

Introducing Ash, the open-source AI assistant for processing EDA files

Kevin Hubbard, Black Mesa Labs

Modern Electronic Design Automation (EDA) workflows typically generate an overwhelming amount of data. Even a single FPGA or ASIC place‑and‑route run can easily produce tens to hundreds of megabytes of timing reports, congestion maps, Design Rule Check (DRC) logs, synthesis summaries, and tool‑specific diagnostics, each packed with thousands of lines of dense, highly structured text.

Engineers routinely sift through multi‑megabyte Static Timing Analysis (STA) reports, sprawling RTL hierarchies, and vendor‑specific output formats just to answer simple questions like What failed?, Where is the bottleneck?, or Why did timing suddenly collapse? These files are often too large to read manually and too irregular for simple grep operations.

All of which leaves developers spending hours using tools that were never designed for this scale or complexity, scrolling and cross referencing reports to extract the handful of insights needed to move a project forward.

 

Fortunately, there is another way.

Ash compatibility diagram
Ash (eda_ai_assist) is a command‑line AI assistant for FPGA and electrical engineers, built with an intentional, minimalist philosophy. It’s not trying to be a generic chatbot, it’s a precise command-line tool much like grep, but with AI intelligence. It speaks the language of electrical engineers and stays out of the way until invoked.

Ash allows engineers to ask natural‑language questions and get precise, context‑aware answers, even when the underlying files are enormous. Instead of scrolling through thousands of lines of tool output, engineers can finally interrogate their data directly and let Ash do the heavy lifting.

Ash and grep both run from the command line and operate on the massive text files common in EDA workflows like netlists, timing reports, synthesis logs, and more. But while grep is limited to strict pattern matching, Ash accepts natural‑language questions and interprets what the engineer is actually trying to find.

The grep command is excellent for locating specific strings. Ash excels at understanding what those strings mean in the context of the design. It brings intelligence to EDA workflows without changing how engineers work, by introducing a different way of using the command line:

%grep ERROR synthesis.log
%ash summarize the errors in file
synthesis.log and sort by severity

 

Getting started with Ash

To use Ash, you need a modern Python environment on a Linux, Unix, Windows, or macOS computer. You also need an API subscription to one or more AI cloud LLMs from vendors like Amazon, Microsoft, or Google. A cloud subscription typically involves submitting a credit card in exchange for an API_KEY. Don’t worry, however. AI subscriptions are more like utility bills than streaming services: you only pay for what you use, with no monthly minimum charge.

Now, download the Ash command‑line script, eda_ai_assist.py, from the author’s GitHub at https://github.com/blackmesalabs/eda_ai_assist.

Using your shell’s environment variables, you can then configure Ash to talk to your LLM provider. Note that the syntax varies slightly between Bash, CSH, and PowerShell. A Bash configuration file for use with Gemini, for example, would be:

export ASH_DIR=”$HOME/.ash”
export ASH_API_KEY=”mykey123″
export ASH_PROVIDER=”gemini”
export ASH_MODEL=”gemini-2.0-flash”
alias ash=”$ASH_DIR/eda_ai_assist.py”

 

The ASH_DIR directory may be used to store the program itself as well as any optional configuration files.

 

Using Ash in CLI one-shot mode

The most basic way to use Ash is CLI one‑shot mode. In this mode, Ash behaves like any other command‑line utility, very much in the spirit of grep. You invoke the tool, pass it a question or instruction, and Ash returns a direct answer. There’s no session state, and no chat history. It’s ideal for quick queries, automation, and shell scripts where you want a single prompt in and a single result out.

Note the use of the keyword file in Example 1 below, which instructs Ash to upload a valid filename to the cloud for analysis. Similarly, using the phrase output to would tell Ash to write its result to a new file named instead of sending it to STDOUT.

Ash example code 1
Example 1
In the second example, Ash correctly identifies Hsync and Vsync as VGA signals, even though ‘VGA’ does not appear in their signal names. Let’s see grep try to do that.
Ash example code 2
Example 2

Using Ash in interactive mode

In interactive mode, Ash runs as a lightweight wrapper around the user’s existing shell, adding AI intelligence without replacing familiar workflows. Every command you type, whether it’s a shell command, an AI question, or a mix of both, becomes part of a running session with full history. This makes it easy to refine questions, compare results, and build on previous context just as you would in a chat environment, but without ever leaving the terminal.

Interactive mode is ideal for longer debugging sessions or exploratory analysis, giving engineers a conversational layer on top of their real shell while keeping all the power of their native environment intact. In the following screenshot example, Ash is launched from the Linux command line in interactive mode and then a conversation is started from the CLI prompt.

Example conversation from CLI prompt
In this next example, Ash maintains a conversation across multiple prompts while still allowing regular shell commands to run alongside it:
Ash example code 3

Using the AshChat GUI mode

AshChat is the GUI‑based companion interface for Ash, designed for users who want the intelligence and engineering focus of Ash without living inside a terminal session. It brings Ash’s reasoning engine, personality, and multi‑provider backend into a clean, modern chat UI. Think of it as Ash’s conversational surface, while the CLI remains its precision instrument.

AshChat GUI
AshChat communicates with Ash through its public API interface, acting as a clean, GUI‑based front end. All the intelligence, routing logic, and provider selection still happen inside Ash itself. AshChat simply sends requests through the API and displays the results in a more relaxed, conversational environment. In that sense, AshChat isn’t a separate product at all, but a different doorway into the same core system.

 

Using Ash in enterprises

Ash is engineered to support enterprise environments, where access control and auditability matter just as much as raw capability. Instead of distributing raw API keys to every engineer, Ash employs a user‑token system in which each user receives an encrypted, per‑identity token derived from a single site‑wide API_KEY.

The real API_KEY never leaves the administrator’s hands: users only receive a cryptographically-bound token that Ash can decrypt and verify at runtime. This gives enterprises centralized control over credential rotation, per‑user authorization, and usage tracking without exposing sensitive keys across the organization. Combined with Ash’s transparent logging and multi‑provider backend, the token system makes Ash behave like a tool designed for serious, policy‑driven engineering teams.

To create user tokens, the admin establishes an $ASH_DIR/site_key.txt file containing a site key. From there, they can generate user tokens using the secret API_KEY and the user account names, by invoking the ash_token_maker.py command:

Ash token creator command

What does Ash cost?

While the Ash command-line program itself is free and open‑source, there is a small cost because it uses cloud‑based AI LLMs. These are billed like utilities, based on the number of input and output tokens. For example, the author used Anthropic’s Claude LLM to build the AshChat GUI front end, and after a couple of weekends of development, the total Amazon AWS bill was just under US$10.

 

Where to go next with Ash

The Ash API makes it easy to add AI capabilities to any Python application. After importing the Ash module, you simply open a new LLM session, ask a question, and read the response. For example, Black Mesa Labs’ Sump3 ILA uses the Ash API to perform tasks such as counting signal transitions between cursors. The following example shows a typical hello world demonstration of how straightforward it is:

hello_world.py

from eda_ai_assist import api_eda_ai_assist
ai = ai.open_ai_session()
api_eda_ai_assist()
rts = ai.ask_ai(“What do starter programs say to the World?”)
print(rts)

 

Conclusion

Ash makes it easy to work with the massive text files produced by modern EDA tools. Instead of digging through reports or building complex grep scripts, engineers can ask direct questions and get clear answers. Whether used from the CLI, in interactive mode, or through the AshChat GUI, Ash adds intelligence to existing workflows without changing how engineers work. It’s a lightweight, open‑source tool that turns overwhelming data into useful insights.

Fig 1. Schematic view of an FPGA

Journal Issue 4

This article is from Issue 4 of the FPGA Horizons Journal. If you’d like to read more FPGA-related articles written by FPGA engineers for FPGA engineers, why not go ahead and download a PDF of the issue right now?

Download the pdf

More articles in this issue: