# Vivado 联动功能技术设计文档 ## 1. 架构设计 ``` 后端 AI ↓ 调用工具 前端 Extension (messageHandler.ts) ↓ 调用 VivadoRunner (utils/vivadoRunner.ts) ↓ 生成 TCL 脚本并执行 本地 Vivado ``` ## 2. 核心模块 ### 2.1 VivadoRunner **职责**:执行单个 Vivado 命令 **主要方法**: - `createProject()` - 创建工程 - `runSynthesis()` - 执行综合 - `runImplementation()` - 执行实现 - `runBitstream()` - 生成比特流 **实现要点**: - 根据参数生成 TCL 脚本 - 启动子进程执行 Vivado - 捕获输出日志 - 解析报告文件 - 返回结果 ### 2.2 TCL 脚本生成 **创建工程**: ```tcl create_project {projectName} {workDir} -part {part} -force add_files -norecurse {files} set_property top {topModule} [current_fileset] ``` **综合**: ```tcl synth_design -part {part} -top {topModule} report_utilization -file utilization.rpt write_checkpoint -force synth.dcp ``` **实现**: ```tcl open_checkpoint {dcpFile} opt_design place_design route_design report_timing_summary -file timing.rpt write_checkpoint -force impl.dcp ``` **生成比特流**: ```tcl open_checkpoint {dcpFile} write_bitstream -force output.bit ``` ### 2.3 MessageHandler 集成 ```typescript // 处理工具调用 async function handleToolCall(toolName: string, params: any) { switch(toolName) { case 'createVivadoProject': return await vivadoRunner.createProject(params); case 'runVivadoSynthesis': return await vivadoRunner.runSynthesis(params); case 'runVivadoImplementation': return await vivadoRunner.runImplementation(params); case 'runVivadoBitstream': return await vivadoRunner.runBitstream(params); } } ``` ## 3. 配置管理 **配置文件位置**: - 全局:`settings.json` 中的 `ic-coder.vivado` - 项目:`.vscode/ic-coder-vivado.json` **配置项**: ```json { "vivado": { "enabled": true, "executablePath": "C:/Xilinx/Vivado/2023.1/bin/vivado.bat", "workingDir": "${workspaceFolder}/vivado_project" } } ``` ## 4. 文件结构 ``` src/ ├── utils/ │ ├── vivadoRunner.ts # Vivado 执行器 │ ├── vivadoConfig.ts # 配置读取 │ └── tclGenerator.ts # TCL 脚本生成 └── utils/ └── messageHandler.ts # 工具调用处理(新增部分) ``` ## 5. 实现要点 ### 5.1 子进程执行 ```typescript const process = spawn(vivadoPath, ['-mode', 'batch', '-source', tclPath]); process.stdout.on('data', (data) => { output += data.toString(); }); process.on('close', (code) => { resolve({ success: code === 0, output }); }); ``` ### 5.2 报告解析 从 `.rpt` 文件中提取关键信息: - 资源使用:LUT、FF、BRAM 数量 - 时序信息:WNS、TNS ### 5.3 错误处理 捕获常见错误: - Vivado 未配置 - 文件不存在 - 综合/实现失败 - 时序不满足 返回清晰的错误信息给后端。 ## 6. 测试 **单元测试**: - TCL 脚本生成正确性 - 配置读取 **集成测试**: - 完整流程测试(需要本地 Vivado) - 错误处理测试