Automatically infer formal correctness properties from Verilog/SystemVerilog RTL code and generate SystemVerilog Assertions (SVA). Identifies control-flow invariants (mutual exclusion, valid-ready handshakes, pipeline ordering, safety properties), liveness expectations, and temporal properties. Use when working with RTL designs that need formal property generation, when adding assertions to existing RTL, or when users ask to infer properties, generate assertions, or create formal specifications from hardware designs.
npx skills add https://github.com/ArabelaTso/Skills-4-SE --skill rtl-property-inference
This skill analyzes Verilog/SystemVerilog RTL code and automatically infers implicit correctness properties, generating formal SystemVerilog Assertions (SVA). The skill identifies common hardware patterns and generates appropriate safety, liveness, and fairness properties with clear explanations.
Analyze the input RTL code to extract key components:
Systematically analyze the design for common invariant patterns:
Look for patterns indicating "good things eventually happen":
Note: Liveness properties require careful analysis. Only infer when there's clear evidence of intended eventual behavior. Use bounded liveness (with timeouts) when unbounded liveness may not hold.
Use the pattern library in common_patterns.md to generate appropriate assertions:
Refer to sva_syntax.md for SVA syntax details.
Separate properties into clear categories:
For each inferred property, provide:
property_name: assert property (
@(posedge clk) disable iff (rst)
antecedent |-> consequent
) else $error("Description of violation");
Structure the output as follows:
## Inferred Properties for [Module Name]
### Clock and Reset
- Clock: <signal_name> (<edge>)
- Reset: <signal_name> (<polarity>, <sync/async>)
### Strong Invariants (Assert)
#### Property 1: <Short Name>
**Type**: Safety | Liveness | Fairness
**Confidence**: High | Medium | Low
**Assertion**:
<property_name>: assert property (
@(posedge clk) disable iff (rst)
<property_expression>
) else $error("<error_message>");
**Explanation**:
<Natural language description of what this property checks and why>
**Signals Involved**:
- `<signal1>`: <role/description>
- `<signal2>`: <role/description>
**Rationale**:
<Why this property was inferred from the RTL structure>
---
[Repeat for each property]
### Assumed Environment Constraints (Assume)
[Same format as above, but using `assume` directive]
### Coverage Properties (Cover)
[Same format as above, but using `cover` directive]
### Summary
- Total properties inferred: <count>
- Strong invariants: <count>
- Environment assumptions: <count>
- Coverage properties: <count>
- Patterns identified: <list of patterns>
- Verification recommendations: <suggestions>
User request: "Infer properties from this FIFO module"
Process:
Machine learning in Python with scikit-learn. Use when working with supervised learning (classification, regression), unsupervised learning (clustering, dimensionality reduction), model evaluation, hyperparameter tuning, preprocessing, or building ML pipelines. Provides comprehensive reference documentation for algorithms, preprocessing techniques, pipelines, and best practices.
Machine learning in Python with scikit-learn. Use when working with supervised learning (classification, regression), unsupervised learning (clustering, dimensionality reduction), model evaluation, hyperparameter tuning, preprocessing, or building ML pipelines. Provides comprehensive reference documentation for algorithms, preprocessing techniques, pipelines, and best practices.
Implement comprehensive evaluation strategies for LLM applications using automated metrics, human feedback, and benchmarking. Use when testing LLM performance, measuring AI application quality, or establishing evaluation frameworks.
Implement comprehensive evaluation strategies for LLM applications using automated metrics, human feedback, and benchmarking. Use when testing LLM performance, measuring AI application quality, or establishing evaluation frameworks.
Testing and benchmarking LLM agents including behavioral testing, capability assessment, reliability metrics, and production monitoring—where even top agents achieve less than 50% on real-world benchmarks
Automated scRNA-seq cell type annotation via pre-trained logistic regression. 45+ models: immune, gut, lung, brain, fetal, cancer microenvironments. Input normalized AnnData; outputs per-cell labels, majority-vote cluster labels, confidence scores. Use for fast, reference-backed annotation without manual marker inspection.
Classical ML in Python: classification, regression, clustering, dim reduction, evaluation, tuning, preprocessing pipelines. Linear models, tree ensembles, SVMs, K-Means, PCA, t-SNE. Use PyTorch/TF for deep learning; XGBoost/LightGBM for scale.
Python statistical modeling: regression (OLS, WLS, GLM), discrete (Logit, Poisson, NegBin), time series (ARIMA, SARIMAX, VAR), with rigorous inference, diagnostics, and hypothesis tests. Use scikit-learn for ML; statistical-analysis for test choice.
Take arabelatso/rtl-property-inference from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.