本期继续解析中兴FPGA岗不定项选择和单选部分的笔试题。点击这里回看前两期解析:第一期;第二期
13、下列关于FPGA中分布式RAM的描述正确的是( )C 相对于BRAM,分布式RAM对FPGA时序的影响更小D 相对于BRAM,分布式RAM的更适合构成容量较小的RAM解析:本题主要考察了块RAM(Block RAM,BRAM)和分布式RAM(Distributed RAM)的区别块RAM(Block RAM,BRAM)和分布式RAM(Distributed RAM)是FPGA中常用的两种RAM资源,可以构成RAM、ROM、FIFO、移位寄存器等。分布式RAM可以是纯组合逻辑,即给出地址马上出数据,也可以加上寄存器变成有时钟的RAM,而BRAM一定是有时钟的。分布式RAM使用多少,综合后就会消耗多少。而BRAM是块RAM,它的大小和位置是固定的,即使只使用了一点点BRAM,综合后同样会消耗一整块RAM。从物理上看,BRAM是FPGA中固定的RAM资源,由大块的SRAM构成,常见的有M4K、M9K、M18K、M36K。分布式RAM是用LUT拼出来的,而LUT本质上讲也是一个SRAM,只不过是容量较小的SRAM。同样都是由SRAM构成,所以读写速度理论上都是一样的,所以A选项错误。CLB是指可编程逻辑功能块(Configurable Logic Blocks),顾名思义就是可编程的数字逻辑电路。CLB是FPGA内的三个基本逻辑单元。CLB的实际数量和特性会依器件的不同而不同,但是每个CLB都可配置,在Xilinx公司的FPGA器件中,一个CLB由4个Slice组成,这4个Slice又分SliceM和SliceL,其中M是Memory的首字母,L是Logic的首字母,比较SliceM和SliceL,他们的区别就是SliceM的查找表具有RAM和ROM的功能,而SliceL的则不具备。所以SliceM比SliceL多的功能就是做存储器和移位。于是有:SliceM可实现分布式RAM,而分布式RAM是由SliceM中的LUT实现,B选项正确。BRAM是一列一列分布的,这样可能造成用户逻辑模块和BRAM直接的距离较长,延时较长,最终导致性能下降。但这并不意味着用分布式RAM的性能就一定比BRAM的性能好,由于LUT单元并不一定是连续的,构成的分布式RAM之间会有线延迟。所以具体谁对FPGA的时序影响更小还要看具体的布局布线情况,所以C选项错误。如果需要使用较大的存储空间建议用BRAM;如果只是需要比较小的零散的存储空间一般就用分布式RAM。但这只是个一般原则,具体的使用得看整个设计中资源的冗余度和性能要求,所以D选项正确。解析:本题主要考察了Verilog HDL语言中标识符的书写规则题目中虽然没有明确说明是考察什么语言的标识符规则,但因为本套题目解析的是FPGA岗的题目并结合四个选项,所以我们以Verilog HDL语言来解析。Verilog HDL中的标识符是指用来声明数据,变量,端口,例化名等除关键字外的所有名称的组合。如:input a, 这里a就是一个标识符,用来代表一个输入端口的名称。Verilog HDL中的标识符(identifier)可以是任意一组字母、数字、$符号和_(下划线)符号的组合,但不能是Verilog HDL语法中规定的关键字,且标识符的第一个字符必须是字母或者下划线。标识符最长可以是1023个字符,并且标识符区分大小写。在<a target="_blank" href="http://mp.weixin.qq.com/s?__biz=Mzg5MDIwNjIwMA==&mid=2247486174&idx=2&sn=4ea5742c24cbc34ca0d02ce29e26a11c&chksm=cfe16849f896e15fb2a4d1b671e1e7de7bcabc6dcb88a9c9c934fc8c2a3f69cc4ec7e4220008&scene=21#wechat_redirect" textvalue="“求职" 笔试经’第十一弹:华为硬件逻辑岗”'="" data-itemshowtype="0" tab="innerlink" data-linktype="2">“求职'笔试经’第十一弹:华为硬件逻辑岗”第24题有关于VHDL语言中标识符的书写规则,可以对比学习。B选项以数字开头不合法、C选项以问号结尾也不合法。A 异步复位信号时序不容易满足要求,需要代码设计时充分加以考虑B 异步复位与时钟信号无关,所以需要保证复位信号干净无毛刺,以防出现误复位的情形C 当释放异步复位的时候,该触发器时钟可能马上跳转,引起触发器的建立时间不够D 由于异步复位与时钟无关,在释放异步复位后,由于时钟和复位信号传播的微小延时,可能会引起寄存器没有同时释放复位异步复位在FPGA的设计中经常会用到,但在开发FPGA的EDA工具都是基于同步逻辑的设计,对异步相关的设计无法进行时序的分析,所以也无法判断时序是否满足要求,A选项看上去没什么问题,其实源头就错了。B选项的描述完全正确。C选项和D选项都是说的复位释放没做好,会产生系统亚稳态的现象,所以异步复位和时钟需要有一个稳定的关系,即复位恢复时间(recovery time)和复位解除时间(remove time),详细请参考“求职攻略| 建立时间VS保持时间,竞争VS冒险(紫光展锐IC笔试题)”第4题。为了解决这个问题,我们一般采用异步复位同步释放的方法,在“求职攻略| 笔试必考:异步复位与同步释放”中有详细的讲解。所以正确答案选B、C、D。最后关于FPGA中复位的相关用法,可以参考<a target="_blank" href="http://mp.weixin.qq.com/s?__biz=Mzg5MDIwNjIwMA==&mid=2247486602&idx=1&sn=24b08ceaea977611f7ded99082de8f3b&chksm=cfe16e1df896e70b506da4bb1e6f93bfd961fb06aee2c860e003865cebd20416c080ae26d172&scene=21#wechat_redirect" textvalue="“求职" 笔试经’第十五弹:fpga设计中复位用法(华为硬件逻辑岗)”'="" data-itemshowtype="0" tab="innerlink" data-linktype="2">“求职'笔试经’第十五弹:FPGA设计中复位用法(华为硬件逻辑岗)”第41题的解析。A 偏移约束(IPAD到FF5、FF5到OPAD)通俗来讲时序约束就是在FPGA逻辑设计中设计者需要告诉EDA开发工具(Quartus、Vivado、ISE等工具)应该从哪个引脚输入信号、输入信号需要延迟多长时间、时钟周期是多少。这样EDA开发工具在布局布线的时候就知道怎么去操作,从而满足设计要求。时序约束主要包括:时钟周期约束、I/O延迟约束、跨时钟域路径约束、多周期路径约束、伪路径约束、最大/最小延迟约束。从题目选项中给的名字来看我们并不容易一一对应上,但括号里面的内容给了我们提示,这就好理解了,其实在“加油站|FPGA时序分析看这篇就够了(大疆逻辑岗)”第4题中就有对这些路径的介绍,一共包括:从输入到输出的路径、从输入到寄存器的路径、从寄存器到寄存器的路径、从寄存器到输出的路径、异步清零信号和时钟存在异步的进入和退出的时序问题。所以A选项对应的是I/O延迟约束,也是从输入到寄存器的路径、从寄存器到寄存器的路径;B选项对应的是最大/最小延迟约束,从输入到输出的路径;C选项对应的是时钟周期约束,从寄存器到寄存器的路径。所以A、B、C选项都正确。A 从高速时钟域到低速时钟域,可以采用打两拍的方式B 对于错误敏感的关键数据,最好用RAM进行时钟域转换解析:本题主要考察了多bit信号跨时钟域的处理方法