三方签毕,就前期准备过的和被问过的题目进行一个总结。
FPGA常见面试题目:
1. 什么是同步逻辑和异步逻辑?
同步时序逻辑电路的特点:各触发器的时钟端全部连接在一起,并接在系统时钟端,只有当时钟脉冲到来时,电路的状态才能改变。改变后的状态将一直保持到下一个时钟脉冲的到来,此时无论外部输入 x 有无变化,状态表中的每个状态都是稳定的。
异步时序逻辑电路的特点:电路中除可以使用带时钟的触发器外,还可以使用不带 时钟的触发器和延迟元件作为存储元件,电路中没有统一的时钟,电路状态的改变由外 部输入的变化直接引起。
可以说同步逻辑是时钟之间有固定的因果关系。异步逻辑是各时钟之间没有固定的因果关系。
2.同步电路和异步电路的区别
同步电路:存储电路中所有触发器的时钟输入端都接同一个时钟脉冲源,因而所有触发器的状态的变化都与所加的时钟脉冲信号同步。
异步电路:电路没有统一的时钟,有些触发器的时钟输入端与时钟脉冲源相连,这有这些触发器的状态变化与时钟脉冲同步,而其他的触发器的状态变化不与时钟脉冲同步。
3.跨时钟域信号的处理
- 跨时钟域的产生:
现在的芯片(比如SOC,片上系统)集成度和复杂度越来越高,通常一颗芯片上会有许多不同的信号工作在不同的时钟频率下。比如SOC芯片中的CPU通常会工作在一个频率上,总线信号(比如DRAM BUS)会工作在另一个时钟频率下,而普通的信号又会工作在另外的时钟频率下。这3个不同时钟频率下工作的信号往往需要相互沟通和传递信号。
不同时钟域下的信号传递就涉及到跨时钟域信号处理,因为相互之间的频率、相位不一样,如果不做处理或者处理不当,如下图所示的时钟域CLK_A的数据信号A可能无法满足时钟域CLK_B的setup/hold时间,可能导致:
① 数据丢失,无法采到预期中的信号;
② 亚稳态的产生。
从而导致某个电路模块或者整颗IC无法工作。 - 常见的跨时钟域信号处理方式:
① 两级DFF同步器(打两拍)
处理跨时钟域的数据有单bit和多bit之分,而该方法常见于处理单bit数据的跨时钟域问题,即采用两级DFF串联进行同步(定义两级寄存器,对输入的数据进行延拍),如下图所示:

采用两级寄存器的原因:考虑到平均失效间隔时间MTBF(Mean Time Between Failure)时间越长,出现亚稳态的概率就越小,但是也不能完全避免亚稳态。注意采样时钟频率越高,MTBF可能会迅速减小。时间越长,出现亚稳态的概率就越小,但是也不能完全避免亚稳态。注意采样时钟频率越高,MTBF可能会迅速减小。(有文献给出的数据:对于一个采样频率为200Mhz的系统,如果不做同步MTBF是2.5us,一级DFF同步的MTBF大概是23年,两级DFF同步的大约MTBF大概是640年,MTBF越长出错的概率越小。所以一级看上去不太稳,二级差不多够用了,至于三级可能会影响到系统的性能,而且增加面积,所以看上去没什么必要。)
使用该方法的同时尽量避免:时钟域A的组合逻辑信号直接敲两级DFF同步到时钟域B、 Clock-gating enable 信号没有经过异步处理 这两种情况的出现。
② 异步双口RAM(异步FIFO也可)
处理多bit数据的跨时钟域,一般采用异步双口RAM。假设有一个信号采集平台,ADC芯片提供源同步时钟60MHz,ADC芯片输出的数据在60MHz的时钟上升沿变化,而FPGA内部需要使用100MHz的时钟来处理ADC采集到的数据(多bit)。
在这类场景中,便可以使用异步双口RAM来做跨时钟域处理。先利用ADC芯片提供的60MHz时钟将ADC输出的数据写入异步双口RAM,然后使用100MHz的时钟从RAM中读出。
③ 格雷码转换
继续上面的ADC例子,将ADC采样的数据写入RAM时,需要产生RAM的写地址,但读出RAM中的数据时,肯定不是一上电就直接读取,而是要等RAM中有ADC的数据之后才去读RAM。这就需要100MHz的时钟对RAM的写地址进行判断,当写地址大于某个值之后再去读取RAM。
这种情况下,若直接使用100MHz的时钟于RAM的写地址进行打两拍的方式,考虑到RAM的写地址属于多bit,如果单纯只是打两拍,那不一定能确保写地址数据的每一个bit在100MHz的时钟域变化都是同步的,肯定有个先后顺序。如果在低速的环境中不一定会出错,但在高速的环境下就不一定能保证了,所以更为妥当的一种处理方法就是使用格雷码转换。
对于格雷码,相邻的两个数间只有一个bit是不一样的,如果先将RAM的写地址转为格雷码,然后再将写地址的格雷码进行打两拍,之后再在RAM的读时钟域将格雷码恢复成二进制,这样就相当于对单bit数据的跨时钟域处理了。
(格雷码:第0位竖列顺序为0110,第1为竖列顺序为00 11 11 00,第3位竖列顺序为0000 1111 1111 0000,以此类推继续double)
格雷码与十进制互换的代码:
4.时序设计的实质
时序设计的实质就是满足每一个触发器的建立/保持时间的而要求。
5.建立时间与保持时间的概念
建立时间:触发器在时钟上升沿到来之前,其数据输入端的数据必须保持不变的时间。如果建立的时间不满足要求那么数据将不能在这个时钟上升沿被稳定的打入触发器。
保持时间:触发器在时钟上升沿到来之后,其数据输入端的数据必须保持不变的时间。如果保持时间不满足要求那么数据同样也不能被稳定的打入触发器。

考虑后期为“建立时间和保持时间的理解”做一个总结。
6.为什么触发器

875

被折叠的 条评论
为什么被折叠?



