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

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

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工具。

글 참여 도구

Share Join discussion
How did this article help? Used only as a private quality signal.

Private note

Spot an error or need clarification?

Send a private correction, question, or topic request directly to the editor.

VLSI Korea

Send a private note

Your message will be delivered to [email protected].

How should we receive it?

Anonymous mode omits your name and email. The delivery provider may still process technical data such as an IP address, so absolute anonymity cannot be guaranteed.

ENGINEER DISCUSSION

What are you seeing in practice?

Add evidence, a counterpoint, or experience from the field. Reply notifications keep the thread moving.

VLSI KOREA BRIEFING

Keep the signal. Lose the noise.

Semiconductor engineering and industry intelligence from a practicing engineer. Free, with no paywall.

FOR BUSINESS

Need this level of technical content?

Technical content, sponsored deep-dives and private team briefings—with clear scope and pricing.

Work with VLSI Korea →
VLSI Korea Free forever · No paywall · Weekly semiconductor insights from practicing engineers
MY VLSI

내 읽기 보관함

저장한 글과 읽던 글을 한곳에서 이어보세요.