FPGA面试题目笔记(一)——FPGA开发流程、亚稳态和竞争冒险、建立保持时间、异步FIFO深度等


本文针对Leetcode中 2021秋招数字IC设计岗面试题总结进行学习,很多知识点在 FPGA基础学习总结系列中已经学习过,因此遇到相同题目只简单描述。


点击2021 FPGA面试题总结进行题目查看

字节跳动 -FPGA 岗

1、掌握FPGA开发流程

下图为FPGA的开发流程。
在这里插入图片描述

1、功能定义/器件选型
简单来说,这部分是来确定所要实现的电路功能,同时在系统设计之前对电路功能进行方案验证、系统设计以及FPGA芯片等的选择。

选择设计方案以及器件类型的指标:根据任务要求(系统的指标以及复杂度),对工作速度和芯片自身的资源、成本等进行考量,从而作为指标进行设计方案和器件类型的选择。

设计方法:一般采用自顶向下的设计方案,将整个系统(top顶层)进行划分,分成若干个基本单元,再将每个基本单元划分成下一层的基本单元,不断划分,使得每个输入信号,都能利用EDA工具以及FPGA资源设计出所需要的输出逻辑。

2、设计输入
这部分是采用EDA工具设计出功能电路。一般有两种方式:原理图、HDL语言,IP核也可以作为一种设计输入方式。
原理图输入:最直接的描述方式,直接从元件库中调用所需要的器件,彼此连接形成原理图。设计直观但是设计效率不高且不便于维护,可移植性差。
HDL语言输入:采用硬件描述语言的方式(VHDL、Verilog)设计出功能电路。简单来说,就是各种逻辑门、寄存器等电路都用相应的硬件描述语言进行描述。优点:语言和芯片工艺无关,因此在任一FPGA芯片上,都可采用硬件描述语言进行设计,可移植性强。
3、功能仿真(前仿真)
功能仿真也称为综合前的仿真,该部分是对电路进行逻辑功能验证,无需考虑延迟等。方法:编写testbench测试文件,后采用EDA工具(modelsim)进行波形仿真并生成报告文件,根据波形来对电路功能进行验证。
4、综合优化
综合就是针对给定的电路功能以及实现该电路的约束条件(速度、功耗、成本和电路类型等),对设计出来的电路进行优化。综合后的结果就是硬件电路的设计方案,该方案要满足给定电路的预期设计要求。
5、综合后仿真(后仿真)
在quartus中完成硬件描述后进行综合,综合后生成功能网表,此时编写tb文件,将编写的功能电路加载到modelsim中进行仿真,这就称为后仿真,它将电路的门延迟参数和各种电路单元之间的连线情况考虑在内后进行仿真,主要用来检测综合结果与原电路设计是否一致。
6、布局布线
后仿真成功后,我们就需要在quartus中完成映射和布局布线,也就是将逻辑映射到FPGA器件结构的资源上,简言之,将综合后生成的网表配置到具体的FPGA芯片上,同时保证速度、面积最优的连接方式。该部分完成后我们可得到配置文件,并自动生成报告,得到FPGA资源的使用情况。
静态时序分析:对建立时间和保持时间进行分析。
7、时序仿真
也称为后仿真,将布局布线的延迟也考虑在内,从而来检查时序是否出现违规情况(主要是分析是否满足时序要求,如是否满足建立时间和保持时间)。【时序仿真包括了布局布线延迟,且波形中也加载了时延,但不同芯片内部延时不一样,因此不同的布局布线方案也会带来不同的延时效果,所以布局布线后,我们可以通过对整个系统或者各个模块进行时序仿真,来得到时序关系,估计系统的性能,还能检查和消除竞争冒险现象】
8、板级仿真与验证
板级仿真主要应用于高速电路设计中,对高速系统的信号完整性、电磁干扰等特征进行分析。
9、芯片烧录与调试
至此我们完成了逻辑电路设计,并生成了配置文件,将配置文件下载到FPGA开发板上,在开发板上进行功能的实现验证与调试。
综上,给出采用ZYNQ实现整个FPGA开发流程的步骤。

2、时序问题如何解决

1、采用静态或者动态时序分析,来计算各个路径的传播延迟,检查信号的建立时间和保持时间是否满足时序要求。通过对最大路径延时和最小路径延时的分析,找出违背时序约束的错误。还可根据时序报告对时序进行优化。
2、要掌握有哪些时序问题,如亚稳态情况等,针对问题进行解决。

2.1 时序逻辑电路中的亚稳态现象

需要掌握什么是亚稳态,以及亚稳态现象是如何产生的,通过什么方式可以解决亚稳态的出现。

亚稳态:输入信号在时钟有效沿的建立时间和保持时间之间变化,导致其不满足触发器建立保持时间的时序要求,使得输出有一段时间的不确定状态,这就是亚稳态。

亚稳态现象包括如下几种:
1、跨时钟域中的亚稳态:由于源信号时钟与目的信号时钟的相移未知,可能导致保持时间和建立时间条件不满足,从而产生亚稳态现象。——采用FIFO对跨时钟域数据通信进行缓冲设计。

2、异步信号中的亚稳态:由于异步信号不与触发器同步时钟同步,所以可能导致保持时间和建立时间条件不满足,产生亚稳态现象。—— 通过同步处理来解决。

3、异步复位检测中的亚稳态:复位信号的变化出现在建立或者保持时间内,也无法保证满足Tsu和Th的要求,出现亚稳态。——对复位电路采用异步复位、同步释放方式处理。

注意:对于单比特的数据传输,我们可以采用两级寄存器来同步,以消耗亚稳态,但是多比特数据需要采用异步FIFO来处理,因为同步器输出只能保证最后的输出是一个稳态,0或者1,但是不能保证是一个确定值。故多比特数据如果使用同步的方式来消除亚稳态的话,会出现乱码的情况。

具体掌握查看亚稳态部分即可。
时序收敛方法
时钟穿越问题

2.2 组合逻辑延迟太大导致时序不满足要求

插寄存器来缩短组合逻辑的延时。流水线技术、并行化设计

2.3 组合逻辑中的竞争和冒险问题

参考

2.3.1 什么是竞争和冒险

竞争(Competition): 在组合逻辑电路中,某个输入变量通过多条(两条及以上)途径传到输出端,由于每条途径延迟时间不同,到达输出门的时间就有先有后,这种现象称为竞争。竞争又分为临界和非临界竞争,不会产生错误输出的竞争为非临界竞争。产生暂时性或永久性错误的竞争为临界竞争。

冒险(risk):信号在器件内部通过连线和逻辑单元时,都有一定延时。延时的时间与连线的长短和逻辑单元数目有关,同时还受器件的制造工艺、电压、温度等影响;

多路信号在电平值变化时也都存在不同的延迟,对应的组合逻辑的输出也就有了先后顺序,因此就产生了冒险。

冒险现象中会出现一些不正确的尖峰信号,称为"毛刺"。如果一个组合逻辑电路中有"毛刺"出现,就说明该电路存在冒险。也可以说由于竞争引起电路输出发生瞬间错误,该现象为冒险。

2.3.2 产生原因

总结:竞争和冒险都是由于存在电路延迟引起的,同时冒险是由竞争造成的,而竞争是因为电路中的时延不同,但是有竞争的时候不一定会出现冒险。


题目:(大疆2020芯片工程师校招)组合逻辑电路中的冒险是由于( D)引起的。

A、电路有多个输出

B.、电路未达到最简

C、逻辑门类型不同

D、电路中的时延

再下面给出一个例子进行解释:
在这里插入图片描述
上图可看出,实现的功能 out = a & (~a);该设计出现了1冒险,也就是本身结果应该为0,但是却出现了为1的毛刺,因此为1冒险。
在这里插入图片描述

2.3.3 判断方法

代数法
逻辑函数表达式中,若某个变量同时以原变量和反变量两种形式出现。
如表达式为:Y=A+A’,就会产生“0”冒险;F=A*A’,就会产生“1”冒险。(结果该为1出现0的错误为0冒险,反之为1冒险)

卡诺图法
若输入变量是在相邻卡诺圈的相邻处发生变化,并且是从一个卡诺圈进入另一个卡诺圈,则有可能产生逻辑冒险。(卡诺图相切
在这里插入图片描述
上图可看出,卡诺图中存在两个相切但不相交的圈,那么输出的时候就会出现冒险现象。

2.3.4 解决方法

(1)增加冗余项
根据卡诺图可看到,我们增加了一个圈,逻辑表示式不是最简,但是可以消除冒险情况。
在这里插入图片描述
(2)增加选通信号(高电平)

输入端加入选通信号,针对 A+(~A) 的 1 型冒险,避开毛刺。

(3)引入封锁脉冲(低电平)

输入端加入封锁脉冲信号,针对 A·(~A) 的 0 型冒险,避开毛刺。

(4)增加滤波电容

由于冒险输出的是一个很窄的毛刺,因此可以在输出端接滤波电容将其滤除。

(5)采用可靠性编码

比如采用格雷码的编码方式,每次变化的时候只变化1位。

3、建立时间Tsu和保持时间Th

在静态时序分析部分对建立时间和保持时间进行了讲解。
建立时间和保持时间是在时序逻辑电路中讨论的,二者用来测试输入信号和时钟信号之间的时间要求是否满足。
根据下图清楚的理解建立和保持时间:
Tsu为建立时间:触发器上升沿到来之前,输入端数据保持不变的最小时间为Tsu。若Tsu不满足要求,那么输入信号data无法在这一时钟正确打入触发器,需要等待下一时钟上升沿到来。
Th为保持时间:时钟上升沿出现后,数据继续保持稳定的最小时间为保持时间,若保持时间不够,那么数据同样不能正确被打入触发器。

因此D触发器输入的数据必须在建立时间前达到,且要持续到保持时间后。

在这里插入图片描述

3.1 有效 / 固有建立时间和保持时间

假设有效保持时间为Tsetup_valid。
对于D触发器,其本身的建立时间Tsu = 2ns,也就是数据在时钟有效沿来之前保持2ns的稳定,这样才能保证来自输入datatin的数据稳定地到达D端。
由于时钟来自于clock,也有着时钟延迟,且clk要早于触发器Toffest=1ns到达。

因此,考虑时钟延迟,得到有效保持时间:Tsetup_valid = Tsu - Toffest = 1ns
.
考虑数据路径延迟,得到 Tsetup_valid = Tsu - Toffest +Tcmob

有效保持时间Thold_valid也是同样的分析。

考虑时钟延迟的影响:

考虑到电路时钟对于触发器时钟早到Toffest = 1ns,所以电路有效保持时间Thold_valid = Thold + Toffest ;
.
考虑路径延迟影响:

数据需要经过一段组合逻辑之后才能保持稳定,因此电路的有效保持时间为:

Thold_valid = Thold + Toffest - Tcmob

3.2时序设计的实质

满足每一个触发器建立时间和保持时间的要求

3.3 建立时间裕量和保持时间裕量的公式

建立时间裕量公式:

T slack = Tclk + Tskew - Tsu - Tco - Tcomb;

保持时间裕量公式:

T slack = Tco + Tcomb - Tskw - Th

具体推导

4、时钟偏移和时钟抖动

4.1 概念

掌握时钟偏移(Tskew)和时钟抖动(Tjitter)分别是什么,并且应该如何减少这两种情况出现。
时钟偏移是同一时钟到达两个不同触发器的时钟差值。Tskew = Tclk2 - Tclk1
在这里插入图片描述

时钟抖动是两个时钟周期之间的差值。Tjitter=T2 - T1
在这里插入图片描述

4.2 如果减少时钟偏移和时钟抖动

减小时钟抖动的方法:

受时钟自身的影响,不受布线的影响,因此通过控制系统温度变化、减少机械振动、减少电源、地等来减少,选用好的时钟源。

减小时钟偏移的方法:

时钟偏移是由于布线长度或者不同负载(组合逻辑)引起的,因此可使用低输出阻抗的时钟驱动,如果驱动能力不够可用同型号电源并联、采用树形结构、低阻抗时钟分布线、远程匹配多驱动来解决。——采用全局时钟

补充:

一般地,我们在进行分频操作的时候,采用PLL来完成,尽量避免对时钟进行逻辑操作,否则容易出现时钟偏移、抖动,甚至出现时钟毛刺的情况。

5、最小工作周期和最大工作频率的计算方式

最小工作周期Tmin=Tco+Tcomb+Tsu-Tskew+ Tjitter //寄存器内部延迟+组合逻辑延迟+建立时间延迟-时钟偏移 + 时钟抖动
最大工作频率1/Tmin
注意:在求解Tcmob的时候 ,找到两个触发器间的关键路径

为了更好第理解,给如下例题:
如图所示,寄存器和逻辑块都是单位延迟,Tr = Tf = 1;寄存器是上升沿触发,建立时间为Tsu = 1,多路选择器MUX的延时为Tmux = 2。
在这里插入图片描述
(1)不考虑时钟偏差,计算最小的时钟周期
首先我们选择最长的路径计算可得到最小的时钟周期:

Tmin = Tco+Tcomb+Tsu = 1+ 1*5 + 2 + 1 = 9

(2)考虑时钟偏移且Tskew = t2 - t1 = 1的时候,最小时钟周期:

Tmin = Tco+Tcomb+Tsu-Tskew =  1+ 1*5 + 2 + 1 -1 = 8

(3)考虑时钟偏移且Tskew = t2 - t1 = 4的时候,最小时钟周期 :

Tmin = Tco+Tcomb+Tsu-Tskew =  1+ 1*5 + 2 + 1 -4 = 5;但是由于(1)中我们可看到,不考虑时钟偏差的情况下,最小时钟周期是7,若小于7,则寄存器不能正确采样,因此题目(3)的情况下,最小时钟周期是7

(4)假设时钟周期T,推导出能保证电路正常运行所允许的时钟偏差范围(要考虑正负时钟偏差)

Tskew = t2 -t1 ;
正偏差的时候:要想R2正确采样到数据,那么时钟偏差必须小于R1到R2的最小延时,则 Tskew < 1+1*3+2 = 6 (不包含建立时间)
负偏差的时候:T - |Tskew| ≥ R1到R2的最大延时 因此,T - |Tskew|9 
于是得到:
(9-T) ≤ T_skew < 6

6、简述触发器和锁存器的差别

触发器:时钟边沿触发(时序逻辑电路),在时钟边沿时触发状态改变。
锁存器:电平触发(组合逻辑电路),在输入电平作用下触发状态改变。
详细讲述二者之间的差别

7、同步和异步电路

7.1 同步逻辑和异步逻辑(汉王)

同步逻辑:时钟之间有着固定的因果关系

同步逻辑电路和时钟之前有着固定的因果关系,该电路中所有触发器的时钟端连接在一起,并接在系统时钟端,只有当时钟脉冲到来时,电路的状态才能改变,否则保持,与输入的变化无关。

补充:采用了PLL分频电路后也可以属于同步逻辑,因为虽然分频得到了不同的时钟,但是它们的系统时钟都是相同的。
异步逻辑:时钟之间没有固定的因果关系

电路中没有统一的时钟,电路的状态改变取决于外部输入变化。

7.2 同步复位和异步复位的区别

1、同步复位
复位信号与clk有效,当clk有效的时候,复位才有效。
优点:有利于进行时序分析;由于只在clk有效的时候有效,因此能防止毛刺现象的出现。
缺点:复位信号必须大于时钟周期,才能被系统真正识别;大部分逻辑器件中的D触发器都只有异步复位端口,因此采用同步复位的话,需要在寄存器的数据输入端插入组合逻辑,此时我们就需要考虑组合逻辑延迟等因素。

module test(clk,rst,q,d);

 
	 input           clk    ;
	 input           rst    ;
	 input           d      ;
	 output  reg     q      ;
	 

always @ (posedge clk  )
    if(rst)
	     q <= 0;

    else
	     q <= d;
		  
endmodule

在这里插入图片描述

2、异步复位
复位信号与clk无关,只和自身输入的复位信号有关。
优点:大部分逻辑器件中的D触发器都只有异步复位端口,无需再插入组合逻辑,省资源;设计相对简单;
缺点:复位信号可能不满足建立和保持时间要求,因此容易出现亚稳态;容易受毛刺影响;

module test(clk,rst,q,d);

 
	 input           clk    ;
	 input           rst    ;
	 input           d      ;
	 output  reg     q      ;
	 

always @ (posedge clk or posedge rst )
    if(rst)
	     q <= 0;

    else
	     q <= d;
		  
endmodule

在这里插入图片描述

补充:如果电路采用同一时钟源,但子模块中采用了由PLL分频出来的时钟进行驱动,这种仍然为同步电路,因此整个的电路还是由一个统一的时钟源驱动的。而异步电路没有统一的时钟源。

带有同步、异步的触发器参考。

8、异步FIFO深度计算

FIFO用于缓冲块数据流,一般是在写快读慢的时候。

8.1 数据传送的时间 = FIFO写满时间

公式:
FIFO写满的时间 = 数据传送的时间
FIFO写满时间 = FIFO深度 / (写入速率 - 读出速率)
数据传送时间 = 数据量 / 写入速率
因此:

FIFO深度 / (写入速率 - 读出速率)= 数据量 / 写入速率

给出一个例子:
在这里插入图片描述

现需要通过A写10万数据,并通过读时钟送给B,写时钟50Mhz,读时钟为40mhz,如果要数据不丢失,那么需要在AB之间插入FIFO,那么我们到底需要插入多大深度的FIFO呢?
数据传送的时间 = 数据量 / 写入速率
因此

数据传送的时间 = 100000 / 50mhz = 1 / 500s = 2ms

数据传送的时间 = FIFO写满时间 = FIFO深度 / (写入速率 - 读出速率)
因此 2ms = 深度 / 10mhz

FIFO深度 = 20k

8.2 深度 = 写数据量 - 读数据量

题目:

已知:clkA = clkB / 4 ; clk (en_B) = clkA * 100 ;en_B占空比为25%。求FIFO深度。

解:
假设clkA = 100 MHz ,clkB = 400Mhz,则TclkA = 10ns,TclkB = 2.5ns, 同理en_B = 10000MHz,Ten = 1000ns
由于enB占空比为25%,因此该信号高电平持续250ns。

假设clkA为读时钟,clkB为写时钟,当enB为高电平的时候,采用写时钟开始写数据,写入的数据量 = 250ns / 2.5ns = 100个数据。

当写使能有效的时候,有了数据,因此可进行读操作,读的数据 = 250ns / 10ns = 25 个数据

深度 = 写入数据 - 读出数据 = 75

因此FIFO深度为75.

9、摩尔和米利状态机

二者都是时序逻辑电路。

1、Moore 状态机的输出仅与当前状态值有关, 且只在时钟边沿到来时才会有状态变化。
在这里插入图片描述

2、Mealy 状态机的输出不仅与当前状态值有关, 且与当前输入值有关。
在这里插入图片描述

3、什么是状态图?
状态图是以几何图形的方式来描述时序逻辑电路的状态转移规律以及输出与输入的关系。
在这里插入图片描述

掌握两种状态机的区别
掌握一段、二段及三段式状态机的写法

10、FPGA内部结构资源

FPGA主要由可编程单元、可编程I/O单元及布线资源构成。
在这里插入图片描述

11、对于IC设计前端、后端的理解

设计前端也称逻辑设计,后端设计也称物理设计。
前端设计:需求分析与架构设计、将HDL语言–>网表,RTL设计、仿真验证、逻辑综合
后端设计:网表–>芯片版图。布局布线以及板级物理验证。

继续学习FPGA面试题目笔记(二)

参考

猜你喜欢

转载自blog.csdn.net/H19981118/article/details/124926275