笔试题-2023-禾赛-FPGA(附答案及解析)
1、使用最少的电路实现二分频,给出原理图。
2、解释环形振荡器的构成和原理
环形振荡器的构成:
奇数个反相器Q首尾连接而成。
环形振荡器的原理:
利用门电路 的固有传输延迟。电路没有稳态,静态下(假定没有振荡时)任何一个反相器的输入和输出都不可能稳定在高电平或低电平,只能处于高低电平之间,处于放大状态。
3、什么是建立时间和保持时间?
建立时间:有效时钟沿到来之前数据必须保持稳定的时间。
保持时间:有效时钟沿到来之后数据必须保持稳定的时间。
4、建立时间和保持时间哪个和时钟速率有关?列出建立时间和保持时间违例的情况!
建立关系:与工作频率有关
保持关系:
题目问法有点问题,理论上建立时间和保持时间都是时序器件固有属性,与时钟频率都无关,应该是想问建立关系和保持关系哪个和时钟速率有关。
建立时间违例的情况: 从建立关系就可以推断
- 组合逻辑过于复杂,时延较大。
- 负时钟偏斜较大
- 时钟频率过大。时序关系太严格。
- 工艺库较落后。
保持时间违例的情况:
- 正时间偏斜较大。
- 工艺库较落后。
5、详细给出建立时间和保持时间裕量的计算方法
对于max延迟分析 (setup/recovery):
- 裕量= 数据需要的时间 - 数据到达的时间
对于min延迟分析 (hold/removal):
- 裕量=数据到的时间 - 数据需要的时间
建立时间裕量:
保持时间裕量:
6、介绍FPGA SLICEL 的基本构成单元。
SLiceL的基本构成单元:
- LUT6*4:每个LUT有六个独立的输入 (A1-A6),两个独立的输出(O5-O6) 。一个SLice中的四个LUT分别以A B C D编号。
- 多路选择器*3: 用于查找表的尾款拓展。
- 进位链1:时间超前进位逻辑。
- 触发器*8:每个slice有8个存储单元。四个可以配置为边沿触发D型触发器或电平敏感的锁存器。
7、不需要流水线。给出两种8bit a/b 的实现方法。
8位a/b的实现方法有很多,下面给出两种实现方法:
方法一:使用移位和加减运算实现
思路:将a和b都左移8位(相当于乘256),之后用a减去b,如果减完之后a变成了负数,那么将a加上b,否则继续保持不变即可。最后将结果右移8位(相当于除以256),即为a/b的结果。
C语言代码实现:
方法二:使用查表法实现
思路:将除数b作为查表的索引,预先计算出a/b的商,并存储在一个256字节的查表表格中,最后通过查表的方式找到商即可。
C语言代码实现:
需要注意的是,这种方法需要先预先计算并存储256个商,所以需要消耗一定的存储空间。
8、介绍同步复位和异步复位的优缺点,写出异步复位同步释放的代码。
异步复位同步释放的代码:
9、分析如下电路可能产生的问题,解决?
类似多bit数据跨时钟域问题,可能会导致亚稳态或数据无法正确跨时钟域。
不能直接采样,需要加入对于处理电路,首先将多bit信号组合逻辑输出在CLK_a存一拍,然后进行单bit跨时钟域处理。
如果CLK_a比CLK_b慢,可以采用打两拍的方法。
如果CLK_a比CLK_b快,可以采用脉冲同步器或者握手处理。
10、统计1024个连续 8bit 输入数据的直方图,实时输出当前出现次数最多的数字。
题目没有限制要用尽量少的逻辑资源,简单的写法可以generate 256 个寄存器,来一个对应数据就加一,这样在实现上是比较简单的。如果考虑到综合实现,用一个ram来存比较合适。
实时输出当前出现次数最多的数字? 这个有点难,意味着要持续完成256个出现次数的比较,并且还要得到最大次数对应的地址,每帧数据输出最大值还差不多?
这里只实现了直方图统计,比较简单
testbench:
Modelsim脚本:
整理不易,对你有帮助的话,记得收藏下来,慢慢刷!
回顾往期精彩笔试真题:
#笔经面经##数字IC##芯片##你为什么选择硬件行业##春招#