Verilator MCP Server
Un servidor MCP para Verilator que proporciona simulación RTL, generación automática de bancos de prueba y capacidades de consulta en lenguaje natural.
Documentación
Servidor MCP de Verilator
Un servidor inteligente de Protocolo de Contexto de Modelo (MCP) para Verilator que proporciona simulación RTL, generación automática de testbenches y capacidades de consulta en lenguaje natural. Esta herramienta une la brecha entre los asistentes de IA y la verificación de hardware, haciendo la simulación RTL más accesible e inteligente.
Características
🚀 Capacidades Principales
- Generación Automática de Testbenches: Genera testbenches de forma inteligente cuando no existen
- Simulación Inteligente: Compila y ejecuta simulaciones con gestión automática de dependencias
- Consultas en Lenguaje Natural: Haz preguntas sobre tu simulación en inglés sencillo
- Análisis de Formas de Onda: Genera y analiza formas de onda de simulación
- Recopilación de Cobertura: Realiza seguimiento de métricas de cobertura de código
- Consciente de Protocolos: Soporte integrado para protocolos estándar (AXI, APB, etc.)
🤖 Ejemplos de Lenguaje Natural
Control de Simulación
- "Ejecuta la simulación en counter.v"
- "Simula mi diseño con captura de forma de onda"
- "Ejecuta el testbench de la CPU con cobertura habilitada"
- "Compila y ejecuta mi módulo ALU"
Generación de Testbenches
- "Genera un testbench para mi módulo FIFO"
- "Crea un testbench AXI para el controlador de memoria"
- "Haz un testbench con estímulo aleatorio para mi ALU"
- "Genera un testbench consciente de protocolo para mi esclavo APB"
Depuración y Análisis
- "¿Por qué data_valid está bajo en 1000ns?"
- "¿Qué causó el fallo de aserción en el tiempo 5000?"
- "Muéstrame cuándo cambia la señal de reset"
- "¿Por qué mi señal de salida es X?"
- "Depura las transiciones de la máquina de estados"
Cobertura y Verificación
- "Muéstrame el informe de cobertura"
- "¿Qué bloques de código no están probados?"
- "¿Cómo puedo mejorar la cobertura para el controlador?"
- "Genera pruebas para escenarios no cubiertos"
Comprensión del Diseño
- "Explica cómo funciona el módulo de la CPU"
- "¿Cuáles son las entradas y salidas de la ALU?"
- "Analiza el rendimiento de temporización"
- "Muestra la jerarquía de módulos"
- "¿Cuál es la frecuencia máxima de operación?"
Instalación
Requisitos Previos
- Node.js 16+
- Verilator 5.0+ instalado y en PATH
- Git
Paso 1: Instalar Verilator
Verilator debe estar instalado antes de usar este servidor MCP.
macOS (Homebrew)
brew install verilator
Ubuntu/Debian
sudo apt-get update
sudo apt-get install verilator
Desde el Código Fuente
git clone https://github.com/verilator/verilator
cd verilator
autoconf
./configure
make -j `nproc`
sudo make install
Verificar la Instalación
verilator --version
# Should output: Verilator 5.0 or higher
Paso 2: Instalar Verilator MCP
# Clone the repository
git clone https://github.com/ssql2014/verilator-mcp.git
cd verilator-mcp
# Install dependencies
npm install
# Build the project
npm run build
# Test the server
npm test
# Or run diagnostic
./diagnose.sh
Paso 3: Configurar Claude Desktop
Añade a tu archivo de configuración de Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json en macOS):
{
"mcpServers": {
"verilator": {
"command": "node",
"args": ["/path/to/verilator-mcp/dist/index.js"],
"env": {
"LOG_LEVEL": "info"
}
}
}
}
Paso 4: Reiniciar Claude Desktop
Después de actualizar la configuración, reinicia Claude Desktop para cargar el servidor MCP.
Variables de Entorno
LOG_LEVEL: Establece el nivel de registro (debug, info, warn, error)VERILATOR_PATH: Sobrescribe la ruta de instalación de Verilator
Herramientas Disponibles
1. verilator_compile
Compila diseños Verilog/SystemVerilog a C++.
Parámetros:
files(obligatorio): Matriz de archivos de diseñotopModule: Nombre del módulo superioroptimization: Nivel de optimización (0-3)trace: Habilita la generación de formas de ondacoverage: Habilita la recopilación de cobertura
Ejemplo:
{
"files": ["cpu.v", "alu.v"],
"topModule": "cpu",
"optimization": 2,
"trace": true
}
2. verilator_simulate
Ejecuta simulación RTL con generación automática de testbenches.
Parámetros:
design(obligatorio): Archivo o directorio de diseñotestbench: Archivo de testbench (generado automáticamente si falta)autoGenerateTestbench: Habilita la generación automática (predeterminado: true)enableWaveform: Genera formas de onda (predeterminado: true)simulationTime: Sobrescribe la duración de la simulación
Ejemplo:
{
"design": "counter.v",
"autoGenerateTestbench": true,
"enableWaveform": true,
"simulationTime": 10000
}
3. verilator_testbenchgenerator
Genera testbenches inteligentes para módulos.
Parámetros:
targetFile(obligatorio): Archivo Verilog que contiene el módulotargetModule(obligatorio): Nombre del módulotemplate: Estilo de plantilla (basic, uvm, cocotb, protocol)protocol: Tipo de protocolo (axi, apb, wishbone, avalon)stimulusType: Generación de estímulo (directed, random, constrained_random)
Ejemplo:
{
"targetFile": "fifo.v",
"targetModule": "fifo",
"template": "basic",
"stimulusType": "constrained_random",
"generateAssertions": true
}
4. verilator_naturallanguage
Procesa consultas en lenguaje natural sobre la simulación.
Parámetros:
query(obligatorio): Pregunta en lenguaje naturalcontext: Contexto de simulación actualhistory: Historial de consultas anteriores
Ejemplo:
{
"query": "Why did the assertion fail at time 5000?",
"context": {
"currentSimulation": {
"design": "cpu.v",
"waveformFile": "simulation.vcd"
}
}
}
Recursos
El servidor proporciona acceso a artefactos de simulación a través de recursos MCP:
simulation://[project]/logs/[sim_id]- Registros de salida de simulaciónsimulation://[project]/waves/[sim_id]- Datos de forma de ondasimulation://[project]/coverage/[sim_id]- Informes de coberturadesign://[project]/hierarchy- Jerarquía de módulosdesign://[project]/interfaces- Definiciones de interfaces
Características de Generación de Testbenches
Detección Automática
- Identificación de señales de reloj y reset
- Análisis de dirección y ancho de puertos
- Reconocimiento de protocolos
- Extracción de parámetros
Componentes Generados
- Generación de reloj con frecuencia configurable
- Secuencias de reset con polaridad adecuada
- Estímulo dirigido y aleatorio
- Aserciones y verificadores básicos
- Puntos de cobertura
- Volcado de formas de onda
Soporte de Protocolos
Plantillas integradas para:
- AXI (AXI4, AXI4-Lite, AXI-Stream)
- APB (APB3, APB4)
- Wishbone
- Avalon
- Protocolos personalizados
Categorías de Consultas en Lenguaje Natural
Consultas de Depuración
- Análisis de valores de señales
- Investigación de fallos de aserción
- Seguimiento de propagación X/Z
- Análisis de relaciones de temporización
Consultas de Análisis
- Métricas de rendimiento
- Utilización de recursos
- Análisis de ruta crítica
- Estimación de potencia
Consultas de Cobertura
- Estadísticas de cobertura
- Identificación de código no cubierto
- Sugerencias de escenarios de prueba
Consultas de Generación
- Creación de testbenches
- Generación de patrones de estímulo
- Generación de aserciones
- Creación de puntos de cobertura
Ejemplos
Flujo Básico de Simulación
// 1. Compile design
{
"tool": "verilator_compile",
"arguments": {
"files": ["alu.v"],
"topModule": "alu",
"trace": true
}
}
// 2. Run simulation (auto-generates testbench)
{
"tool": "verilator_simulate",
"arguments": {
"design": "alu.v",
"autoGenerateTestbench": true,
"enableWaveform": true
}
}
// 3. Query results
{
"tool": "verilator_naturallanguage",
"arguments": {
"query": "Show me any errors in the simulation"
}
}
Ejemplos de Flujo de Trabajo en Lenguaje Natural
Ejemplo 1: Verificación Completa de Diseño
// Natural language: "Generate a testbench and run simulation for counter.v"
{
"tool": "verilator_naturallanguage",
"arguments": {
"query": "Generate a testbench and run simulation for counter.v with coverage"
}
}
// Response will trigger testbench generation and simulation automatically
Ejemplo 2: Depurar Fallo de Simulación
// After simulation fails, ask why
{
"tool": "verilator_naturallanguage",
"arguments": {
"query": "Why did my simulation fail?",
"context": {
"currentSimulation": {
"design": "fifo.v",
"testbench": "tb_fifo.sv",
"waveformFile": "sim_output/simulation.vcd"
}
}
}
}
// Follow up with specific signal investigation
{
"tool": "verilator_naturallanguage",
"arguments": {
"query": "Why is the full signal high when count is only 5?",
"context": {
"currentSimulation": {
"design": "fifo.v",
"waveformFile": "sim_output/simulation.vcd"
}
}
}
}
Ejemplo 3: Mejora de Cobertura
// Ask for coverage analysis
{
"tool": "verilator_naturallanguage",
"arguments": {
"query": "What's my current code coverage and how can I improve it?"
}
}
// Generate specific tests for uncovered code
{
"tool": "verilator_naturallanguage",
"arguments": {
"query": "Generate test cases for the error handling paths"
}
}
Ejemplo 4: Comprensión del Diseño
// Ask about module functionality
{
"tool": "verilator_naturallanguage",
"arguments": {
"query": "Explain how the AXI arbiter module works and what are its key signals"
}
}
// Analyze performance
{
"tool": "verilator_naturallanguage",
"arguments": {
"query": "What's the critical path in my design and how can I optimize it?"
}
}
Pruebas Basadas en Protocolos
// Generate AXI testbench
{
"tool": "verilator_testbenchgenerator",
"arguments": {
"targetFile": "axi_slave.v",
"targetModule": "axi_slave",
"template": "protocol",
"protocol": "axi",
"generateAssertions": true
}
}
// Or use natural language
{
"tool": "verilator_naturallanguage",
"arguments": {
"query": "Create an AXI testbench with burst transactions for my memory controller"
}
}
Ejemplo de Conversación Multi-Paso
// Step 1: Initial query
User: "I have a new UART module, help me verify it"
Assistant: "I'll help you verify your UART module. Let me first generate a testbench..."
// Step 2: Run simulation
User: "Run the simulation with baud rate 115200"
Assistant: "Running simulation with 115200 baud rate..."
// Step 3: Debug issue
User: "The parity bit seems wrong"
Assistant: "Looking at the waveform, I can see the parity calculation is using even parity..."
// Step 4: Fix and verify
User: "Generate a test specifically for odd parity mode"
Assistant: "I'll create a directed test case for odd parity verification..."
Desarrollo
Compilar desde el Código Fuente
npm install
npm run build
Ejecutar Pruebas
npm test
Modo de Depuración
LOG_LEVEL=debug npm start
Solución de Problemas
Diagnósticos Rápidos
Ejecuta el script de diagnóstico para verificar tu configuración:
./diagnose.sh
Problemas Comunes
-
Verilator no encontrado
# Install Verilator first! brew install verilator # macOS sudo apt-get install verilator # Ubuntu/Debian # Verify installation verilator --version -
El servidor no se inicia en Claude Desktop
- Asegúrate de que Verilator esté instalado (ver arriba)
- Verifica que las rutas en la configuración de Claude Desktop sean absolutas
- Reinicia Claude Desktop después de los cambios de configuración
- Ejecuta
./diagnose.shpara verificar la configuración
-
Errores de compilación
- Verifica que las rutas de archivos sean correctas
- Comprueba la sintaxis de SystemVerilog
- Revisa los mensajes de error en los registros
-
La generación de testbenches falla
- Asegúrate de que el módulo tenga declaraciones de puertos estándar
- Verifica si hay construcciones no compatibles
- Prueba opciones de plantilla más simples
Para solución de problemas detallada, consulta TROUBLESHOOTING.md
Contribuciones
¡Las contribuciones son bienvenidas! Por favor:
- Haz un fork del repositorio
- Crea una rama de características
- Añade pruebas para nuevas características
- Envía una solicitud de extracción
Licencia
Licencia MIT - consulta el archivo LICENSE para más detalles
Agradecimientos
- Construido sobre el Protocolo de Contexto de Modelo de Anthropic
- Impulsado por el simulador de código abierto Verilator
- Procesamiento de lenguaje natural usando la biblioteca Natural