<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Jose Renau | UCSC OSPO</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jose-renau/</link><atom:link href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jose-renau/index.xml" rel="self" type="application/rss+xml"/><description>Jose Renau</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-us</language><image><url>https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jose-renau/avatar_hu90a542b460ae15d51e2ed00a1daa0f57_18145_270x270_fill_q75_lanczos_center.jpg</url><title>Jose Renau</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jose-renau/</link></image><item><title>HAgent</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre25/ucsc/hagent/</link><pubDate>Tue, 11 Feb 2025 00:00:00 +0000</pubDate><guid>https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre25/ucsc/hagent/</guid><description>&lt;p>&lt;a href="https://github.com/masc-ucsc/hagent" target="_blank" rel="noopener">HAgent&lt;/a> is a platform to build AI hardware agent engine to support multiple components in chip design, such as code generation, verification, debugging, and tapeout.&lt;/p>
&lt;p>HAgent is build as a compiler for for Hardware Agents, it interfaces with
typical EDA tools like compilers, synthesis, and verification. There are
several projects around enhancing HAgent.&lt;/p>
&lt;h3 id="bugfarm-hagent-step">BugFarm hagent step&lt;/h3>
&lt;p>&lt;strong>Objective&lt;/strong>: Develop a HAgent step (pass) to create bugs in a given design.&lt;/p>
&lt;p>&lt;strong>Description&lt;/strong>: Using LLMs (Hagent APIs), the goal is to add &amp;ldquo;bugs&amp;rdquo; to input Verilog design.
The goal is for other tools passes that need to fix bugs, to use this
infrastructure as a bug generator. There is a MCY
(&lt;a href="https://github.com/YosysHQ/mcy" target="_blank" rel="noopener">https://github.com/YosysHQ/mcy&lt;/a>) that does something similar but it does not
use verilog and create a very different Verilog output. The BugFarm is supposed
to have somewhat similar functionality but edit the Verilog directly which
results in a code with just a few edits. Like MCY, there has to be a step to confirm that
the change affects results. The project should benchmarks and compare with MCY.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Skills Needed:&lt;/strong> Python, Verilog, and understand agents&lt;/li>
&lt;li>&lt;strong>Difficulty:&lt;/strong> Medium&lt;/li>
&lt;li>&lt;strong>Size:&lt;/strong> Medium&lt;/li>
&lt;li>&lt;strong>Mentors:&lt;/strong> &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jose-renau/">Jose Renau&lt;/a>, &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/farzaneh-rabiei-kashanaki/">Farzaneh Rabiei Kashanaki&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="hdeval-competition-repository">HDEval Competition Repository&lt;/h3>
&lt;p>&lt;strong>Objective&lt;/strong>: Create a platform for HDL programming challenges and community engagement.&lt;/p>
&lt;p>&lt;strong>Description&lt;/strong>: Develop a repository where users can solve HDL problems in Verilog, Chisel, PyRTL, etc. Implement a points system for successful solutions. Allow users to submit new problems (code, specifications, verification, and tests) that are not easily solvable by LLMs. Automate solution testing and provide feedback on submissions.&lt;/p>
&lt;p>The submissions consist of 4 components: code, specification, verification, and tests. It should be possible to submit also examples of bugs in code/specification/verification/tests during the design.&lt;/p>
&lt;p>If the code is different from Verilog, it should include the HDL (chisel, PyRTL,&amp;hellip;) and also the Verilog.&lt;/p>
&lt;p>The specification is free form. For any given specification, an expert on the area should be able to generate code, verification, and tests. Similarly, from any pair. Any expert should be able to generate the rest. For example, from verification and tests, it should be able to generate the code and specification.&lt;/p>
&lt;p>Typical specifications consist of a plan, API, and a sample usage.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Skills Needed:&lt;/strong> Web design, some hardware understanding&lt;/li>
&lt;li>&lt;strong>Difficulty:&lt;/strong> Medium&lt;/li>
&lt;li>&lt;strong>Size:&lt;/strong> Medium&lt;/li>
&lt;li>&lt;strong>Mentors:&lt;/strong> &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jose-renau/">Jose Renau&lt;/a>, &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/farzaneh-rabiei-kashanaki/">Farzaneh Rabiei Kashanaki&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="integrate-silicon-compiler">Integrate Silicon Compiler&lt;/h3>
&lt;p>&lt;strong>Objective&lt;/strong>: &lt;a href="https://github.com/siliconcompiler/siliconcompiler" target="_blank" rel="noopener">Silicon Compiler&lt;/a> is an open-source Python library that allows to interface with many EDA tools. The idea is to integrate it with HAgent to allow prompts/queries to
interface with it.&lt;/p>
&lt;p>&lt;strong>Description&lt;/strong>: The agentic component requires to check with silicon compiler
that the generated Python compiles but also that has reasonable parameters.
This will require a react loop for compiler errors, and likely a judge loop for
testing for reasonable options/flow with feedback from execution. Since there
is not much training examples, it will require a few shot with a database to
populate context accordingly.&lt;/p>
&lt;p>The end result should allow to select different tools and options trhough silicon compiler.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Skills Needed:&lt;/strong> Backend chip design&lt;/li>
&lt;li>&lt;strong>Difficulty:&lt;/strong> High&lt;/li>
&lt;li>&lt;strong>Size:&lt;/strong> Medium&lt;/li>
&lt;li>&lt;strong>Mentors:&lt;/strong> &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jose-renau/">Jose Renau&lt;/a>&lt;/li>
&lt;/ul>
&lt;h3 id="comodore-64-or-msx-or-gameboy">Comodore 64 or MSX or Gameboy&lt;/h3>
&lt;p>&lt;strong>Objective&lt;/strong>: Create a prompt-only specification to build a hardware
accelerated for the target platform (Comodore 64, MSX or Gameboy). The
generated code should focus on Verilog, but it is fine to also target some
other HDL. In all the cases, the project should include a generated Verilog
integrated with some emulator for verification.&lt;/p>
&lt;p>&lt;strong>Description&lt;/strong>: Using &lt;a href="https://github.com/masc-ucsc/hagent" target="_blank" rel="noopener">Hagent&lt;/a>, create an
&lt;a href="https://github.com/masc-ucsc/hdeval" target="_blank" rel="noopener">HDLEval&lt;/a> benchmark (set of prompts) that
provide the necessary information to create the Verilog implementation. HDLEval
prompts usually consists of a high-level PLAN or specification, an API to
implement, and a few examples of usage for the given API.&lt;/p>
&lt;p>The result of running the bencharmk, a generated Verilog runs program in the
emulator and the Verilog to compare correctness. The platform should have an
already existing emulator &lt;a href="https://vice-emu.sourceforge.io/" target="_blank" rel="noopener">vice-emu&lt;/a> or
&lt;a href="https://mgba.io/" target="_blank" rel="noopener">mGBA&lt;/a> to perform cosimulation against the generated
specification.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Skills Needed:&lt;/strong> Verilog for front-end design&lt;/li>
&lt;li>&lt;strong>Difficulty:&lt;/strong> High&lt;/li>
&lt;li>&lt;strong>Size:&lt;/strong> Large (175 or 350 hours)&lt;/li>
&lt;li>&lt;strong>Mentors:&lt;/strong> &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jose-renau/">Jose Renau&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>LiveHD</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre24/ucsc/livehd/</link><pubDate>Thu, 01 Feb 2024 00:00:00 +0000</pubDate><guid>https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre24/ucsc/livehd/</guid><description>&lt;p>The goals is to enable a more productive flow where the ASIC/FPGA designer can
work with multiple hardware description languages like CHISEL, Pyrope, or
Verilog.&lt;/p>
&lt;p>There are several projects, some compiler infrastructure around
&lt;a href="https://github.com/masc-ucsc/livehd" target="_blank" rel="noopener">LiveHD&lt;/a>. Others around how to interface
LLMs to improve chip design productivity.&lt;/p>
&lt;p>There are the following projects available:&lt;/p>
&lt;ul>
&lt;li>Slang with LiveHD&lt;/li>
&lt;li>Hardware Hierarchical Dynamic Structures (hdds)&lt;/li>
&lt;li>HDLEval for LLMs&lt;/li>
&lt;li>C++ Profiler Optimizer with LLMs&lt;/li>
&lt;li>Decompiler from Assembly to C++ with LLMs&lt;/li>
&lt;/ul>
&lt;h2 id="slang-with-livehd">Slang with LiveHD&lt;/h2>
&lt;h3 id="project-idea">Project Idea&lt;/h3>
&lt;p>&lt;a href="https://github.com/MikePopoloski/slang" target="_blank" rel="noopener">slang&lt;/a> is one of the best open source
Verilog front-ends available. &lt;a href="https://github.com/masc-ucsc/livehd" target="_blank" rel="noopener">LiveHD&lt;/a>
uses slang, but only a subset of Verilog is supported. The goal is to add more slang features.&lt;/p>
&lt;h3 id="project-deliverable">Project Deliverable&lt;/h3>
&lt;p>The slang/LiveHD interface creates LiveHD IR (LNAST IR). The plan is to keep
extending the translation to support more features. This is a project that
allows small steps. The goal is to support all Verilog 2001, and potentially
some System Verilog features.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Topics:&lt;/strong> SysteVerilog, Compilers&lt;/li>
&lt;li>&lt;strong>Skills Needed:&lt;/strong> Knowledge of Verilog, C++17, some compiler background.&lt;/li>
&lt;li>&lt;strong>Difficulty:&lt;/strong> Medium&lt;/li>
&lt;li>&lt;strong>Size:&lt;/strong> Large&lt;/li>
&lt;li>&lt;strong>Mentor:&lt;/strong> &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jose-renau/">Jose Renau&lt;/a>, &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/sakshi-garg/">Sakshi Garg&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="hardware-hierarchical-dynamic-structures-hdds">Hardware Hierarchical Dynamic Structures (hdds)&lt;/h2>
&lt;h3 id="project-idea-1">Project Idea&lt;/h3>
&lt;p>&lt;a href="https://github.com/masc-ucsc/hhds" target="_blank" rel="noopener">hdds&lt;/a> aims to build efficient tree and
graph data structures commonly used by hardware compilers. A key difference is
the hierarchical nature, and patterns.&lt;/p>
&lt;h3 id="project-deliverable-1">Project Deliverable&lt;/h3>
&lt;p>There are 2 main components: Graph and Tree.&lt;/p>
&lt;p>For each, there is a hierarchical implementation that allows to connect tree/graphs in a hieararchy.
For example, a graph can call another graph with input and outputs like a Verilog module calls other Verilog modules.&lt;/p>
&lt;p>Both classes should have iterators for traversing in topological sort.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Topics:&lt;/strong> Data structures for compilers&lt;/li>
&lt;li>&lt;strong>Skills Needed:&lt;/strong> Data structures, C++17&lt;/li>
&lt;li>&lt;strong>Difficulty:&lt;/strong> Medium&lt;/li>
&lt;li>&lt;strong>Size:&lt;/strong> Large&lt;/li>
&lt;li>&lt;strong>Mentor:&lt;/strong> &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jose-renau/">Jose Renau&lt;/a>, &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/sakshi-garg/">Sakshi Garg&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="hdleval-for-llms">HDLEval for LLMs&lt;/h2>
&lt;h3 id="project-idea-2">Project Idea&lt;/h3>
&lt;p>LLMs can be used to create new hardware. The goal of this project is to create multiple prompts
so that LLM/compiler designers can have examples to improve their flows.&lt;/p>
&lt;h3 id="project-deliverable-2">Project Deliverable&lt;/h3>
&lt;p>The idea is to create many sample projects where a &amp;ldquo;input&amp;rdquo; creates a Verilog artifact. The specification should not assume Verilog as output because other HDLs like Chisel could be used.&lt;/p>
&lt;p>The goal is to create many sample circuits that are realistic and practical. The description can have&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Topics:&lt;/strong> Verilog, LLMs&lt;/li>
&lt;li>&lt;strong>Skills Needed:&lt;/strong> Verilog or Chisel&lt;/li>
&lt;li>&lt;strong>Difficulty:&lt;/strong> Low&lt;/li>
&lt;li>&lt;strong>Size:&lt;/strong> Small or medium&lt;/li>
&lt;li>&lt;strong>Mentor:&lt;/strong> &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jose-renau/">Jose Renau&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="c-profiler-optimizer-with-llms">C++ Profiler Optimizer with LLMs&lt;/h2>
&lt;h3 id="project-idea-3">Project Idea&lt;/h3>
&lt;p>Fine-tune, and/or RAG, a LLM to leverage profiling tools so that it can provide
code optimization recommendations for C++ and possibly Rust code.&lt;/p>
&lt;h3 id="project-deliverable-3">Project Deliverable&lt;/h3>
&lt;p>Create a Python package (poetry?) called aiprof that analyzes the execution of a C++ or Rust program and
provide code change recommendations to improve performance.&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">aiprof ./binary
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>aiprof uses perf tools but also other tools like redspy, zerospy, and loadspy
to find problematic code areas and drive the GPT optimizer.&lt;/p>
&lt;p>The plan is to find several examples of transformations to have a database so
that a model like CodeLlama or mixtral can be fine-tuned with code optimization
recomendations.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Topics:&lt;/strong> C++, perf tools&lt;/li>
&lt;li>&lt;strong>Skills Needed:&lt;/strong> C++17, Linux performance counters&lt;/li>
&lt;li>&lt;strong>Difficulty:&lt;/strong> Medium&lt;/li>
&lt;li>&lt;strong>Size:&lt;/strong> Large&lt;/li>
&lt;li>&lt;strong>Mentor:&lt;/strong> &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jose-renau/">Jose Renau&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="decompiler-from-assembly-to-c-with-llms">Decompiler from Assembly to C++ with LLMs&lt;/h2>
&lt;h3 id="project-idea-4">Project Idea&lt;/h3>
&lt;p>There are several decompilers from assembly to C like ghidra and retdec. The idea is to enhance
both outputs to feed an LLM to generate nicer C++ code.&lt;/p>
&lt;h3 id="project-deliverable-4">Project Deliverable&lt;/h3>
&lt;p>ghidra and retdec generate C code out of assembly. The idea is to start with
these tools as baseline, but feed it to a LLM to generate C++ code instead of
plain C.&lt;/p>
&lt;p>Create a Python package (poetry?) called aidecomp that integrates both
decompilers. It allows to target C or C++17.&lt;/p>
&lt;p>To check that the generated code is compatible with the function translated, a
fuzzer could be used. This allows aidecomp to iterate the generation if the
generated code is not equivalent.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Topics:&lt;/strong> C++, decompilers&lt;/li>
&lt;li>&lt;strong>Skills Needed:&lt;/strong> C++17&lt;/li>
&lt;li>&lt;strong>Difficulty:&lt;/strong> Medium&lt;/li>
&lt;li>&lt;strong>Size:&lt;/strong> Large&lt;/li>
&lt;li>&lt;strong>Mentor:&lt;/strong> &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jose-renau/">Jose Renau&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>LiveHD (2022)</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre22/ucsc/livehd/</link><pubDate>Mon, 07 Nov 2022 10:15:56 -0700</pubDate><guid>https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre22/ucsc/livehd/</guid><description>&lt;p>Projects for &lt;a href="https://github.com/masc-ucsc/livehd" target="_blank" rel="noopener">LiveHD&lt;/a>. Lead Mentors: &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jose-renau/">Jose Renau&lt;/a> and &lt;a href="mailto:swang203@ucsc.edu">Sheng-Hong Wang&lt;/a>.&lt;/p>
&lt;h3 id="hif-tooling">HIF Tooling&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Title&lt;/td>
&lt;td>HIF tooling&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Description&lt;/td>
&lt;td>Tools around Hardware Interchange Format (HIF) files&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Mentor(s)&lt;/td>
&lt;td>Jose Renau&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Skills&lt;/td>
&lt;td>C++17&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Difficulty&lt;/td>
&lt;td>Medium&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Size&lt;/td>
&lt;td>Medium 175 hours&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/masc-ucsc/hif" target="_blank" rel="noopener">Link&lt;/a>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>HIF (&lt;a href="https://github.com/masc-ucsc/hif" target="_blank" rel="noopener">https://github.com/masc-ucsc/hif&lt;/a>) stands for Hardware Interchange Format.
It is designed to be a efficient binary representation with simple API that
allows to have generic graph and tree representations commonly used by hardware
tools. It is not designer to be a universal format, but rather a storate and
traversal format for hardware tools.&lt;/p>
&lt;p>LiveHD has 2 HIF interfaces, the tree (LNAST) and the graph (Lgraph). Both can
read/write HIF format. The idea of this project is to expand the hif repository
to create some small but useful tools around hif. Some projects:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>hif_diff + hif_patch: Create the equivalent of the diff/patch commands that
exist for text but for HIF files. Since the HIF files have a more clear
structure, some patches changes are more constrained or better understood
(IOs and dependences are explicit).&lt;/p>
&lt;/li>
&lt;li>
&lt;p>hif_tree: Print the HIF hierarchy, somewhat similar to GNU tree but showing the HIF hieararchy.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>hif_grep: capacity to grep for some tokens and outout a hif file only with those. Thena hif_tree/hif_cat can show the contents.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="mockturtle">Mockturtle&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Title&lt;/td>
&lt;td>Mockturtle&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Description&lt;/td>
&lt;td>Perform synthesis for graph in LiveHD using Mockturtle&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Mentor(s)&lt;/td>
&lt;td>Jose Renau&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Skills&lt;/td>
&lt;td>C++17, synthesis&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Difficulty&lt;/td>
&lt;td>Medium&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Size&lt;/td>
&lt;td>Medium 175 hours&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/masc-ucsc/livehd/blob/master/docs/cross.md#mockturtle" target="_blank" rel="noopener">Link&lt;/a>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>There are some issues with Mockturtle integration (new cells) and it is not using the latest Mockturtle library versions.
The goal is to use Mockturtle (&lt;a href="https://github.com/lsils/mockturtle" target="_blank" rel="noopener">https://github.com/lsils/mockturtle&lt;/a>) with LiveHD. The main characteristics:&lt;/p>
&lt;ul>
&lt;li>Use mockturtle to tmap to LUTs&lt;/li>
&lt;li>Use mockturtle to synthesize (optimize) logic&lt;/li>
&lt;li>Enable cut-rewrite as an option&lt;/li>
&lt;li>Enable hierarchy cross optimization (hier:true option)&lt;/li>
&lt;li>Use the graph labeling to find cluster to optimize&lt;/li>
&lt;li>Re-timing&lt;/li>
&lt;li>Map to LUTs only gates and non-wide arithmetic. E.g: 32bit add is not mapped to LUTS, but a 2-bit add is mapped.&lt;/li>
&lt;li>List of resources to not map:
&lt;ul>
&lt;li>Large ALUs. Large ALUs should have an OpenWare block (hardcoded in FPGAs and advanced adder options in ASIC)&lt;/li>
&lt;li>Multipliers and dividers&lt;/li>
&lt;li>Barrell shifters with not trivial shifts (1-2 bits) selectable at run-time&lt;/li>
&lt;li>memories, luts&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="query-shell">Query Shell&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Title&lt;/td>
&lt;td>Query Shell&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Description&lt;/td>
&lt;td>Create a console app that interacts with LiveHD to query parameters about designs&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Mentor(s)&lt;/td>
&lt;td>Jose Renau&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Skills&lt;/td>
&lt;td>C++17&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Difficulty&lt;/td>
&lt;td>Medium&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Size&lt;/td>
&lt;td>Medium 175 hours&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/masc-ucsc/livehd/blob/master/docs/cross.md#query-shell-not-lgshell-to-query-graphs" target="_blank" rel="noopener">Link&lt;/a>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;ul>
&lt;li>Based on replxx (like lgshell)&lt;/li>
&lt;li>Query bits, ports&amp;hellip; like
&lt;ul>
&lt;li>&lt;a href="https://github.com/rubund/netlist-analyzer" target="_blank" rel="noopener">https://github.com/rubund/netlist-analyzer&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.jameswhanlon.com/querying-logical-paths-in-a-verilog-design.html" target="_blank" rel="noopener">https://www.jameswhanlon.com/querying-logical-paths-in-a-verilog-design.html&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>It would be cool if subsections (selected) parts can be visualized with something like &lt;a href="https://github.com/nturley/netlistsvg" target="_blank" rel="noopener">https://github.com/nturley/netlistsvg&lt;/a>&lt;/li>
&lt;li>The shell may be expanded to support simulation in the future&lt;/li>
&lt;li>Wavedrom/Duh dumps&lt;/li>
&lt;/ul>
&lt;p>Wavedrom and duh allows to dump bitfield information for structures. It would be interesting to explore to dump tables and bit
fields for Lgraph IOs, and structs/fields inside the module. It may be a way to integrate with the documentation generation.&lt;/p>
&lt;p>Example of queries: show path, show driver/sink of, do topo traversal,&amp;hellip;.&lt;/p>
&lt;p>As an interesting extension would be to have some simple embedded language (TCL or ChaiScript or ???) to control queries more
easily and allow to build functions/libraries.&lt;/p>
&lt;h3 id="lgraph-and-lnast-check-pass">Lgraph and LNAST check pass&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Title&lt;/td>
&lt;td>Lgraph and LNAST check pass&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Description&lt;/td>
&lt;td>Create a pass that check the integrity/correctness of Lgraph and LNAST&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Mentor(s)&lt;/td>
&lt;td>Jose Renau&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Skills&lt;/td>
&lt;td>C++17&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Difficulty&lt;/td>
&lt;td>Medium&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Size&lt;/td>
&lt;td>Large 350 hours&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/masc-ucsc/livehd/blob/master/docs/cross.md#lgraph-and-lnast-check-pass" target="_blank" rel="noopener">Link&lt;/a>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Create a pass that checks that the Lgraph (and/or LNAST) is semantically
correct. The LNAST already has quite a few tests (pass.semantic), but it can be
further expanded. Some checks:&lt;/p>
&lt;ul>
&lt;li>No combinational loops&lt;/li>
&lt;li>No mismatch in bit widths&lt;/li>
&lt;li>No disconnected nodes&lt;/li>
&lt;li>Check for inefficient splits (do not split buses that can be combined)&lt;/li>
&lt;li>Transformations stages should not drop names if same net is preserved&lt;/li>
&lt;li>No writes in LNAST that are never read&lt;/li>
&lt;li>All the edges are possible. E.g: no pin &amp;lsquo;C&amp;rsquo; in Sum_op&lt;/li>
&lt;/ul>
&lt;h3 id="unbitwidth">unbitwidth&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Title&lt;/td>
&lt;td>unbitwidth&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Description&lt;/td>
&lt;td>Not all the variables need bitwidth information. Find the small subset&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Mentor(s)&lt;/td>
&lt;td>Jose Renau&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Skills&lt;/td>
&lt;td>C++17&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Difficulty&lt;/td>
&lt;td>Medium&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Size&lt;/td>
&lt;td>Medium 175 hours&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/masc-ucsc/livehd/blob/master/docs/cross.md#unbitwidth-local-and-global-bitwidth" target="_blank" rel="noopener">Link&lt;/a>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>This pass is needed to create less verbose CHISEL and Pyrope code generation.&lt;/p>
&lt;p>The LGraph can have bitwidth information for each dpin. This is needed for
Verilog code generation, but not needed for Pyrope or CHISEL. CHISEL can
perform local bitwidth inference and Pyrope can perform global bitwidth
inference.&lt;/p>
&lt;p>A new pass should remove redundant bitwidth information. The information is
redundant because the pass/bitwidth can regenerate it if there is enough
details. The goal is to create a pass/unbitwidth that removes either local or
global bitwidth. The information left should be enough for the bitwidth pass to
regenerate it.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Local bitwidth: It is possible to leave the bitwidth information in many
places and it will have the same results, but for CHISEL the inputs should be
sized. The storage (memories/flops) should have bitwidth when can not be
inferred from the inputs.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Global bitwidth: Pyrope bitwidth inference goes across the call hierarchy.
This means that a module could have no bitwidth information at all. We start
from the leave nodes. If all the bits can be inferred given the inputs, the
module should have no bitwidth. In that case the bitwidth can be inferred from
outside.&lt;/p>
&lt;/li>
&lt;/ul></description></item><item><title>LiveHD (2023)</title><link>https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre23/ucsc/livehd/</link><pubDate>Mon, 07 Nov 2022 10:15:56 -0700</pubDate><guid>https://deploy-preview-1007--ucsc-ospo.netlify.app/project/osre23/ucsc/livehd/</guid><description>&lt;p>Projects for &lt;a href="https://github.com/masc-ucsc/livehd" target="_blank" rel="noopener">LiveHD&lt;/a>.&lt;br>
Lead Mentors: &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/jose-renau/">Jose Renau&lt;/a> and &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/sakshi-garg/">Sakshi Garg&lt;/a>.&lt;br>
Contributor(s): &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/shahzaib-kashif/">Shahzaib Kashif&lt;/a>&lt;/p>
&lt;p>LiveHD is a &amp;ldquo;compiler&amp;rdquo; infrastructure for hardware design optimized for synthesis and simulation. The goals is to enable a more productive flow where the ASIC/FPGA designer can work with multiple hardware description languages like CHISEL, Pyrope, or Verilog.&lt;/p>
&lt;p>There are several projects available around LiveHD. A longer explanation and more project options are available at
&lt;a href="https://github.com/masc-ucsc/livehd/blob/master/docs/projects.md" target="_blank" rel="noopener">projects&lt;/a>. Contact the
mentors to find a project that fits your interests.&lt;/p>
&lt;p>A sample of helpful projects:&lt;/p>
&lt;h3 id="mockturtle">Mockturtle&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Title&lt;/td>
&lt;td>Mockturtle&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Description&lt;/td>
&lt;td>Perform synthesis for graph in LiveHD using Mockturtle&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Mentor(s)&lt;/td>
&lt;td>Jose Renau and &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/sakshi-garg/">Sakshi Garg&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Skills&lt;/td>
&lt;td>C++17, synthesis&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Difficulty&lt;/td>
&lt;td>Medium&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Size&lt;/td>
&lt;td>Medium 175 hours&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/masc-ucsc/livehd/blob/master/docs/projects_large.md#medium-parallel-and-hierarchical-synthesis-with-mockturtle" target="_blank" rel="noopener">Link&lt;/a>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Mockturtle (&lt;a href="https://github.com/lsils/mockturtle" target="_blank" rel="noopener">https://github.com/lsils/mockturtle&lt;/a>) is a synthesis tool partially
integrated with LiveHD. The goal of this task is to iron out bugs and issues
and to use the LiveHD Tasks API to parallelize the synthesis.&lt;/p>
&lt;p>Main features:&lt;/p>
&lt;ul>
&lt;li>The current synthesis divides the circuit in partitions. Each partition can be synthesized in parallel.&lt;/li>
&lt;li>Support hierarchical synthesis to optimize cross Lgraphs (cross verilog module optimization)&lt;/li>
&lt;/ul>
&lt;p>The goal is to use Mockturtle (&lt;a href="https://github.com/lsils/mockturtle" target="_blank" rel="noopener">https://github.com/lsils/mockturtle&lt;/a>) with LiveHD. The main characteristics:&lt;/p>
&lt;ul>
&lt;li>Use mockturtle to tmap to LUTs&lt;/li>
&lt;li>Use mockturtle to synthesize (optimize) logic&lt;/li>
&lt;li>Enable cut-rewrite as an option&lt;/li>
&lt;li>Enable hierarchy cross optimization (hier:true option)&lt;/li>
&lt;li>Use the graph labeling to find cluster to optimize&lt;/li>
&lt;li>Re-timing&lt;/li>
&lt;li>Map to LUTs only gates and non-wide arithmetic. E.g: 32bit add is not mapped to LUTS, but a 2-bit add is mapped.&lt;/li>
&lt;li>List of resources to not map:
&lt;ul>
&lt;li>Large ALUs. Large ALUs should have an OpenWare block (hardcoded in FPGAs and advanced adder options in ASIC)&lt;/li>
&lt;li>Multipliers and dividers&lt;/li>
&lt;li>Barrell shifters with not trivial shifts (1-2 bits) selectable at run-time&lt;/li>
&lt;li>memories, luts&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="livehd-console">LiveHD Console&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Title&lt;/td>
&lt;td>LiveHD Console&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Description&lt;/td>
&lt;td>Create a console app that interacts with LiveHD to query parameters about designs&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Mentor(s)&lt;/td>
&lt;td>Jose Renau and &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/sakshi-garg/">Sakshi Garg&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Skills&lt;/td>
&lt;td>C++17&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Difficulty&lt;/td>
&lt;td>Medium&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Size&lt;/td>
&lt;td>Medium 175 hours&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/masc-ucsc/livehd/blob/master/docs/projects_small.md#medium-query-shell-not-lgshell-to-query-graphs" target="_blank" rel="noopener">Link&lt;/a>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Current LiveHD uses replxx but it a no longer maintained shell/console. The result is that it fails in newer versions of OSX.&lt;/p>
&lt;p>There is an alternative Crossline (&lt;a href="https://github.com/jcwangxp/Crossline%29" target="_blank" rel="noopener">https://github.com/jcwangxp/Crossline)&lt;/a>. This affects main/main.cpp and nothing else.&lt;/p>
&lt;p>In addition to replace the current console with auto-completion, the plan is to add &amp;ldquo;query&amp;rdquo; capacity to visualize some
of the LiveHD internals.&lt;/p>
&lt;ul>
&lt;li>Query bits, ports&amp;hellip; like
&lt;ul>
&lt;li>&lt;a href="https://github.com/rubund/netlist-analyzer" target="_blank" rel="noopener">https://github.com/rubund/netlist-analyzer&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://www.jameswhanlon.com/querying-logical-paths-in-a-verilog-design.html" target="_blank" rel="noopener">https://www.jameswhanlon.com/querying-logical-paths-in-a-verilog-design.html&lt;/a>&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>It would be cool if subsections (selected) parts can be visualized with something like &lt;a href="https://github.com/nturley/netlistsvg" target="_blank" rel="noopener">https://github.com/nturley/netlistsvg&lt;/a>&lt;/li>
&lt;li>The shell may be expanded to support simulation in the future&lt;/li>
&lt;li>Wavedrom/Duh dumps&lt;/li>
&lt;/ul>
&lt;p>Wavedrom and duh allows to dump bitfield information for structures. It would be interesting to explore to dump tables and bit
fields for Lgraph IOs, and structs/fields inside the module. It may be a way to integrate with the documentation generation.&lt;/p>
&lt;p>Example of queries: show path, show driver/sink of, do topo traversal,&amp;hellip;.&lt;/p>
&lt;h3 id="compiler-error-generation-pass">Compiler error generation pass&lt;/h3>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>&lt;/th>
&lt;th>&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Title&lt;/td>
&lt;td>Lgraph and LNAST check pass&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Description&lt;/td>
&lt;td>Create a pass that check the integrity/correctness of Lgraph and LNAST&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Mentor(s)&lt;/td>
&lt;td>Jose Renau and &lt;a href="https://deploy-preview-1007--ucsc-ospo.netlify.app/author/sakshi-garg/">Sakshi Garg&lt;/a>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Skills&lt;/td>
&lt;td>C++17&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Difficulty&lt;/td>
&lt;td>Medium&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Size&lt;/td>
&lt;td>Large 350 hours&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>&lt;a href="https://github.com/masc-ucsc/livehd/blob/master/docs/projects_small.md#medium-diagnostics" target="_blank" rel="noopener">Link&lt;/a>&lt;/td>
&lt;td>&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Create a pass that checks that the Lgraph (and/or LNAST) is semantically
correct. The LNAST already has quite a few tests (pass.semantic), but it can be
further expanded. Some checks:&lt;/p>
&lt;ul>
&lt;li>No combinational loops&lt;/li>
&lt;li>No mismatch in bit widths&lt;/li>
&lt;li>No disconnected nodes&lt;/li>
&lt;li>Check for inefficient splits (do not split buses that can be combined)&lt;/li>
&lt;li>Transformations stages should not drop names if same net is preserved&lt;/li>
&lt;li>No writes in LNAST that are never read&lt;/li>
&lt;li>All the edges are possible. E.g: no pin &amp;lsquo;C&amp;rsquo; in Sum_op&lt;/li>
&lt;/ul></description></item></channel></rss>