大疆创新2020校招数字IC笔试题解析【芯片开发工程师】【数字IC】【FPGA】

2021-05-31 14:23:11 浏览数 (1)

欢迎转发分享,如需转载,请显著注明来源。

单选1-20,多选1-10,填空1-5,简答1-5。

单选

1. 多 bit 跨时钟域

1. 下列关于多 bit 跨时钟域的处理思路,错误的有()

答案:A

解析:

多bit数据跨时钟域:

异步FIFO,格雷码(连续变化的地址/计数信号等),握手信号,DMUX

参考:CDC跨时钟域处理及相应的时序约束【set_clock_groups】【set_max_delay】【FPGA探索者】

多bit中,强烈推荐使用异步FIFO的IP来实现

2. 定点数量化

2. 对 12.918 做无损定点化,需要的最小位宽是多少位,位宽选择11位时的量化误差是多少?

答案:C

解析:

(1)首先对于整数部分的12,至少需要4-bit量化;

(2)对于小数部分的0.918,只要量化的误差小于最小精度的一半,就可以认为是无损量化。当小数部分使用8-bit量化时,0.918*(2^8)=235.008,即采用8-bit量化时的误差为0.008/(2^8)=0.00003125,使用8-bit量化时的精度为1/(2^8)=0.00390625,量化误差小于精度的一半,满足“无损”量化,所以12-bit量化(整数4,小数8)可以满足“无损”。

当小数部分使用7-bit量化,0.918*(2^7)=117.504,量化误差为0.504/(2^7),量化的精度为1/(2^7),显然量化误差大于精度的一半(0.504>0.5),不满足无损量化,量化误差为0.504/(2^7)=0.0039375。

参考:

2020年大疆芯片开发笔试(二)【数据无损量化问题】【定点数】【无损定点化】

3. 噪声源均方误差

3. 两个噪声源的均方根噪声幅度分别是 10 uVrms,5uVrms;两个噪声源叠加后的均方根噪声幅度不可能是以下值中的哪个?

答案:B

解析:

原噪声均方根幅度X1、X2,叠加后的均方根噪声幅度X,满足:

abs(X1-X2)<= X <= X1 X2

当两个噪声在任意时刻恰好幅度均能抵消,则取减号的等;

当两个噪声在任意时刻恰好幅度均能叠加,则取加号的等;

其他条件下,取中间区间;

所以,5 <= X <= 15,B 肯定不可能。

4. 关键路径

4. 考虑如下的 4*4 的“二维仲裁器”,R00 到 R33 为输入,G00 到 G33 为输出,N 和 W 也为输入,E 和 S 也为输出,假设所有的逻辑门(包括非门/与门/反相器)延时都为 1 ns,请问该电路的最大延迟为?

答案:D

解析:

每个 Arbiter 从输入到输出S 和E 延时3 ns,整个4*4仲裁器最长路径需要经过7个Arbiter,每个3 ns,一共 21 ns。

参考:

FPGA时序分析之关键路径(Critical Path)【华为静态时序分析资料】【笔试面试】

5. 时序逻辑运算

5. 下图所示 4 bit 右移位寄存器,0 时刻 ABCD 初始状态为 0111,请写出 5 个时刻以后的 ABCD 的输出?

答案:选B,但是此题实际没答案

解析:

A(n 1)= ~(A(n)|B(n)|C(n)),当 A、B、C均为 0 时,下一时刻 A = 1,否则 A = 0;

0 时刻:ABCD = 0111

1 时刻:ABCD = 0011

2 时刻:ABCD = 0001

3 时刻:ABCD = 1000

4 时刻:ABCD = 0100

5 时刻:ABCD = 0010

6. 存储器相关问题

6. 1 个 16K * 8 位的存储器,其地址线和数据线总和是?

答案:D

解析:

8位可以确定8根数据总线;

16K和地址有关,1K是1024=2^10,所以16K=1K*16=(2^10)*(2^4)=2^14,需要14根地址总线;

共计需要8 14 =22;

参考:

存储器相关问题汇总【SRAM】【DRAM】【SDRAM】【Flash】【EPROM】【EEPROM】

扩展题目:

7. 原码和补码

7. 数字系统中,采用()可以将减法运算转化成为加法运算?

答案:D

解析:

A – B =A (-B);

对 B 取负数,即使用补码进行有符号数表示;

有符号数的加法和乘法运算,只有 2 个数均为有符号数,才按照有符号数运算,只有有 1 个是无符号数,就按照无符号数运算。

参考:

Verilog学习笔记——有符号数的乘法和加法

8. 流水线设计

8. 关于流水线设计的理解,错误的是()?

答案:A

流水线的实现方式:

(1)插入寄存器(触发器Flip-Flop,FF)去分割延迟比较大的组合逻辑,消耗了更多的触发器,组合逻辑资源不变(理论上);

(2)由于增加了寄存器,每增加一级寄存器就会对数据寄存一个时钟周期,所以对于单个数据来讲,从输入到输出的延时增加;

(3)对于整体来讲,速度提升,最大工作频率提高,是典型的面积换速度的思想。

参考:

FPGA时序分析之关键路径(Critical Path)【华为静态时序分析资料】【笔试面试】

9. 位拼接

9. 在 Verilog 语言中,如果 a =1’b1,b = 3’b101,c = 1’b0,则 {a, {3{c}}, b} = ?

答案:C

解析:

{} 位拼接,前面的放高位;

{3{c}} 是将 c 复制 3 份,等效于 {c, c, c},结果为 3’b000;

总的结果为 {1’b1, 3’b0, 3’b101},即 7’b1000101;

10. 逻辑门

10. 下面哪种逻辑门可以实现逻辑 (A XOR B) OR (C AND D)?

答案:A

解析:

(A XORB) OR (C AND D) = A^B CD = AB’ A’B CD = (…)’

参考:

来看个联发科秋招的大题(5)——逻辑化简、最小项、卡诺图、反演律、0-1律

11. DFT 可测性设计

11. 关于 DFT(design for test)的描述,错误的是()

答案:A

解析:

(1)DFT 的 At-speed Test 采用芯片 PLL 的高速时钟对寄存器的 setup 和 hold 进行测试,A 错;

(2)DFT 测试过程通常会消耗大量的动态功耗,大量采用门控,降低动态功耗;

(3)DFT 的主要目的是发现芯片在生产过程中出现的缺陷,C 对;

(4)寄存器扫描链是一种常用的 DFT 技术,D 对;

DFT 常用技术:

(1)扫描链(Scan Chain),主要针对寄存器等逻辑;

(2)BIST,内建自测试逻辑(Bulit-in Self Test),主要针对 ROM 和 RAM 等存储器;

(3)边界扫描(Bounary Scan),主要针对输入输出引脚,比如使用 JTAG 技术;

参考:

DFT(Design for Test)可测性设计【FPGA探索者】

12. 逻辑综合工具

12. 以下哪个工具不具备逻辑综合功能?

答案:C

解析:

ModelSim是用于仿真。

Synplify和 Design Compiler 是专业的综合工具;

ISE 是 Xilinx 针对 7 系列以前的器件的工具,具有综合、布局布线、仿真、下载功能,对 7 系列及以后的用 Vivado。

13. 静态功耗

13. 对芯片静态功耗影响最大的是哪一项?

答案:D

解析:

Ps = Is* VDD,静态功耗 = 静态工作电流 * 工作电压;

静态功耗两个主要因素:漏电流,工作电压

其中漏电流与工艺有关,随着工艺升级,晶体管阈值降低,漏电流变大,静态功耗变大。

动态功耗:

Pd =VDD * C * F

与工作电压、工作频率、工作的负载电容有关。

14. 竞争冒险

14. 组合逻辑电路中的冒险是由于()引起的?

答案:D

解析:

各信号到达目标位置的时延不同,造成竞争,竞争可能导致冒险(也可能没有冒险);

参考:

组合逻辑竞争冒险,时序逻辑亚稳态【0型冒险和1型冒险及其消除方法】

消除冒险:

(1)增加冗余项

(2)增加选通信号(高电平)

(3)引入封锁脉冲(低电平)

(4)增加滤波电容

(5)采用可靠性编码

组合逻辑电路出现的是竞争冒险问题

时序逻辑电路出现的是亚稳态问题

亚稳态:

与数据相关的是 setup/hold(建立时间/保持时间),

与异步复位有关的是 recovery/removal(恢复时间/移除时间)。

15. 指令系统

15. 指令系统中程序控制类指令的功能是()?

答案:B

解析:

程序控制类指令包括跳转指令,循环指令,子程序指令以及中断指令,控制程序的执行顺序。

冯诺依曼系统 5 大单元

(1)控制器,程序执行、跳转;

(2)运算器ALU,算数和逻辑运算;

(3)存储器,程序指令和数据存放在一起;

(4)输入设备,人机交互;

(5)输出设备,人机交互;

哈佛系统:

与冯诺依曼系统的最大区别:程序指令和数据分开存放,可以同时取指令并取对应的操作数,能够重叠;

16. 滤波器

16. 在对信号做降采样前添加滤波器,一般需要添加什么样的滤波器,完成什么功能?

答案:C

解析:

低通滤波器,具有抗混叠功能,又叫抗混叠滤波器。

功能:滤除高频成分,否则在抽样时由于高频成分存在,可能造成不满足fs = 2fc 的采样定律(其中 fc 为被采样信号的最高频率);

17. 运算时间计算

17. 假设一个 cycle 只能完成一个(8 bit *8bits)或一个(17 bits 17 bits)操作,那么设计 16 bits* 16 bits 乘法最少可以多少个 cycle 完成?

答案:C

解析:

AB * CD,其中 A、C 是高 8 位,B、D 是低 8 位;

(1)先求 AD、BD、AC、BC,并行计算,每个都是 8 bits * 8bits,一个 cycle;

(2)上面 AD 等结果都是 16 bits,高位放到高位,低位放到低位,相同位的相加,16 bits 16 bits 结果为 17 bits 才能保证不溢出,这里相加需要 1 cycle;

(3)根据相加结果,判断是否需要向前进位,需要 1 cycle;

18. 负反馈电路

18. 下面哪项不是负反馈电路?

答案:C

解析:

负反馈四种:

电压串联,电压并联,电流串联,电流并联;

19. 线与逻辑

19. 如下关于“线与”逻辑的描述,错误的是:

答案:B

解析:

线与在输出端加上拉电阻,OC 与 OD 都可以线与。

OC:集电极开路(Open Collector) OD:漏极开路输出(Open Drain) OC门是三极管,OD门是场效应管。

参考:

https://www.doc88.com/p-5139502366915.html?s=rel&id=5

20. FPGA 基础知识

20. 下列说法正确的是:

答案:B

解析:

  1. 可以使用 LUT 实现,也可以使用 DSP;
  2. 对;
  3. 更低;
  4. 属于时钟约束;

参考:

2020年大疆芯片开发(一)【FPGA资源】【存储器问题】【Source clock latency 约束】

对时钟延时 clock latency,有 2 种:

(1)Source clock latency:时钟源延时,从时钟源到达模块的时钟输入端口的延时(片外延时);

(2)Network clock latency:时钟网络延时,从模块的时钟输入端口到达触发器的时钟输入端的延时(片内延时);

多选

1. 异步处理

1. 关于异步处理,以下说法正确的是:

答案:AC

解析:

A. 静态的不变化,跨时钟也不变化,不会有亚稳态;

B. 异步 FIFO 采样格雷码的原因是连续地址信号采用格雷码,相邻状态只有 1 位变化;

C. 单bit 和多 bit 都需要考虑【快到慢,慢到快】;

单 bit 慢到快:打拍;

单 bit 快到慢:脉冲展宽,握手;

多 bit 异步 FIFO,需要根据读写时钟快慢来算 FIFO 深度;

参考:

CDC跨时钟域处理及相应的时序约束【set_clock_groups】【set_max_delay】【FPGA探索者】

见单选第 1 题

2. 存储器相关

2. 下面哪些是非易失性存储器

A、Flash

B、EPROM

C、DRAM

D、SRAM

答案:AB

解析:ROM 和 Flash,其中:

(1)ROM

ROM(Read-Only Memory,只读存储器)。信息一旦写入后就固定下来,即使切断电源,信息也不会丢失,所以又称为固定存储器。ROM所存数据通常是装入整机前写入的,整机工作过程中只能读出。

可编程只读存储器(PROM);

可擦可编程序只读存储器(EPROM);

带电可擦可编程只读存储器(EEPROM,一般使用 IIC 接口读写)。

(2)Flash

Nor Flash、Nand Flash

参考:

存储器相关问题汇总【SRAM】【DRAM】【SDRAM】【Flash】【EPROM】【EEPROM】

3. FFT 快速傅里叶变换

3. 关于 16 点 FFT 描述正确的是()

答案:BCD

解析:

16 点,2 ^ 4 = 16 ,4 级蝶形,每级 16/2 = 8 个蝶形;

每个蝶形需要 1 次复数乘法和 2 次复数加法;

4. 可综合与不可综合

4. Verilog 语言中,下列哪些语句不可以被综合:

答案:BD

解析:

initial和 force 用于仿真的,在 Testbench 里,initial 赋初始值,force 用于强制赋值。

5. 关键路径、时序违例

5. 在不增加 pipeline 的情况下,如何解决一条critical path 的 setup 时序不满足的问题?

答案:ACD

解析:

setup 违例,主要是因为路径中延时过长导致,所以优化的办法是尽量减少路径延时优化关键路径,使用更快的器件(对setup时间要求更短),降低时钟频率

ABCD 都可以解决 setup 时序违例问题。

其中,B 属于插入流水线 pipeline,根据题意,不选。

参考:

FPGA时序分析之关键路径(Critical Path)【华为静态时序分析资料】【笔试面试】

6. 代码覆盖率

6. 下列关于代码覆盖率描述错误的是:

答案:ACD

解析:

代码覆盖率包括:

(1)语句覆盖率

(2)条件覆盖率;

(3)分支覆盖率;

(4)状态机覆盖率;

代码覆盖率 100 % 不代表功能没问题。

(1)功能覆盖率高但是代码覆盖率低

分析未覆盖到的代码,推断仿真是否有遗漏的功能点,代码是否为冗余或不可达代码;

(2)功能覆盖率低但是代码覆盖率高

仿真用例没有关注到一些功能点,需要修改测试用例。

代码覆盖率:

白盒覆盖率,一般仿真工具都有这个统计功能。代码覆盖率达到 100% 不代表设计没有问题。

(1)分支覆盖率

针对 if…else、case 等分支语句,看代码中设计的分支是否都被测试到了。

针对 if(条件1),只要条件 1 取 true 和 false 都执行过,则这个分支就完全覆盖了。

(2)语句覆盖率

语句覆盖率上不去时,可以查看未覆盖处的代码是测试用例的疏忽、冗余代码或是保护用途的代码,比如case的default;

(3)翻转覆盖率

包括两态翻转(0/1)和三态翻转(0/1/Z),常用的是两态翻转。对于单比特信号而言,若仿真用例使得该信号从0到1和从1到0的翻转均发生,则认为这里的翻转覆盖率是全面的(100%)。

即使翻转覆盖率达到 100%,分支覆盖率和语句覆盖率也不一定达到 100%。

(4)条件覆盖率与表达式覆盖率

条件覆盖率可以看作是对分支覆盖率的补充。每一个分支条件表达式中,所有条件的覆盖。

比如:

if(a&& b)

statement1;

else

statement2;

测试用例:a=1,b = 1 和 a = 0,b = 1

分支覆盖率 100%,两个分支都覆盖了,但是条件覆盖率不是 100%,有判断条件没有被测试到。

(5)状态机覆盖率

功能覆盖率

又称黑盒测试覆盖率,只关心功能,不关心具体的代码是如何实现的。如果想要统计功能覆盖率,需要在 System Verilog 编写的测试用例中添加覆盖组,仿真器基于它来统计功能覆盖率。

以上覆盖率来源:

狄超, 刘萌. FPGA之道.

7. C 语言全局数组

7. C 程序中定义了一个全局数组,编译后此数组变量可能分配在下列哪个段:

答案:BC

解析:

参考:

https://blog.csdn.net/weixin_35159405/article/details/113367559

8. 时序电路

8. 下面电路属于时序电路的是?

答案:ABD

解析:

不需要。

9. 速度优化和面积优化

9. 下列优化方法中哪些是速度优化方法:

答案:BC

解析:

(1)面积优化,提高资源利用率以降低功耗要求:串行化,资源共享,逻辑优化;

(2)速度优化,提高运行速度:流水线设计,寄存器配平,关键路径优化,迟置信号后移。

参考:

FPGA设计中的优化问题——【面积优化】【速度优化】【关键路径优化】【流水线】【寄存器配平】【资源共享】

10. 调制解调

10. 对于 PSK 和 QAM 调制,以下哪些说法是正确的:

答案:

解析:

A. 4QAM中星座点幅度一致,其他不一致;

B. 对;

C. 对;

D. 对,16 QAM 点数多,传送效率高,不同星座点的欧氏距离小,抗噪声能力下降;

填空题:

1. cache 问题

1、write-back cache 和 write-through cache 的区别:(write-back)cache 只在 cache line 被替代的时候把 cache 里的有效数据写下一级存储。

答案:

解析:

Write-through(直写模式)在数据更新时,同时写入缓存 Cache和后端存储。此模式的优点是操作简单;缺点是因为数据修改需要同时写入存储,数据写入速度较慢。

Write-back(回写模式)在数据更新时只写入缓存 Cache ,只在数据被替换出缓存时,被修改的缓存数据才会被写到后端存储。此模式的优点是数据写入速度快,因为不需要写存储;缺点是当更新后的数据未被写入存储时,若出现系统掉电的情况,数据将无法找回。

参考:

https://blog.csdn.net/wyzxg/article/details/7254458

2. 正则匹配

2. 正则表达式里可以使用计数符和通用字符集进行搜索匹配,这些计数符中,(*)号的意思是匹配 0 个,1 个或者多个,( )号的意思是匹配 1 个或者多个,(?)号的意思是匹配 0 个或者 1 个。

答案:

解析:

(*)号的意思是匹配 0 个,1 个或者多个;

( )号的意思是匹配 1 个或者多个;

(?)号的意思是匹配 0 个或者 1 个。

3. 异步复位时序分析

3. FPGA 时序检查中对于异步复位电路的时序分析分别叫(恢复时间检查)和(移除时间检查)。

答案:recovery check、removal check

(或者恢复时间检查、移除时间检查)

解析:

recovery 恢复时间

针对异步复位。

recovery 恢复时间:系统恢复到正常状态前,异步复位信号需要保持的最小时间。即,上升沿来临前,异步复位信号需要保持稳定的最小时间。

recovery 恢复时间:异步复位信号在下一个时钟上升沿来临之前变成无效的最小时间长度(实际的恢复实际要大于等于这个时间)。如果不大于等于这个最小恢复时间,那么异步复位距离时钟沿太近(但是还是在沿的前面),那么导致寄存器没有足够的时间恢复到正常状态,那么下一个时钟沿的状态就可能进入亚稳态。

removal 移除时间

removal 移除时间:时钟上升沿来临后,异步复位信号需要保持稳定的最小时间。

removal 移除时间,异步复位信号在有效时钟沿之后变成无效状态的最小时间,实际移除时间必须大于等于这个最小时间。如果不满足,则异步复位的移除位置距离时钟沿太近(但是还是在沿后),导致可能在这个时钟沿进入亚稳态,有的寄存器误认为是有复位,有的寄存器认为没有复位。

4. 并行计算

4. 并行计算是提高程序运行速度的关键,设 a 为并行计算部分的所占比例,n 为并行处理的节点数,则并行计算带来的加速比为()

答案:

解析:

Ws程序中的串行部分,Wp程序中的并行部分,p为并行的节点数。

5. 电阻值计算

5. 下图球框由三个相同的铁圈两两正相交组成,每个铁圈的电阻均为 R,AB 两点间的电阻为()

答案:不会,不想做,没意思

解析:

简答题:

1. 单bit跨时钟域处理

1. Signal_a 是 clka(300M)时钟域下的一个单脉冲信号,如何将其同步到时钟域 clkb(100M)中,并产生 Signal_b 同步脉冲信号。请用 Verilog 代码描述,并画出对应的时序波形说明图。

2. CMOS 反相器

2. 如下图,一个高速接口的端口电路示意图,要求D端发送数字0/1, DQ端收到相同的数字0/1. VREF电压为比较器数字输出0/1的判决电压。

(1)S1断开时,DQ端VREF电压需设置为?

(2)S1连通时,DQ端VREF电压需设置为?

(3)驱动端发送0时功耗较低,这句话是否正确?为什么?

备注:VREF电压是AD比较器判0或1的基准参考电压

答案:

(1)S1 断开的时候,若 D 为 1,Q 端电压为 VDDQ,因此 VREF 要小于 VDDQ。若 D 为 0,Q 端的电压为 0,因此 VREF 要大于 0,因此 0<VREF<VDDQ

(2)S1 连通时,若 D 为 1,Q 端电压为???? /3 ,若 D 为 0,Q 端的电压为 0,因此 VREF 要大于 0,因此 0<VREF<???? /3 。

(3)驱动端为 0 时,NMOS 管导通,反相器输出接地,电阻没有电流,因此功耗较低。

解析:

参考:

2020大疆数字IC校招笔试题(3)——CMOS 反相器

3. 状态机序列检测

3. 用moore型状态机实现序列“1101”从右到左的不重要检测。

(注:典型的状态机设计分为 moore 与 mealy 两大类,其中 mealy 状态机的输出不仅与当前状态值有关,而且与当前输入有关;moore 状态机的输出仅与当前状态值有关,而与此时的输入无关)

(1)请画出状态转移图,其中状态用S0,S1,S2 … 标识

(2)针对这个具体设计如何衡量验证的完备性?

答案:

从左到右检测,从右到左检测都画了

解析:

仿真覆盖率包括:代码覆盖率 功能覆盖率,统计意义上的数据。

代码覆盖率:代码的执行情况;

功能覆盖率:功能的执行情况;

定向测试 随机约束

一、为什么需要随机

芯片体积增大,复杂度越来越高,定向测试已经无法满足验证的需求,而随机测试的比例逐渐提高。

随机测试可以找到意想不到的缺陷。

随机测试的环境要求比定向测试复杂,需要激励、参考模型、在线比较。

随机测试相对于定向测试可以减少相当多的代码量,产生的激励较定向测试也更多样。

二、为什么需要约束

如果没有约束,产生有效激励的同时也产生了很多无效和非法的激励。

随机自由是一种合法的随机,需要限定激励的合法范围。

随机的对象不只是一个数据,而是有联系的变量集。通常这些变量会被封装在一个数据类中,同时需要在类中声明数据之间的约束关系。因此约束之后要产生随机数据需要一个“求解器”,即在满足数据本身和数据之间约束关系时的随机数值解。

约束不但可以指定数据的取值范围,还可以指定各个数值的随机权重分布。

来自:

https://blog.csdn.net/qq_39794062/article/details/113763259

4. 移位乘法

4. 进行一个运算单元的电路设计,A[7:0]*11111011,尽量用最少的资源实现,写出对应的RTL 代码。

答案:

A[7:0] * 11111011

= A[7:0] * (1_0000_0000 - 101)

= A[7:0] * (1_0000_0000 – 100 – 1)

5. C语言ASCII码转换

答案:通用方法,自己搜吧

0 人点赞