秋招——八股

1. IC 设计流程

(1)确定项目需求

(2)架构/算法设计分析

(3)RTL 设计——(数字前端)

目的:完成由高层次描述到 Verilog HDL 实现的过程(排除 RTL 代码中 CDC(Clock Domain Cross)、Lint 等问题)。
工具:GVim(Syglass
语言:Verilog/VHDL
CDC:跨时钟域检查
LInt:代码潜在问题检查(例如 A+B 的进位溢出)

(4)功能验证

目的:在无延迟的理想情况在,通过大量的仿真,发现电路设计过程中的人为或者非人为引
起的 bug。主要指标是功能覆盖率。
工具:Modelsim、VCS、NC-Verilog、(DVE/Verdi 波形查看器)
语言:System Verilog,基于 UVM 的方法学等。

(5)逻辑综合+DFT——(数字中端)

逻辑综合:
目的:将 RTL 代码映射为与工艺库相关的网表。
工具:DesignCompiler、RTL Compiler。
特点:逻辑综合过程中,是在给定的人为约束条件下进行的,通过这些约束和设定的目标来指导工
具完成工作。所以,逻辑综合过程可以看成一个多目标(频率、面积、功耗)多约束的工程优化问题。
tips:1. 该步骤中,通常会插入 DFT、clock gating 等。
2. 该步骤中通常加入 Memory、各种 IP 等。为了方便移植,注意适当处理这些的接口。
3. 该步骤中也可加入 I/O、PLL 等。
DFT(Design For Test):
目的:为了保证良率,通过在电路中插入扫描链(Scan Chain)的方式,测试筛除掉有缺陷的芯片。(加入 DFT 会增加 20%~30%的面积)
工具:DFT Compiler。

输入文件:
a.RTL 代码;
b.工艺库(.db):由晶圆厂提供;
c.约束(SDC):由逻辑综合工程师和 ASIC design engineers 共同商定。
输出文件:
a.网表:包含了 RTL 中的所有的逻辑信息,除此以外,可能还会有 DFT、clock gating、I/O等;网表主要用于 P&R 等流程;
b.标准延迟文件 SDF:主要包含了网表中所有器件的延迟信息,用于时序仿真;PT 会结合后端工具生成的一个更为精确的 sdf ,所以,通常会用 PT 的 sdf 文件做后仿真。
c.各种报告:timing report、area report、constrain report、clock report、violation report 等,以及工具的 log 文件。

(6)形式验证

目的:RTL 代码和逻辑综合后的网表是否具有一致的功能。(尤其是在后端做 ECO 的时候)
工具:Formality、Conformal

输入文件:RTL 代码、netlist(逻辑综合输出)、约束
输出文件:match 和 verify 报告。

(7)静态时序分析(Pre-STA)

目的:分析设计中所有的路径,确保满足内部时序单元对建立时间和保持时间的要求。
工具:PrimeTime。

输入:spef 文件、网表,标准单元库 db 文件,IP 的 dp 文件
输出:SDF,timing ECO 文件
tips:静态时序分析和形式验证这属于验证范畴。

(8)布局布线——(数字后端)

(9)静态时序分析(Post-STA)

(10)DRC&LVS

生成 GDSII 格式的文件。

2. 建立时间/保持时间

是什么?

建立时间 Tsu:触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的时间。(WORST)
保持时间 Th:触发器在时钟上升沿到来之后,其数据输入端的数据必须保持不变的时间。(BEST)

为什么?

如果不满足建立和保持时间,触发器将进入亚稳态,进入亚稳态后触发器的输出将不稳定,
在 0 和 1 之间变化,可能会使电路发生错误。

怎么做?

1. 建立时间

Tco+TDelay+Tsu+Tslack=Tclk+Tskew, Tslack≥0
Fmax=1/min(Tclk)=1/(Tco+TDelay+Tsu)

建立时间违例的解决办法:
(1)降低时钟频率,即增大时钟周期
(2)再时钟路径上加缓冲器(buffer),让时钟晚到来。
(3)更换具有更小器件延迟的触发器。
(4)组合逻辑优化或插入流水线,缩短关键路径。

2. 保持时间

Tco+TDelay≥Th(Tco+TDelay=Th+Tskew+Tslack, Tslack≥0)

保持时间违例的解决办法:
(1)在数据路径上插 buffer
(2)更换具有更大器件延迟的触发器
(3)优化时钟路径,让时钟更早到来。

3. 亚稳态

是什么?

亚稳态,是因违反建立时间和保持时间而产生的。

为什么?

产生原因:
(1)输入信号是异步信号
(2)时钟偏移/摆动(上升/下降时间)高于容限值。(时钟信号质量不好)
(3)信号在两个不同频率或者相同频率但相位和偏移不同的时钟域下跨时钟域工作。
(4)组合延迟使寄存器的数据输入在亚稳态窗口内发生变化。

怎么办?

解决方法:
(1)降低系统时钟频率
(2)用反应更快的 FF
(3)引入同步机制,防止亚稳态传播(可以采用前面说的加两级触发器)。
异步信号同步化(两级触发器)
采用 FIFO 对跨时钟域数据通信进行缓冲
对复位电路采用异步复位、同步释放处理
(4)改善时钟质量,用边沿变化快速的时钟信号

4. . 同步 FIFO/异步 FIFO

是什么?

同步 FIFO: 读/写时钟为同一个时钟,FIFO 内部所有逻辑都是同步逻辑,常常用于交互数据缓冲
异步 FIFO: 读/写时钟和时钟为异步时钟,FIFO 内部的写逻辑和读逻辑的交互需要异步处理,异步 FIFO 常用于跨时钟域交互

异步 FIFO 有 5 部分组成:
双口 RAM 存储数据
同步读数据指针到写时钟域,判满
同步写数据指针到读时钟域,判空
处理写指针和满信号的逻辑
处理读指针和空信号的逻辑
读写指针同步:使用格雷码进行传输(格雷码相邻两个数值只有一位发生变化))

5. 跨时钟域处理

单 bit 信号

(1)电平检测:通过寄存器打两拍进行同步,也就是所谓的电平同步器。
Question:输入信号必须保持两个接收时钟周期,每次同步完,输入信号要恢复到无效状态。所以,如果是从快到慢,信号很有可能被滤除。
适用于慢时钟域向快时钟域。
(2)边沿检测:在电平同步器的基础上,通过输出端的逻辑组合,可以完成对于信号边沿的提取,识别上升沿,下降沿以及双边沿,并发出相应的脉冲。
Question:比起电平同步器,更适合要求脉冲输出的电路。但同样,输入信号必须保持两个接收时钟周期。
适用于慢时钟域向快时钟域。
(3)脉冲同步:先将原时钟域下的脉冲信号,转化为电平信号(使用异或门),再进行同步,同步完成之后再把新时钟域下的电平信号转化为脉冲信号(边沿检测器的功能)。
Question:输入脉冲的时间间距必须在两个接收时钟周期以上,否则新的脉冲会变宽,就不再是单时钟脉冲了。
适用于快时钟域向慢时钟域。

多 bit 的异步信号

(1)可以采用保持寄存器加握手信号的方法(多数据,控制,地址);
(2)异步 FIFO。

6. 关键路径时序优化

关键路径通常是指同步逻辑电路中,组合逻辑时延最大的路径。
常用的时序优化方法包括 Pipeline、Retiming、逻辑复制、加法/乘法树、关键信号后移、消除优先级等解决。
1. 组合逻辑中插入寄存器(插入流水线)
在延时过长的组合逻辑路径上插入额外的寄存器,这种方法也称为插入流水线,多用于高度流水的设计中,额外插入的寄存器在保持吞吐量不变的情况下改善了设计的时序性能。
Question:会带来部分面积的增加。
2. 寄存器平衡(重定时 Retiming)
在不增加寄存器个数的前提下,通过改变寄存器的位置来优化关键路径。
3. 操作符平衡(加法树、乘法树)
平衡后,树形结构,经历相同的乘法器延时。
4. 消除代码优先级(case 代替 if…else)
本身确实不需要优先级的地方,可以使用 case 代替 if…else,使得顺序执行的语句编程并行执行。如也称为代码结构平坦化技术。
5. 逻辑复制
当某个信号的扇出 fanout 比较大时,会造成该信号到各个目的逻辑节点的路径变得过长,从而成为设计中的关键路径,此时可以通过对该信号进行复制来降低扇出。
tips:高扇出的危害是大大增加了布局布线的难度,这样其扇出的节点也就无法被布局得彼此靠近,所以就导致了布线长度过大的问题。
6. 关键信号后移
关键输入应该在逻辑最后一级提供,其中关键输入为芯片、Slice、或者 LUT 提供的时延最大的输入,比如在 if…else if…链中,将关键信号放在第一级。

7. EDA 开发工具

数字逻辑仿真工具:
synopsys: VCS
mentor: QuestaSim ModelSim
数字逻辑综合工具:
Synopsis: design Compiler (DC)
数字后端设计工具:
1,自动布局布线工具
Cadence: Innovus
Synopsis: IC Compiler
2. 物理验证工具
1, Mentor: Calibre
2, Synopsis: ICV
3, Cadence: PVS/Pegasus

8. 面积/速度问题

面积优化:

1) 资源共享:
主要针对数据通路中耗费逻辑资源较多的模块,通过选择、复用的方式共享使用该模块,达
到减少资源使用、优化面积的目的。
2) 逻辑优化
使用优化后的逻辑进行设计,可以明显减少资源的占用。
状态机的设计要尽可能简洁。if 语句中用单 bit 的标志位代替多 bit 的数据来进行条件判断。设计尽可能简洁,不要弄出冗余赋值。
3) 串行化
将原来耗用资源巨大、单时钟周期内完成的并行执行的逻辑块分割开,提取出相同的逻辑模块(一般为组合逻辑块),在时间上利用该逻辑模块,用多个时钟周期完成相同的功能,其代价是工作速度被大为降低。

速度优化:

1) 流水线设计
流水线(Pipelining)是一种在复杂组合逻辑之间添加寄存器的方法。能显著地提高设计电路的运行速度上限。
2) 寄存器配平 (Register Balancing)
寄存器配平是使较长路径缩短,较短路径加长,使其达到平衡从而提高工作频率的一种技术。
若设计中,若两个组合逻辑块的延时差别过大,进行改进,使总体的工作频率 fmax 提高。
3) 关键路径法
关键路径:指设计中从输入到输出经过的延时最长的逻辑路径。优化关键路径是提高设计工作速度的有效方法。
4) 乒乓操作法
乒乓操作法是 FPGA 开发中的一种数据缓冲优化设计技术,可视作另一种形式的流水线技术。乒乓操作本质是使用 2 倍的硬件资源,通过将数据产生时间和数据使用时间重叠,解决一个数据生产效率低于数据使用效率的问题。是一种拿面积换性能的方法。通过“输入数据流选择单元”和“输出数据流选择单元”按节拍、相互配合的切换,将经过缓冲的数据流“无缝”地送到“数据流运算处理模块。
5) 树形结构法
若要实现 A+B+C+D。首先实现 AB=A+B,CD=C+D,将 AB/CD 锁存一个时钟周期再相加。树形结构法和上面面积优化提到的串行化是相反的。

9. 功耗问题

动态功耗:发生在门开关(或状态翻转)的瞬间。是由于对 电容充电和 电源和地之间短暂电流通路造成的。它正比于开关频率。
静态功耗:总是存在,是由电源和地之间的静态导通电流(或漏电流)引起的。

降低动态功耗:
1、降低内核供电电压。降低供电电压会影响到时序性能。为了弥补这个影响,一般采用流水线(pipelining)和并行(parallelism)设计方法来提高设计性能。当然,这样同时也会增加设计面积。
2、降低电容负载和逻辑开关频率。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值