达尔闻求职笔试经系列专注解析各大公司经典笔试题,希望帮助到更多求职人,欢迎大家投稿。目前笔试经固定在每周二更新,如果大家有其他需求,可以进入达尔闻求职微信交流群,添加妮姐微信:459888529,注明:求职。
华为的这一套硬件逻辑岗的题目已经解析了很久了,终于快接近尾声了。
我们对剩下为数不多的题目进行了分类,上次预留的题目做过的同学也可以看出都是和HDL语言相关的语法题,而今天文末预留的7道题目则是和硬件相关的。后面还有数字信号处理和C语言的题目,我们可以看出华为硬件逻辑实习岗的笔试题考察的内容还是很全面的。上周推文里,还记得最后我们预留的题目吗?(点击这里查看>>)有100多名同学参与回答,今天的解析我们讲结合同学们回答的正确率,重点分析错误原因。从最后统计的结果来看有些题目还是有很多同学选错,这说明了部分同学的基本功不够扎实哦。但是不要怕,看了今天的解析后,希望做错的同学都能够记住以后再遇到就不会出错了,下面请看我们今天的解析。20、(正确率55%)Verilog HDL语法中,下面哪一个是错误的端口类型( )。(华为硬件逻辑实习岗)A output B bi-directionaL解析:本题主要考察了对Verilog语言端口类型的认识这道题的正确率过半了,但是选择C的人数也很多,占到了38%,为什么呢?首先A选项和D选项是毫无疑问的,如果还有选错的同学,说明你还不会Verilog,是FPGA的门外汉,因为input输入和output输出是最常用的。选C项的同学我想你写的代码还不够多,或者说是刚刚入门FPGA,见的比较少,不过inout确实用的也相对较少,但是如果你写过IIC的代码,一定知道inout怎么用。定义为inout的端口表示该端口是双向口,既可以作为数据的输入端口也可以作为数据的输出端口,在Verilog中的使用方式如下://---------------------------------02 input wire sel , //输入输出控制信号,sel为1时双向数据总线向外输出数据,sel为0时双向数据总线为高阻态可以向内输入数据03 input wire data_out, //由内部模块传来要发送给双向数据总线向外输出的数据05 inout wire data_bus, //双向数据总线06 outputwire data_in //接收双向数据总线从外部输入的数据后输出到其他内部模块09//data_in:接收双向数据总线从外部输入的数据10assign data_in =data_bus;12//data_bus:sel为1时双向数据总线向外输出数据,sel为0时双向数据总线为高阻态可以向内输入数据13assign data_bus =(sel==1'b1)?data_out :1'bz;//---------------------------------根据上面RTL代码综合出的RTL视图下所示:
而B选项仅仅是英文“双向”的意思,并不是Verilog的语法,更不能作为端口类型使用。
21、(正确率69%)Verilog用什么注释掉一行( )。(华为硬件逻辑实习岗)这道题目的正确率最高,说明大家对Verilog语言还是了解的很多的,我想只要学习过Verilog的同学都不会做错。选择项中A和B故意弄成一对相反方向的双斜线,如果印象不深刻很容易误选。C选项也是注释,但不是Verilog中的注释,而是在仿真中使用的do文件中的注释,可以起到注释掉一行的作用。D选项也是注释,在Matlab中起到注释掉一行的作用。我们在Verilog中使用“/*......*/”也可以实现注释的功能,进行注释时“/*......*/”之间的语句都将被注释掉,所以“/*......*/”不仅仅可以实现一行的注释,还可以实现多行的注释,而题干重点问的是注释一行,即便选项中有“/*......*/”,也选择B选项最佳。22、(正确率38%)在VerilogHDL中,下面哪个是在RTL代码中不可以直接使用的运算符( )。(华为硬件逻辑实习岗)解析:本题主要考察了对Verilog语言中运算符的认识这道题目的正确率较低,让人诧异的是选D的人数竟然超过了选择正确答案的人数。没有选B的同学我想可能是受到“/*”的干扰,但是单独的“/”也是没有意义的,而且题干中也明确说明了是“运算符”,A项作为一元运算符使用时表示归约或,作为二元运算符使用时表示按位或(详细请参看第三弹第4题);C项是最常用的加法运算符;D项也和A项一样有两种用法,作为一元运算符使用时表示归约异或,作为二元运算符使用时表示按位异或。异或运算符在代码的设计中有很多妙用,如:同时取信号的上升沿和下降沿、实现简单的加密功能、CRC校验算法实现等。23、一个VHDL程序,至少要包括( )。(华为硬件逻辑实习岗)这个题目是一道多选题,正确答案是A和C,投票无法看到同时选择A和C的人数,所以无法算出正确率,总的来说选A和C的是最多的,A选项有35%的人选择,C选项有26%的人选择,所以这道题最多只有26%的人做对,正确率是相当的低。如果学习过VHDL语言的同学我想这道题目对他来说并不是很困难,可见大多数同学是不太懂VHDL语法的,这道题对VHDL语言的要求也不是很高,只需要稍微了解入个门即可做对。一个VHDL程序的基本单元是设计实体,它可以是一个简单的门电路,也可以是一个复杂的数字系统。它既能作为一个电路的功能模块而单独存在和运行,也可以被其它数字系统所调用,从而成为这个系统的一部分。不管其功能复杂成度多大,VHDL程序的结构基本相同,一般由库、程序包、实体、结构体及配置语句构成。其中实体和结构体两部分是必需的,由这两部分即可构成一个简单的VHDL程序。//---------------------------------01LIBRARYIEEE; --库使用说明语句(VHDL中的行注释很奇特哦,是“--”)02USEIEEE.STD_LOGIC_1164.ALL;03ENTITY test IS --实体说明部分12ARCHITECTURE mux21a OF test IS --结构体部分22ENDARCHITECTURE mux21a;//---------------------------------根据上面RTL代码综合出的RTL视图下所示:
上面的代码中以关键字ENTITY引导、END ENTITY结尾的语句部分称为实体。VHDL的实体描述电路器件的外部情况及各信号端口的基本性质。以关键字ARCHITECTURE、END ARCHITECTURE结尾的语句部分,称为结构体。结构体描述电路器件的内部逻辑功能或电路结构。最前面的IEEE库使用说明语句定义端口类型时使用了STD_LOGIC其在IEEE.STD_LOGIC_1164.ALL中做了预定义。一个相对完整的VHDL程序至少应包括三个基本组成部分:库、程序包使用说明,实体说明和实体对应的结构体说明。(1)库、程序包使用说明用于打开(调试)本设计实体将要用到的库、程序包;(2)实体说明用于描述该设计实体与外界的接口说明,是可视部分;(3)结构体说明用于描述该设计实体内部工作的逻辑关系,是不可视部分。在一个实体中,可以含有一个或一个以上的结构体,而在每一个结构体中又可以含有一个或多个进程以及其他的语句。24、(正确率36%)在VHDL中,下列标识符正确的是( )。(华为硬件逻辑实习岗)解析:本题主要考察了VHDL语言中标识符的书写规则标识符用于定义常数、变量、信号、端口、子程序或参数名字。(1)由26个大小写英文字母、数字0~9及下划线“_”组成的字符串;A选项违反第六条规则,B选项违反第二条规则,C选项违反第一条规则,所以D选项正确,希望大家以后可以记住这些规则。总结:通过这次做题目的情况来看同学们对Verilog语言掌握的普遍要比VHDL语言好,我想这是有原因的,说明大多是同学入门学习FPGA时首选Verilog语言的更多一些,有些是学校课程的安排,有些是自己主动接触的。很多初学者往往会问到底用哪种语言来开发FPGA更好,这里我们对这两种语言进行简单的对比:VHDL与Verilog相比,有以下优势:语法比Verilog严谨,通过EDA工具自动语法检查,易排除许多设计中的疏忽。有很好的行为级描述能力和一定的系统级描述能力,而Verilog建模时,行为与系统级抽象及相关描述能力不及VHDL。VHDL与Verilog相比,有以下不足之处:VHDL代码较冗长,在相同逻辑功能描述时,Verilog的代码比VHDL少许多。VHDL对数据类型匹配要求过于严格,初学时会感到不是很方便,编程耗时也较多;而Verilog支持自动类型转换,初学者容易入门。VHDL对版图级、管子级这些较为底层的描述级别,几乎不支持,无法直接作集成电路底层建模。综上所述,我们推荐大家在初学时选择语法更简单、更容易接受的Verilog进行FPGA的开发,这样能够更快速的上手FPGA的开发,而把省去学习复杂语法的时间来专攻FPGA设计的方法。但是无论对于哪种语言我们都希望大家能够做到的是精通一个、熟练一个,这样就能应付更多的问题了。下期,我们将对下面7道硬件相关的题目进行详细的解析,大家可以提前做一下,敬请期待……目前,我们安排的是每周二更新求职笔试经系列,计划涵盖的公司包含:华为,京东,大疆,商汤,中兴,CVTE,AMD,海康威视,黑金,汇顶等。(会陆续补充)
第一弹:华为硬件逻辑岗
第二弹:海康威视硬件岗
第三弹:华为硬件逻辑岗
第四弹:华为硬件逻辑岗&通用硬件岗
第五弹:华为硬件逻辑岗&硬件通用岗
第六弹:华为硬件逻辑岗
第七弹:华为硬件逻辑岗
第八弹:大华嵌入式岗
第九弹:紫光展锐数字IC岗(编程题)
第十弹:华为硬件逻辑岗