RTL到GDS:1. RTL设计,Verilog编码风格

RTL到GDS:1. RTL设计,Verilog编码风格

第一部:实施的起点(前端桥接)

前言:RTL代码化为硅片前的第一道关卡

在现代半导体设计领域,尤其是集成数十亿个晶体管的SoC(系统级芯片)设计过程中,"RTL编码"仅仅是漫长征程的起点。本科或硕士阶段初次接触Verilog HDL时,最常见的误解莫过于认为"只要测试台模拟中波形符合预期,设计就完成了"。

然而仿真环境是存在物理约束的理想逻辑世界。

初学数字工程、接触Verilog硬件描述语言的大学生们常会自忖:"我已经掌握芯片设计了!"然而当他们进入研究生院进行Tape out时,便会深陷半导体领域的深渊。

实际半导体中会集成大量如下所示的电路:

这类电路被大量采用,

要在实际生产的半导体上制造出电子流动运作的芯片,必须克服时序、功耗、噪声、面积及工艺变异等严苛的物理现实。

本文《实现的起点(前端桥接)》将探讨RTL代码输入综合工具前后的关键阶段。

Verilog编码规范:代码是否可合成?

设计流程的首要关卡是学习Verilog编码规范。

半导体设计极其复杂,芯片制造耗资超过10,000,000美元,且制造完成后无法修改。 因此"必须采用可量产且高度安全的硬件编码方式。"


1. 硬件的本质: "不是代码,是电路"

学生们常将Verilog误认为C语言等编程语言。但量产级设计的铁律如下:

  • 物理原理理解:电子移动需要时间(门延迟 + 网延迟)。仿真以'0'时间计算,但实际硅片中该时间会随温度和电压变化。
  • 简约之美:华丽语法仅适用于仿真。须谨记实际芯片仅由组合逻辑 + 顺序逻辑构成。
  • 即便设计精良,硅片故障仍可能发生。 设计过于复杂,反而难以追溯故障根源。

2. 顺序逻辑(FF)设计规则

触发器是芯片的骨架。 仅允许最保守、最标准的结构。当然,即使不遵守以下约定,实际芯片仍可生产。

但大型企业为提升良率(哪怕微小提升)并快速分析硅片故障,采用极其严格的编码规范。

  • 时钟/复位约定:
    • 正沿时钟:正沿时钟。不建议在同一芯片内混用负沿时钟
      • 芯片投产前必须通过静态时序分析验证所有信号是否准时到达。若混用正沿负沿,将产生'半周期路径',导致时序裕度减半。
      • 若时钟高电平与低电平持续时间非精确50:50(抖动/偏移),在posedgenegedge混合区域极易引发噪声问题。
      • 实际设计中,大型企业采用比此更严格的标准。 除超高速通信模块外,多数系统IC均采用上升沿设计。
    • 异步复位:复位采用异步方式,但尽可能使用下降沿
      • 多数代工厂的库单元都针对低电平有效异步复位
      • 可靠初始化:优先采用异步复位,确保芯片上电瞬间(即使时钟尚未稳定)也能强制进入安全的'IDLE'状态。
    • 避免门控:请勿在时钟线上直接连接逻辑门(AND、OR),应遵循代工厂指导使用ICG(时钟隔离器)。
      • 毛刺地狱:若使用普通AND门控制时钟开关,可能产生短暂噪声。当这种噪声进入触发器时,数据将被破坏,导致芯片进入"原因不明的死机"状态。
      • 晶圆厂认证:ICG单元是晶圆厂认证的专用元件,其安全性远高于普通逻辑门。大型企业若在时钟线上发现任何普通逻辑门,都会判定为'Lint错误'并驳回设计。

标准语法遵循:Verilog

always @(posedge clk or negedge rst_n) begin if (!rst_n) data_q <= 8'd0; else data_q <= next_data;
end


3. 组合逻辑:相较于reg,更推荐使用wire

这是您文中最强调的部分。需警惕在always @(*)块内使用reg设计组合逻辑电路的方式。

常规数字电路设计中,应采用触发器而非锁存器。

  • 风险:若在always @(*)块中条件语句(ifcase)处理不当,将产生非预期的锁存器。 虽然仿真阶段能正常运行,但在实际量产时可能导致特定温度下电路停止工作。
  • 安全替代方案:尽可能使用assignwire组成的连续赋值语句。
    • 不良示例(需避免): 在always @(*)中使用reg进行组合逻辑设计(存在锁存风险)
    • 良好示例(安全): assign out = (cond) ? a : b; (物理电路清晰可见)

4. FSM(状态机)设计的经典范例

量产型FSM的核心在于"清晰的信号分离"而非"繁复的case语句"。

  • 状态转换与输出逻辑的分离:
    • 状态寄存器: always 块(顺序型)
    • 下状态逻辑: assign语句(组合逻辑)
    • 输出逻辑: assign语句(组合逻辑)

5. 防止错误的细节

  • 位宽匹配: 重置10'd5时,切勿误写为9'd0。一旦指望工具自动补全,量产必将失败。
  • 默认值的陷阱: 务必摒弃"不写也行"的念头。 所有case语句必须包含default,所有if语句必须包含else,确保电路所有路径均可确定(Deterministic)。

书籍推荐:《Verilog mass production编码风格指南》

重申一次,即使不遵守Verilog编码规范也能实现量产。但大型企业制定这些规则,正是为了提升良率、降低量产失败概率、并在失败时更容易追溯原因。

  1. 《复用方法论手册》(RMM):最权威的经典著作
  2. STARC设计风格指南:据称日本半导体企业及韩国半导体巨头中赴日留学的工程师们,正是依据此书制定了大量Verilog编码规范规则
  3. Verilog权威Cliff Cummings的系列发表论文。

接下来是RTL Linting。 若软件开发中的Lint仅用于检查语法错误或风格规范,那么硬件设计中的Linting则是关乎"该代码能否转化为实际电路?"的生存问题。

仿真器会宽容地接受语法上允许但实际硬件无法实现,或即使实现也会引发致命缺陷的代码。捕捉这种"仿真与综合不匹配(Simulation-Synthesis Mismatch)"正是RTL Lint的核心目标。1

1.1 可综合性:模拟与物理实现的鸿沟

合成工具(如Synopsys Design Compiler)读取RTL代码后,会将其转换为工具内部称为通用技术(GTECH)的抽象逻辑门。此过程中最常见的问题是硬件被解释成与设计者意图不符的状态。

1.1.1 锁存器推断:非预期存储单元的风险

数字电路设计中的禁忌之一是生成"推断锁存器"。 在描述组合逻辑时,若未在if语句或case语句中明确所有可能条件下的输出值,综合工具会判定在条件未明确的情况下需保持前一状态值。 由于组合逻辑本身无法存储值,工具会强制插入透明锁存器来保存数据。

为何要避免使用锁存器?

  1. 静态时序分析(STA)复杂度增加: 触发器仅在时钟沿发生数据传递,时序分析清晰明确。 而锁存器具有时借特性,即在透明窗口内时钟输入变化会持续传递至输出端。这极大增加了时序路径分析的复杂度,导致工具难以精确计算建立/保持时间,阻碍时序收敛。
  2. 降低DFT(Design for Test)覆盖率:在为量产测试插入扫描链时, 由于锁存器难以控制和观测,会阻碍测试模式生成并降低故障覆盖率。
  3. 毛刺传播:当锁存器的使能信号暴露于毛刺时,可能存储非预期数据并引发功能错误。

解决方案:防御性编码风格

最可靠的预防措施是在所有always_comb(SystemVerilog)或always @(*)(Verilog)模块顶部添加默认赋值。 这样即使条件语句中存在特定路径缺失,默认值仍会被赋予,从而无需维持值,避免产生锁存器。

示例1:当enable为0时,data_out未定义导致锁存器生成

always @(*) begin if (enable) data_out = data_in;
end

示例2:通过块初始化为0,即使不进入if语句也能确定值 -> 可通过组合逻辑(MUX)实现

always_comb begin data_out = 1'b0; // 默认赋值 if (enable)
data_out = data_in; end


此外,使用case语句时必须包含default语句以避免未定义状态。若缺少default语句,当输入不符合任何case条件时,工具会试图保持前一状态而产生锁存器。

1.1.2 全案例与并行案例的陷阱: "邪恶双胞胎"

Verilog设计史上最具争议且危险的议题之一,便是// synopsys full_case parallel_case这类Synthesis Pragma的使用。著名Verilog专家Clifford Cummings将其称为"Verilog综合的邪恶双胞胎"并警示其风险。

虽然合理运用能缩短代码长度,但这并非我推荐的编程风格。只需了解Synthesis Pragma的存在即可。

通常大学研究室也会有简化的Verilog编码规范。

初创公司同样存在规范,而大型企业往往采用更严格的Verilog编码规范,并配备专门的规范检查工具。

下篇文章将深入探讨RTL Lint工具。

Enjoyed this article?

Get deep-dive semiconductor analysis and career insights delivered weekly. Free forever — no paywall, no upsell. Funded by sponsorships with a strict editorial firewall (Editorial Standards).

Work with me

Consulting · Collaboration · Support

Paid 1:1 technical consulting, speaker invitations, collaboration proposals, or just want to say thanks — all welcome.

View options →
VLSI Korea Free forever · No paywall · Weekly semiconductor insights from practicing engineers
Support