赞
踩
来源:知乎
链接:https://zhuanlan.zhihu.com/p/261298869
基础知识
原理务必理解透彻。
锁存器的结构-DFF的结构-建立保持时间-亚稳态-STA-CDC。
亚稳态的成因,危害,解决方法。
建立保持时间的计算,违例的Fix,流片前和流片后。还有复位的Recovery Removal time。
CDC的解决方法。
低功耗常见设计方法,动态-静态功耗计算和分析。例如两种情况对比功耗大小。
竞争和冒险的区别、成因、危害、处理方法。
毛刺的成因、危害、处理方法。
时序约束的意义和做法。(时钟约束,IO约束,例外约束)。
OCV - PVT。
Resolution time的成因以及HVT,SVT,LVT Cell的Resolution time的区别。
ASIC设计和FPGA设计的Flow。
高阻态的意义和用法。
Verilog 延时模型。
手撕代码
不仅能闭眼写,而且懂原理,会根据题目要求写出不同变种(例如最少资源占用)的代码。
异步fifo。格雷码的镜像对称。格雷码和二进制的互相转换。
同步fifo。
除法器。
Wallace乘法器。
Booth乘法器。
Booth+Wallace乘法器。
超前进位加法器。
边沿检测,输入消抖,毛刺消除。
异步复位同步释放。
三种计数器。二进制,移位,移位+反向。
无毛刺时钟切换。
串行-并行CRC。(ARM)。
线性反馈移位寄存器。
握手实现CDC。
AXI-S接口,2T一次传输,1T一次传输,1T一次传输还要寄存器寄存。(Nvidia考题)Xilinx有例程。
其他简单功能的HDL实现以及状态转换图。(序列检测 ,回文序列检测(NVIDIA),奇、偶、半分频,小数分频,自动售货机)。
题目部分
最大项,最小项,组合逻辑变换为与非/或非形式,卡诺图化简。典型数电考题。
常用元件的门电路实现。(非,与非,或非,锁存器(两种),DFF)。
MOS管实现门电路。
MUX或者MUX+Inverter实现异或,或者其他简单逻辑功能。
门电路实现逻辑表达式。这个是典型的数电考题。
门电路真值表。特别是输入为X和Z的时候。
门电路实现同步时序逻辑。这个是典型的数电考题。1.状态转换图或者状态转换表。2.状态化简。3.状态分配。4.卡诺图化简求出状态方程,驱动方程,和输出方程,自启动修改。5.画出逻辑图。例如售货机的门电路D触发器实现。
门电路实现波形。常见的计数器,线性反馈移位等等。本质上还是实现时序逻辑功能。
门电路实现Verilog代码。
Verilog常用语法,例如两操作数运算符和一操作数运算符,task和function区别,时钟激励的写法,可综合/不可综合语句。还有操作数有X和Z时的返回值。
FIFO深度计算,一般就是背靠背。
其他问题
偶尔被问到,挺有启发意义。
if,case,三目运算符的区别。其实现代工具综合出来区别不大。
超高速(Gbps)CDC时格雷码的不可靠问题。
串扰。
ESD。
闩锁效应。
上拉下拉电阻。
线与,OC,OD门。
施密特触发器。
CMOS与TTL电平,相互驱动关系。
Cordic算法。
Latch+time borrowing。
FPGA的基本资源与内部构造。对于FDCE,LDCE的实现。
FPGA的时钟资源及构造。
Cache+MMU,TLB,中断,DMA,大小端,流水线,超标量,超流水,超长指令字,数据冒险,控制冒险,分支预测,乱序执行,LRU等等计算机体系结构常识。(进程/线程调度,CPU调度,内存调度,总线分配)。
同步时钟和异步时钟。时钟相移之后还是同步的吗?倍频或者分频呢?
PLL+MMCM。他们的输入输出,使用的注意点等等。
计算机网络常识。NAT,地址映射,TCP/IP 4层网络模型。
同步复位和异步复位的区别,特别是资源消耗,有复位和无复位的综合实现区别。
PMOS管和NMOS管的结构以及区别,增强型和耗尽型。采用不同的MOS管实现电路的速度区别。电子导电比空穴能力强。(兆易创新)。
IC设计常用术语。
Verilog二维数组初始化。常用于FIFO设计。
Verilog仿真模型推进。这个可以看Verilog设计指南的解析。
2态数据类型与4态数据类型对仿真速度的影响。
还有一些术语的解释。这个外企题目常见,外企面试也常见。我有次被问到MMU,当时没反应过来,事后才想起应该是Memory Manage Unit。
锁存器即Latch,数电中称之为电平触发D 触发器,也即D 型锁存器,由电平触发SR 触发器改进得到。
其工作特点是在电平为有效电平(高电平或低电平)期间,才能接受信号并输出,否则保持不变;
D 触发器——DFF,数电中称之为边沿触发D 触发器,由两个D-Latch组成而来。
工作特点:触发器的次态仅取决于时钟信号的上升沿或下降沿到达时输入的逻辑状态,而在这之前或之后,输入信号的变化对触发器输出的状态没有影响。
这一点有效地提高了触发器的抗干扰能力,也提高了电路的工作可靠性。
FF1、FF2为D-Lacth。
setup time 和 hold time概念
- 建立时间:触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的最小时间。
- 保持时间:触发器在时钟上升沿到来之后,其数据输入端的数据必须保持不变的最小时间。
关于建立时间和保持时间的约束
- Tsetup ≤ Tclk + Tskew - Tcq(max) - Tcomb(max)
- Thold ≤ Tcq + Tcomb - Tskew
- 触发器建立时间和保持时间的关系(含题目详解)_Cheeky_man的博客-CSDN博客
为什么触发器要满足建立时间和保持时间?
- 因为触发器内部数据的形成是需要一定的时间的,如果不满足建立和保持时间, 触发器将进入亚稳态,进入亚稳态后触发器的输出将不稳定,在 0 和 1之间变化,这时需要经过一个恢复时间, 其输出才能稳定,但稳定后的值并不一定是你的输入值。这就是为什么要用两级触发器来同步异步输入信号。这样做可以防止由于异步输入信号对于本级时钟可能不满足建立保持时间而使本级触发器产生的亚稳态传播到后面逻辑中,导致亚稳态的传播。
建议收藏:不能不刷的100道数字IC笔/面试题!_Cheeky_man的博客-CSDN博客(二、静态时序分析和动态时序分析的比较)
静态时序分析(static timing analysis,STA)是遍历电路存在的所有时序路径,根据给定工作条件(PVT)下的时序库.lib文件计算信号在这些路径上的传播延时,检查信号的建立和保持时间是否满足约束要求,根据最大路径延时和最小路径延时找出违背时序约束的错误。
建议收藏:不能不刷的100道数字IC笔/面试题!_Cheeky_man的博客-CSDN博客(九、何为亚稳态?如何消除亚稳态?)
亚稳态:触发器无法在某个规定时间内达到一个可确认的状态;
成因:触发器的建立时间和保持时间不满足,使得输出端 Q 在时钟边沿到来后比较长的一段时间内处于不确定的状态,并且Q稳定后的值是随机的,与输入D无关;
解决方法:
(1)使用同步器(多级寄存器):比如常用的2级或者多级FF打拍的方法(最常见的方法)
(2)降低频率:如果能满足功能要求,降低频率能够减少亚稳态的发生。(在高性能要求下并不实用)
(3)避免变化过快或者过于频繁的信号进行跨时钟采样。(在高性能要求下并不实用)
(4)采用更快的触发器:更快的触发器,也可以亚稳态的产生
Tclk→q + Tlogic + Tsetup + Tsetup_slack = Tclk + Tskew;
Tclk→q + Tlogic = Tholdup + Tholdup_slack + Tskew
从上面的分析可以看到:
建立时间公式:Tsetup + Tdq + Tdata ≤ Tclk + Tskew
Tdata = (Tcomb+T逻辑组合布线延迟)
保持时间公式:Tdq + Tdata - Tskew ≥ Tholdsetup&hold time 违约修复主要参照上面的公式进行
对于建立时间违例的解决办法按优先级有:
如果修改代码实在解决不了,在使用约束关键路径的办法;
对于保持时间违例的解决办法按优先级有:
复位信号释放(对于低电平有效的复位信号指上升沿),与紧跟其后的第一个时钟上升沿之间的最小时间。
时钟信号的上升沿,与紧跟其后异步复位信号从有效到无效的最小时间。
单bit:
多bit:
针对功耗来源,提出了低功耗设计常用方法。
降低电源电压;
减小负载电容;
减少MOS管数量;
减小连线电容
减少电荷分享的影响(对动态电路)
节点开关活动因子的影响;
从算法和体系结构角度优化;
选择具有低功耗功能器件;
时钟门控;
提高工艺:
时钟门控:
多电压域技术:
电源门控技术:
时钟门控技术不影响设计电路的功能,也无须修改RTL(Register Transfer Level)代码,它在设计和实现上可以是对设计者透明的,而电源门控技术影响各模块之间的相互连接,安全进入和退出电源门控模式会增加很多额外的操作。
电源门控一般有两种方法来实现:
外部电源门控(external power gating)。实现电源门控最基本的方法,适于消耗漏电功耗较少但关断时间较长的设计。举个例子,一个SoC系统在板极上有CPU的专用电源,这个电源只提供电压给CPU。外部电源门控技术就是,可以关闭这个电源以使CPU在非活动状态时漏电功耗减小到零。但这种做法也需要最长的时间对电源门控的模块进行供电和数据的重新加载。
内部电源门控(on-chip power gating)。内部电源门控是指在芯片内部用一些专门的逻辑单元如电源门控单元来控制所选模块的供电情况。
RTL级优化
后端综合与布线优化
功耗的精确计算
自适应阈值电压调节技术
动态功耗来源于:
(1)当门翻转时,负载电容充电和放电,称为翻转功耗
(2)pmos和nmos管的串并联结构都导通时的有短路电流,称为短路功耗。
翻转功耗可以用如下公式表示:P_{switch} = \alpha CV_D_D^2fP_{switch} = \alpha CV_D_D^2f
α 称为活动因子,是电路节点从0跳变至1的概率。时钟的活动因子为1,因为它在每个周期都有上升和下降。大多数数据的活动因子为0.5,每周期只跳变一次。
C称为负载电容。
有以下办法可以降低翻转功耗:
(1)使用门控时钟
降低活动因子是降低功耗的非常有效的办法,如果一个电路的时钟完全关断,那么它的活动因子和动态功耗将降为0。Verilog在设计寄存器时采用下面写法可以综合成一个带门控的寄存器。
input reg d;
always @(posedge clk or negedge resetn) begin
if(~resetn)
q<= 1'b0;
else if(enable)
q<= d;
end
(2) 减小毛刺
毛刺会增大活动因子,有可能使门的活动因子增加到1以上。
(3)减小负载电容
电容来自于电路中的连线以及晶体管。缩短连线长度,良好的平面规划和布局可以使连线电容减小。选择较小的逻辑级数以及较小的晶体管可以减小器件的翻转电容。
(4)电压域
动态功耗与电压有平方的关系,降低电源电压可以显著降低功耗。将芯片划分成多个电压域,每个电压域可以根据特定电路的需要进行优化。例如,对于存储器采用高电源电压来保证存储单元的稳定性,对于处理器采用中等大小的电压,对运行速度较低的IO外围电路采用低电压。解决跨电压域信号传输的方法是使用电平转换器。
(5)动态电压调整DVS
CPU处理不同的任务有不同的性能要求。对于低性能要求的任务,可以使时钟频率降低到足以按预定时间完成任务的最低值,然后使电压降低到该频率下工作所需要的最小值就可以节省大量的能耗。
(6)降低频率
动态功耗正比于频率,芯片只应当工作在所要求的频率下,不能比所要求的还要快。由前面小结可以,降低频率还可以采用较低的电源电压,大大降低功耗。
(7)谐振电路
谐振电路通过使能量在储能元件如电容或电感之间来回传送而不是将能量泄放到来减小翻转功耗。
短路功耗发生在当输入发生翻转时,上拉和下拉网络同时部分导通的时候。如果输入信号翻转速率比较慢,那这两个网络将同时导通较长的一段时间,短路功耗也会比较大,增大负载电容可以减小短路功耗,原因是负载较大时,输出在输入跳变期间只翻转变化很小的一个量。
短路电流一般为负载电流的10%。当输入边沿变化速度很快时,短路功耗一般只占翻转功耗的2%-10%。
静态功耗主要来源于:
(1)流过截止晶体管的亚阈值泄漏电流(subthreshold leakage)
(2)流过栅介质的泄漏电流(gate leakage)
(3)源漏扩散区的p-n节泄漏电流(junction leakage)
(4)在有比电路中的竞争电流
(1)电源门控
减小静态电流最容易的方法就是关断休眠模块的电源。这一技术称为电源门控。
(2) 多种阈值电压和栅氧厚度
有选择的应用多种阈值电压可以使具有低Vt晶体管保持性能而又使具有高Vt晶体管的其他路径减少泄漏。
大多数纳米工艺的逻辑管采用薄栅氧,IO晶体管采用厚的多的栅氧以使它们能够承受较大的电压。
(3)可变阈值电压
通过体效应可以调制阈值电压。在休眠模式下应用一个反向体偏置减小泄漏。在工作模式下利用一个正向体偏置来提高性能。
(4)输入向量控制
由前面可知,堆叠效应和输入排序会引起亚阈值泄漏和栅泄漏的变化。因此,一个逻辑模块的泄漏与门的输入有关。输入向量控制是当模块置于休眠模式时,应用一组输入图案使模块的泄漏最小。这些输入向量可以通过寄存器上的置位/复位输入端或通过扫描链加入。
在组合逻辑中,由于门的输入信号通路中经过了不同的延时,导致到达该门的时间不一致叫竞争。
产生毛刺叫冒险。
如果布尔式中有相反的信号则可能产生竞争和冒险现象。
方法:接入滤波电容、引入选通脉冲、修改逻辑设计-增加冗余项
同上
FPGA设计之时序约束---常用指令与流程_wenjia7803的博客-CSDN博客
即便是同一种FF,在同一个芯片上不同操作条件下的延时都不尽相同,我们称这种现象为 OCV(on-chip variation)
OCV表示的是芯片内部的时序偏差,虽然很细小,但是也必须严格考虑到时序分析中去。
产生 OCV 的原因主要有PVT(Process / Voltage / Temperature)三个方面,而 STA要做的就是针对不同工艺角(Process Corner)下特定的时序模型来分析时序路径,从而保证设计在任何条件下都能满足时序要求,可以正常工作。
通常PVT对芯片性能的影响如下图所示,
不同的 PVT条件组成了不同的 corner,另外在数字电路设计中还要考虑 RC corner的影响,排列组合后就可能有超过十种的corner要分析。但是在 FPGA 设计中的静态时序分析一般仅考虑Best Case和 Worst Case,也称作Fast Process Corner和 Slow Process Corner 分别对应极端的PVT条件。
一个触发器一旦进入亚稳态状态,则无法预测触发器的输出电平,也无法预测什么时候可以稳定在某个确定的电平上,此时触发器的输出端Q在较长时间内处于振荡状态,不等于输入端D。这段时间称作决断时间(resolution time)。经过resolution time之后,输出端Q将会稳定在某个电平上,但是这个稳定之后的电平与输入端D是没有关系的。
在数字后端设计中,不同的cell单元库具有不同的阈值电压。阈值电压越低,该单元的速度越快,功耗也会越大。好比晶体管就像一个电容,电容的电压充到阈值电压才能导通,阈值电压越低,充满电的速度就会越快。通常的单元库根据不同的阈值电压,可以分为SLVT, LVT, RVT, HVT。他们的速度大小按快到慢依次排列为SLVT, LVT, RVT, HVT。 功耗大小却正好相反。
RTL级代码----功能仿真----逻辑综合----等价性检查,形式验证----静态时序分析----
布局规划—布局布线----版图物理验证(包括LVS和DRC等)----流片
对于设计而言,我们想要设计一个芯片,首先我们要明确我们设计的芯片旨在解决什么样的问题,具有什么样的功能。
我们根据目的去设计电路,把电路按照功能模块或接口划分,使用硬件描述语言verilog或HDL去实现逻辑设计,生成RTL级的代码
然后我们对这个代码进行功能仿真,检查代码有没有语法问题或者实现的功能跟我们预计的是否相同(代码行为的正确性)
接着我们把它进行逻辑综合,(逻辑综合需要有约束条件,约束条件就是你希望综合出来的电路在面积,时序等目标参数上达到的标准,)
由于逻辑综合需要基于特定的库,不同的库,基本单元电路的对应的面积和时序参数都是不一样的,所以我们还需要进行后仿真也就是门级仿真,从功能和时序两方面对综合后的网表进行验证,保证电路的正确性,以及逻辑综合后生成的网表并没有改变原先电路设计的功能
是自带工具完成。接下来我们对芯片的面积做一个规划,确定每个单元的位置,并完成互连布线(连接单元和功能块之间的互连布线线)
然后我们再做一个时序仿真,电路提取,加延迟,仿真后包含延迟信息,接近于真实电路的行为
烧到板子上,进行仿真,测试
FPGA设计和ASIC设计有本质的区别,FPGA是一种可编程门阵列逻辑电路器件,是基于SRAM查找表逻辑形成的结构,FPGA最终生成的是产生可以实现所需功能电路的编程数据;
FPGA设计流程:在后仿真(时序仿真)后,产生用于编程的下载文件,烧录到板子上,进行测试和运行,前面基本差不多,但也有区别
————————————————
版权声明:本文为CSDN博主「不吐普通皮」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43308040/article/details/90707470
[SV]Verilog中的延时模型_元直的博客-CSDN博客
- `timescale 1ns/ 1ns
-
- module noror( Out, A, B, C);
- output Out;
- input A, B, C;
-
- nor n1 (net1, A, B);
- or #3 o1 (Out, C, net1);
-
- endmodule
分布延时方法是将延时分散到每一个门。在相同的输出端上,不同的路径有不同的延时。分布延时有两个缺点:
– 在结构描述中随规模的增大而变得异常复杂。
– 仍然不能描述基本单元 (primitive) 中不同引脚上的不同延时。
- `timescale 1ns/ 1ns
-
- module noror( Out, A, B, C);
- output Out;
- input A, B, C;
-
- nor #2 n1 (net1, A, B);
- or #1 o1 (Out, C, net1);
-
- endmodule
在专用的specify块描述模块从输入端到输出端的路径延时。
– 精确性:所有路径延时都能精确说明。
– 模块性:时序与功能分开说明
不仅能闭眼写,而且懂原理,会根据题目要求写出不同变种(例如最少资源占用)的代码。
异步FIFO的设计详解(格雷码计数+两级DFF同步)_Mr.翟的博客-CSDN博客_异步fifo格雷码
对于32的无符号除法,被除数a除以除数b,他们的商和余数一定不会超过32位。
首先将a转换成高32位为0,低32位为a的temp_a。把b转换成高32位为b,低32位为0的temp_b。
在每个周期开始时,先将temp_a左移一位,末尾补0,然后与b比较,是否大于b,是则temp_a = temp_a - temp_b + 1,否则继续往下执行。
上面的移位、比较和减法(视具体情况而定)要执行32次,执行结束后,temp_a的高32位即为余数,低32位即为商。
举例说明:
a = 1101; b = 0010; a ÷ b = 13 ÷ 2 = 6余1;
①temp_a = 0000_1101; temp_b = 0010_0000;
②temp_a = temp_a << 1 = 0001_1010 < temp_b; 继续移位;
③temp_a = temp_a << 1 = 0011_ 0100 > temp_b;不用移位,直接计算求值
④temp_a = temp_a - temp_b + 1 = 0001(余数)_0101(商)
verilog 代码
- /*
- * module:div_rill
- * file name:div_rill.v
- * syn:yes
- * author:network
- * modify:rill
- * date:2012-09-07
- */
-
- module div_rill
- (
- input[31:0] a,
- input[31:0] b,
-
- output reg [31:0] yshang,
- output reg [31:0] yyushu
- );
-
- reg[31:0] tempa;
- reg[31:0] tempb;
- reg[63:0] temp_a;
- reg[63:0] temp_b;
-
- integer i;
-
- always @(a or b)
- begin
- tempa <= a;
- tempb <= b;
- end
-
- always @(tempa or tempb)
- begin
- temp_a = {32'h00000000,tempa};
- temp_b = {tempb,32'h00000000};
- for(i = 0;i < 32;i = i + 1)
- begin
- temp_a = {temp_a[62:0],1'b0};//左移并补0
- if(temp_a[63:32] >= tempb)
- temp_a = temp_a - temp_b + 1'b1;
- else
- temp_a = temp_a;
- end
-
- yshang <= temp_a[31:0];
- yyushu <= temp_a[63:32];
- end
-
- endmodule
-
- /*************** EOF ******************/
testbench 代码
- /*
- * module:div_rill_tb
- * file name:div_rill_tb.v
- * syn:no
- * author:rill
- * date:2012-09-07
- */
-
-
- `timescale 1ns/1ns
-
- module div_rill_tb;
-
- reg [31:0] a;
- reg [31:0] b;
- wire [31:0] yshang;
- wire [31:0] yyushu;
-
- initial
- begin
- #10 a = $random()%10000;
- b = $random()%1000;
-
- #100 a = $random()%1000;
- b = $random()%100;
-
- #100 a = $random()%100;
- b = $random()%10;
-
- #1000 $stop;
- end
-
- div_rill DIV_RILL
- (
- .a (a),
- .b (b),
-
- .yshang (yshang),
- .yyushu (yyushu)
- );
-
- endmodule
- /******** EOF ******************/
仿真结果:
Booth压缩+华莱士树Wallace乘法器的通俗理解_ainu412的博客-CSDN博客_华莱士树乘法器原理
超前进位加法器(较为详细讲解)_UESTC_ICER的博客-CSDN博客_超前进位加法器
FPGA基础入门篇(四) 边沿检测电路_摆渡沧桑-CSDN博客_边沿检测
一个DFF:有毛刺(触发无滞后)
两个DFF:避免毛刺(触发有滞后)
下降沿:tri_2 & (~tri_1)
上升沿:(~tri_2) & tri_1
双边沿:tri_1 ^ tri_2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。