【秋招小结】IC基础

前言

秋招以来的各种零碎笔记合集,拖延症拖了好久才开始整理实属不该。
整理的过程中又发现了一个宝藏博主IC_learner写的很全面~

一、MOSFET基础

MOSFET(Metal Oxide Semiconductor Field Effect Transistor-金属氧化物半导体场效应晶体管)
n型mosfet

1、工作原理

增强型:
Vgs≤0,源漏是断开的
Vgs>0,栅下形成耗尽区
Vgs>Vth,形成强反型层,导通

2、工作模式

耗尽型:栅极无电压时导通。
增强型:栅极无电压时不导通。

3、工作区

  • 截止/夹断区域。Vgs<Vth
  • 线性/欧姆区域。Vgs>Vth且Vds<Vgs-Vth,漏极至源极两端的电流随漏极至源极路径两端电压的增加而增强。
  • 饱和区域。Vgs>Vth且Vds>Vgs-Vth,当漏极到源极端子之间的电压增加超过夹断电压值时,漏极至源极电流值将保持恒定。
    在这里插入图片描述

4、特性

  • 沟长调制效应:增加Vds使漏结耗尽区加大,缩短有效沟道长度,长度小导致电流增加。
  • 速度饱和:短沟器件,沿沟道的电场达到临界值时,载流子速度由于散射效应趋于饱和。
  • 亚阈值电流:Vgs<Vth,弱反型导通。
  • 衬底偏置:Vsb对阈值有影响。

5、静态互补CMOS逻辑门

反相器、与非门、或非门:
门级
要点:1)写成XX非形式,2)先画下拉网络,3)上拉网络串并关系和下拉是相反的,4)如果有多种排列方式,靠近输出的mos管越少越好

6、CMOS反相器电平传输特性

CMOS反相器电平传输特性
Vout=Vin的点叫做反相器的阈值电压

二、锁存器和触发器

1、锁存器 Latch

电平触发
优点:面积比FF小,速度比FF快
缺点:电平触发有毛刺,静态时序分析复杂
锁存器

  • 或非SR锁存器:
    约束SR=0
    置位,S=1,R=0,Q=1
    复位,R=1,S=0,Q=0
    保持,S=0,R=0,Q=Q
  • 与非SR锁存器:
    低电平有效
    置位,S’=0,R’=1,Q=1
    复位,R’=0,S’=1,Q=0
    保持,S’=1,R’=1,Q=Q

2、触发寄存器 Flip-flop

边沿触发
优点:不易受毛刺影响,静态时序分析简答
缺点:面积比latch大,消耗的门电路比latch多
寄存器
主从正沿触发:主级是低电平触发的锁存器,从级是高电平触发的锁存器

三、建立时间和保持时间

建立时间(Setup Time):时钟触发事件来临之,数据需要保持稳定的最小时间,以便数据能够被时钟正确的采样。
保持时间(Hold Time):时钟触发事件来临之,数据需要保持稳定的最小时间,以便数据能够被电路准确的传输。
时钟抖动(Clock Jitter):时钟相对于理想时钟沿产生的不随时间积累的、时而超前、时而滞后的抖动。周期变化
时钟偏斜(Clock Skew):同一时钟域内的时钟信号到达数字电路各个部分所用时间的差异。相位变化

1、门级

寄存器
建立时间:D在上升沿到来前需要传播过I1,T1,I3和I2
传播时间:T3和I6(I4和I2同时)
保持时间:D要保持至clk到T1且完成关断

2、模块级

无脑记:
静态时序分析
建立时间:第二个寄存器在第二个时钟周期采样的时间,要大于,上一个寄存器上一个时钟周期输出数据的时间+到达第二个寄存器的输入端并且满足建立时间,才能有效采样。
保持时间:同一个时钟周期,两个寄存器分别经过时钟延迟后都开始采样了,第二个寄存器采样后数据还有个保持时间,在这之前第一个寄存器的输出不能跑太快直接冲到第二个寄存器的输入端,才不会导致第二个寄存器数据没处理完就被覆盖了。

有脑记:
建立时间和保持时间
时钟偏斜和抖动的影响
求时间容限Tslack:就是加上这个Tslack上面不等式变等式了

  • 解决建立时间违例:
    1、增加Tclk
    2、减小Tdp:流水线切割;换大驱动cell;换底阈值cell
    3、Tskew>0(可能导致保持时间有问题)
  • 解决保持时间违例:
    1、增加Tdp:插入buffer;插delay cell
    2、减小Tskew(为负更好)
    3、插入低电平有效的锁存器,高电平期间输出保持不变,人为推迟半个周期

升温,延迟增大,建立时间可能有问题
升压,延迟减小,保持时间可能有问题

四、亚稳态(时序逻辑)

1、亚稳态

亚稳态:触发器无法在某个规定时间段内达到一个可以确定的状态。
危害:导致输出不正确
防止:
1、对异步信号进行同步处理
2、用反应速度更快的触发器
3、降低时钟评论
4、避免变化过快过频繁的信号进行跨时钟域(CDC)

亚稳态概率 可以看作是 (建立时间+保持时间)/时钟周期
寄存器打两拍原因:概率x概率,概率很小了,三拍虽然更保险但浪费时间和面积

异步时钟:没有固定相位关系
同步时钟:有固定相位关系

时钟约束分组
两个有分频关系的同源时钟,可以认为是同步时钟域,也可以认为是异步时钟域
如果认为是异步时钟域,放在不同的clk group,clk domian之间需要异步处理,但不需要分析静态时序;
如果认为是同步时钟域,可以做异步处理也可以不做异步处理。做异步处理之后相应的时序路径设为falsePath可以不去分析sta。不做异步需要下SDC并由后端保证时序(调相位,设multicycle等)。之所以能作为同步时钟域是因为无论整数分频还是分数分频,同源时钟的相位都是固定的在时序处理时就可以固定调相位。
异步时钟只能划分到不同的group,异步时钟域之间的信号不做静态时序分析

异步时序设计:指的是在设计中有两个或以上的时钟,且时钟之间是同频不同相或不同频率的关系。
异步时序逻辑电路

2、CDC跨时钟域

2.1 单比特

采样定理:只要采样频率大于等于有效信号最高频率的两倍,采样值就可以包含原始信号的所有信息。

理解:无论快采慢还是慢采快,只要信号在源时钟域持续时间满足目标时钟域的2倍(或三个目标时钟域时钟边沿,或一个目标时钟域时钟周期+保持时间,或1.5个目标时钟域,言之有理即可),就能被目标时钟域采样,触发器打两拍就能同步。

(1) 电平同步:两级触发器同步
电平同步
(2) 边沿同步:两级触发器同步,若要检测跳变沿,再加一级触发器
边沿同步
(3) 脉冲同步:利用第二个脉冲做信号延长。两个脉冲信号之间的时间间隔需要大于等于两个目标时钟域的时钟周期才能被采样
脉冲同步器
(4) 握手法(结绳法):利用反馈信号做信号延长。将A时钟域要传输的信号打一拍送到B域中进行双reg同步,同步之后的信号再反馈回A中,A中再进行双reg同步,当A域中反馈同步信号变为高时才将被采信号拉低。
效率不高,脉冲之间时间间隔要求更大,如果只有一个脉冲可以用这种。
握手法

2.2 多比特

1)逻辑优化,合并多个信号成单比特传输
2)使用enable信号脉冲握手法:检测到enable信号就说明多bit数据也同步过来了
3)异步FIFO

格雷码:每次只改变一位(减少亚稳态),必须计数到2^n才行,数据需要递增或递减(地址满足这个条件)

格雷码转二进制:
b[n] = g[n]
b[i] = g[i] ^ b[i+1]

二进制转格雷码:
gray_value=binary_value^(binary_value>>1)

打两拍把读指针(格雷码)传写时钟域(写满判断)
打两拍把写指针(格雷码)传读时钟域(读空判断)

格雷码空满判断:
全同为空
最高位和次高位都不同,其余位同,为满

二进制空满判断:
全同为空
最高位不同,其余位同,为满

理论上异步FIFO深度为2^n,但是2n深度也可以,参考任意偶数长度Gray码序列及其在异步FIFO设计中的应用

经典题型:FIFO深度计算
核心思想:
1、找出最大写速率和最小读速率,背靠背(连续两次burst数据写入)是读写最坏情况。
2、以最大写速率写入数据所花的时间里,能以最小读速率读出多少数据,计算这段时间内有多少个数据没有被读走。
注意在允许的最大时间长度内写入数据量是否小于等于读出数据量,否则数据越积越多,无解。
存在空满标志位判断延迟,实际使用需要预留余量。

3、复位

同步复位:指复位信号只有在时钟有效沿到来时,才能有效。
优点:(1)同步复位有利于基于周期机制的仿真器进行仿真。(2)使用同步复位可设计100%的同步时序电路,有利于时序分析,其综合结果的频率较高。(3)同步复位仅在时钟的有效沿生效,可以滤除高于时钟频率的复位毛刺。
缺点:(1)复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位任务。(2)由于大多数的逻辑器件的目标库内的 DFF 都只有异步复位端口,所以,倘若采用同步复位的话,综合器就会在寄存器的数据输入端口插入组合逻辑,这样就会一方面额外增加FPGA内部的逻辑资源,另一方面也增加了相应的组合逻辑门时延。

always @ (posedge clk) begin
	if (~rst_n)
		...
end

异步复位:无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。
优点:(1)大多数目标器件库的dff都有异步复位端口,因此采用异步复位可以节省资源。(2)设计相对简单。(3)异步复位信号识别方便,而且可以很方便的使用FPGA的全局复位端口GSR。
缺点:(1)在复位信号释放(release)的时候容易出现问题。具体就是说:倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态,从而导致亚稳态。(2)复位信号容易受到毛刺的影响。
注意:如果使用了异步复位,在时序约束时要将其约束为Falth_path,否则时序分析工具会得出错误的分析

always @ (posedge clk or negedge rst_n) begin
	if (~rst_n)
		...
end

异步复位同步释放

always @ (posedge clk or negedge rst_n) begin
	if (!rst_n) begin
		rst_n_reg_a <= 1'b0;
		rst_n_reg_b <= 1'b0;
	end
	else begin
		rst_n_reg_a <= 1'b1;
		rst_n_reg_b <= rst_n_reg_a;
	end
end
        
assign rst_n_sync = rst_n_reg_b;
        
always @ (posedge clk or negedge rst_n_sync) begin
	if(!rst_n_sync)
		data_out <= 1'b0;
	else
		data_out <= data_in;
end

异步复位同步释放
复位恢复时间(recovery time):即由复位状态恢复到非复位状态时,在下一个时钟效沿来之前,复位信号要提前保持为无效的时间,对应与数据的建立时间。
复位恢复时间

复位解除时间(removal time):即由非复位状态进入复位状态时,在有效时钟沿来临之后复位信号还需要保持的时间为复位解除时间,对应与数据的保持时间。

复位解除时间

4、多时钟切换

纯组合逻辑的时钟切换,电平触发,产生毛刺。
纯组合逻辑的时钟切换
思路:在两者都是低电平的时候进行切换
使用下降沿触发的寄存器
负边沿触发的寄存器
要求两个时钟源成倍数的关系,原因:当select不满足建立时间保持时间的时候,寄存器产生亚稳态,如果两个时钟是倍数关系,有一个周期大的会覆盖周期小的,等到下一个时钟,select信号稳定了在切换就好了
异步时钟切换:两个上升沿触发器+两个下降沿触发器
异步时钟切换
两个上升沿触发器作用:把select缓存同步一拍,减少亚稳态。

五、竞争冒险(组合逻辑)

1、竞争:在组合逻辑电路中,某个输入变量通过两条或两条以上的途径传输到输出端,由于每条途径延迟时间不同,到达输出门的时间就有先有后,这种现象称为竞争。
2、冒险:多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑输出有先有后,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号称为“毛刺”。如果一个组合逻辑电路中有“毛刺”出现,就说明该电路存在冒险。
3、竞争冒险产生的原因:由于延迟时间的存在,当一个输入信号经过多条路径传送后又重新会合到某个门上,由于不同路径上门的级数不同,或者门电路延迟时间的差异,导致到达汇合点的时间有先有后,从而产生瞬间的错误输出。。
4、判断条件
如果布尔式中有相反的信号则可能产生竞争和冒险现象A + !A,A!A
5、消除方法
1)从根源上解决问题:竞争和冒险产生的根本原因是由于,同一时刻可能有多个信号发生变化。
a. 保证同一时刻只允许单个输入变量发生变化,即可避免产生毛刺。比如对数据进行格雷码编码,即可解决这个问题。
b. 通过对输出结果采样,当输出保持稳定时再将结果输出给后续模块。
c.添加布尔式的消除项
2)避免竞争冒险引起的毛刺对后续电路造成影响
a. 在毛刺输入到下一个模块之前,通过滤波电路将毛刺滤除。毛刺一般是非常窄的脉冲,可以在输出端接一个几百微法的电容将其滤除掉。
b. 在下一级模块中,对输入信号进行采样,当信号保持稳定后,再进行操作。

六、低功耗

1、功耗的构成

按类型分
(1)动态功耗
a.开关功耗(翻转功耗)
在数字CMOS电路中,对负载电容进行充放电时消耗的功耗。与供电电压、负载电容大小、翻转频率有关。
b.短路功耗(内部功耗)
短路功耗是因为在输入信号进行翻转时,信号的翻转不可能瞬时完成,因此PMOS和NMOS不可能总是一个截止另外一个导通,总有那么一段时间是使PMOS和NMOS同时导通,那么从电源VDD到地VSS之间就有了通路,就形成了短路电流。短路功耗相比翻转功耗来说小很多,一般忽略。
(2)静态功耗
在CMOS电路中,静态功耗主要是漏电流引起的功耗,一般情况下,漏电流主要是指栅极泄漏电流和亚阈值电流。减少静态功耗的方法就是减小VDD和漏电流。
(a)栅极泄漏电流:在栅极上加信号后(即栅压),从栅到衬底之间存在电容,因此在栅衬之间就会存在有电流,由此就会存在功耗。工艺中通过选择合适厚度的介质将栅泄漏电流限制到一个可接受的水平上。
(b)亚阈值泄漏电流:使栅极电压低于导通阈值,仍会产生从FET漏极到源极的泄漏电流。此电流称为亚阈值泄漏电流。在较狭窄的晶体管中,漏极和源极距离较近的情况下会产生亚阈值泄漏电流。晶体管越窄,泄漏电流越大。要降低亚阈值电流,可以使用高阈值的器件,还可以通过衬底偏置进行增加阈值电压。
(3)浪涌功耗
浪涌功耗是浪涌电流引起的功耗。浪涌电流是指开机或者唤醒的时候,器件流过的最大电流,因此浪涌电流也称为启动电流。

按结构分
SOC里的功耗大户:时钟树、CPU\GPU处理器、存储器,此外还有其他逻辑和IP核功耗、输入输出pad功耗

2、低功耗的目的

(1)提高电池供电的电子产品的使用时间
(2)提高设备的可靠性(发热问题)
(3)降低成本(封装散热成本)

3、低功耗设计

详览低功耗设计入门(三)——系统与架构级低功耗设计

3.1 系统架构级

(1)多电压设计技术(Multi-VDD)

多电压设计技术有三种方式:

  • 各电压区域有固定的电压
  • 各电压区域具有固定的多个电压,由软件决定选择哪一个电压
  • 自适应的方式,各电压域具有可变的,由软件决定选择哪一个电压

(2)软/硬件协同设计

①划分功能的软硬件实现
②动态电压频率调节DVFS技术
③低功耗软件(操作系统)的动态功耗管理

(3)系统时钟分配
(4)算法与IP选择
(5)其他,如异步设计、数据缓存等

3.2 RTL级

(1)门控时钟(CG)

锁存门控:电平触发
锁存门控
注意CLK上有个取反
缺点:
1、如果在电路中,锁存器与与门相隔很远,到达锁存器的时钟与到达与门的时钟有较大的延迟差别,则仍会出现毛刺。
2、如果在电路中,时钟使能信号距离锁存器很近,可能会不满足锁存器的建立时间,会造成锁存器输出出现亚稳态。

解决办法:
把门控时钟做出一个标准单元,由工艺厂商提供,线延时是可控和不变的,而且也可以通过挑选锁存器和增加延时,总是能满足锁存器的建立时间。

实现:如下代码,综合工具自动插入门控时钟。
若代码里加上else Q为0,不仅不能综合出门控时钟,还增加了Q的翻转功耗。
门控时钟实现

寄存门控:边沿触发
寄存门控
缺点:
1、如果第一个D触发器不能满足setup时间,还是有可能产生亚稳态。
2、面积大

(2)操作数隔离

如果在某一段时间内,数据通路的输出是无用的,则将它的输入置成个固定值,这样,数据通路部分没有翻转,功耗就会降低。
操作数隔离前
操作数隔离
(3)资源共享与状态编码
对多处使用的运算操作可以用资源共享
数据编码来降低开关活动,例如,用格雷码比用二进制码翻转更少,功耗更低
(4)并行与流水的选择
这两种方法都是面积换速度
采用并行处理,可以降低系统工作频率,从而可能降低功耗。
流水线技术可以将一个较长的组合路径分成M级流水线。路径长度缩短为原始路径长度的1 /M。这样,一个时钟周期内充/放电电容变为C/M。如果在加入流水线之后,时钟速度不变,则在一个周期内,只需要对C/M进行充/放电,而不是原来对C进行充/放电。因此,在相同的速度要求下,可以采用较低的电源电压来驱动系统。这样,系统的整体功耗可能会降低。

3.3 门级(已经映射的门级网表)

(a)多阈值电压设计
阈值电压Vt越高的单元,它的漏电功耗越低,但门延迟越长,也就是速度慢;
阈值电压Vt越低的单元,它的漏电功耗越高,但门延迟越短,也就是速度快。
关键路径(延迟最大的路径)中使用低阈值电压的单元(low Vt cells),以减少单元门的延迟,改善路径的时序。
在非关键路径中使用高阈值电压的单元(high Vt cells),以降低静态功耗。
(b)基于EDA工具的动态功耗优化和总体功耗优化
动态功耗优化通常在做完时序优化后进行。动态功耗优化时,需要提供电路的开关行为,工具根据每个节点的翻转率,来优化整个电路的动态功耗。
总功耗是动态功耗和静态功耗的和,总功耗的优先级比动态功耗和静态功耗高。总功耗优化时,工具尽量减少动态功耗和静态功耗的和。优化时如果减少了漏电功耗增加了动态功耗,但它们的和减少了,优化是有效的。反之亦然。
(c)电源门控
如果某一模块在一段时间内不工作,可以关掉它的供电电源(关掉供电电源可以使用MTCMOS开关,通常在使用后端工具进行布局布线时加入MTCMOS)。
断电后,设计进入睡眠模式,其漏电功率很小。唤醒时,为了使模块尽快恢复工作模式,需要使用保持寄存器(retention register)保持关电前的状态。
电源门控模块的输出端需要使用隔离单元,保证在睡眠模式时,下一级的输入不会悬空。

3.4 物理级

  • 对于设计中翻转活动很频繁的节点,采用低电容的金属层进行布线
  • 使高翻转率的节点尽可能地短
  • 对于高负载的节点与总线,采用低电容的金属层
  • 对于特别宽的器件,采用特殊的版图技术,以得到更小的漏极结电容
  • 在有些布局布线工具中,可以将功耗作为优化目标来生成时钟树

七、综合约束

1、时序约束

Create_clock –peroid 10 [get_ports clk]
Set_dont_touch_network:不要在时钟上加任何buffer,方便后端布线
Set_clock_uncertainty:各分支间最大延时差
Set_clock_latency:从源点到各分支最大延时
Set_input_delay:该输入信号是在时钟沿后多长时间到达模块的port上的
Set_output_delay:该输出信号在后级模块中需要在时钟沿之前提前多长时间准备好,从而约束内部reg-to-out的path的delay
-max 选项设置的是输入的最大延迟,为了满足时序单元建立时间(setup time)的要求。
-min选项设置的是输入的最小延迟,它是针对保持时间的约束使用。

2、环境属性

Set_operating_conditions:设置工作条件,温度,电压及工艺,-max最差条件用作建立时间分析,-min最好条件用作保持时间分析
Set_load:设置输出负载,设置的值会影响输出到端口的net上的电容,从而影响相应的路径延时
Set_driving_cell:设置输入驱动,使输入端口信号的Transition时间为非0,保守起见,假设输入端口为驱动能力弱的单元驱动(即翻转时间长)
Set_wire_load_model:设置连线负载模型,估计连线延迟

3、面积约束

Set_max_area

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值