建议使用浅色背景阅读

硬件加速ASIC设计

准备工作

使用环境

服务器:

DELL PowerEdge R740

2 CPUs @ 3.10GHz, 40 cores with 512GB of memory

操作系统:

Red Hat Enterprise Linux 7.9

使用工具

Candence Virtuoso IC618

Synopsys Design Compiler

Candence Innovus 15.2

 

设计流程

设计指标及完成情况

设计任务

设计一电路模块,实现函数

y=adcos(2πc211)(a+b)210

其中,

信号类型
clk250MHz时钟信号
a11位无符号整数
b11位无符号整数
c11位无符号整数
d10位无符号整数
e1位(异步输入)
y12位有符号数(二进制补码)

要求
  1. 输入端口有且仅有 a[10:0],b[10:0],c[10:0],e,clk,输出端口为 y[11:0];

  2. y 的误差范围为±1/211

  3. 时钟 clk 频率为 250MHz,且 clock jitter 为 200ps, a,b,c 的数据变化速率与 clk 同步,d[9:0]作为可编程系数通过异步输入端口 e 写入(只写一次);

  4. e 同步于另一时钟 clkb,与 clk 异步,Tclkb=3ns;

  5. 在满足条件的情况下,优化 latency;

  6. 在满足条件的情况下,优化功耗。

 

指标完成情况概述

Verilog 仿真、前仿真、门极仿真、后仿真中,在测试条件下 y 值均正确输出,因此达到设计指标。

测试时,在 392ns 输入信号,在 426ns 时输出结果,由于工作周期内时钟第一个上升沿在 394ns,因此认为模块的处理时间为 32.0264ns,即 4 个时钟周期。

功耗为 63.0833 mW。

经过测试,LVS 和 DRC 均通过。

由于在除法器设计中使用了查找表格式,面积与功耗均较表现良好,且满足要求时序。

 

核心模块Verilog设计

指标分析及方案预设

y=adcos(2πc211)(a+b)210 拆分为 a(a+b)dcos(2πc211) 两部分,再将这两部分相乘得到最终结果。其中a(a+b) 会进行1次加法、1次除法与1次乘法运算,dcos(2πc211)会进行1次 cosin 运算与1次乘法运算。总体使用了 8 级流水线进行运算,具体结构如下图所示。

硬件加速ASIC设计

代码编写

(a+b) 计算

通过要输入 a[10:0]、b[10:0]来计算出 (a+b) 的值。经过验算,为防止溢出,将输出设置为 12 位。

 

1/(a+b) 计算

将上文计算出的 (a+b) 通过查除法表的形式得到1/(a+b),经过验算,为防止溢出与保证精度,将输出设置为 21 位。

 

cos(2πc211)计算

可以看作是将0~2π的cosin值细分为2048份,而c决定取的份数。我们可以通过查cosin表的形式得到cos的值,经过验算,为防止溢出与保证精度,将输出设置为13位。

 

d异步输入

指标要求 d[9:0] 必须由 e[0:0] 以串行异步输入的形式载入数据,并且 e 参考 Tclk2 为 3ns, d 参考 Tclk 为 4ns,同步器依赖 e 的上升沿进行触发(因此第一位数需要为 1),以 clk 上升沿 为触发将 e 从后往前存入 delay [2:0] 中,再以 delay 的最高位上升沿为触发,将此时的 e 按位 累加到 d[9:0] 中,实现两个时钟系统的衔接。

testbench端,信号异步输入:

 

function端,信号接收与处理:

 

乘法计算

乘法的原理为移位相加,这里为了保证乘法运算中的延迟能符合 250MHz 要求,将每个乘数均拆分为 3 小段,单独相乘、积相加,以此来降低高位数乘法的运算时延。下列示例代码就将乘数 reg_div_result[20:0] 均分为 3 段,将乘数 reg_a_stage_1[10:0]拆分为两 段。彼此两两相乘后对齐相加,得到积 tol_div_a[31:0]。

 

Testbench

 

RTL行为仿真

Cadence AMS配置

 

Design Compiler综合

综合优化脚本
时序约束分析
功耗与面积分析

 

门级网表仿真

Cadence AMS配置

 

Innovus自动布局布线

版图综合脚本
时钟树综合与优化
一些时序debug手段

 

Calibre版图验证

LVS与修正
DRC与修正

 

版图综合后仿真

时序检查与分析