<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>FPGA on FPGA Deep Insights</title><link>https://ezchi.github.io/tags/fpga/</link><description>Recent content in FPGA on FPGA Deep Insights</description><generator>Hugo -- 0.152.2</generator><language>en-us</language><lastBuildDate>Tue, 30 Dec 2025 12:18:00 +1100</lastBuildDate><atom:link href="https://ezchi.github.io/tags/fpga/index.xml" rel="self" type="application/rss+xml"/><item><title>Post 5: Beyond the Log File: Triggering C++ and Cocotb from SVA</title><link>https://ezchi.github.io/posts/post-5-beyond-the-log-file-triggering-c-and-cocotb-from-sva/</link><pubDate>Tue, 30 Dec 2025 12:18:00 +1100</pubDate><guid>https://ezchi.github.io/posts/post-5-beyond-the-log-file-triggering-c-and-cocotb-from-sva/</guid><description>&lt;h2 id="introduction-why-connect-sva-to-software"&gt;Introduction: Why Connect SVA to Software?&lt;/h2&gt;
&lt;p&gt;Seeing an error message in a terminal is fine for a human, but a self-checking testbench needs to know programmatically when an assertion fails. By using the Direct Programming Interface (DPI), we can call a C++ function directly from an SVA “Action Block.”&lt;/p&gt;
&lt;h2 id="the-action-block-the-trigger"&gt;The Action Block: The Trigger&lt;/h2&gt;
&lt;p&gt;Every assertion has two hidden slots called Action Blocks: the “pass” block and the “fail” block.&lt;/p&gt;</description></item><item><title>Post 4: Keep Your RTL Clean: Non-Intrusive Verification with SVA Bind</title><link>https://ezchi.github.io/posts/post-4-keep-your-rtl-clean-non-intrusive-verification-with-sva-bind/</link><pubDate>Mon, 29 Dec 2025 21:04:00 +1100</pubDate><guid>https://ezchi.github.io/posts/post-4-keep-your-rtl-clean-non-intrusive-verification-with-sva-bind/</guid><description>&lt;h2 id="introduction-why-decouple"&gt;Introduction: Why Decouple?&lt;/h2&gt;
&lt;p&gt;If you embed assertions directly inside your module rtl_logic, you risk two things:&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;Code Bloat&lt;/dt&gt;
&lt;dd&gt;Your design files become harder to read.&lt;/dd&gt;
&lt;dt&gt;Synthesis Issues&lt;/dt&gt;
&lt;dd&gt;While most synthesis tools ignore SVA, keeping them separate ensures there is zero chance of accidentally affecting the hardware gates.&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;Today, we learn the “Wrapper and Bolt” method using the checker and bind constructs.&lt;/p&gt;
&lt;h2 id="the-checker-construct-the-verification-wrapper"&gt;The &lt;code&gt;checker&lt;/code&gt; Construct: The Verification Wrapper&lt;/h2&gt;
&lt;p&gt;Think of a checker as a specialized container. It looks like a module, but it is specifically designed to hold assertions, properties, and the modeling logic needed to support them.&lt;/p&gt;</description></item><item><title>Post 3: Temporal Logic Unlocked: Sequence Repetition and Implication Operators</title><link>https://ezchi.github.io/posts/post-3-temporal-logic-unlocked-sequence-repetition-and-implication-operators/</link><pubDate>Thu, 27 Nov 2025 09:31:00 +1100</pubDate><guid>https://ezchi.github.io/posts/post-3-temporal-logic-unlocked-sequence-repetition-and-implication-operators/</guid><description>&lt;h2 id="introduction-sequences-define-time"&gt;Introduction: Sequences Define Time&lt;/h2&gt;
&lt;p&gt;In SystemVerilog Assertions, a &lt;strong&gt;sequence&lt;/strong&gt; is a pattern of Boolean expressions that unfolds over one or more clock cycles. Sequences are how you define the temporal relationship between signals. Once a sequence is defined, a &lt;strong&gt;property&lt;/strong&gt; uses it, often along with an &lt;strong&gt;implication operator&lt;/strong&gt;, to establish a clear cause-and-effect rule.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="defining-sequences-the-building-blocks"&gt;1. Defining Sequences: The Building Blocks&lt;/h2&gt;
&lt;p&gt;The primary tool for defining sequences is the &lt;strong&gt;cycle delay operator&lt;/strong&gt; (&lt;strong&gt;##&lt;/strong&gt;).&lt;/p&gt;</description></item><item><title>Post 2: SVA Fundamentals: Immediate vs Concurrent SVA</title><link>https://ezchi.github.io/posts/post-2-sva-fundamentals-immediate-vs-concurrent-sva/</link><pubDate>Sun, 23 Nov 2025 12:08:00 +1100</pubDate><guid>https://ezchi.github.io/posts/post-2-sva-fundamentals-immediate-vs-concurrent-sva/</guid><description>&lt;h2 id="introduction-the-two-pillars-of-sva"&gt;Introduction: The Two Pillars of SVA&lt;/h2&gt;
&lt;p&gt;SystemVerilog Assertions (SVA) gives you two main ways to check your design&amp;rsquo;s behavior, depending on the scope of time you need to cover:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Immediate Assertions:&lt;/strong&gt; For checks that must hold true &lt;em&gt;right now&lt;/em&gt;, within a single simulation cycle.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrent Assertions:&lt;/strong&gt; For checks that involve &lt;em&gt;time&lt;/em&gt;, tracking a sequence of events over multiple clock cycles.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Understanding when and where to use each type is crucial for effective verification.&lt;/p&gt;</description></item><item><title>Post 1: SVA &amp; Verilator on Macbook : The Non-Intrusive Verification Setup</title><link>https://ezchi.github.io/posts/post-1-sva--verilator-on-macbook--the-nonintrusive-verification-setup/</link><pubDate>Sun, 23 Nov 2025 11:34:00 +1100</pubDate><guid>https://ezchi.github.io/posts/post-1-sva--verilator-on-macbook--the-nonintrusive-verification-setup/</guid><description>&lt;h2 id="introduction-why-assertions-and-non-intrusive-verification"&gt;Introduction: Why Assertions and Non-Intrusive Verification?&lt;/h2&gt;
&lt;p&gt;SystemVerilog Assertions (SVA) are not just another test language; they are a declarative, temporal powerhouse. Instead of writing hundreds of lines of procedural code to check a protocol&amp;rsquo;s timing, you define the rule once. This significantly reduces verification effort.&lt;/p&gt;
&lt;p&gt;In professional flows, it&amp;rsquo;s crucial to keep verification separate from design. I want to check the golden RTL without modifying it. This post is the first step: setting up the environment using the open-source workhorse Verilator on MacOS system.&lt;/p&gt;</description></item></channel></rss>