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"

소스 정보

저장소
codejunkie99/Gateflow-Plugin
최근 소스 활동
2026년 4월 11일 12:56
감지된 SKILL.md 언어
영어
스타
117
포크
16

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
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 |
GitHub에서 보기