3. RTL设计与综合概念:Verilog基础回顾,综合的基本概念,逻辑综合与物理综合的区别
各位同学好,我是你们的后端设计讲师。今天咱们聊聊RTL设计与综合。说实话,很多刚入行的朋友觉得这章是“纯理论”,没啥意思。但我得说,综合这步要是理解不透,后面做物理设计时会踩很多坑。我自己就吃过这个亏,所以今天咱们好好掰扯掰扯。
3.1 Verilog基础回顾——够用就行
Verilog这东西,你不需要背得滚瓜烂熟。作为后端工程师,我们看RTL代码的目的只有一个:看懂它描述的是什么硬件结构。说白了,就是能判断出这段代码综合出来是触发器、组合逻辑还是状态机。
我个人习惯把Verilog分成三类结构来记:
- 组合逻辑:用
assign或者always @(*)描述。比如一个加法器、一个多路选择器。 - 时序逻辑:用
always @(posedge clk)描述。典型的就是D触发器。 - 模块例化:把小的模块拼成大的系统。
举个例子,一个简单的D触发器写法:
module dff (
input clk,
input rst_n,
input d,
output reg q
);
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
q <= 1'b0;
else
q <= d;
end
endmodule
嗯,这里要注意:always 块里的赋值一定要用 <=(非阻塞赋值),这是硬件描述语言和软件语言最大的区别。我在项目中见过有人写成 =,结果仿真和综合结果不一致,查了半天才发现是这里的问题。
3.2 综合的基本概念——把代码变成电路
综合是什么?说白了,就是把我们写的Verilog代码,翻译成由标准单元库里的门级网表。这个过程有点像翻译官:你把中文(RTL)说给他听,他给你翻译成英文(门级网表)。
综合工具(比如Synopsys的Design Compiler)会做三件事:
- 翻译:把RTL代码解析成布尔表达式和状态机。
- 优化:根据你给的约束(比如时钟频率、面积目标),对电路进行逻辑化简、资源共享等操作。
- 映射:把优化后的逻辑,映射到工艺库里的具体单元(比如AND门、OR门、触发器)。
举个例子,你写了一个 assign y = a & b | c & d;,综合工具可能会把它优化成 y = (a & b) | (c & d) 的两级逻辑,然后映射成两个AND门加一个OR门。但如果你的时序约束很紧,工具可能会选择用更快的单元(比如用AOI复合门)来替代。
我记得有一次做项目,前端同事写的代码里有一个很大的case语句。我给了很紧的时序约束,结果综合工具自动把它优化成了优先级编码器,面积大了不少。后来我调整了约束,工具才把它综合成并行结构。你看,约束直接影响结果。
3.3 逻辑综合 vs 物理综合——两个阶段,两种思维
很多初学者会问:逻辑综合和物理综合到底有啥区别?我简单解释一下。
逻辑综合(Logic Synthesis)是我们刚才说的那一步:从RTL到门级网表。它不考虑物理位置,只关心逻辑功能、时序和面积。工具会假设所有单元的延迟是固定的(从库文件里查到的),连线延迟是估算的(基于线负载模型)。
物理综合(Physical Synthesis)则是在布局布线之后,或者与布局布线同步进行的一步。它把物理位置信息(比如单元放在哪、连线有多长)考虑进来,重新优化网表。因为这时候连线延迟不再是估算,而是真实的RC参数。
我用一个表格来对比:
| 对比项 | 逻辑综合 | 物理综合 |
|---|---|---|
| 输入 | RTL代码 + 约束 | 门级网表 + 物理信息 |
| 输出 | 门级网表 | 优化后的门级网表 |
| 延迟模型 | 线负载模型(估算) | 实际RC参数(精确) |
| 主要优化 | 逻辑结构、面积、功耗 | 时序收敛、布线拥塞 |
| 工具举例 | Design Compiler | IC Compiler II, Fusion Compiler |
为什么会这样?你想想看,逻辑综合阶段连单元放在哪都不知道,它只能靠“猜”连线延迟。而物理综合阶段,单元已经摆好了,连线长度是确定的,这时候的优化才更靠谱。
3.4 知识体系总览
为了让大家更直观地理解本章的知识结构,我画了一张图:
从这张图可以看得很清楚:RTL代码经过逻辑综合变成门级网表,再结合物理信息进行物理综合,最终得到优化后的网表。每一步都有它存在的意义,缺一不可。
3.5 小结
这一章我们聊了三件事:Verilog怎么看、综合是什么、逻辑综合和物理综合有啥不同。说白了,就是从“写代码”到“变成电路”的桥梁。你不需要成为Verilog高手,但一定要理解综合工具是怎么工作的。这样你在写RTL时,才会下意识地写出对后端友好的代码。
嗯,今天就到这里。记住我那句老话:综合不是终点,而是物理设计的起点。后面咱们会一步步深入,把整个流程串起来。
公众号:蓝海资料掘金营,微信deep3321