【2024校招】大疆笔试题 数字IC岗!!!

关于本次大疆校招笔试 大题部分汇总,若答案有误,欢迎在评论区指正,互相学习,与君共勉!


问题一:给出至少2种时钟无毛刺切换电路设计方案,分别画出电路图,简要描述工作原理,并对两种方案进行对比。

时钟无毛刺切换电路设计旨在实现在两个时钟信号之间平滑地切换,以避免产生不稳定的振荡或毛刺。

方案一:双边沿触发器切换

电路图:

    ________
CLK1 |        |
     | XOR    | D
     | Gate   |---- Q
CLK2 |________|

工作原理:

  1. 在 CLK1 的上升沿和下降沿触发器切换信号为高时,D 输入被传递到 Q 输出。
  2. 在 CLK2 的上升沿和下降沿触发器切换信号为低时,Q 输出保持原值。
  3. 当切换信号从高切换到低时,D 输入的值被保存在 Q 输出中。

 方案二:时钟锁存器切换

    ________     ________
CLK1 |        |   |        |
     |  AND   |   |   OR   | D
CLK2 |________|   |________|---- Q

工作原理:

  1. 通过 AND 门,切换信号与 CLK1 的上升沿触发器信号相乘,作为 D 输入信号。
  2. 当切换信号为高时,D 输入信号被传递到 OR 门,从而将 D 输入信号传递到 Q 输出。
  3. 当切换信号为低时,OR 门的输出被锁存,保持原值。

比较:

  1. 双边沿触发器切换方案:

    • 优点:简单,不需要额外的逻辑门。
    • 缺点:需要两个触发器来切换,可能需要更多的芯片面积。
  2. 时钟锁存器切换方案:

    • 优点:只需要一个逻辑门,占用较少的芯片面积。
    • 缺点:可能在切换瞬间产生额外的延迟。

选择哪种方案取决于设计要求和约束。双边沿触发器切换方案在某些情况下可能更稳定,而时钟锁存器切换方案则更简洁。综合考虑电路复杂度、功耗和性能等因素,可以选择适合特定设计需求的方案。

网上也有其他相关方案,可自行寻找。


 问题二:1、什么是outstanding? 
               2、一个数据位宽128bit的支持刻度的axi master,工作频率为400MHz,只能发出burst_len为16的incr操作,假设读访问返回response的latency为800ns,如果改axi master的读带宽需求为1600Mbps,请问该axi master的outstanding的能力应该设计到多少?(请给出计算过程)

1、在芯片设计和计算机体系结构中,"outstanding" 是一个术语,通常用于描述尚未完成的、待处理的事物的数量。这个术语经常用于描述存储器和通信子系统中的操作。

在存储器系统中,"outstanding" 可以指代等待访问内存的未完成读取或写入操作的数量。如果系统中有多个内存请求正在等待响应,那么这些未完成的请求就被称为 "outstanding" 请求。

在通信子系统中,"outstanding" 可以用来描述正在等待传输或处理的待处理事务的数量,如待发送的数据包或待处理的请求。例如,网络接口可以具有 "outstanding" 请求队列,用于跟踪正在等待发送或接收的数据包。

总之,"outstanding" 在芯片术语中通常表示尚未完成的、待处理的事务或操作的数量,用于评估系统的性能和效率。

2、确定每个 outstanding 请求所需的时间,然后计算出能够支持所需带宽的最大 outstanding 数量。通过给定信息:

  • 数据位宽:128 bit
  • 工作频率:400 MHz
  • 每个 burst_len:16
  • 读访问返回 response 的延迟:800 ns
  • 读带宽需求:1600 Mbps

首先,我们需要计算出每个 burst 的传输时间,然后考虑 response 的延迟,最后得出最大 outstanding 数量。

  1. 每个 burst 的传输时间:

    传输时间 = burst_len × 数据位宽 / 工作频率 传输时间 = 16 × 128 / 400 MHz = 5.12 ns

  2. 读操作的总延迟:

    读操作总延迟 = 传输时间 + response 的延迟 读操作总延迟 = 5.12 ns + 800 ns = 805.12 ns

  3. 读带宽需求转换为每个操作的传输时间:

    读带宽需求 = 1600 Mbps = 1.6 Gbps 每个操作的传输时间 = 数据位宽 / 读带宽需求 每个操作的传输时间 = 128 / 1.6 Gbps = 80 ns

  4. 计算出最大 outstanding 数量:

    最大 outstanding 数量 = 读操作总延迟 / 每个操作的传输时间 最大 outstanding 数量 = 805.12 ns / 80 ns ≈ 10.06

 因此,该 AXI Master 的 outstanding 能力应该设计为大约 10 个。请注意,由于 outstanding 数量必须是整数,所以您可能需要向上取整到最接近的整数值,即 11。这将确保该 AXI Master 能够支持所需的读带宽。


 问题三:在一个典型的射频硬件接收系统中,数据流向如下:信号源发射正弦信号→射频器件→数模转换ADC→FPGA接口→FPGA内部信号处理→FPGA内部存储RAM→软件上位机。心在假定你是一名FPGA工程师,之前已经和软件工程师调试好“FPGA内部存储RAM→软件上位机”这个链路环节完全没有问题,但是目前软件上位机收到的经过内部信号处理存储在RAM上的数据不符合预期,没有检测分析出信号源发射的已知信号,现在要求你针对这个问题进行定位,请描述你的思路。

从FPGA工程师的角度去思考问题并给出解决方案:

  1. 确认硬件链路: 首先,我会确保整个硬件链路中的所有组件都正常工作。我会检查射频器件、ADC、FPGA 接口等是否连接正确,电源供应是否稳定。确保硬件环境没有问题。

  2. 检查信号处理: 我会仔细检查 FPGA 内部的信号处理逻辑,确保它们按照预期进行操作。我会检查数据处理算法、滤波器、解调器等是否正确实现,并且没有 bug 或逻辑错误。

  3. 查看存储 RAM 数据: 我会检查存储在 RAM 中的数据,确保数据是否按照预期存储。我会使用适当的工具或调试接口,读取 RAM 中的数据并进行分析,查看数据是否有异常。

  4. 数据可视化: 如果可能,我会在 FPGA 内部增加数据可视化的功能,以便实时观察处理后的数据。这样可以帮助我判断信号处理是否正常。

  5. 信号源检测: 如果信号源发射的是已知信号,我会在 FPGA 内部实现对这些已知信号的检测算法。我可以尝试匹配已知信号的特征,比如频率、幅度、相位等,以确保 FPGA 正确识别了信号。

  6. 时序和时钟同步: 我会确保整个系统的时序和时钟同步正确。信号源、ADC、FPGA 之间的时钟必须保持同步,否则会影响数据的采样和处理。

  7. 逐步调试: 我会逐步调试不同的功能块。我可以禁用一些模块,只保留信号源发射的已知信号,然后逐步开启其他功能块,以查找是否有某个特定的模块引起了问题。

  8. 数据对比: 如果之前和软件工程师调试好了“FPGA内部存储RAM→软件上位机”链路,我会与软件工程师沟通,确保数据在传输过程中没有出现问题,包括数据格式、字节序等。

  9. 日志和调试信息: 在 FPGA 内部,我会增加适当的日志记录和调试信息,以便追踪数据在信号处理过程中的变化和可能出现的问题。

  10. 远程调试: 如果问题比较复杂,我可以与软件工程师协作,进行远程调试,共同分析问题所在,定位并解决问题。

通过以上的步骤,我将努力定位问题并解决,确保数据经过 FPGA 内部信号处理后能够符合预期,让已知信号可以被准确地检测出来。


问题四:在进行验证过程中,通过哪些方法可以提升验证活动的完备性和准确性?

对于IC验证:

  1. 形式化验证: 形式化验证使用数学方法对设计规范和验证属性进行形式化建模和验证,以发现设计中的逻辑错误。这种方法可以深入地探索设计空间,检查所有可能的状态和情况,从而提高验证的完备性。

  2. 随机测试: 随机测试是一种基于随机测试向设计中注入随机模式的方法。通过使用随机生成的测试向量,可以测试设计在不同的输入组合下的行为。虽然随机测试不能保证覆盖所有可能情况,但它可以检测出一些常见的错误。

  3. 功能覆盖分析: 功能覆盖分析用于衡量验证的完备性,检查测试是否覆盖了设计规范中的所有功能。通过监控测试用例覆盖的功能部分,可以确定哪些功能没有被验证到,并采取相应的措施来提高覆盖率。

  4. 事务级建模和验证: 使用事务级建模,可以更高级别地描述设计和验证模型,从而提高效率和抽象性。通过事务级验证,可以捕获设计的行为、通信和交互,并进行验证。

  5. 约束随机测试: 约束随机测试是一种结合了随机测试和约束的方法。通过添加约束条件,可以引导随机测试生成更有针对性的测试用例,覆盖设计中的特定情况。

  6. 错误注入: 在设计中注入已知的错误,然后使用验证方法来检测和确认这些错误是否被正确地捕获。这有助于验证环境和工具是否能够检测出设计中的问题。

  7. 仿真和硬件加速: 使用仿真工具进行功能验证,并通过硬件加速技术(如硬件加速器或 FPGA 加速器)加速验证过程,以提高验证速度和覆盖率。

  8. 复用和测试生成: 利用现有的测试用例、验证环境和模型,对新的设计进行复用和测试生成,以提高验证效率和准确性。

  9. 形式化等价性检查: 通过形式化等价性检查,将设计规范和设计实现进行比较,以确保两者之间的一致性。这可以帮助发现潜在的实现错误。

  10. 与模拟结合: 将模拟和其他验证方法结合使用,以便在不同的层次和阶段进行验证,从而提高验证的全面性和深度。

通过综合使用这些方法,可以有效地提升集成电路验证的完备性和准确性,确保设计在不同情况下都能正常工作


问题五:数字芯片中平行走线间可能出现串扰(crosstalk),引起static noise或者delta delay,请简述修正串扰的方法。

 修正数字芯片中的串扰问题是确保信号完整性和稳定性的重要任务,常见修正串扰的方法如下:

  1. 物理布局优化: 在芯片设计中,合理的物理布局可以减少不同信号线之间的相互影响。将相互影响较大的信号线远离,避免平行走线的情况,从而降低串扰的可能性。

  2. 屏蔽和隔离: 在设计中,可以在敏感信号线附近引入屏蔽层或隔离区域,减少附近信号线的干扰。通过使用屏蔽和隔离技术,可以有效减少串扰问题。

  3. 差分信号: 使用差分信号可以减少对单一信号的干扰。差分信号传输将信号和其反相传输作为一对信号,可以在接收端对两个信号取差值,抵消共模干扰和串扰。

  4. 降低信号峰值: 降低信号的峰值电压可以减少信号之间的串扰。通过减小信号的振幅,可以减少信号之间的电磁耦合。

  5. 降低信号频率: 高频信号更容易产生串扰,因此降低信号的频率可以降低串扰的影响。这在特别关注信号完整性的设计中尤其重要。

  6. 电源和地引线优化: 优化电源和地引线布局可以减少信号线之间的串扰。确保电源和地引线与信号线的布局不会引起额外的干扰。

  7. 布线规则和层次分割: 使用合适的布线规则,如最小线间距、最小线宽等,可以减少信号线之间的耦合效应。同时,将不同层次的信号线分隔在不同的金属层中,也可以减少串扰问题。

  8. 仿真和分析: 使用仿真工具和分析方法可以帮助检测和评估信号线之间的串扰问题。通过仿真可以预测和分析不同布局和信号特性对串扰的影响,从而优化设计。

总之,修正数字芯片中的串扰问题需要综合考虑物理布局、信号特性、差分传输、电源引线等因素,采取合适的措施来降低串扰的影响,确保信号传输的可靠性和稳定性。


问题六:简述如何提高芯片的测试覆盖率

芯片的测试覆盖率是衡量测试是否足够全面的指标,高测试覆盖率意味着测试能够覆盖更多的设计功能和情况。以下是一些提高芯片测试覆盖率的方法:

  1. 功能覆盖分析: 使用功能覆盖分析工具,监测测试向量是否覆盖了设计规范中的各种功能。这有助于确定哪些功能没有被测试到,从而引导测试用例的生成。

  2. 代码覆盖分析: 通过代码覆盖分析工具,可以评估测试是否覆盖了设计中的每个代码行、分支和条件。这有助于发现未被执行的代码路径,指导生成更全面的测试用例。

  3. 边界条件测试: 在测试用例中特别关注边界条件,如最大值、最小值、临界值等。这些边界条件常常容易导致设计错误,因此高效地覆盖边界情况是重要的。

  4. 随机测试和生成: 使用随机测试和生成工具,生成随机的测试用例,以覆盖不同的输入组合。随机测试可以发现一些非常规的情况,增加测试覆盖率。

  5. 特定场景测试: 针对设计的特定场景,如异常情况、不寻常的操作序列等,设计测试用例以验证这些情况是否得到正确处理。

  6. 协议一致性测试: 如果设计中包含通信协议,确保测试用例覆盖协议的各种消息、状态转换和协议规范。

  7. 仿真和硬件加速: 使用仿真工具进行测试,或者使用硬件加速器(如 FPGA 加速器)加速测试过程,以便在短时间内执行更多的测试用例,从而提高覆盖率。

  8. 多种测试工具结合使用: 使用不同类型的测试工具,如功能模拟器、仿真器、形式化验证等,结合使用,从多个角度验证设计,提高覆盖率。

  9. 错误注入测试: 在设计中注入已知的错误,然后验证测试用例是否能够检测出这些错误。这有助于验证测试是否足够灵敏,能够捕获设计中的问题。

  10. 复用现有测试: 如果之前已经开发了相关的测试用例,可以将这些测试用例复用到新的设计中,以提高测试覆盖率。

  11. 持续集成和自动化测试: 实施持续集成和自动化测试流程,确保每次设计修改都能进行全面的测试,提高覆盖率。


问题七:这是一个中断请求模块,方框表示寄存器,假设有32组中短线,src_int或int_set都可以作为中断源,当有中断发生时,raw会置1,clr用来清除raw,当clr为0时,raw保持,clr为1时,raw被置0,mask用来屏蔽raw传递到sta,当mask为0时,中断会传递到sta,mask为1时,中断则被屏蔽,请描述下这个电路的验证过程。

  1. 功能验证:

    • 首先,验证中断源(src_int 和 int_set)是否能够正确地触发中断。产生中断请求时,raw 信号应该被置为1。
    • 验证 clr 信号是否能够正确地清除 raw 信号。在 clr 信号为1时,raw 应该被清零。在 clr 信号为0时,raw 应该保持原值。
    • 确保 mask 信号是否能够正确地屏蔽 raw 信号传递到 sta。当 mask 为0 时,raw 应该能够传递到 sta,即 sta 应该反映 raw 的状态。当 mask 为1 时,sta 应该保持不变,不受 raw 影响。
  2. 状态验证:

    • 验证 raw 和 sta 之间的关系是否正确。sta 信号应该根据 mask 和 raw 的状态来确定,即在 mask 为0 且 raw 为1 时,sta 应该为1,否则为0。
    • 确保 clr 信号能够清除 raw,并且在 clr 为1 时,raw 应该被置为0。
  3. 中断屏蔽验证:

    • 验证中断屏蔽功能是否正常工作。在 mask 为1 时,无论 raw 的状态如何,sta 都应该保持不变,即中断被屏蔽。
  4. 边界条件验证:

    • 针对不同的边界条件进行测试,比如验证当 clr 和 mask 信号同时为1 时的行为,验证连续产生中断请求是否正常等。
  5. 信号时序验证:

    • 确保各个信号的时序满足设计要求。比如,clr 信号应该在 mask 为0 时生效,raw 应该在中断发生后立即置1。
  6. 复杂场景验证:

    • 考虑多个中断源同时触发、mask 和 clr 信号的连续变化等情况。验证中断请求模块在复杂情况下的行为是否正确。
  7. 模拟和仿真:

    • 使用仿真工具对设计进行功能仿真,确保各个信号的交互和状态变化是否与预期一致。
  8. 覆盖率分析:

    • 使用覆盖率分析工具,确保测试用例能够覆盖设计的各个状态和分支情况,从而提高验证的完备性。

通过上述验证过程,可以确认中断请求模块的各个功能在不同情况下的表现是否正确,从而确保该模块在实际应用中能够按照设计预期工作。


 问题八:随机验证是IP验证中最重要的环节之一,输入数据和寄存器配置需要在有效的范围内随机产生,以便覆盖不同配置的组合情况,现在要求设计一种随机机制:在验证环境不修改的情况下,设计随机用例,在用例中,配置寄存器既可以指定值,也可以在有效范围内随机,请描述一下你的实现思路。

实现一个在验证环境不修改的情况下,能够随机产生测试用例的机制,需要使用随机生成器和一些控制逻辑。以下是一种可能的实现思路:

  1. 随机生成器模块: 首先,设计一个随机生成器模块,该模块能够生成随机的寄存器配置值。这可以基于伪随机数生成器(PRNG)实现,你可以选择适合你的设计语言和工具的随机数生成库或模块。

  2. 控制逻辑模块: 设计一个控制逻辑模块,用于控制寄存器配置和输入数据的生成过程。这个模块应该包括以下部分:

    • 寄存器配置: 在控制逻辑中,定义每个寄存器的配置范围,可以设置最小值和最大值。这些范围将用于在随机生成器中生成随机的配置值。
    • 配置方式选择: 设计一个选择机制,决定每个寄存器是指定值还是随机生成。这可以通过一个控制信号来实现,比如可以使用一个位来表示是指定值还是随机生成。
    • 输入数据生成: 如果需要生成随机的输入数据,也可以在控制逻辑中定义输入数据的范围,并实现类似的选择机制,决定输入数据是指定值还是随机生成。
  3. 验证环境集成: 将上述随机生成器模块和控制逻辑模块集成到你的验证环境中。在测试用例中,通过控制逻辑来决定每个寄存器配置的方式,以及是否生成随机的配置值。如果需要生成随机的输入数据,也可以通过相似的方式控制。

  4. 执行测试用例: 在你的测试用例中,使用控制逻辑来调用随机生成器生成寄存器配置和输入数据。根据你的需求,可以在每个测试用例中动态选择是指定值还是随机生成,从而产生多样化的测试情况。

  5. 覆盖率和结果分析: 在测试运行期间,记录生成的寄存器配置和输入数据,以及测试结果。使用覆盖率分析工具来评估测试用例的覆盖情况,确保不同配置和情况都得到了充分的覆盖。


问题九:功耗优化的DVFS技术:(1)什么是功耗优化中的DVFS技术?(2)降低功耗的原理是什么?(3)一般工作流程是怎样的?(4)必须的硬件模块有哪些?

DVFS(Dynamic Voltage and Frequency Scaling)技术是一种在芯片或系统级别动态调整工作电压和频率的方法,以实现功耗优化。它可以根据不同的工作负载和性能需求,自动调整电压和频率,从而在保持性能的同时降低功耗。

  1. 什么是功耗优化中的DVFS技术?

    DVFS技术是一种动态调整芯片或系统的工作电压和频率的方法,以实现功耗优化。通过根据不同的工作负载和性能需求,调整电压和频率,DVFS可以在降低功耗的同时保持合适的性能水平。

  2. 降低功耗的原理是什么?

    降低功耗的原理是通过减小电压和频率来降低芯片或系统的动态功耗。功耗通常与频率的平方成正比,与电压的平方成正比。因此,降低电压和频率可以显著降低功耗。然而,降低频率可能会导致性能下降,因此需要在性能和功耗之间找到合适的平衡点。

  3. 一般工作流程是怎样的?

    一般的DVFS工作流程如下:

    • 监测:监测当前芯片或系统的工作负载和性能需求。
    • 决策:根据监测到的信息,决定是否需要调整电压和频率以降低功耗。如果工作负载较轻,可以考虑降低电压和频率。
    • 调整:根据决策,调整电压和频率。降低电压会导致性能降低,因此需要在性能和功耗之间做出权衡。
    • 监测和评估:在新的电压和频率下,再次监测性能和功耗。如果达到了预期的目标,DVFS调整成功。否则,可能需要进一步调整。
  4. 必须的硬件模块有哪些?

    在实施DVFS技术时,通常需要以下硬件模块:

    • 电压调整模块: 用于动态调整芯片的工作电压。这可以是一个电压调节器或DC-DC转换器。
    • 频率调整模块: 用于动态调整芯片的工作频率。这可能涉及到时钟发生器或PLL(锁相环)。
    • 监测模块: 用于监测芯片的工作状态、负载情况和性能需求。这可以包括传感器、监测电路等。
    • 决策逻辑: 根据监测到的信息,制定调整电压和频率的决策。这可能需要一些逻辑电路或控制器。

通过合理地设计和整合这些硬件模块,DVFS技术可以实现动态的功耗优化,从而在不牺牲性能的前提下降低芯片或系统的功耗。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

火羽Angel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值