数字芯片设计基础回顾:从RTL到GDSII的流程、标准单元库与网表、综合与网表生成
各位同学,今天我们来聊聊数字芯片设计的基础流程。说实话,很多做逆向的工程师,对前端设计流程并不陌生,但真要细说起来,可能又有点模糊。我当年刚入行时,也花了不少时间才把整个链条理清楚。今天我就用自己的经验,带大家快速过一遍。
一、从RTL到GDSII:芯片设计的“高速公路”
数字芯片设计,说白了就是把你的逻辑想法,变成一块实实在在的硅片。这个过程,我们通常称为“从RTL到GDSII”。RTL是行为级描述,GDSII是最终的版图数据。中间要经过好几个关键步骤。
我个人习惯把流程分成三大阶段:前端设计、后端实现、物理验证。前端主要做逻辑设计,后端负责把逻辑变成物理版图。
核心流程概览:
- RTL设计:用Verilog/VHDL描述电路行为
- 逻辑综合:将RTL转化为门级网表
- 布局布线:将门级网表放置到芯片上并连线
- 物理验证:检查版图是否符合设计规则
- GDSII输出:最终交付给晶圆厂的版图数据
这里我特别想强调一点:网表是连接前后端的桥梁。你想想看,前端工程师写的是RTL代码,后端工程师看的是版图,但中间怎么沟通?靠的就是网表。网表里记录了所有的逻辑单元和它们的连接关系。这也是为什么我们做逆向工程时,网表分析如此重要。
下面这张图,是我自己总结的流程框架,大家可以对照着看。
二、标准单元库:芯片设计的“乐高积木”
标准单元库是什么?我打个比方,它就像乐高积木。你不需要自己烧制每一块积木,只需要从库里挑出合适的积木,然后拼起来就行。标准单元库就是预先设计好、经过验证的逻辑功能块集合。
每个标准单元都包含:
- 逻辑功能:比如与门、或门、触发器、多路选择器等
- 物理尺寸:高度、宽度、引脚位置
- 时序参数:延迟、建立时间、保持时间
- 功耗信息:静态功耗、动态功耗
我在项目中遇到过一件事,印象很深。有一次做逆向分析,发现芯片里有个模块的布局特别规整,所有单元的高度完全一致,行对齐也特别完美。我当时就判断,这肯定是用了标准单元库自动布局布线的。后来一查,果然是。标准单元库的规整性,在逆向工程中反而成了识别特征。
小提示:标准单元库通常包含多种驱动强度的版本。比如一个2输入与非门,可能有NAND2_X1、NAND2_X2、NAND2_X4等,数字越大驱动能力越强。综合工具会根据负载自动选择合适的版本。
三、综合与网表生成:从抽象到具体
综合,就是把RTL代码翻译成门级网表的过程。你想想看,RTL里写的是“if (a & b) out = 1”,综合工具要把它变成具体的与门、或门、触发器等。这个过程不是简单的翻译,而是有优化策略的。
综合工具会做三件事:
- 转换:把RTL转换成布尔表达式
- 优化:根据面积、速度、功耗等约束进行优化
- 映射:把优化后的逻辑映射到标准单元库
举个例子,下面是一段简单的RTL代码:
module counter (
input clk,
input rst_n,
output reg [3:0] count
);
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
count <= 4'b0;
else
count <= count + 1;
end
endmodule
综合后生成的网表大概长这样:
module counter ( clk, rst_n, count );
input clk, rst_n;
output [3:0] count;
wire n1, n2, n3, n4;
DFF_X1 count_reg_0_ ( .D(n1), .CK(clk), .Q(count[0]) );
DFF_X1 count_reg_1_ ( .D(n2), .CK(clk), .Q(count[1]) );
DFF_X1 count_reg_2_ ( .D(n3), .CK(clk), .Q(count[2]) );
DFF_X1 count_reg_3_ ( .D(n4), .CK(clk), .Q(count[3]) );
// 加法逻辑
XOR2_X1 u1 ( .A(count[0]), .B(1'b1), .Z(n1) );
// ... 其他加法器逻辑
// 复位逻辑
AND2_X1 u5 ( .A(n1), .B(rst_n), .Z(count[0]) );
// ...
endmodule
看到没?RTL里的“count + 1”被综合成了具体的加法器逻辑和触发器。每个DFF_X1、XOR2_X1都是标准单元库里的一个单元。
注意:综合后的网表有两种形式:结构网表和行为网表。结构网表只包含标准单元的实例化和连接,行为网表可能还包含一些行为级描述。做逆向分析时,我们通常面对的是结构网表,需要手动或自动地恢复出高层次的功能。
四、网表在逆向工程中的价值
好了,讲到这里,大家应该明白了:网表是芯片设计的中间产物,它既保留了逻辑功能,又包含了物理实现信息。对于逆向工程来说,网表分析有几个关键优势:
- 可读性:比GDSII版图容易理解,毕竟还是文本形式
- 完整性:包含了所有逻辑单元和连接关系
- 可分析性:可以用EDA工具进行仿真、验证
我曾经接手过一个项目,客户只给了我们一份加密的网表文件,要求我们分析其中的加密算法。说实话,刚开始觉得无从下手。但后来我发现,网表里虽然单元很多,但很多结构是有规律的。比如加法器、乘法器、S盒这些,在网表里都有固定的模式。只要掌握了这些模式,逆向分析就能事半功倍。
嗯,今天就先讲到这里。这些基础知识,是后续章节的基石。大家回去可以自己找个小模块,试着从RTL到网表走一遍流程,感受一下。
本章要点回顾:
| 概念 | 说明 | 逆向工程意义 |
|---|---|---|
| RTL到GDSII流程 | 从行为描述到物理版图的完整链路 | 理解芯片设计全貌,定位分析切入点 |
| 标准单元库 | 预定义的逻辑功能块集合 | 识别单元类型,推断逻辑功能 |
| 综合与网表 | RTL到门级网表的转换过程 | 网表是逆向分析的核心数据源 |
公众号:蓝海资料掘金营,微信deep3321