Skip to content
数字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​ 变成 正确结果 需要几纳秒 。