Skip to main content

gf-ip-detect

Auto-detect IP blocks within FPGA and hardware codebases. Scans for module instantiations, identifies missing implementations, matches standard IP patterns, and dispatches agents to fill gaps. Example: "scan for missing IP blocks", "detect what needs implementing", "find unimplemented modules", "auto-fill IP blocks"

Informations de source

Dépôt
codejunkie99/Gateflow-Plugin
Dernière activité de la source
11 avril 2026 à 12:56
Langue détectée de SKILL.md
anglais
Étoiles
117
Forks
16

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
name
gf-ip-detect
description
Auto-detect IP blocks within FPGA and hardware codebases. Scans for module instantiations, identifies missing implementations, matches standard IP patterns, and dispatches agents to fill gaps. Example: "scan for missing IP blocks", "detect what needs implementing", "find unimplemented modules", "auto-fill IP blocks"
allowed-tools
["Bash","Read","Write","Glob","Grep","Task","AskUserQuestion"]
# GF-IP-Detect — IP Block Auto-Detection and Auto-Fill Scans hardware codebases to find IP blocks, identify gaps, and dispatch agents to implement missing pieces. ## What This Detects ### 1. Missing Module Implementations Modules instantiated but never defined in the project: ```bash # Find all module instantiations grep -rn "^\s*\w\+\s\+\w\+\s*(" rtl/ tb/ --include="*.sv" --include="*.v" --include="*.vhd" # Find all module definitions grep -rn "^\s*module\s\+\w\+" rtl/ --include="*.sv" --include="*.v" # Diff = missing implementations ``` ### 2. Stub Modules (Empty or TODO) Modules defined but with no real implementation: ```bash # Find modules with TODO/FIXME/stub markers grep -rn "TODO\|FIXME\|STUB\|NOT IMPLEMENTED" rtl/ --include="*.sv" # Find modules with empty bodies (just endmodule after ports) ``` ### 3. Standard IP Pattern Matching Detect common hardware patterns that could use verified IP blocks: | Pattern Detected | Matching IP Block | Confidence | |-----------------|-------------------|------------| | FIFO-like read/write with full/empty | `fifo_sync` or `fifo_async` | High | | 2+ flip-flop chain (synchronizer) | `cdc_2ff` | High | | Req/ack handshake across clocks | `cdc_handshake` | High | | UART-like shift register with baud | `uart` | Medium | | SPI-like SCLK/MOSI/MISO/CS_N | `spi_master` | High | | AXI-like valid/ready with addr/data | `axi4lite_slave` | Medium | | Counter with debounce logic | `debouncer` | Medium | ### 4. Interface Gaps Ports declared in a top module but not connected to any implementation: ```bash # Find top module ports # Check which ports connect to instantiated submodules # Unconnected ports = potential missing IP ``` ### 5. Vendor IP Placeholders Detect instantiations of vendor-specific IP that could have open-source alternatives: ```bash # Xilinx primitives grep -rn "IBUF\|OBUF\|BUFG\|MMCME2\|PLLE2\|BRAM" rtl/ --include="*.sv" # Lattice primitives grep -rn "SB_IO\|SB_GB\|SB_PLL\|SB_RAM" rtl/ --include="*.sv" ``` --- ## Detection Workflow ### Step 1: Scan Codebase ``` Read all .sv/.v/.vhd files in project | Extract: module definitions (name, ports, parameters) | Extract: module instantiations (what's used) | Extract: signal patterns (FIFO, CDC, protocol) | Build dependency graph ``` ### Step 2: Identify Gaps For each instantiated module: 1. Is it defined in the project? → if no, **MISSING** 2. Is it a known IP block from GateFlow library? → suggest `/gf-ip add` 3. Is it a vendor primitive? → flag for review 4. Is it defined but empty/stub? → **NEEDS IMPLEMENTATION** For each signal pattern: 1. Does it match a standard IP pattern? → suggest replacement 2. Is the implementation ad-hoc? → suggest verified IP block 3. Is there a CDC crossing without synchronizer? → **CRITICAL: suggest cdc_2ff** ### Step 3: Report ``` ---GATEFLOW-RESULT--- STATUS: PASS | NEEDS_ACTION SCAN_RESULTS: total_modules: 15 defined: 12 missing: 2 stubs: 1 MISSING_MODULES: - name: fifo_controller instantiated_in: rtl/top.sv:42 ports: [clk, rst_n, wr_en, wr_data, rd_en, rd_data, full, empty] suggested_ip: fifo_sync (92% match) - name: spi_peripheral instantiated_in: rtl/top.sv:67 ports: [clk, rst_n, sclk, mosi, miso, cs_n, tx_data, rx_data] suggested_ip: spi_master (88% match) STUBS: - name: uart_wrapper file: rtl/uart_wrapper.sv:1 status: "Module defined but body is empty (TODO marker at line 15)" suggested_action: "Implement using uart IP block as base" PATTERN_MATCHES: - pattern: "Ad-hoc 2FF synchronizer at rtl/sync.sv:10" suggestion: "Replace with verified cdc_2ff IP block" - pattern: "CDC crossing without synchronizer at rtl/top.sv:55" severity: CRITICAL suggestion: "Add cdc_2ff between clk_a and clk_b domains" IP_OPPORTUNITIES: - "3 modules could use GateFlow IP blocks (fifo_sync, spi_master, cdc_2ff)" - "1 stub module needs implementation (uart_wrapper)" - "1 critical CDC issue detected" ---END-GATEFLOW-RESULT--- ``` ### Step 4: Auto-Fill (with user approval) Present findings and ask: ``` Found 2 missing modules and 1 stub: 1. fifo_controller → 92% match with fifo_sync IP block Action: /gf-ip add fifo_sync and rename to fifo_controller? [Y/n] 2. spi_peripheral → 88% match with spi_master IP block Action: /gf-ip add spi_master and adapt ports? [Y/n] 3. uart_wrapper → Empty stub, matches uart IP pattern Action: Generate implementation using uart IP as base? [Y/n] 4. CRITICAL: CDC crossing at top.sv:55 without synchronizer Action: Insert cdc_2ff synchronizer? [Y/n] ``` --- ## Auto-Fill Dispatch When user approves auto-fill, dispatch appropriate agents: ### For IP Block Matches ``` Use Task tool: subagent_type: "gateflow:sv-codegen" prompt: | Implement module <name> based on the <ip_block> IP block. Adapt ports to match the instantiation in <file>:<line>. Original ports: <detected_ports> IP block ports: <ip_ports> Generate the module, then create a testbench. ``` ### For Stubs ``` Use Task tool: subagent_type: "gateflow:sv-codegen" prompt: | Implement the stub module at <file>. The module signature is already defined: <module_signature> Based on the port names and context, this appears to be a <type>. Implement full functionality, following the existing codebase patterns. ``` ### For CDC Issues ``` Use Task tool: subagent_type: "gateflow:sv-refactor" prompt: | Add CDC synchronization at <file>:<line>. Signal <signal> crosses from <src_clk> to <dst_clk> domain without synchronization. Insert a cdc_2ff synchronizer (from GateFlow IP library). Ensure the synchronizer is properly reset. ``` --- ## Pattern Detection Rules ### FIFO Detection ``` Confidence: HIGH if module has: - wr_en/write + rd_en/read signals - full + empty signals - data_in/wr_data + data_out/rd_data signals - Single clock → fifo_sync - Dual clock → fifo_async ``` ### CDC Detection ``` Confidence: HIGH if: - Signal assigned in always_ff @(posedge clk_a) - Signal read in always_ff @(posedge clk_b) where clk_a != clk_b - No synchronizer between domains Confidence: MEDIUM if: - 2+ flip-flop chain detected but not using standard sync pattern ``` ### Protocol Detection ``` SPI: sclk + mosi + miso + cs_n (any naming variant) UART: tx/rx + baud-related parameter I2C: scl + sda (bidirectional) AXI: *valid + *ready + *addr + *data patterns ``` ### Vendor IP Detection ``` Xilinx: IBUF, OBUF, BUFG, MMCME2, PLLE2, BRAM_TDP, DSP48E1 Lattice: SB_IO, SB_GB, SB_PLL40, SB_SPRAM, SB_RAM Gowin: IBUF, OBUF, rPLL, SDPB, pROM Intel: altpll, altsyncram, altddio ``` --- ## Integration with /gf Orchestrator The `/gf` orchestrator can invoke IP detection: - Before any new feature implementation (check what exists) - After codebase mapping (enrich with IP analysis) - When user says "what's missing" or "scan for gaps" ## Integration with /gf-architect Combine with codebase mapping: 1. `/gf-architect` maps the module hierarchy 2. `/gf-ip-detect` overlays IP analysis on the map 3. Result: hierarchy + IP opportunities + CDC issues --- ## Commands - "Scan for missing IP blocks" → full detection + report - "Auto-fill missing modules" → detect + dispatch agents - "What IP blocks does my project need?" → detection + suggestions - "Find CDC issues" → focused CDC crossing analysis - "Replace ad-hoc code with verified IP" → pattern match + swap --- ## Extended Vendor IP Detection Additional primitives to detect beyond existing list: - **Xilinx UltraScale+:** URAM288, DSP48E2, BUFGCE, MMCME4_ADV, GTHE4_CHANNEL, STARTUPE3 - **Intel Agilex:** IOPLL, RAM20K, M20K, MLAB, tennm_ph2_iopll - **Lattice ECP5:** EHXPLLL, DP16KD, TRELLIS_FF, DCUA, EXTREFB - **Gowin (extended):** rPLL, PLLVR, SDPB, DPB, pROM, EMCU, DHCEN - **Microchip PolarFire:** LSRAM, uSRAM, MACC, CCC, SERDES_IF - **Efinix:** EFX_PLL, EFX_RAM_5K, EFX_DPRAM_5K, EFX_GBUFCE ## False Positive Reduction | Pattern | False Positive When | Action | |---|---|---| | 2FF chain | Inside shift register (3+ stages) | Skip | | 2FF chain | Both FFs same clock | Skip | | FIFO signals | Inside module named `*fifo*` | Skip | | valid/ready | AXI bus already using IP block | Skip | | SPI signals | Inside testbench files (tb_*, *_tb.sv) | Skip | | Vendor primitive | In comments or string literals | Skip | ## Severity Scoring | Severity | Criteria | Examples | |---|---|---| | CRITICAL | Data corruption, metastability | CDC without synchronizer | | HIGH | Missing module, empty stubs | Instantiated but undefined | | MEDIUM | Ad-hoc reimplementation | Hand-rolled FIFO, manual 2FF | | LOW | Style, minor optimization | Vendor primitive with OSS equivalent | | INFO | Already correct | Verified IP properly used | ## Auto-Suggestion Integration | Detected Pattern | Suggested Command | Parameters | |---|---|---| | Sync FIFO signals | `/gf-ip add fifo_sync` | WIDTH=detected, DEPTH=next_pow2 | | Async FIFO signals | `/gf-ip add fifo_async` | WIDTH=detected, DEPTH=8 | | 2FF CDC crossing | `/gf-ip add cdc_2ff` | default | | Multi-bit CDC handshake | `/gf-ip add cdc_handshake` | WIDTH=detected | | UART pattern | `/gf-ip add uart` | CLK_FREQ=detected, BAUD=115200 | | SPI pattern | `/gf-ip add spi_master` | CLK_DIV=computed | | AXI register pattern | `/gf-ip add axi4lite_slave` | ADDR_WIDTH=detected | | Button debounce | `/gf-ip add debouncer` | DEBOUNCE_MS=20 |
Voir sur GitHub