华为不想错过我的推送,记得右上角-查看公众号-设为星标,摘下星星送给我!
达尔闻求职笔试经系列 专注解析各大公司经典笔试题,希望帮助到更多求职人,欢迎大家投稿。目前笔试经固定在 每周二更新,如果大家有其他需求,可以进入 达尔闻求职微信交流群, 添加妮姐微信: 459888529 ,注明:求职。本周是华为硬件逻辑岗的最后4道题解析,之后我们会解析通用硬件岗位的试题。本次解析是华为硬件逻辑实习岗的最后4道题。上周留下的题目有很多同学参与了答题,但整体正确率却创下了新低。初步分析就是大家对FPGA这块知识的掌握还是欠佳的,对一些概念性的东西了解不透彻,特别多选题更是拿捏不准,这需要大家多去学习、看书来,更要仔细看今天的解析。
40、(正确率≤23%)下列关于initial和always的说法正确的是( )。(华为硬件逻辑实习岗)
A initial和always不能同时执行
B initial只能执行一次
C always只要条件符合即可执行
D initial不可以综合,always可以综合
解析:本题目主要考察了Verilog中并行块的用法
这是道多选题,具体有几个正确选项题干没有明确说明,只能根据我们平时所积累的知识来一个个判断,如果多选了一个或者少选了一个都不得分。
这道题主要是考察的是Verilog中最常用的两个并行块的用法,always块在可综合的时序电路中是必不可少的语法,而initial块在仿真中也几乎是必须用到的。
并行块顾名思义,就是可并行执行,即是一上电多个并行信号同时执行。而在语法的实现上就是通过多个并行的always块来实现的,多个always块中的不同信号在FPGA上电后是同时执行的,所以这也是为什么同一个变量不能在多个always中被赋值的原因,会报出多驱动的错误。因为它们之间是并行执行的,电路不可能同时给同一个信号既赋值为0又赋值为1,会导致不确定的状态,所以同一变量只能在一个always中被赋值,这样代码更加清晰简洁容易维护。
同样initial也是,但和always不同的是initial一“上电”只执行一次,所以B选项正确,而always块是只要其敏感列表中的条件满足就一直执行下去,所以C选项正确。initial被一些综合器视为不可综合的语法,通常用于仿真的Testbench模块中对激励矢量的描述或用于给寄存器变量赋初值,而在实际电路中赋初值是没有意义的,在综合时会被忽略,但却可以在可综合模块中对存储器加载初始化文件,这属于一种可综合的行为,但不能就因此说initial就是可综合的语法,所以不要轻易在可综合的模块中使用initial,或者干脆最好不要用。所以D选项正确。
很多人没有选D选项可能是见到initial在可综合的代码中使用过,且有些综合其器还能编译通过,以为它是可以被综合的,但它确实是一种特殊的存在,如果使用不当可能会导致某些不可预测的错误。
如果always和initial同时存在于一个模块中时也是一“上电”同时执行的,不分先后顺序,所以A选项错误。
凡是在always和initial赋值号左边的变量都要定义成reg型,reg具有对某一个时间点状态进行保持的功能,如果在可综合的时序逻辑中表达,会被映射成一个真实的物理寄存器,而在Verilog仿真器中寄存器类型的变量通常要占据一个仿真内存空间。
41、(正确率≤19%)下列哪种说法正确( )。(华为硬件逻辑实习岗)
A 同步复位增加了时序收敛的难度
B 同步化异步复位可以保证逻辑正确复位
C 从使用资源的角度看,应该使用异步复位
D 异步复位可能会导致逻辑错误
解析