Skip to content
Code Generation
Command

/gf-demo

One-command demo - generates, lints, and simulates a working project

BOOST
From plugin
gateflow-plugin
11821 skills20 agents21 commands
Install
> /plugin marketplace add codejunkie99/gateflow-plugin
> /plugin install gateflow@gateflow

How it fires

How this command gets triggered: by you, by Claude, or both.

  • Fires itselfClaude auto-loads it when your prompt matches the work.
  • You can call itInvoke it directly when you want it.
  • Slash command/gf-demo

Context preview

What this command does when you run it.

One-command demo - generates, lints, and simulates a working project

Command definition

gf-demo.md
name: gf-demo
description: One-command demo - generates, lints, and simulates a working project
allowed-tools:
  - Bash
  - Write
  - Read
  - Glob

GateFlow Demo

Generate a complete working project to showcase GateFlow's capabilities. Zero user input needed.

What This Does

1. Creates a parameterized 4-bit counter with enable and reset 2. Creates a self-checking testbench 3. Runs Verilator lint (if available) 4. Runs simulation (if Verilator available) 5. Reports results

Execution

Step 1: Create project structure

mkdir -p rtl tb

Step 2: Generate counter module

Write to `rtl/counter.sv`:

module counter #(
    parameter int WIDTH = 4
) (
    input  logic             clk,
    input  logic             rst_n,
    input  logic             enable,
    output logic [WIDTH-1:0] count
);

    always_ff @(posedge clk or negedge rst_n) begin
        if (!rst_n)
            count <= '0;
        else if (enable)
            count <= count + 1'b1;
    end

endmodule

Step 3: Generate self-checking testbench

Write to `tb/tb_counter.sv`:

module tb_counter;
    parameter int WIDTH = 4;
    parameter int CLK_PERIOD = 10;

    logic             clk = 0;
    logic             rst_n = 0;
    logic             enable = 0;
    logic [WIDTH-1:0] count;

    int pass_count = 0;
    int fail_count = 0;

    counter #(.WIDTH(WIDTH)) u_dut (.*);

    always #(CLK_PERIOD/2) clk = ~clk;

    task check(string name, logic [WIDTH-1:0] expected);
        if (count !== expected) begin
            $display("FAIL: %s - got %0d, expected %0d", name, count, expected);
            fail_count++;
        end else begin
            $display("PASS: %s - count = %0d", name, count);
            pass_count++;
        end
    endtask

    initial begin
        $dumpfile("dump.vcd");
        $dumpvars(0, tb_counter);

        // Reset
        rst_n = 0; enable = 0;
        repeat(3) @(posedge clk);
        check("Reset holds zero", '0);

        // Release reset
        rst_n = 1;
        @(posedge clk);
        check("After reset release (no enable)", '0);

        // Enable counting
        enable = 1;
        repeat(5) @(posedge clk);
        check("Count to 5", 4'd5);

        // Disable counting
        enable = 0;
        repeat(3) @(posedge clk);
        check("Holds at 5 when disabled", 4'd5);

        // Re-enable
        enable = 1;
        repeat(11) @(posedge clk);
        check("Wraps around (5+11=0)", 4'd0);

        // Assert reset during count
        rst_n = 0;
        @(posedge clk);
        check("Reset clears count", '0);

        // Summary
        $display("");
        $display("================================");
        $display("  Results: %0d passed, %0d failed", pass_count, fail_count);
        $display("================================");

        if (fail_count > 0) begin
            $display("SIMULATION FAILED");
            $finish(1);
        end else begin
            $display("ALL TESTS PASSED");
            $finish(0);
        end
    end
endmodule

Step 4: Run lint (if Verilator available)

if command -v verilator &>/dev/null; then
    verilator --lint-only -Wall rtl/counter.sv 2>&1
else
    echo "Verilator not installed - skipping lint. Install: brew install verilator"
fi

Report lint results.

Step 5: Run simulation (if Verilator available)

if command -v verilator &>/dev/null; then
    verilator --binary -j 0 --trace -Wall \
        --top-module tb_counter \
        -Irtl tb/tb_counter.sv rtl/counter.sv 2>&1 && \
    ./obj_dir/Vtb_counter 2>&1
else
    echo "Verilator not installed - skipping simulation. Install: brew install verilator"
fi

Step 6: Report results

Display a summary:

GateFlow Demo Complete!

Created:
  rtl/counter.sv    - 4-bit parameterized counter with enable
  tb/tb_counter.sv  - Self-checking testbench (6 checks)

Lint:   [PASS or SKIP]
Sim:    [PASS with N checks or SKIP]

Next steps:
  "Create a FIFO and test it"     - Try a more complex design
  "Plan a UART controller"        - See design planning in action
  /gf-doctor                      - Check your full environment
Read more
Ships withgateflow-plugin

AI-powered hardware development platform — design, verify, synthesize, and deploy working RTL with natural language. Supports SystemVerilog, Verilog, and VHDL across the full open-source FPGA toolchain. Loving hardware doesn't have to be gatekept.

Get the whole plugin

Other commands on gateflow-plugin.