zl程序教程

您现在的位置是:首页 >  硬件

当前栏目

【题目精刷】2022校招大疆创新-数字芯片开发工程师A卷

芯片工程师开发 数字 2022 创新 题目 校招
2023-09-11 14:16:29 时间

为了能够在做题目的过程中学习到需要的知识,对每道题知识参考或者知识详情都做了详细的说明。方便后续复习。欢迎对文中的解答批评指正。

Rivision

时间修改内容
2023.01.27修改 单选3 题中保持关系的错误

题目来源网络地址

单选题(共11道题)

1.下列关于stuck-at故障模型描述错误的一个是:

  • A.组合逻辑上的Fault点可以做故障合并
  • B.用于覆盖内部的时序故障
  • C.正常Capture阶段只有1个Pulse
  • D.对于Full-scan设计可以达成很高得故障覆盖率

A:可测性设计学习笔记 2.3 常见的故障模型有哪些?中有记录:不同端口的故障可能等效,考虑测试矢量集的时候可以合并故障。

B:基于故障模型的测试分析针对组合逻辑。扫描测试是可以解决时序电路测试的。选项说法比较模糊。

C:《SOC设计方法与实现(第3版)》10.4.3 有说明的,采样周期为一个或多个周期。
而《高级ASIC芯片综合》8.2.1 移位周期和捕获周期 说:需要一个时钟周期执行捕获操作。

D:
扫描方式:

  • 全扫描:在设计中的每个寄存器都用具有扫描功能的寄存器代替。
  • 部分扫描:电路中一部分采用了扫描测试结构,而一部分没有。

DFT没有经验,答案不确定,但我倾向于选B


2.下列关于芯片中电迁移的描述错误的一个是:

  • A.用电迁移会降低芯片寿命
  • B.电迁移会使芯片性能退化
  • C.增加导线宽度可以修复电迁移违例
  • B.增加导线间距可以修复电迁移违例

不会做


3.下列会直接影响到芯片工作频率的一个违例是:

  • A.建立时间违例
  • B.保持间距违例
  • C.最大转换时间违例
  • D.最大扇出违例

A:
我们知道建立关系:
t l a u n c h + t c l k 2 q + t l o g i c + t s e t u p < t c a p t u r e + t c y c l e t_{launch} + t_{clk2q} + t_{logic} + t_{setup}< t_{capture} + t_{cycle} tlaunch+tclk2q+tlogic+tsetup<tcapture+tcycle
B:
保持关系:与工作频率无关
t l a u n c h + t c l k 2 q + t l o g i c > t c a p t u r e + t h o l d t_{launch} + t_{clk2q} + t_{logic} > t_{capture} + t_{hold} tlaunch+tclk2q+tlogic>tcapture+thold

设计规则检查约束(set_max_transition、set_max_capacitance)

C:
转换时间就是电路的阻容模型充放电的时间,会导致时序的建立时间不满足从而影响时钟,不是直接原因。
D:
最大扇出是直接作用与 Synthesis 的约束,直接影响到芯片工作频率。


4.从奈奎斯特采样定理得出,要使实信号采样后能够不失真还原,采样频率f与信号最高频率fs的关系时( )

  • A.f大于等于2fs
  • B.f小于等于2fs
  • C.f大于等于fs
  • D.f小于等于fs

奈奎斯特采样定理:采样频率大于等于两倍信号最高频率。


5.以下是对Cache-主存-辅存三级存储系统中各级存储器的作用,速度,容量的描述,其中完全正确的是

A.主存用于存放CPU正在执行的程序,速度慢,容量较大

B.Cache于存放CPU当前访问频繁的程序和数据、速度快、容量小

C.辅存用于存放需要联机保存但暂不执行的程序和数据,速度快,容量极大

D.加大Cache的容量可以使主存能够存放更多的程序和数据


参考资料:计算机组成原理与系统结构 第2版_包健
计算机系统中存储器设计的目标:以较小成本使存储器容量尽可能大,且与 CPU 速度匹配。

三级存储系统:(寄存器)- Cache - 主存 - 辅助存储器

Cache:容量级别为 几兆,访问时间是寄存器访问时间的几倍。Cache 中存储频繁使用的指令和数据。

主存:即内存,存储当前正在执行的程序和处理的数据。

辅助存储器:即硬盘,容量大速度慢。

A:有点不严谨,快慢是相对的。
C:辅助存储器速度慢。
D:略


6.关于linux命令,下面说法错误的是:

  • A.find . -name “*.txt”命令会列出当前目录及子目录下所有以txt结尾的文件
  • B.mv master.map master1.map命今的作用是把master.map文件复制成master1.map
  • C.要解压缩一个名字为test.tar.gz的文件可以使用命令tar-xzvf test.tar.gz
  • D.linux令行中输入cmd1&&cmd2(其中cmd1及cmd2是两个命令),如果cmd1执行失败了,cmd2就不会执行

A:find命令
B:move 命令(mv)
C:tape archive命令(tar)
D:命令执行顺序 cmd1 && cmd2 :cmd1成功(返回0)后cmd2才能被执行。cmd1 || cmd2 :cmd1失败(返回1)就执行cmd2。(cmd1;cmd2;…):执行多个命令。


7.关于综合工具,以下说法正确的是:

  • A.一般为了综合效率,综合工具使用越新越好
  • B.综合工具越来越强大,所以对于一些不可综合的逻辑也没有问题
  • C.综合工具一般需要和Formal工具配套使用
  • D.综合工具使用一个固定版本效果最好

答案不确定
个人理解,综合、实现和后端不能分割来,综合工具的版本需要配合其他条件选择。

形式验证的目标是验证 RTL与RTL、门级网表与RTL、两个门级网表之间的对应关系是否正确。综合是将RTL转换成门级网表的过程。


8.运行以下程序输出的值是

int addr = 32'ha;
bit is_legal;
bit [33:0] info0;

initial begin
    if (addr[0])
        is_legal = 0;
    else
        is_legal = 1;
    info0 = ~is_legal;
    info0 = {info0, addr};
    info0 = {info0, 0};
    $display("0x%0h", info0);
end
endmodule
  • A.0x1_0000_0000
  • B.0x2_0000_0000
  • C.0x14

网上的资料把{}写成(),怀疑自己 😃

这题考的是位宽拓展。Verilog-2005 3.5.1 Integer constants 中就有提到 Automatic left padding 问题,总结起来也很简单:

  • 大位宽给小位宽赋值,将高位截断只取低位。
  • 小位宽给大位宽赋值,无符号数补0,有符号数符号位拓展,不定值拓展x或z。

至于 SystemVerilog 的数据类型 SystemVerilog-2005 4.3.3 Signed and unsigned data types中就有说:byte, shortint, int, integer, 和 longint 默认为 signed。bit, reg,和 logic 默认 unsigned。

info0 = ~is_legal;
主语逻辑非是!,Bitwise 一元运算符是~。答案的关键点就在这,很有意思的是,info0 = ~is_legal,得到info0 = 34’h3fffffffe。而info0 = !is_legal,得到info0 = 34’h0。

按正常理解,bit is_legal 作为无符号数,不应该拓展0吗?

再进行其他实验,换成无符号的 reg 类型,结果也是如此。而且 is_legal = 0;info0 = ~is_legal,得到 info0 = 34’h3ffffffff。info0 = ~1’b1,依然得到info0 = 34’h3fffffffe。

猜想:Verilog-2005 标准上并没提到这个点。猜想是 bitwise 取反底层逻辑先进行符号位拓展后的32bit进行取反,然后截取?

仿真:

reg [2:0]  is_legal;
reg signed [2:0]  is_legal1;
wire [15:0] info0;  
wire [15:0] info1;
initial begin
    is_legal = 3'b111;
    is_legal1 = 3'b111;
end
assign info0 = ~is_legal;
assign info1 = ~is_legal1;

结果确实得到了info0 = 16’hfff8; info1 = 16’h0000;也就是说,取反之前确实会有类似符号位拓展的操作。当为无符号数时补0,当为有符号数时补符号位。is_legal1 = 3’b111;取反之前补1,再取反就得到16’h0000。

info0 = {info0, addr};
这个没什么好说的,{info0, addr}为66位,取低34位得到 34’h20000000a。

info0 = {info0, 0};
Illegal concatenation of an unsized constant. Will treat it as a 32-bit value.
{info0, 0}为66位,取低34位得到 34’h200000000。

%0h:Verilog-2005 17.1.1.3 Size of displayed data 说:可以通过在%字符和表示基数的字母之间插入一个零来重写显示数据的自动大小。即省略前面无效的0


9.DUT中有一个寄存器"DJI_ID_HEAD",该DUT通过APB总线端口与SoC互联,"DJI_ID_HEAD"寄存器的描述如下:请问在DUT的APB总线端口上能看到多少笔有效的数据传输?

Name:DJI_ID_HEAD
Address Offset:0x0
|—bits—|—Name—|—R/W—|—Reset Value—|
|[31:16] | dji_id | RO |0xA55A |
|[15:00] | data | RW |0x0 |
通过寄存器模型对“DJI_ID_HEAD”寄存器进⾏如下程序所⽰的读写访问:
uvm_status_e status;
uvm_reg_data_t rvalue;
RGM.DJI_ID_HEAD.read(status,rvalue,UVM_FRONTDOOR);
RGM.DJI_ID_HEAD.write(status,16’hFFAA,UVM_FRONTDOOR);
RGM.DJI_ID_HEAD.data.get();
RGM.DJI_ID_HEAD.data.set(16’hFFAA);
RGM.DJI_ID_HEAD.update(status);
RGM.DJI_ID_HEAD.reset();
RGM.DJI_ID_HEAD.data.set(16’hFFAA);
RGM.DJI_ID_HEAD.update(status);
RGM.DJI_ID_HEAD.read(status,rvalue,UVM_FRONTDOOR);
RGM.DJI_ID_HEAD.mirror(status);

请问在DUT的APB总线端口上能看到多少笔有效的数据传输?

  • A.6
  • B.7
  • C.8
  • D.9

验证还不会,以后再说吧


10.假设:

class trans_ext extends trans_base; 
    int a = 0;
endclass 

以下代码可以正确打印出a值的选项是:

  • A.
trans_ext tr_e1; 
trans_ext tr_e2; 
trans_base tr_b; 
tr_e1 = new();
tr_b = tr_e1;
$cast(tr_e2, tr_b); 
$display("a is %0d", tr_e2.a); 
  • B.
trans_ext tr_e1; 
trans_ext tr_e2; 
trans_base tr_b; 
tr_e1 = new();
tr_b = tr_e1;
$cast(tr_b, tr_e2); 
$display("a is %0d", tr_e2.a); 
  • C.
trans_ext tr_e1; 
trans_ext tr_e2; 
trans_base tr_b; 
tr_e1 = new();
tr_b = tr_e1;
$cast(tr_e2, tr_e1); 
$display("a is% 0d", tr_e2.a); 
  • D.
trans_ext tr_e1; 
trans_ext tr_e2; 
trans_base tr_b; 
tr_e1 = new();
tr_b = tr_e1;
$cast(tr_e1, tr_e2); 
$display("a is%60d", tr_e2.a); 

知识点:动态转换函数 $cast SystemVerilog-2005 7.Classes 说明了:

  • 将子类(subclass)变量赋值给继承树中更高级别类的变量总是合法的。
  • 直接将超类(superclass)变量赋值给其子类的变量是不合法的。
  • 但是,如果父类句柄指向给定子类的对象,则将父类句柄赋给子类变量是合法的。

为了检查赋值是否合法,使用了动态强制转换函数 c a s t ( ) 。当与对象句柄一起使用时, cast()。当与对象句柄一起使用时, cast()。当与对象句柄一起使用时,cast()检查source_expr的层次结构树(父类和子类),看看它是否包含了dest_handle的类。如果是,则$cast()执行赋值操作。

$cast( singular dest_handle, singular source_handle );

tr_b = tr_e1; // 子对象给父类赋值。

A:$cast(tr_e2,tr_b); // tr_b已经没有 a 属性了。
B:tr_e2 没有初始化空间。
C:先将tr_e1 赋值给 tr_e2,就可以输出tr_e2.a了。
D:tr_e2 没有初始化空间。


11.systemverilog语句,已知:int arr[2][ ][ ];arr[0] = new[4];以下哪个操作是合法的: ( )

  • A. arr[0][0] = new[2];
  • B. arr[1][0] = new[2];
  • C. arr[0][ ] = new[2];
  • D. arr[0][1][1] = new[2];

知识点是多维数组的索引。
参考:SystemVerilog-2005
5.6.1 New[]:内建(built-in)函数new分配存储空间,并将新分配的数组元素初始化为默认值或可选参数提供的值。
new [ expression ] [ ( expression ) ]:[ expression ]内是数组的元素个数。

arr[0] = new[4]; 为第二维分配元素数为4。

B:arr[1]未分配存储空间。不能直接使用。
C:语法错误,声明的时候才可以这样写int arr[][] = new[2];
D:arr[0][1][1] 是一个确切的元素,New表达式只能分配给类/covergroup句柄/动态数组。


多选题(共5道,每道5分,共25分)

1.下列属于DFT故障模型的是:

  • A.stuck-at
  • B.transition-delay
  • C.brige
  • D.IDDQ

可测性设计学习笔记 2.3 常见的故障模型有哪些?

A:固定型故障(Stuck At Fault,SAF)。假设电路或系统某个信号永久固定为逻辑0或逻辑1,简记为SA0(Stuck At 0)和SA1(Stuck At 1)
B:跳变延迟故障(Transition Delay Fault,TF)指电路无法在规定时间内由 0 跳变到 1 或从 1 跳变到 0 的故障。
C:桥接故障(Bridging Faults)桥接故障指的是节点间电路的短路故障。
D:基于静态电流(IDDQ)的测试??? IDDT测试是一种从供电回路,通过观察被测电路所吸取的瞬间动态电流来检测故障的一种方法,被认为可以检测出一些经电压测试和IDDQ测试所不能检测的故障(像开路故障(stuck-open fault)、冗余故障(redundant fault)和时延故障(delay fault)等)。


2.下列属于芯片中时钟树综合质量评价指标的有:

  • [] A.时钟网络延时
  • B.时钟信息偏差
  • C.时钟周期
  • D.时钟树功耗

后端不会写


3.下列属于降低芯片静态压降的方法有:

  • A.增大电源网络密度
  • B.减小封装电感
  • C.增加芯片内电容
  • D.降低工作效率

不会写


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

  • A.静态配置信号可以不做异步外理
  • B.异步处理需要考虑发送和接收时钟之间的频率关系
  • C.异步FIFO采用格雷码的原因是为了提高电路速度
  • D.单比特信号打两拍后可以避免亚稳态的发生

A:静态配置信号初始化时配置,不需要跨时钟域。
B:需要的,快到慢和慢到快处理不一样。不同频率比处理也不一样。
C:异步FIFO格雷码,相邻数值只有1位发生翻转,引起亚稳态的概率更小。
D:亚稳态无法消除,只能降低发生概率。


5.以下哪一种门电路属于通用逻辑门(可以组合搭建出任何逻辑电路)

  • A.AND
  • B.NAND
  • C.OR
  • D.NOR
  • E.XOR

用与非门和或非门可以实现其他基本门电路。进而实现任何逻辑电路。