UI はローカライズ済みです。スキルの紹介と説明文書は選択した言語へ AI が自動翻訳し、コード・コマンド・パス・専門用語は原文のままです。原作者の文書が優先されます。
スキルを探す
デザイン · SKILL.md

verilog-design-skill

verilog-design-skill

Verilog/FPGA 代码编写、审查、纠错与分析的专项技能。在需要编写、检查、纠错、分析、优化 Verilog 代码时使用,涵盖编码风格规范、时序打拍与流水线技巧、资源优化(避免除法、移位替代乘法、DSP/BRAM 映射)、复位策略、常见错误防范、像素级判定与区域级聚合模式等。触发场景:(1) 编写新的 Verilog 模块,(2) 审查或纠错已有 Verilog 代码,(3) 优化 FPGA 资源或时序,(4) 设计图像处理流水线,(5) 任何涉及 .v/.sv 文件的工作。

Independent GitHub snapshot · Automated classification · Original documentation governs

スキルの説明

GitHub

name: verilog-design-skill description: Verilog/FPGA 代码编写、审查、纠错与分析的专项技能。在需要编写、检查、纠错、分析、优化 Verilog 代码时使用,涵盖编码风格规范、时序打拍与流水线技巧、资源优化(避免除法、移位替代乘法、DSP/BRAM 映射)、复位策略、常见错误防范、像素级判定与区域级聚合模式等。触发场景:(1) 编写新的 Verilog 模块,(2) 审查或纠错已有 Verilog 代码,(3) 优化 FPGA 资源或时序,(4) 设计图像处理流水线,(5) 任何涉及 .v/.sv 文件的工作。

Verilog/FPGA 设计规范与实战指南

核心铁律

编写/审查 Verilog 代码时,以下规则不可违反:

  1. 赋值不混用:时序逻辑 <=,组合逻辑 =,同一 always 块严禁混用
  2. 组合逻辑无负反馈:assign b = m + b 会导致仿真死循环,改为时序逻辑
  3. BRAM 数组不加复位:加复位 → 无法推断 BRAM → 用数千寄存器替代
  4. DSP 内用同步复位:异步复位 → 寄存器无法吸收进 DSP → 额外 65+32 LUT
  5. 除法必须替代:FPGA 中 /N 用移位、定点缩放或离散档比较替代

工作流程

编写新模块

  1. 定义端口(clk, rst_n → pre 输入 → post 输出)
  2. 参数化阈值和常量
  3. 规划流水线级数与每级运算复杂度
  4. 同步信号用移位寄存器对齐 LATENCY 周期
  5. 应用核心铁律检查

审查/纠错已有代码

按以下清单逐项检查:

检查项风险等级
赋值混用 =/<=致命
组合逻辑缺少敏感量表致命
组合负反馈致命
BRAM 加复位严重
DSP 异步复位严重
除法运算严重
异步复位释放不同步严重
复位类型混合(同一 DSP/BRAM)中等
省略 begin/end低
同步信号未与数据对齐中等

优化资源/时序

  • 长组合路径 → 拆为多级流水线
  • /N → *(K) >> shift 或离散档比较
  • *2^n → << n
  • *2k±1 → (data << n) ± data
  • 比较平方替代开方:sqrt(a) >= t → a >= t*t
  • 数据路径省复位,控制路径保留复位

除法替代速查

原始运算替代方案Verilog 代码
/256取高位字节result[15:8]
/2^n右移data >> n
/3乘85右移8(data * 85) >> 8
/N定点缩放(data * K) >> S,K/S ≈ 1/N
a/b >= t离散档if (a * 1000 >= b * t1000)
sqrt(a) >= t比较平方a >= t * t

流水线模板

// 信号对齐(与数据流水线同步)
reg [LATENCY-1:0] vsync_d, hsync_d, de_d;
always @(posedge clk) begin
    vsync_d <= {vsync_d[LATENCY-2:0], pre_vsync};
    hsync_d <= {hsync_d[LATENCY-2:0], pre_hsync};
    de_d    <= {de_d[LATENCY-2:0],    pre_de};
end
assign post_vsync = vsync_d[LATENCY-1];

// 边沿检测
wire pos_flag = sig_r  & ~sig_r2;
wire neg_flag = ~sig_r &  sig_r2;

详细参考

需要深入某个方面时,查阅以下参考文件:

保存したスキル