导航菜单

FPGA学习记录

1、在同步设计中,FIFO对前后级的握手信号如何产生?

答案:只要FIFO没满,就可以一直收数据,即对上级的应答信号ready一直拉高,FIFO不为空,就可以一直向下级发送数据 ,即数据发送信号valid一直拉高。 解析:此题是笔者再面试DJI数字前端设计中主管面时被问到的一个问题,在IP设计中,同步FIFO是经常被使用的,此时的FIFO模块的端口常常是包含上下级握手信号的接口,正确的产生握手信号是很关键的。此题在项目中是经常会遇到的,对有项目经验的人来说,难度较低,重点考察的知识点为FIFO设计&握手信号设计,笔者认为这两点是ip设计中基础且关键的点。

2、为什么异步fifo可以进行跨时钟域处理?

答案:异步fifo中使用了存储器RAM能将两个时钟域的时序路径隔开。在异步fifo的读写控制中,引入了格雷码同步。由于格雷码相邻两个码之间只有一位发生变化,因此在指针跨时钟域传递时如果发生亚稳态,指针要么是变化后的地址,要么是与同步前的指针保持一致。因此这不会引起fifo的功能紊乱,只是影响了其读写效率。

3、跨时钟域传输方式有哪些?

答案:①快时钟域到慢时钟域可能存在信号变化过快,慢时钟域采不到的情况,需要先对跨时钟域信号做电平展宽,在慢时钟域下同步展宽信号生成需要的脉冲信号,最后需要在快时钟域下同步脉冲信号,用于拉低电平信号。 ②慢时钟域到快时钟域 一般直接经过两级触发器即可,其原理是即使第一级触发器采到的值是亚稳态,经过一个周期的恢复时间(相对亚稳态来说,时间很长),第二级触发器采到的值极大概率是稳定的,需要注意的是,打两拍的方式只能大概率保证传输的值是稳定的,但不一定是正确的,因为当信号处于亚稳态后,经过一段时间恢复可能恢复到0,也可能恢复到1,注意在同步之前需要保证传输信号是寄存器信号。 多比特信号 :多采用异步FIFO和握手信号。异步FIFO适用于对传输速度要求比较高的系统,握手信号适合于对对传输速度要求慢一点的系统。 需要注意的是,当传输信号连续变化,且从慢时钟域到快时钟域时,此时并不完全需要用异步FIFO进行传输,可直接将信号进行格雷码转换(确保信号在传输时,相邻变化信号只有某一bit发生翻转,大大降低亚稳态的概率)并同步,在快时钟域将格雷码转换成二进制即可。 解析:跨时钟传输基本上是每个企业必问的一道题,其中包含的知识点很多,具有很强的延展性。切莫勿记八股,理解着记才更加深刻。

4、跨时钟域处理时对单bit信号有什么要求?

答案:源时钟域与目的时钟域之间不能有组合逻辑,组合逻辑各个路径的信号之间有延迟,导致运算后可能会出现毛刺。若时钟上升沿刚好在毛刺时刻采样,造成采样错误。 2.数据使能信号在跨时钟域前,也需要进行同步处理。 3.快时钟域到慢时钟域同步时,可能会由于脉冲过窄,导致慢时钟域没办法正确采样,导致信号丢失。因此在做慢时钟域到快时钟域的同步时,需要保证信号宽度是慢时钟域周期的1.5倍,或者在同步前做脉冲展宽。 是快到慢的时候,快时钟的单比特信号需要扩展到足够宽 ,慢时钟域的采样。

5、跨时钟域怎么解决(单多bit)?

答案:单bit跨时钟域处理 慢到快:两级触发器同步 快到慢:开环结绳法、闭环结绳法;握手 多bit跨时钟域 DMUX、异步fifo、握手、格雷码+双D触发器。单bit:慢时钟域到快时钟域,打两拍同步;多bit,转成格雷码同步打拍;快时钟域到慢时钟域:单bit,脉冲展宽; 2、握手协议; 3、异步fifo; 4、多bit mux,先基于valid缓存数据,然后基于valid同步打拍,最后再valid有效下更新数据

6、异步FIFO怎么设计?

答案:异步FIFO的设计主要有5部分组成。(1)双口 RAM 存储数据。(2)同步读数据指针到写时钟域。(3)同步写数据指针到读时钟域。(4)处理写指针和满信号的逻辑。(5)处理读指针和空信号的逻辑。

7、FIFO会不会存在假空假满的情况呢?

答案:会,异步FIFO会存在虚空虚满的情况。判空信号是在读时钟域中产生的,需要将写时钟的 写指针转换成格雷码并同步到读时钟域来,从而导致,被同步过来的写地址是慢于或者等于真实 的写地址的值,此时读地址的格雷码的值是真实的值,所以,此时判断出来的空状态是一个假空 状态,同理,可得到写时钟域判断出来的满状态是一个虚满状态,这不影响异步FIFO的功能使用, 只是会较低其工作效率。

8、单bit信号从慢时钟域到快时钟域有什么方法?

答案:单bit信号从慢时钟域可以通过直接两级触发器同步到快时钟域,但可能会出现在快时钟域被多次采样的的问题。若要求同步到快时钟域的是一个等宽脉冲,两级同步触发器就不适用了。而需要在快时钟域做引入边沿同步器,得到与快时钟域等宽的同步脉冲。

9、空满判断,为什么要Gray码,使用了Gray码以后对FIFO深度有要求吗,如果FIFO想一次读写都是2个bit怎么办?

答案:在异步FIFO中空慢标志的判断分别是将写指针同步到读时钟域和将读指针同步到写时钟域判断的。因此涉及到指针的多bit同步,由于格雷码相邻码之间只发生一位变化,在做同步时就相当于是对单bit信号进行同步,使设计变得简单。且如果同步时发生了亚稳态,稳定后的指针也只有一位变化,不会对fifo的功能造成影响。使用格雷码时,FIFO深度不一定是非要2的幂次方。

10、异步FIFO的深度和什么有关?如果不考虑读写时钟频率的关系,异步FIFO的深度的设定一般有什么限制嘛?

答案:异步FIFO的深度与读写频率有关以及突发传输的数据量有关。在宏观上,不考虑读写速率,那么异步fifo的深度在本质上与在一段突发数据传输的时间,还没有读出数据的数量有关,需要保证在能够存储这部分没有被读出的数据防止溢出。

11、同步、异步FIFO的区别,在设计中有哪些不同?

答案:区别:1.同步FIFO的时钟有且只有一个,读写数据均在同一个时钟有效沿下驱动,异步FIFO的 时钟通常有两个,读写数据在不同的时种下驱动。 2.同步FIFO常作为缓冲器使用,异步FIFO常作为跨时钟域处理使用。 在设计时,同步FIFO的空满状态可由一个计数信号产生,异步FIFO的空满状态需要将读写指针 先转成格雷码,判空(满)是在读(写)时钟域进行的,将写(读)指针的格雷码在读(写) 时钟域下同步,判空是读写指针的格雷码完全相同,判满是读写指针的格雷码高两位不同,其 余位相同。

12会不会出现FIFO永远不够深的情况,为什么?

答案:会,当不限制读写的空闲周期,每次传输,写比读快,都有额外的数据要缓存,就会出现FIFO 深度不够的情况。 例如:FIFO的写时钟频率为200MHZ,读时钟频率为100MHZ,读写都无空闲周期,这样,在每次写数据的时间内,读数据永远都读不完写的数据,导致一直有额外的数据要缓存,那么FIFO一定永远不够用,深度就只能是无限大。

相关推荐: