数字IC设计项目高性能FFT芯片设计(前后端全流程)
我的学记|刘航宇的博客

数字IC设计项目高性能FFT芯片设计(前后端全流程)

刘航宇
1天前发布 /正在检测是否收录...
电子信息类专业“一站式”考研-简历-就业宝藏分享 电子信息类专业“一站式”考研-简历-就业宝藏分享
本项目为数字集成电路设计基于 SMIC 0.18 μm 工艺,完成了 16 点基-4 FFT 算法 的芯片级前后端全流程设计,涵盖 RTL 建模、功能仿真、逻辑综合(DC)与物理实现(ICC)。最终芯片工作频率达到 135 MHz,面积 4.6953 mm²,单次 FFT 能耗 5.25×10⁻⁶ mJ。文章末尾有芯片设计源码与项目其他文件,包含:前端RTL源码、中端DC源码脚本、后端ICC源码脚本、项目报告、参考文件等。


一、设计规范简介

1.1 功能描述

本次课程设计的核心目标是实现一个 高能效的快速傅里叶变换(FFT)电路,具体规格如下:

  • 算法:16 点基-4 FFT 算法
  • 输入数据:实部与虚部均为 17 bit(1 bit 符号位 + 8 bit 整数位 + 8 bit 小数位)
  • 旋转因子:实部与虚部均为 8 bit(1 bit 符号位 + 7 bit 数据位)
  • 数据格式:定点数表示,如图 1 所示
图 1 16 点基-4 FFT 蝶形运算原理图
pasted_1785032408236_t4qsdl.png
图 2 数据表示方式(17 bit 输入 / 8 bit 旋转因子)
运算数据的实部虚部均为17 bit
而旋转因子的实部与虚部为8 bit
pm2xSTf.png

1.2 性能指标

评价指标具体数值
完成一次 16 点 FFT 运算的能耗5.25118208 × 10⁻⁶ mJ
单位面积功耗时间 FFT 操作次数4.1987688 × 10⁴ 次/(mm²·mW·s)
工作频率135.135135 MHz
面积开销4.695300 mm²

能耗计算

单次 FFT 能耗 = 每秒能耗 / 每秒 FFT 运算次数
              = 44.3512 mW/s / (1 / (16 × 7.4 ns))
              = 5.251182 × 10⁻⁶ mJ

单位面积功耗时间操作次数

单位面积功耗时间 FFT 操作次数 = 每秒 16 点 FFT 运算次数 / (面积 × 功耗 × 时间)
                              = (1 / (16 × 7.4 ns)) / (4.535456 mm² × 44.3512 mW × 1 s)
                              = 4.1987688 × 10⁴ 次/(mm²·mW·s)

二、电路性能分析与结构设计

2.1 性能估算

面积开销

芯片共有 90 个管脚,布局尺寸计算如下:

  • :76 μm × 23 + 210 μm × 2 = 2168 μm = 2.168 mm
  • :76 μm × 22 + 210 μm × 2 = 2092 μm = 2.092 mm
  • 总面积:2.168 mm × 2.092 mm = 4.535456 mm²
    pasted_1785034131111_9ws1vf.png

    运算性能

每秒可完成 FFT 运算次数 = 1 s / (16 × 7.4 ns) = 8.445946 × 10⁶ 次

吞吐率

芯片采用 串行输入输出 方式,每 16 个周期完成一次信号输入,从输入第 13 个信号时开始蝶形运算,经过 8 个周期完成运算,再经过 16 个周期输出:

  • 单次运算周期:13 + 8 + 16 = 37 个周期
  • 单次运算吞吐率:1 / (37 × 7.4 ns) = 3.65 × 10⁶ 次/秒

由于采用了 三级流水线 架构,在连续运算足够多的情况下:

  • 流水运算周期:16 个周期(每周期输出一个结果)
  • 流水吞吐率:1 / (16 × 7.4 ns) = 8.45 × 10⁶ 次/秒

带宽

存储器时钟频率和数据输入速度保持恒定,峰值带宽与平均带宽相同:

带宽 = 17 bit × 2(实部+虚部) × 135.135135 MHz = 4.595 Gbps

工作频率

工作频率 = 1 / 时钟周期 = 1 / 7.4 ns = 135.135135 MHz

2.2 硬件结构图

图 3 电路硬件结构图
pm2x9k8.png
整个电路分为以下模块:
模块名称文件名模块类型功能描述
控制模块ctrl时序逻辑控制电路中各个模块的运行时序
串转并模块s_p时序逻辑将串行输入的数据整合为并行并改变顺序
复选器mux时序逻辑按照 FFT 级数选择进入运算模块的数据
中转存储模块reg1时序逻辑存储并转发两级 FFT 运算间的运算数据
运算模块(蝶形运算)butterfly组合逻辑进行四输入蝶形运算
乘法器multi16组合逻辑计算数据与旋转因子间的乘法
并转串模块p_s时序逻辑将并行输出的数据分解为串行并倒位序

2.3 流水线时序设计

时钟周期1-1617-2122-2930-37
input第 N 组输入数据到 REG1第 N+1 组输入数据到 REG1
calculate两级蝶形运算两级蝶形运算
output第 N-1 组从 REG3 输出第 N 组从 REG3 输出

2.4 时序过程

pasted_1785033901140_9815cd.png

三、RTL 模型与仿真验证

3.1 验证方法

FFT 芯片的验证包括两部分:

  1. 输出结果验证:通过 testbench 输入数据,将仿真输出与理论正确结果对比
  2. 流水线验证:一次输入多组数据,观察电路是否能流水式执行

3.2 验证平台搭建

ModelSim SE-64 10.1c 中,将所有模块的 Verilog 代码通过 top 文件连接,撰写 testbench 从指定文本文件读入输入数据并进行计算。

3.3 仿真验证结果

3.3.1 功能点验证

取三组输入作为测试向量,验证输出结果正确性与流水线功能。

图 4 测试波形(流水线时序验证)
pmR29yj.png
从波形可见,p_s 模块数据按预期工作:每周期进入 4 个数据,逐个输出,上一组数据输出完毕后下一周期立即输出下一组,流水式执行衔接良好

3.3.2 第一组数据验证对比

X[k]理论输出(实部)实际输出(实部)理论输出(虚部)实际输出(虚部)
X[0]0_00010010_000000000_00010001_110010000_00010010_000000000_00010001_10111000
X[1]0_00000101_011011100_00000101_010111101_11110000_101110101_11110000_11100101
X[2]1_11110110_000000001_11110110_001001100_00000100_001111100_00000100_00101101
X[3]0_00000010_000011010_00000010_000000110_00001010_010111000_00001010_00111100
X[4]0_00001000_000000000_00000111_111011001_11110110_000000001_11110110_00101000
X[5]1_11110110_001100001_11110111_010011010_00000011_100100000_00000011_10000100
X[6]0_00000011_001010110_00000011_000111000_00000010_111000000_00000001_01100101
X[7]0_00000000_011011010_00000000_011101000_00000010_111000000_00000010_11100001
X[8]0_00000010_000000000_00000010_000010001_11111110_000000001_11111110_00001000
X[9]0_00000101_111000010_00000101_110100101_11111111_111101011_11111111_11110111
X[10]1_11110110_000000001_11110110_001001101_11111011_110000011_11111011_11010001
X[11]0_00001001_010000100_00001001_001001110_00000100_111100110_00000100_11100010
X[12]1_11111100_000000001_11111100_000111001_11111010_000000001_11111010_00011000
X[13]1_11111101_011111111_11111101_100010110_00000011_101111110_00000011_10110000
X[14]0_00001000_110101000_00001000_101100001_11111110_100101011_11111110_10011101
X[15]1_11110100_010000101_11110100_011010101_11110101_110011111_11110101_11110001
图 5 Transcript 输出
pasted_1785032904139_lcns0m.png
通过对比可知,实际输出与理论输出的实部与虚部均十分接近,在误差范围内可认为相等(存在数据位宽限制等不可避免的截断误差)。第二组、第三组数据经同样验证,结果一致。

3.3.3 测试向量

第一组测试向量:

0000000010000000000000000000000000
0000000000000000000000000000000000
0000000010000000000000000000000000
0000000000000000000000000000000000
0000000110000000000000000000000000
0000000100000000000000010000000000
0000000010000000000000100000000000
0000000100000000000000001000000000
0000000010000000000000000000000000
0000000100000000000000010000000000
0000000010000000000000000000000000
0000000000000000000000000000000000
0000000010000000000000000000000000
0000000010000000000000000000000000
0000000010000000000000000000000000
0000000010000000000000000000000000

第二组测试向量: 全 1 序列(16 个相同数据)

第三组测试向量: 仅第一个数据为 1,其余为 0

3.3.4 仿真性能统计

  • ✅ 成功实现 16 点 FFT 算法,输出结果与理论值一致
  • ✅ 每周期输入一个数据,每周期输出一个数据
  • ✅ 成功实现流水式运行
  • ✅ 多次测试输出结果稳定,未出现错误

四、逻辑综合策略与结果

4.1 逻辑综合流程

使用 Synopsys Design Compiler (DC) 进行逻辑综合,主要流程:

指定库文件 → 读入设计(转GTECH) → 定义环境 → 设计约束 → 编译策略 → 综合优化 → 存储网表

pasted_1785034037920_i4ehar.png

参数设置

参数数值
工艺SMIC 0.18 μm
时钟周期7.4 ns
输入输出延迟3.7 ns
工作电压1.62 V
运行温度125 ℃
面积约束0(无约束)
互连模型balanced_tree
时钟延时4.3 ns
不确定时钟0.5 ns
过渡时钟0.2 ns
端口最大过渡3 ns

4.2 逻辑综合结果

时序结果

项目时间 (ns)
clock clk (rise edge)7.40
clock network delay (ideal)4.30
clock uncertainty-0.50
clk slack (MET)0.00

7.4 ns 时钟符合设计要求,换算工作频率约为 135 MHz

面积结果

项目数量项目面积 (μm²)
Ports70Combinational area1,483,546.41
Nets140Non-combinational area153,599.85
Cells71Net Interconnect area2,089,790.57
References3Total Area3,726,936.83

功耗结果

项目数值
Global Operating Voltage1.62 V
Cell Internal Power756.0848 mW
Net Switching Power375.6310 mW
Total Dynamic Power1.1317 W
Cell Leakage Power28.5281 μW

资源使用

项目数量
Hierarchical Cell85 个
Hierarchical Port5,373 个
Leaf Cell16,473 个
Buf/Inv Cell2,815 个
Total Number of Nets18,037 个

设计违例

电路逻辑综合结果中无设计违例


五、物理实现与结果分析

5.1 ICC 设计步骤

使用 Synopsys IC Compiler (ICC) 进行物理实现,分为四个阶段:
pasted_1785034197720_i2g0so.png

5.1.1 数据设定 (Data Setup)

读入逻辑和时序库文件、SDC 约束文件、门级网表,以及 IO 物理库文件、TF 工艺文件、TLU+ 文件等物理数据。

5.1.2 布局规划 (Floorplanning)

  • 定义所有管脚(输入输出、时钟、初始信号)及电源组
  • 添加电源环,生成基本布局规划
  • 尝试标准单元虚拟布局(create_fp_placement -timing_driven
  • 分析拥塞(面积利用率设置不高,拥塞问题较少)
  • 形成电源网络,分析时序,调整电源管脚位置使电压降 < 10%

5.1.3 布局 (Placement)

  • 遵循 NDR 规则,特殊信号线(如 clock)加宽、加大间距
  • 执行 place_opt 进行布局
  • 布局优化(解决建立时间违例)
  • 拥塞分析与优化

5.1.4 时钟树综合 (CTS)

  • 生成时钟网络,加入 buffer 解决负载和 slew time 问题
  • 执行 clock_opt
  • 单时钟同步设计,CTS 工作较简单

5.1.5 布线 (Routing)

  • 全局布线 → 轨道分配 → DRC 修复
  • 先对时钟布线(route_group -all_clock_nets
  • 解决 verify_lvs 报错(查阅资料后确认无实质影响)
  • 解决虚拟机内存不足导致的闪退问题(清理空间后完成)

5.2 ICC 设计结果

5.2.1 芯片概貌

图 6 芯片概貌
pasted_1785032971553_0fu3op.png
  • 顶部和底部各 22 个管脚
  • 左边和右边各 23 个管脚
  • 10 组电源管脚:4 组为管脚供电(分列四周),6 组为内核供电(上下各 1 组,左右各 2 组)

5.2.2 时序结果

阶段input (ns)output (ns)clk (ns)
data_setup0.48
data_setup_zic1.430.481.19
floorplan0.95-1.02-1.39
placement1.010.590.19
cts_only_psyn1.260.820.62
cts_only_cts1.260.830.36
route_initial1.350.880.65
route_final1.350.850.01

5.2.3 面积结果

图 7 芯片面积测量
pasted_1785033659880_dlug93.png
| 项目 | 面积或长度 |
Combinational Area1,477,888.21 μm²
Non-combinational Area154,248.50 μm²
Net Area0.00 μm²
Net X Length620,954.62 nm
Net Y Length666,869.44 nm
Cell Area1,632,136.71 μm²
Design Area1,632,136.71 μm²
Net Length1,287,824.00 nm
Total Area4,695,300.72 μm²

芯片尺寸:2092.38 μm × 2244.00 μm

5.2.4 功耗结果

项目数值
Global Operating Voltage1.62 V
Cell Internal Power33.6445 mW
Net Switching Power12.7067 mW
Total Dynamic Power44.3512 mW
Cell Leakage Power26.0446 μW

5.2.5 芯片压降

图 8 芯片压降分析
pasted_1785033682302_ytnfda.png
  • 工作电压:1.62 V
  • 最大压降:129.6 mV
  • 压降比例:129.6 / 1620 = 8% < 10%,符合设计要求

5.2.6 拥塞分析

图 9 拥塞分析(Placement / Detail Route / Track Assignment / Global Route)
pasted_1785033720429_zl0o70.png
由于芯片面积较大,面积利用率设置不高,拥塞问题较少,顺利解决。

5.2.7 资源使用

项目数量或利用率
Module Cells16,240 个
Pins91,614 个
IO Pad Cells90 个
IO Pins70 个
Nets18,151 个
Average Pins Per Net3.0535 个
Total Std Cell Area514,936.70 μm²
Total Pad Cell Area1,612,800.00 μm²
Core Size1612.38 × 1764.00 = 2,844,238.32 μm²
Pad Core Size1672.38 × 1824.00 = 3,050,421.12 μm²
Chip Size2092.38 × 2244.00 = 4,695,300.72 μm²
Std cells utilization18.10%
Cell/Core Ratio18.10%
Cell/Chip Ratio45.32%
Number of Cell Rows350
图 10 单元密度分布
pasted_1785033741857_8nbcxl.png

5.2.8 设计违例

最终设计无设计违例


六、设计总结

6.1 遇到的主要问题

  1. 管脚数量过多,芯片面积过大
  2. 电路计算结果不正确
  3. 时序模块数据传输不同步,拖慢运算速度
  4. 芯片工作频率过低
  5. 芯片电压降问题

6.2 相应的解决思路

问题解决方案
管脚过多、面积过大采用串并转换减少管脚;改用基-4 FFT 算法复用蝶形运算模块减小面积
计算结果不正确手动计算关键中间数据,逐一比对各模块输入输出,逐个修复 bug
数据传输不同步在时序电路传输标志信号的同时,用组合逻辑电路传输数据,避免同步问题
工作频率过低重写乘法器:将乘法运算改为组合逻辑状态机判断旋转因子,采用移位方法完成乘法,频率从 82 MHz 提升至 135 MHz
电压降问题增加供电管脚数量并调整位置,最大压降控制在 8%(何卫锋老师指导)

6.3 关键优化点

乘法器优化(频率提升核心)

优化前:

assign mul = in_17bit[16:0] * in_8bit[7:0];  // 直接乘法,延迟大

优化后:

always @ (in_17bit or in_8bit) begin
    case (in_8bit)
        8'b00000000: neg_mul = 25'b0;
        8'b01111111: neg_mul = (in_17bit << 7);
        // ... 其他旋转因子用移位实现
    endcase
end

通过 set_flatten truecompile –map high 策略,将工作频率从 82 MHz 大幅提升至 135 MHz


七、参考资料

[1] FFT 算法相关教材与文献
[2] Synopsys Design Compiler 用户手册
[3] Synopsys IC Compiler 用户手册
[4] SMIC 0.18 μm 工艺设计套件文档


项目成果总结: 本项目完整实践了数字 IC 设计的前后端全流程,从 RTL 编码、功能仿真、逻辑综合到物理实现,成功将 16 点基-4 FFT 算法芯片化。通过架构优化(串并转换、流水线)、算法优化(基-4 复用)、电路优化(组合逻辑移位乘法器),在 SMIC 0.18 μm 工艺下实现了 135 MHz 工作频率、4.70 mm² 面积、5.25×10⁻⁶ mJ 单次运算能耗的优异性能指标。

八、项目工程下载(源码、文档和参考文献)

包含:前端RTL源码、中端DC源码脚本、后端ICC源码脚本、项目报告、参考文件等

支付宝支付
价格: 10.00 元
温馨提示:免登录付款后7天内可重复阅读隐藏内容,登录用户付款后可永久阅读隐藏的内容。付费后如无反应,刷新网页即可阅读。 付费可读
© 版权声明
THE END
喜欢就支持一下吧
点赞 4 分享 赞赏
评论 抢沙发
取消