一键导入
vitis-hls-synthesis
Vitis HLS 综合助手,用于 C/C++ 到 RTL 转换。涵盖内核开发、pragma 优化、接口配置和综合报告分析。综合后实现使用 vivado-impl,时序分析使用 vivado-analysis,硬件调试使用 vivado-debug。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Vitis HLS 综合助手,用于 C/C++ 到 RTL 转换。涵盖内核开发、pragma 优化、接口配置和综合报告分析。综合后实现使用 vivado-impl,时序分析使用 vivado-analysis,硬件调试使用 vivado-debug。
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
当用户需要创建 PetaLinux 工程、配置 Linux 内核/rootfs/U-Boot、编写设备树(system-user.dtsi)、添加自定义应用程序 recipe、构建嵌入式 Linux 镜像、打包 BOOT.BIN 启动镜像、生成 WIC SD 卡镜像、部署到 SD 卡/QSPI、通过 QEMU 仿真启动、通过 JTAG 下载调试、动态加载 FPGA 比特流、或解决 PetaLinux 构建/版本问题时使用此技能。涵盖 petalinux-create、petalinux-config、petalinux-build、petalinux-package 全流程命令。当用户提及嵌入式 Linux、Yocto、meta-user、kernel config、rootfs 配置、u-boot、FSBL、PMU firmware、ATF、FIT image、设备树覆盖或 Zynq/MPSoC/Versal Linux 系统构建时触发。如需生成 XSA 文件使用 vivado-synth 和 vivado-impl,如需编写时序约束使用 vivado-constraints,如需硬件调试使用 vivado-debug,如需 PYNQ 镜像构建使用 pynq。
当用户需要为自己定制的开发板或已有开发板创建 PYNQ 工程、编译生成 PYNQ 镜像、定制板卡 BSP、编写板卡 .spec 文件、构建 SD 卡镜像、管理 PetaLinux BSP 层(meta-user、device-tree、kernel patch)、配置 PYNQ packages(pre.sh/qemu.sh/post.sh)、运行 pkgverify.sh 验证包、使用 flashsd.sh 烧写 SD 卡、使用 imgshell.sh 挂载编辑镜像、开发或加载 Overlay(BaseOverlay、自定义 Overlay、xsa overlay 工作流)、解析 HWH 文件、使用 PYNQ Python API(MMIO、DMA、GPIO、Interrupt 等)、在运行 PYNQ 镜像的板卡上编写/调试 Jupyter Notebook 代码时使用此技能。如需生成 bitstream 和 HWH 文件使用 vivado-synth、vivado-impl,如需编写时序约束使用 vivado-constraints,如需 TCL 自动化使用 vivado-tcl,如需硬件调试使用 vivado-debug。
当用户想要使用 axion-hdl 从 YAML 或 HDL 注释生成 AXI4-Lite 寄存器接口,或使用 axion-hdl GUI 模式的时候,使用该技能。
当用户需要实现Vivado工程GIT化的时候使用该技能。
当用户需要查找xilinx官方文档时使用该技能
当用户需要 Vivado 设计分析、时序报告解释或时序收敛方面的帮助时使用此技能。这包括 report_timing 解释(slack 计算、路径分析、时钟 skew/不确定性)、report_timing_summary 签发验证、report_qor_assessment(QoR 评分 1-5,评估类别)、report_qor_suggestions(自动优化建议,.rqs 工作流程)、report_design_analysis(时序路径特性、复杂度/Rent 分析、拥塞分析)、report_methodology(设计规则符合性)、report_utilization(资源使用分析)、report_cdc(时钟域交叉检查)、report_drc(设计规则检查)、report_bus_skew、时序收敛策略(setup/hold 违规解决、拥塞缓解)、消息严重性管理以及设计检查豁免。此技能提供分析和解释知识——如需执行 TCL 命令使用 vivado-tcl,如需修改约束使用 vivado-constraints,如需更改实现策略使用 vivado-impl。
| name | vitis-hls-synthesis |
| description | Vitis HLS 综合助手,用于 C/C++ 到 RTL 转换。涵盖内核开发、pragma 优化、接口配置和综合报告分析。综合后实现使用 vivado-impl,时序分析使用 vivado-analysis,硬件调试使用 vivado-debug。 |
此技能帮助您在 Vitis HLS 环境中高效进行 FPGA 高层次综合开发。完整语法参考请参阅 REFERENCE.md。
确认项目结构和目标器件,创建基础目录:
mkdir -p <project>/src <project>/tb
编写 HLS 内核代码,根据需要添加 pragma 优化指令,选择适当的数据类型和接口协议。
创建 .cfg 配置文件,指定器件、时钟、接口、优化和其他参数。
执行综合流程:
检查综合报告确认时序(WNS>0,TNS=0)、II 和资源使用满足设计要求。
| 任务 | 命令 |
|---|---|
| 环境设置 | source <Vitis_dir>/settings64.sh |
| 综合 | v++ -c --mode hls --config <config.cfg> |
| C 仿真 | vitis-run --mode hls --csim --config <config.cfg> |
| 综合 | vitis-run --mode hls --csynth --config <config.cfg> |
| 联合仿真 | vitis-run --mode hls --cosim --config <config.cfg> |
| 导出 IP | vitis-run --mode hls --package --config <config.cfg> |
| 优化类型 | 指令示例 |
|---|---|
| Pipeline | #pragma HLS PIPELINE II=1 |
| Loop Unroll | #pragma HLS UNROLL factor=4 |
| Array Partition | #pragma HLS ARRAY_PARTITION variable=arr type=cyclic factor=2 |
| Dataflow | #pragma HLS DATAFLOW |
| Interface Configuration | #pragma HLS INTERFACE mode=m_axi port=mem bundle=gmem |
| 参数 | 描述 |
|---|---|
part=<part_number> | 目标器件型号 |
clock=<ns> | 时钟周期(ns) |
flow_target=<vivado/vitis> | 目标输出类型 |
syn.top=<function_name> | 顶层函数名称 |
syn.file=<source_file> | 源文件路径 |
完整语法和参数参考请参阅 REFERENCE.md。参考实现示例可在 examples/ 目录中找到——当用户需要编码模式或最佳实践时,首先阅读这些文件。
对循环添加 pipeline 优化以实现 II=1:
void kernel(float A[32][32], float B[32][32], float C[32][32]) {
#pragma HLS INTERFACE m_axi port=A bundle=gmem
#pragma HLS INTERFACE m_axi port=B bundle=gmem
#pragma HLS INTERFACE m_axi port=C bundle=gmem
for (int i = 0; i < 32; i++) {
for (int j = 0; j < 32; j++) {
#pragma HLS PIPELINE II=1
float sum = 0;
for (int k = 0; k < 32; k++) {
sum += A[i][k] * B[k][j];
}
C[i][j] = sum;
}
}
}
分区数组以改善并行访问:
#pragma HLS ARRAY_PARTITION variable=input_data type=cyclic factor=4 dim=1
#pragma HLS ARRAY_PARTITION variable=weights type=complete dim=1
实现多阶段任务并行:
void top(hls::stream<int> &in, hls::stream<int> &out) {
#pragma HLS DATAFLOW
hls::stream<int> fifo1, fifo2;
#pragma HLS STREAM variable=fifo1 depth=16
#pragma HLS STREAM variable=fifo2 depth=16
read_image(in, fifo1);
process_image(fifo1, fifo2);
write_image(fifo2, out);
}
实现 AXI4-Stream 输入和输出:
#include "hls_stream.h"
void axis_process(hls::stream<ap_int<32>> &in, hls::stream<ap_int<32>> &out) {
#pragma HLS INTERFACE axis port=in
#pragma HLS INTERFACE axis port=out
#pragma HLS PIPELINE II=1
ap_int<32> data = in.read();
// 数据处理
out.write(data);
}
转换为定点以优化性能:
#include "ap_fixed.h"
// ap_fixed<总宽度, 整数位, 量化模式, 溢出模式>
typedef ap_fixed<16, 8, AP_RND, AP_SAT> fixed_t;
fixed_t value = 1.5f; // 自动量化