【个人向5】秋招X公司逻辑岗笔试题,记录学习,笔试已过

文章简介

个人学习总结5 - 秋招X公司逻辑岗笔试题,记录学习用。
个人向!!!
里面有很多重点,个人尽力总结,有点基础也可以看!
参考:X公司25秋招,逻辑岗笔试题
个人笔试过了,总结下了每个选项和自己的答案,但不确定一定是正确的,因为没有标答!
!此文章包括Verilog运算符、Verilog语法、FPGA知识、latch、异步复位、FIFO,总线通信、时序分析、高速数字设计、C语言、跨时钟域传输CDC
!个人NTU在读,欢迎大佬指正,任何问题都可以!


个人对Verilog语法、基础模块及仿真有所总结,可以参考之前的文章 :)


真题部分

Q1. 在Verilog中,reg变量一定会被综合成寄存器吗?
- 不一定!Verilog中,reg是一种用于存储值的数据类型,可以理解为寄存器,但是不等价于物理层面的寄存器,只是语法的声明而已,被用在always块中
- 在时序逻辑中,如果reg X要在时钟边沿上更新,综合工具会把它综合为寄存器;组合逻辑中只是逻辑门
- 拓展:wire也声明信号,但只用于内部组合逻辑连接,不可以存储值,也不决定物理层面的综合结果

Q2. coridc算法较为复杂,更适合CPU上实现而不是FPGA?
- CORDIC(Coordinate Rotation Digital Computer)算法即坐标旋转数字计算方法,用于三角函数、双曲线、指数、对数的计算。
- 优点:无需硬件乘法器,仅使用移位、加法和查表,非常适合资源受限的环境;适合硬件流水线化,实现高吞吐率
- 缺点:迭代次数较多,计算延迟可能较长;精度受限于迭代次数和定点位宽
- CPU可以使用浮点运算单元,直接处理高精度浮点计算;CPU适合处理需要不同运算模式的任务;在CPU上编程简单,使用软件库即可实现CORDIC;CPU的性能瓶颈在于任务并行性和实时性,当需要处理大量高吞吐率数据时,CPU可能不足以满足需求
- FPGA可以通过并行化设计,使用多个CORDIC模块同时处理多路输入;FPGA天生适合实时处理,特别是在需要稳定低延迟的应用中;FPGA具有丰富的可编程逻辑资源,可以通过定制化设计实现更高效的CORDIC运算;需要精心设计电路以达到性能和资源的平衡

Q3. 在FPGA中怎么实现倍频,组合逻辑?寄存器?DCM?还是寄存器和组合逻辑共同实现?
- 使用DCM(Digital Clock Manager)或PLL(Phase-Locked Loop)这是实现倍频的最主流方法,适用于大多数FPGA,是 FPGA 中的专用硬件模块,支持对输入时钟进行倍频、分频或相位调整,能够生成高精度和稳定的倍频时钟信号
- 优点:高精度和低抖动,可生成多种不同频率的时钟信号,自动管理时序问题
- 缺点:依赖 FPGA 的内部资源,数量有限,不适合对动态频率变化的场景
- 组合逻辑可以实现倍频,但只能是占空比极小的信号,感觉不适合使用

Q4. 异步复位的四个描述
1. 可以方便地使用全局复位网络。正确!异步复位不依赖时钟,因此可以直接通过全局复位网络传输到所有模块,这在FPGA中非常常见,FPGA通常提供专用的全局复位网络,用于分发复位信号
2. 节省FPGA资源。正确!直接作用于触发器的复位端口,不需要额外的逻辑资源(例如计时器)在逻辑复杂时节省资源
3. 对信号毛刺不敏感。错误!异步复位信号对毛刺非常敏感。如果复位信号在时钟边沿附近撤销(亚稳态窗口时),会导致触发器进入未知状态。这是异步复位的一大缺点,因此在实际设计中,复位信号通常需要经过去毛刺处理或同步到时钟域。
4. 设计简单。正确!不需要考虑时钟域的同步复位逻辑,只需直接驱动复位端口

Q5. 关于锁存器latch的描述
1. 设计中应该避免使用锁存器。正确!latch是电平敏感,会导致时序分析变得复杂,并可能引发不可预期的行为(如毛刺、竞争和冒险)
2. 锁存器是一个小的组合环,在新赋值前一直保留原来的取值。错误!锁存器不是一个简单的组合环,而是由触发机制决定其状态变化的电路,组合环通常指反馈电路中的竞争与冒险问题,与锁存器概念不同
3. 锁存不一定是设计的原意,可能是由于代码导致综合出锁存器。正确!锁存器的意外出现通常是由于 HDL 代码未正确指定所有信号的赋值路径,例如漏写条件分支下的默认赋值
!海思笔试:组合逻辑中,case条件不全但没有default;if没有else;case选择语句中组合逻辑缺少分支表达会综合出latch。而时序逻辑中if没有else不会综合出latch,是允许的。

Q6. 在条件表达式中可以使用高阻Z吗
- 条件表达式是0/1逻辑,z是用于模拟电气特性的高阻态,无法参与计算,可以通过三态缓冲器来正确处理高阻态

Q7. time, parameter, reg, integer哪个不属于抽象数据类型
- 抽象数据类型是一种为变量提供抽象意义的类型,可以存储或表示值,并且可以参与运算或用于建模设计行为
- reg和integer典型的抽象数据类型,用于存储和操作数值
- time也是一种抽象数据类型,用于模拟仿真的时间单位,便于表达时间相关的设计行为
- parameter用于定义常量值,在编译时被解析,不会在仿真中作为变量存储,只是一个用于配置或参数化模块的静态常量,不是抽象数据类型

Q8. 在同步设计中,如果同时使用时钟的上升沿和下降沿,对时钟的什么要提出更高要求?
- 时钟质量:正确!系统需要在两个时钟边沿之间同步工作。时钟质量差(如时钟抖动、噪声或时序不稳定)可能会导致系统的稳定性问题,甚至引发错误的触发
- 时钟过冲:错误!是时钟信号发生短暂超出预期范围的现象,影响系统设计,但它并不直接关联到双边沿触发器的使用
- 时钟占空比:错误!高电平持续时间与周期的比例,对于时钟质量重要,但不直接影响是否使用双边沿触发器
- 时钟频率:错误!双边沿触发器的设计并不必然要求极高的频率,而更重要的是时钟信号的稳定性。

Q9. FPGA中不使用的管脚如何处理?1.输出三态;2.输入三态;3.输入低电平;4.输出低电平
- 需要特别处理,以确保电路的稳定性和正确性
1. 输出三态管脚有0/1/z三种状态,总线系统中,多个设备共享同一条总线时,只有一个设备能够驱动信号,其他设备处于高阻态,管脚不用于输出时,可以设置为高阻态,这样不会影响其他设备
2. 输入端口通常不使用三态
3. 输入0这种方式不能表示“禁止”输入管脚的能力,一般不会设置为低电平来控制状态
4. 输出0限制了管脚的灵活性,不能在总线或其他系统中灵活地“释放”该管脚,不如输出tri

Q10. 同步设计的好处
1. 电路有确定的初始态,且相对于异步逻辑节省面积。错误!同步设计确实具有确定的初始态,通常并不比异步逻辑节省面积。事实上,某些同步设计由于需要引入时钟分发网络、时钟树和寄存器,可能比异步设计更为复杂,从而消耗更多的面积
2. 避免器件受到温度、电压、工艺的影响,易于消除毛刺。正确!统一的时钟控制,能更好地避免由于温度、电压、工艺等变化引起的毛刺和不确定性,异步信号对毛刺敏感!
3. 便于使用STA。正确!异步时钟没法进行静态时序分析
4. 易于运用流水线设计法。正确! 流水线操作依赖于时钟周期来分割任务并并行处理。通过合理的时钟分配和同步机制,流水线设计可以大幅提高数据处理速度和吞吐量

Q11. 输入至少?位数字量的D/A转换器能够达到万分之一分辨率
- 2^13=8192,不够,2^14=16384,够了,所以要14bit

Q12. 时序分析的范围包括?
- 时序分析主要聚焦于如何在给定的时钟信号下正确传输数据
1. Clock Skew(时钟偏移)包括!是指在不同触发器或电路单元之间,同一时钟信号到达的时间差异。时序分析中会关注时钟偏移,因为它影响数据的稳定性和正确性
2. 时钟稳定性。不包括!是时钟信号的质量,如时钟的抖动、漂移等,虽然时钟的质量会影响整个设计的表现,但时钟稳定性本身并不是时序分析的直接内容
3. Tsetup。包括!是指数据必须在时钟边沿到来之前稳定一段时间,以确保数据能够被正确捕获。时序分析中需要验证每个数据路径的 setup 时间要求
4. Recovery Time。包括!是指信号从异步状态恢复到正常工作状态所需要的时间。对于异步设计或多时钟域的设计,恢复时间也是时序分析的一部分

Q13. GMII, RS-232, SPI, I2C哪个没有采用串行通信方式
1. GMII (Gigabit Media Independent Interface) 是一种用于以太网通信的接口标准,主要用于在物理层和数据链路层之间进行数据交换。它采用并行通信方式,每个时钟周期传输多个位(通常是 4 个字节)
2. RS-232 (Recommended Standard 232) 是一种串行通信标准,用于点对点通信,通常用于计算机与外部设备之间的连接。数据以串行形式逐位传输,通常使用单端信号
3. SPI (Serial Peripheral Interface) 是一种同步串行通信协议,用于微控制器与外设之间的通信。数据在时钟信号的控制下通过单根线逐位传输,支持全双工通信
4. I2C (Inter-Integrated Circuit) 是一种串行总线协议,通常用于低速设备之间的通信。数据通过两根线(SDA 和 SCL)以串行方式传输

Q14. 常用的代码覆盖率类型包括?
1. 功能覆盖。用来衡量设计中各个功能模块的覆盖情况,通常用于验证设计是否覆盖了所有的功能路径
2. 表达式覆盖。检查表达式中所有可能的组合是否都被测试过。例如,如果有一个包含多个条件的表达式,表达式覆盖确保所有条件组合都被测试过
3. 语句覆盖。是最常见的代码覆盖率之一,旨在确保代码中每个语句都被执行过至少一次
4. 条件覆盖。关注条件表达式中的每个单独条件是否都被测试过

Q15. FIFO判断
1. FIFO设计时,如果相位不同,仍然可以当作同步FIFO使用。错误!相位不同有歧义,如果相位关系是确定的,但是不同也可以视为同步时钟,不过同步FIFO需要同一个时钟
2. 异步FIFO设计时不用考虑空满?错误!FIFO设计需要考虑空满
3. FIFO不可以用来做异步转换。错误!FIFO实际上广泛用于异步数据转换,尤其是在不同的时钟域之间传递数据时。异步FIFO通过使用双时钟同步机制和适当的控制信号,能够确保在时钟不同步的情况下可靠地传递数据

Q16. 生成的FPGA编程文件后,需要关注的是?
1. 代码改动很小,但是编程文件同上个版本变化极大。不需要!可能是由于综合工具的优化方式、时钟约束或其他非设计代码的因素引起的。这种变化可能并不直接反映设计本身的变化,因此通常不需要过度关注
2. 工具输出的信息。需要!信息通常包含编译、综合、布局布线等过程的详细信息。即使设计改动不大,了解工具的输出信息有助于发现潜在的警告和错误
3. 时序报告。必须需要!时序报告是非常重要的,它帮助分析设计是否满足时序要求,如果时序不满足,会导致功能不稳定或无法按预期运行
4. 资源报告。需要!帮助了解设计的资源消耗情况(如LUTs、寄存器、块RAM等)。如果设计资源消耗过多,可能会影响性能或导致资源溢出,尤其在资源有限条件下必须关注

Q17. 调测时出现仿真和实际上板不一致,最可能的原因是什么?
1. FPGA资源占用率较高但是时序满足。不是!资源占用率较高可能导致布线更加复杂,甚至影响时序,如果设计在时序方面已经满足要求,资源占用率较高一般不会导致仿真和实际硬件不一致
2. FPGA结温度过高或者过低。不是!温度可能会导致时序问题和性能下降,但通常不会直接导致仿真和实际硬件不一致。FPGA通常在工作环境中有较大的温度范围,尽管温度可能会影响电气特性,但这类问题通常会导致系统不稳定,而非仿真与硬件不一致
3. 有跨时钟域的路径。正确!例如,使用多个时钟源进行数据传输是导致仿真和实际硬件不一致的常见原因。跨时钟域的路径通常会引入时序问题和数据传输不稳定,仿真环境下可能没有完全模拟这些时序条件,而在实际硬件中可能会导致数据不同步,从而出现不一致

Q18. 对于序列的傅里叶变换,信号的时域和频域是离散还是连续,周期还是非周期(不确定!
- 序列的时域是离散的,通常表示为一系列的时间点,DTFT后也离散
- 如果信号是周期性的,那么频域也是周期性的

Q19. C语言中,int n=2, *p=&n, *q=p请问以下赋值语句非法的是?1.p=n   2.p=q   3.*p=*q   4.n=*q
语句分析:整数n=2,指针p指向n的地址,指针q指向p的地址,即为n的地址
1. 非法!整数赋值给指针p是不行的,p存储地址而不是整数
2. p和q都是指针,它们指向了相同的n的地址,所以合法
3. *p和*q都是n,相当于n=n,没问题
4. *q就是n的值,相当于n的值赋值给n,没问题

Q20. 高速数字电路设计中,哪个是正确的
1. 传输线的特征阻抗与长度有关。错误!传输线的特征阻抗与物理结构(如宽度、层间距、介电常数等)有关,而与长度无关。长度会影响信号的传播时间,但不影响特征阻抗
2. 去耦电容越多越好。错误!去耦电容的作用是滤波和平滑电源电压,减少噪声和干扰,但不是越多越好。过多的去耦电容可能导致额外的寄生效应,如寄生电感和容抗,同时增加了设计的复杂性和成本
3. 串扰的产生与信号上升(或下降)沿的电流变化无关。错误!串扰crosstalk通常与信号的上升沿或下降沿的速度有关,因为较快的沿会导致更大的瞬时电流变化,从而引发更强的电磁辐射,进而导致串扰现象,电流变化速率与串扰是密切相关的。
4. 设计过程中,尽量保证电源和地平面的完整性,尽量减少分割。正确! 电源和地平面的完整性是高速数字电路设计中非常重要的因素。保持完整性,有助于减少噪声、提供稳定的电源电压并减小信号干扰。同时,减少电源与地的分割可以减少信号地电位差和噪声问题。

Q21. 减少图像滤波硬化计算资源的常用手段有哪些?(真超出认知了)
1. 系数为幂次方。可以!滤波器的系数是幂次方,可以在硬件中通过位移运算代替乘法运算,从而减少计算资源。是提高效率的一种常见技巧
2. 限制系数有效范围。可以!可以减少需要存储和计算的位宽,从而节省资源,以减少精度要求并简化乘法运算
3. 系数中线点对称。可以!滤波器的系数在中心对称位置具有相同的值,利用此可以减少计算量,对称系数可以共享运算结果,避免重复计算
4. 系数归一化。可以!归一化是一种无量纲处理手段,使物理系统数值的绝对值变成某种相对值关系,简化计算,缩小量值的有效办法。可以减少计算中对系数的处理需求,确保结果在硬件中不会过大或过小,从而减少对数值范围的要求,简化计算

Q22. FPGA设计中转时钟域说法正确的有哪些
1. 单bit转时钟域前信号可以是寄存器输出或组合逻辑输出。错误!CDC时通常会使用寄存器来捕获信号,避免亚稳态问题。虽然组合逻辑也可以作为信号的源,但在跨时钟域时会受到时序不确定性的影响,导致亚稳态的风险增大,所以不推荐使用组合逻辑输出作为时钟域转换的信号源
2. 异步FIFO只要使用了格雷码,就不会有转时钟域采错问题。错误!格雷码可以减少多位数据同时变化引起的同步问题,减少转时钟域时的数据采样错误,但并不能完全消除所有可能的CDC采错问题。比如:总线数据不可能按照0,1,2顺序变化,所以用了格雷码也可能出现多bit同时反转,所以只有计数信号跨时钟时才使用格雷码方式。
3. 时钟频率足够大时,单bit在目的时钟域打两拍可能不足以消除亚稳态。正确!可以再打拍
4. 当转时钟域的多bit信号变化足够慢时,也可以转变成一个单bit转时钟域问题,即构造一个单bit,单bit转时钟域后,去采样稳态的多bit数据。正确!多bit传输时可以构造valid信号,表示稳定可以采样,甚至可以多次采样,进行逐bit传输。

Q23. 功能覆盖率分析的优点有哪些?
1. 可以用来避免反复同样的验证。功能覆盖率分析通过检查测试是否覆盖了所有预定的功能点,可以避免对已经验证过的部分进行重复测试,可以知道那些模块要重复验证
2. 保证了测试点分解的完备性。确保在设计验证过程中,所有功能路径和条件都已被充分测试,它保证了测试设计的完备性,确保所有功能模块和状态都被触及
3. 使随机测试取代了定向测试。并不会直接使随机测试取代定向测试。虽然随机测试可以覆盖更多的场景和路径,但定向测试依然在验证特定功能或边界条件时非常有用
4. 帮助找到覆盖率空间中的漏洞。有助于发现未被测试的部分,帮助找出覆盖率空间中的漏洞。通过分析哪些功能或状态没有被覆盖,可以定位验证的薄弱环节,并加强这些区域的验证

Q24. 对memory优化操作可以降低功耗,正确的有?
1. 方案设计时,控制对memory的读写次数,提高读写效率,不用时使用使能关断。正确!Clock gating!
2. 对地址和数据总线进行门控处理。正确!通过使能信号控制这些总线的活动,减少不必要的切换和功耗。只在需要时激活总线,这有助于降低动态功耗
3. 系统设计时,优化memory的数量和大小。正确!化内存的数量和大小可以有效减少不必要的内存资源,从而降低功耗。但是大小要合适。
4. 对总线进行编码,减少总线的电平翻转。正确!总线的电平翻转(即信号的变化)是动态功耗的主要来源之一,常见的技术如总线编码或信号压缩,能够减少不必要的电平翻转,从而降低功耗。

Q25. FPGA设计的可靠性,正确的有?
1. 外部RAM时钟,以及接口总线的接收输入时钟、发送输出时钟,要求接口电平、占空比、沿跳变时间符合接口总线标准,并且保证和对端器件能够对接。正确!确保接口时钟与外部设备兼容是保证系统可靠性的关键因素
2. 涉及内存管理的,设计时需要提供内存泄漏保护机制。错误!内存泄漏通常是软件中的问题,FPGA设计中的内存管理不涉及动态内存分配和回收。但如果有外部RAM或者需要动态存储资源的部分,需要特别注意避免资源浪费或错误操作
3. 除系统时钟外的其他时钟丢失后恢复正常,器件可以恢复正常。正确!非系统时钟(如外部时钟或其他模块的时钟)丢失后,设计需要能够恢复正常工作。为此,通常会使用时钟监测和恢复机制(例如时钟监控模块)来确保系统可以检测到时钟丢失并恢复操作
4. 对逻辑外部接口时钟、关键信号控制进行加扰测试,需要保证逻辑可以恢复。正确!加扰测试通常是指模拟信号在传输过程中可能遭遇的干扰情况(如噪声、干扰信号等)。为了测试系统的可靠性,可能会进行类似的测试,确保逻辑在面对外部干扰时仍能稳定工作并能够恢复。这样的测试需要设计良好的错误恢复机制和容错能力,确保即使信号受到干扰,系统仍能恢复正常状态。


另外一个X公司的机考笔试题后面也会总结!

最后再次声明,此部分为个人向,仅为自己的总结,不断充实自己的小作品集!

任何的错误欢迎指出,因为没有标答!

感谢各位!!!

--- END ---


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值