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

MCP Verilator License

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ño
  • topModule: Nombre del módulo superior
  • optimization: Nivel de optimización (0-3)
  • trace: Habilita la generación de formas de onda
  • coverage: 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ño
  • testbench: 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ódulo
  • targetModule (obligatorio): Nombre del módulo
  • template: 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 natural
  • context: Contexto de simulación actual
  • history: 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ón
  • simulation://[project]/waves/[sim_id] - Datos de forma de onda
  • simulation://[project]/coverage/[sim_id] - Informes de cobertura
  • design://[project]/hierarchy - Jerarquía de módulos
  • design://[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

  1. Verilator no encontrado

    # Install Verilator first!
    brew install verilator  # macOS
    sudo apt-get install verilator  # Ubuntu/Debian
    
    # Verify installation
    verilator --version
    
  2. 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.sh para verificar la configuración
  3. 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
  4. 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:

  1. Haz un fork del repositorio
  2. Crea una rama de características
  3. Añade pruebas para nuevas características
  4. 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