秋招复习边角料集锦
这篇文章的目的是为了整理一些复习中遇到的问题,性质约等于todo list。
完成一条就勾掉一条,然后整理为成体系的知识。
1、带有半满,半空标准的异步fifo写法,用途
(写法Done,任意数量气泡的写法有待商榷)
(用途,模块之间紧耦合变为松耦合。具体表现为,后级同FIFO的握手信号可以考虑流水线的深度,由靠近后级的流水线产生的控制信号来参与握手,同时也能保证FIFO不空也不满,没有气泡产生。无论从速度还是功能上都做到了高性能)
2、基本cmos逻辑门的组成和电气特性。
见数字电子技术,与非门和反向器的特性。
3、低功耗设计方法
1)系统层面低功耗
系统层面的低功耗技术可以涉及板级硬件系统和芯片内的SoC系统,其原理基本一直。以SoC系统为例,常见的低功耗技术如下:
(1)SoC系统中划分不同的电源域(Power domain),能够支持将SoC中的大部分硬件关闭电源,实现电源,门控(Power gating);或者工作在不同的电压下。
(2)SoC系统中划分不同的时钟域,能够支持小部分电路以低速低功耗的方式运行;
(3)通过不同的电源域与时钟域的组合,划分不同的低功耗模式。SoC配备PMU控制进入或退出不同的低功耗模式;
(4)软件可以通过使用PMU的功能,在不同的场景下进入和退出不同的低功耗模式。
2)处理器层面低功耗
处理器层面的常见低功耗技术如下:
(1)处理器指令集中定义一种休眠指令,运行该指令后处理器便进入休眠状态;
(2)休眠状态可分为浅度休眠和深度休眠:浅度休眠状态往往将处理器核的整个时钟关闭,但仍然保持电源供电,因此可以节省动态功耗,但是静态漏电功耗仍然有消耗;深度休眠状态不仅关闭处理器核的时钟,甚至将电源也关闭,因此可以同时节省掉动态和静态功耗;
(3)处理器核深度休眠断电后,需要考虑内部上下文状态的保存和恢复问题;
(4)在处理器结构上可以采用异构的方式节省功耗;
3) 单元(Cell)层面低功耗
(1)一个功能完整的单元往往需要单独配备独立的时钟门控(Clock Gate),当该模块后者单元空闲时,可以使用时钟门控将其时钟关闭,节省动态功耗;
(2)另外也有相应的area optimized Cell implementation
包括内置的datapatn gating
(3)采用高电压阈值器件,可以降低功耗
4) 寄存器层面低功耗
寄存器层面的低功耗技术已经进入了IC设计编码风格的范畴,主要从3个方面减少寄存器层面的功耗:
(1)时钟门控
主流逻辑综合工具已经可以从代码风格中直接推断出Integrated Clock Gating的能力,因此只要遵循一定的编码风格,便能够将一组寄存器的时钟自动推断出ICG,以节省动态功耗。在逻辑综合完成后,工具可以生成整个电路的时钟门控率,开发者可以通过此时钟门控率数据的高低来判断设计电路是否自动推断出了足够的ICG。好的电路一般有超过90%的时钟门控率,否则可能是电路中数据通路较少或者编码风格有问题。
(2)减少数据通路翻转
为了见识不必要的动态功耗,应该尽量减少寄存器的翻转,比如FIFO设计中采用读写指针的方式,可以保持表项寄存器中的值静止不动,从而大幅度减少动态功耗。
(3)数据通路不复位
对于数据通路部分的寄存器,甚至可以使用不带复位信号的寄存器,不带复位信号的寄存器面积更小,时序更优,功耗更低。比如对于某些缓存器(buffer)、FIFO和Regfile的寄存器部分,经常使用不带复位的寄存器,但是在使用不带复位的寄存器时必须小心谨慎,保证其没有作为任何其他控制信号,以免造成不定态的传播。在前仿真阶段,必须有完善的不定态捕捉机制来发现这些问题,否则可能造成芯片出现严重bug。
4)状态机编码对信号的活动性具有重要影响,通过合理选择状态机状态的编码方式,减少状态机切换时电路的翻转,可以降低状态机的功耗。主要有以下三个原则:
1.对于频繁切换的相邻状态,尽量采用相邻编码状态机编码,比如优先使用格雷码(也能消除依赖于状态组合等式中存在的毛刺风险)。
2.小型状态机可以选择独热码编码,在状态比较时只需要关注1bit。
3.避免状态机中存在冗余的状态,识别等价状态。
5)操作数隔离技术
这种技术是对不使用的datapath不使能,不会写入Reg。
进阶的操作数隔离,一般还结合数据通路门控。
1.5 锁存器层面低功耗
锁存器相比于寄存器面积更小,功耗更低。在某些特定的场合使用可以降低芯片功耗,但是锁存器会给数字ASIC流程带来极大困扰,因此应该谨慎使用。
1.6 SRAM层面低功耗
SRAM在芯片设计中经常使用到,可以从3个方面减少SRAM的功耗。
(1)选择合适的SRAM
从功耗与面积角度考虑,单口SRAM最小,一读一写Regfile其次,双口SRAM最大,应该优先选择功耗与面积小者,尽量避免使用高功耗的SRAM类型。SRAM的数据宽度也会影响面积,以同等大小的SRAM为例,假设总容量为16KB,如果SRAM的数据宽度为32位,则深度为4096,如果SRAM的数据宽度为64位,则深度为2048.不同的宽度深度比可能会产生面积迥异的SRAM,因此也需要综合权衡。
(2)尽量减少SRAM读写
SRAM的读写动态功耗相当可观,因此应该尽量减少读写SRAM,比如处理器取指,由于处理器多数按照顺序取指,因此应该尽量一次从SRAM中多读回一些指令,而不是反复多次读取SRAM,从而节省SRAM的动态功耗。
(3)空闲时关闭SRAM
与单元门控时钟相同原理,在空闲时应关闭SRAM的时钟,以节省动态功耗,SRAM的漏电功耗相当可观,因此在省电模式下,可以将SRAM的电源关闭,以防止漏电。
SRAM的时钟门控可以结合CS选通信号。
1.7 组合逻辑层面低功耗
组合逻辑是芯片中的基本逻辑,可以从两个方面减少组合逻辑的功耗。
(1)减少面积
通过使用尽量少的组合逻辑面积减少静态功耗,此为数字逻辑设计的基本认知,因此从设计思路和代码风格上,应该尽量将大的数据通路或运算单元进行复用,从而减少面积,另外应该避免使用除法、乘法等大面积的运算单元,尽量将其转化为加减法运算。
(2)减少翻转率
可以通过逻辑门控的方式,在数据通路上加入一级与门,使没有用到的组合逻辑在空闲时不翻转,从而达到减少动态功耗的效果。额外加入一级与门,在时序非常紧张的场合也许无法接受,需要谨慎使用。
4、乱序处理器原理
乱序技术的目的是实现乱序发射指令,从而消除长周期指令独占执行阶段产生的气泡。乱序算法的宗旨是,乱序执行,顺序提交。如果尝试乱序提交指令,就违反了冯诺伊曼计算器的设计宗旨。
另外,现代体系结构需要分支预测和精确中断,这也是基于顺序提交指令的前提才能实现的功能。
但是,乱序执行产生了反向依赖问题和其他类型寄存器相关引起的数据冒险。前一个问题影响顺序提交,后一个问题影响乱序执行时每个指令得出正确结果。这两个问题可以用重命名技术解决。
乱序处理器的经典算法是Tomasulo。重命名技术能解决反向依赖问题,但副作用是不利于冲刷流水线取消分支预测,也不利于精确中断。为了实现精确中断,需要追踪重命名的映射关系以便于恢复,这就是RS保留站。
保留站将逻辑寄存器(原寄存器堆,对应指令内容指示的寄存器)和物理寄存器(占用物理资源的,除原寄存器堆以外的冗余寄存器)进行映射,这一过程称为重命名。
RS保留站通过开辟空间解决重命名问题,还能提升乱序发射的指令数,这种提升也需要硬件支持。乘除法,访存指令都可以通过复制硬件实现同类指令不阻塞。保留站需要有足够的深度来支持这些指令进入执行阶段。
Tomasulo算法的另一组成是CDB,用于从多个RS的内容选出执行完毕的指令进行提交或写入缓存。但是RS技术没有解决分支预测错误的问题,即冲刷流水线的开销很大,需要排空所有的RS内容。同样,如果产生了中断需要冲刷流水线,就只能排空RS。归根结底,这是因为RS硬件不支持顺序提交。
为了支持顺序提交,可以在RS保留站后加一个ROB重排序缓存,这样一来就可以控制指令执行结果提交的顺序。
RS的功能是,保留寄存器映射关系,消除反向依赖和检测数据相关。
ROB的功能是,记录提交顺序,缓存待提交的指令执行结果,提供前递数据,检测分支预测结果,检测中断指令PC值。
推论:
由ROB的性质,ROB其实可以当作写回级。但是ROB一般可以设计为提交大于等于2条指令,在这种情况下为了避免访问冲突,可以多再插入一条写回级。
5、体系结构中,IPC如何计算,优化,访存的影响
统计指令的cycle数和指令数,计算总cycle数,用来除指令数。优化IPC就是优化cycle数。
6、覆盖率,UT,MT概念,以乘法器为基础进行验证
7、跨时钟域方法的代码,约束
false path和create clock
set_clock_group clk是指的每个cell驱动的clk。
8、跨电源域的设计,约束
level shifter
9、存储器件的端口,特性整理
主要是SRAM。
对于FPGA来说,Block Ram和LUT也是由SRAM实现的。四输入LUT的实现是由16×1的SRAM和多路选择器串联。相比于Bram,速度更慢,面积和功耗更小。Bram和Dram可以选择最后打一拍,提高速度。Dram由于路由的原因(线延迟),会有额外的速度损失。
10、学习SV,利用断言进行验证
11、编写模式
__________________________________________
12、跨时钟域处理
13、验证知识
14、STA模型
Setup:
发射路径的arrival时间 = Tlanuch+Tcq+Tcb
捕获路径的arrival时间 = Tcapture+Tcycle-Tuncertainty-Tsu
在时钟驱动REG捕获数据的时间,数据应当已经准备好。
Tlanuch+Tcq+Tcb< Tcapture-Tuncertainty+Tcycle-Tsu
Slack = Tcapture+Tcycle-Tuncertainty-Tsu -(Tlanuch+Tcq+Tcb )
Hold:新的Data来慢一点
Tlanuch+Tcq+Tcb > Tcapture+Thold
对于input delay和output delay的检查 采用虚拟寄存器。
对于
15、算术运算的实现
16、CMOS模型
17、DDR