数字IC设计实践
数字IC设计实践
项目 一个三十二位乘法器设计路径,从verilog代码->DC综合->网表->VCS仿真验证->virtuoso数模仿真
mindmap
root((signed_vedic_mult_32bit))
GTECH_XOR2
twos_comp_32bit
GTECH_BUF
GTECH_NOT
twos_comp_64bit
GTECH_BUF
GTECH_NOT
vedic_mult_32bit
CLA_32bit
CLA_16bit
CLA_8bit
CLA_4bit
GTECH_AND2
GTECH_XOR2
GTECH_XOR2
vedic_mult_16bit
CLA_16bit
CLA_8bit
CLA_4bit
GTECH_AND2
GTECH_XOR2
GTECH_XOR2
vedic_mult_8bit
CLA_8bit
CLA_4bit
GTECH_AND2
GTECH_XOR2
GTECH_XOR2
vedic_mult_4bit
CLA_4bit
GTECH_AND2
GTECH_XOR2
GTECH_XOR2
vedic_mult_2bit
GTECH_AND2
half_adder
GTECH_AND2
GTECH_XOR2
32位有符号乘法器结构树 (Graph TD)
graph TD
%% 节点定义
Top[signed_vedic_mult_32bit]
%% 第一层逻辑
TC32[twos_comp_32bit]
TC64[twos_comp_64bit]
VM32[vedic_mult_32bit]
GX_Top(GTECH_XOR2)
Top --> GX_Top
Top --> TC32
Top --> TC64
Top --> VM32
%% 补码模块内部
TC32 --> TC32_BUF(GTECH_BUF)
TC32 --> TC32_NOT(GTECH_NOT)
TC64 --> TC64_BUF(GTECH_BUF)
TC64 --> TC64_NOT(GTECH_NOT)
%% 32位乘法器内部
CLA32[CLA_32bit]
VM16[vedic_mult_16bit]
VM32_XOR(GTECH_XOR2)
VM32 --> CLA32
VM32 --> VM32_XOR
VM32 --> VM16
%% 递归分解:加法器链 (简化展示路径)
CLA32 --> CLA16_A[CLA_16bit]
CLA16_A --> CLA8_A[CLA_8bit]
CLA8_A --> CLA4_A[CLA_4bit]
CLA4_A --> CLA4_AND(GTECH_AND2)
CLA4_A --> CLA4_XOR(GTECH_XOR2)
%% 递归分解:乘法器链 (核心递归)
CLA16_B[CLA_16bit]
VM8[vedic_mult_8bit]
VM16_XOR(GTECH_XOR2)
VM16 --> CLA16_B
VM16 --> VM16_XOR
VM16 --> VM8
%% 8位层级
CLA8_B[CLA_8bit]
VM4[vedic_mult_4bit]
VM8_XOR(GTECH_XOR2)
VM8 --> CLA8_B
VM8 --> VM8_XOR
VM8 --> VM4
%% 4位层级
CLA4_B[CLA_4bit]
VM2[vedic_mult_2bit]
VM4_XOR(GTECH_XOR2)
VM4 --> CLA4_B
VM4 --> VM4_XOR
VM4 --> VM2
%% 2位层级 (最底层)
VM2_AND(GTECH_AND2)
HA[half_adder]
VM2 --> VM2_AND
VM2 --> HA
HA --> HA_AND(GTECH_AND2)
HA --> HA_XOR(GTECH_XOR2)
%% 样式美化
classDef module fill:#e1f5fe,stroke:#01579b,stroke-width:2px;
classDef gate fill:#f9fbe7,stroke:#827717,stroke-width:1px,rx:5,ry:5;
class Top,TC32,TC64,VM32,VM16,VM8,VM4,VM2,CLA32,CLA16_A,CLA16_B,CLA8_A,CLA8_B,CLA4_A,CLA4_B,HA module;
class GX_Top,TC32_BUF,TC32_NOT,TC64_BUF,TC64_NOT,VM32_XOR,VM16_XOR,VM8_XOR,VM4_XOR,CLA4_AND,CLA4_XOR,VM2_AND,HA_AND,HA_XOR gate;
如图所示,该32位有符号乘法器采用分治策略(Divide and Conquer)。顶层模块 signed_vedic_mult_32bit 实例化了四个 16位 Vedic 乘法器子模块(vedic_mult_16bit),分别计算高位、低位及交叉项的部分积。随后,利用高性能的 32位超前进位加法器(CLA_32bit)对部分积进行多级求和,最终输出64位乘积结果。
好的,我们把复杂的IC设计流程简化成一条清晰的“生产线”。
这是一个从 “代码概念” 到 “物理电路” 的转化过程。
🚀 总流程图 (The Grand Map)
编写代码 (Verilog)
⬇️
逻辑综合 (Design Compiler) 生成门级网表 (Netlist)
⬇️
时序验证 (Modelsim) 确保逻辑对,延迟没问题
⬇️
电路生成 (Virtuoso) 将网表自动转为原理图
⬇️
模拟仿真 (Spectre) 看真实电压波形和延迟
👣 一步步详细拆解
我们要像这就开始第一步。
第一阶段:逻辑设计 (前端)
1. 写代码 (RTL Design)
- 做什么: 打开文本编辑器,用 Verilog 写下
A * B的公式。 - 输入: 大脑
- 输出:
mult32.v(源代码)。
2. 变电路 (Synthesis with DC)
-
做什么: 把你的代码扔进 Design Compiler。告诉它:“用 SMIC 180nm 的工艺,给我造一个最快的乘法器!”
-
发生什么: DC 会把你的
* 号变成几千个具体的AND、XOR门电路。 -
输出:
-
mult32_netlist.v (这是核心文件,全是门电路连接)。 -
mult32.sdf(记录了每个门延迟了多少纳秒)。
-
3. 查逻辑 (Modelsim Verification)
- 做什么: 在 Modelsim 中,加载上面的网表和 SDF 文件。喂给它
10 * -5,看输出是不是-50。 - 目的: 确保 DC 综合出来的电路功能没算错。
第二阶段:电路实现 (后端)
4. 导电路 (Virtuoso Import)
- 做什么: 打开 Virtuoso,使用
File -> Import -> Verilog功能。 - 关键动作: 把
mult32_netlist.v喂给 Virtuoso。 - 结果: 屏幕上自动生成了一张巨大的原理图 (Schematic),里面连好了几千根线。
5. 跑波形 (Spectre Simulation)
- 做什么: 给这张原理图接上“虚拟电源(1.8V)”和“信号发生器”。
- 看什么: 打开 ADE L 跑瞬态仿真。放大波形,看输出信号从
0 变成正确结果需要几纳秒 。