view_waveform
Visualize and analyze VCD waveform files using GTKWave viewer. Input a project ID and VCD filename to inspect simulation results and debug electronic designs efficiently.
Instructions
Open VCD waveform file in GTKWave viewer
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| project_id | Yes | Project ID from simulation (required) | |
| vcd_file | No | VCD filename (default: output.vcd) | output.vcd |
Implementation Reference
- src/index.ts:267-330 (handler)The core handler function for the view_waveform tool. It validates the project and VCD file, checks for GTKWave installation, launches GTKWave with the VCD file, and returns a JSON response with success status and details.async viewWaveform(projectId: string, vcdFile = "output.vcd"): Promise<string> { try { // Check if project exists const project = this.projects.get(projectId); if (!project) { return JSON.stringify({ success: false, error: `Project ${projectId} not found. Run a simulation first.`, }, null, 2); } const vcdPath = join(project.dir, vcdFile); // Check if VCD file exists try { await fs.access(vcdPath); } catch { // List available files to help user const files = await fs.readdir(project.dir); const vcdFiles = files.filter(f => f.endsWith('.vcd')); return JSON.stringify({ success: false, error: `VCD file '${vcdFile}' not found in project ${projectId}`, available_vcd_files: vcdFiles, note: "Make sure your testbench includes $dumpfile() and $dumpvars() commands" }, null, 2); } // Check if GTKWave is available if (!(await commandExists('gtkwave'))) { return JSON.stringify({ success: false, error: "GTKWave not found. Please install GTKWave to view waveforms.", install_instructions: { macos: "brew install gtkwave", linux: "sudo apt-get install gtkwave", windows: "Install GTKWave from http://gtkwave.sourceforge.net/" } }, null, 2); } // Launch GTKWave in background const gtkwaveCmd = `gtkwave "${vcdPath}" &`; await execAsync(gtkwaveCmd, { cwd: project.dir, timeout: 5000 }); return JSON.stringify({ success: true, message: `GTKWave launched for project ${projectId}`, vcd_file: vcdFile, vcd_path: vcdPath, project_type: project.type }, null, 2); } catch (error: any) { return JSON.stringify({ success: false, error: error.message || String(error), }, null, 2); } }
- src/index.ts:768-785 (schema)The input schema for the view_waveform tool, defining required project_id and optional vcd_file parameters. Returned by the ListTools handler.name: "view_waveform", description: "Open VCD waveform file in GTKWave viewer", inputSchema: { type: "object", properties: { project_id: { type: "string", description: "Project ID from simulation (required)" }, vcd_file: { type: "string", description: "VCD filename (default: output.vcd)", default: "output.vcd" }, }, required: ["project_id"], }, },
- src/index.ts:891-901 (registration)The dispatch/registration case in the CallToolRequest handler that maps the 'view_waveform' tool name to the edaServer.viewWaveform method execution.case "view_waveform": { const projectId = validateRequiredString(args, "project_id", name); const vcdFile = getStringProperty(args, "vcd_file", "output.vcd"); return { content: [{ type: "text", text: await edaServer.viewWaveform(projectId, vcdFile), }], }; }