搜索

FPGA工程师面试题汇总(附答案)

发表时间:2023-07-24 16:29

1.如果存在时序违例,它们有何影响?可以如何修复?

解题思路:时序违例分为2类:建立时间违例和保持时间违例。 简历时间违例的发生,会导致数据没有充足的时间在时钟上升沿到来之前做好准备,从而可能导致采集到的数据不正确。 建立时间违例的修复方法有以下2种: (1)改用速度更快的器件,降低触发器时钟边沿到数据输出端的响应时间,以增大留给建立时间的时间余量。 (2)缩短电路中的逻辑。如果在电路中2级D触发器之间的组合逻辑电路逻辑深度过深或者逻辑过长,可以考虑分步进行,将一段长的逻辑分成两个或者多个步骤分别实现,以减小每个时钟周期内Tp-logic逻辑运算时间,从而增大留给建立时间的时间余量。 保持时间违例的发生,会导致前一个周期的数据尚未打入后一级电路就被冲掉。 保持时间违例的修复方法有以下4种: (1)改用速度慢一些的器件,增加器件响应时间,从而增大Tcq时间,以增大留给保持时间的时间余量。 (2)加长2级D触发器中组合逻辑电路中的逻辑,加长逻辑运算时间Tp-logic。以增大留给保持时间的时间余量。 (3)加延迟缓冲。如可以加2级反相器。在不影响原有逻辑的基础上,加大数据传播所需要的时间,从而增大留给保持时间的时间余量。 (4)降低器件电压(不推荐)

2.亚稳态产生的原因是什么?它稳定之后的结果是确定的吗?

解题思路:产生的原因:在数字电路中,如果数据传输的过程中不满足建立时间和保持时间,或者是复位信号释放不满足恢复时间,则电路会产生亚稳态。 亚稳态稳定之后的结果:亚稳态需要经过大于等于决断时间的时间之后才会回到一个确定的状态,但是这个结果是随机地稳定到0或者1上。

3.AXI4总线有哪些通道,为什么会没有读响应通道

解题思路:AXI4总线包括以下5个通道:写地址通道、写数据通道、写响应通道、读数据通道、读地址通道。 没有读响应通道的原因:因为读数据通道可以从接收端接收到数据,因此它也有AXI4读响应功能,因此不需要再额外开辟一条读响应通道。

4.数字IC设计的全流程包括哪些步骤?

解题思路:市场调研->模块分配->RTL编写->功能仿真->逻辑综合->形式验证->STA(静态时序分析)->布局规划->插入时钟树->布线->布线后的STA->LVS、DRC检查

5.两段式状态机和三段式状态机有何不同?

解题思路:两段式状态机有两个always块: 一个采用时序电路描述状态的转移方式,即当前状态和协议状态的跳转。另一个采用组合逻辑电路来输出相应状态的数据。 三段式状态机有三个always块: 一个采用时序电路描述当前状态和协议状态的跳转。一个采用组合逻辑电路来描述下一状态的转移条件,第三个采用组合逻辑电路来输出相应状态的数据。

6.异步FIFO当中为什么要使用格雷码?

解题思路:为了能够使得在电路发生亚稳态等异常的时候能够使得FIFO的判空和判满不会发生致命的错误。二进制码在进做判空或判满操作时,数据的所有bit位都会发生变化。如果地址变化的时候,由于时钟发生抖动等因素造成了亚稳态,最后稳定下来,地址的每一个bit都会随机地稳定到0或者1,如对于一个深度为4的FIFO而言,若此时写入地址为010,那么下一次写入的地址应该是011,并且是为满的状态。但是若发生亚稳态,则有地址可能编程100或者010,造成地址的超前或者滞后,并且判空判满做出了错误的判断。而使用格雷码,因为每一次只有一个bit的数据发生变化,所以地址的变化即使发生了亚稳态,也不会对FIFO的工作产生致命性错误。在地址变化的过程中,若发生亚稳态,此时地址只可能是不变化或者是变成正常情况下的下一地址2种情况,最坏的情况只会是它本身,把上一次写的数据给覆盖掉,FIFO的判空和判满不会发生致命的错误。依旧以深度为4的FIFO举例,若此时地址所对应的格雷码为11(对应十进制的地址2),它的下一状态应该是10,并且是满状态。若发生了亚稳态,最坏情况就是把11种的数据替换掉,而不会发生地址超前或者滞后的情况。因此对FIFO的空满判断不会造成致命的影响。

7.latch是如何产生的,如果在时序电路中会不会产生latch?

解题思路:Latch只会发生在组合逻辑电路中。如果在组合逻辑电路中的代码书写逻辑不完整,如有if没有else,有case没有default,就会产生latch。Latch对于时序分析非常不友好。如果一个模块中既有时序电路,又有组合逻辑电路,尽量避免latch的产生。在时序电路中不会产生latch。

8.在FPGA中,BRAM和DRAM有什么区别?

解题思路:BRAM是块RAM,在FPGA中是以块为单位出现,它的输出需要给时钟。BRAM在FPGA中是一种单独的定制资源,它对时序分析相较于DRAM要友好得多。但是它是以块为单位出现的,即使使用了BRAM中的一小部分,这块BRAM就无法再次使用。DRAM是分布式RAM,它是使用FPGA中的LUT(查找表资源)来进行搭建的,因此DRAM会占用FPGA中的LUT资源。DRAM不需要时钟进行驱动,并且使用较为灵活,可以定制任意大小的DRAM。 一般而言,少量数据使用DRAM存储,大量数据采用BRAM存储。对时序要求高的电路使用BRAM。

9。FPGA的资源有哪些?

解题思路(1)IOB可编程输入输出单元 (2)可编程逻辑块 (3)数字时钟管理模块 (4)BRAM (5)布线资源 (6)底层内嵌功能单元——PLL(锁相环)、DSP等 一般会针对LUT、BRAM和DRAM进行深入提问

10.reg型和always块变量可以用在组合逻辑电路中吗?

解题思路:reg型和always块变量可以用在组合逻辑电路中。此时always块的写法不再是时序电路中由时钟来进行驱动,而是写成always@(*)。此后reg型变量在always块中进行运算即可

来源:牛客网

声明:所有文件均来源于网络,如有侵权请联系客服删除,谢谢!
Contact Us
联系我们

联系电话:17788028798 联系地址:西安市碑林区文艺路街道友谊东路81号天伦盛世2栋2509室

扫扫码添加微信
姓名
*
手机
*
提交
关注公众号
首页            热门课程              实战课程             文章问答              
▇▇▇▇▇