前言

出笔试题汇总,是为了总结秋招可能遇到的问题,做题不是目的,在做题的过程中发现自己的漏洞,巩固基础才是目的。

所有题目结果和解释由笔者给出,答案主观性较强,若有错误欢迎评论区指出,资料整理来自于“数字IC打工人”等数字IC相关公众号,牛客网等网站真题、网络笔试真题及面经抄录。

保持更新(2023.3.19)文章内含 单选题250道、多选题106道、填空题16道、判断题17道、简答题72道、逻辑推理题3道、C语言 python 脚本编程题8道。
在本文中笔者提供的所有代码,都写成了API,可直接copy到软件编译、运行、给出结果。

题目较多,难免出错,若发现错误,欢迎评论区讨论。

一、单选题

1.以下关于 System Verilog 的描述, 正确的是

A.sv 中可以用 logic 代替 Verilog 中的 wire 和 reg 类型
B.sv 中, 定义成 reg 的信号会被综合成触发器
C.sv 中的 function 语言不可被综合
D.其他都不正确
E.sv 是提供给验证使用的, 因此其不能被综合

答案:A,定义成组合逻辑的reg不会综合成触发器;funciton 可以被综合。


2.UVM 层次化结构中, 最顶层的部件类型是

A. uvm_test
B. uvm_root
C. uvm_top
D. uvm_component

答案:B,uvm_root是验证平台中所有UVM components的“隐含”的top-level和phase控制器。用户不需要直接实例化uvm_root,UVM会自动创建uvm_root单一实例,用户可以使用全局变量(uvm_pkg范围内)uvm_top来访问uvm_root,可参考下图左上角红色部分注解。


3.数字信号上采样时, 一般需要添加什么样的滤波器, 完成功能为?

A. 高通, 抗混叠滤波
B. 低通, 抗周期延拓
C. 低通, 抗混叠滤波
D. 高通, 抗周期延拓

答案:B,上采样时,会出现很多高频噪声,需要对其进行低通滤波,也因为上采样的原理是在原来序列两个点之间插入L个0,最后上采样后周期是变短了,所以是抗周期延拓。如果是下采样,那也是添加低通滤波器,下采样过后,周期被延拓了,导致信号在频谱上有交叠,所以就需要滤波将混叠部分去除,若题目为下采样,则选C。

参考内容:数字信号上下采样对频谱影响,以及如何添加相应滤波器_信号重采样对频域估计的影响_ddatalent的博客-CSDN博客 和 数字信号中的上采样和下采样_信号上采样和下采样_ReCclay的博客-CSDN博客


4.下列属于异步总线的是?

A. SPI
B. USB
C. UART
D. IIC

普及一点概念:

同步通信:一方发送,另一方应答,否则不进行下一次传输(带时钟信号传输)。

异步通信:一方发送,不考虑另一方是否收到,直接进行下一次传输(不带时钟同步信号)。

单工:单向通信,只能由一方发送数据,另一方接收。

半双工:双方都可发送数据,但同一时刻只能一方发送,一方接收。

全双工:双方都可发送数据,并且可同时发送数据。

(1) SPI——同步通信;串行通信;全双工;主从通信(某一时刻可以出现多个从机,但只能存在一个主机,主机通过片选线来确定要通信的从机)。

(2) USB——同步通信;通用串行总线。

(3) UART——Universal Asynchronous Receiver/Transmitter,通用异步收发器;异步通信;串行通信;全双工; 对等总线,没有仲裁机制,所以只能挂载两个同时收发数据的设备,双方都可以发送和接收。

(4) I2C——同步通信;串行通信;半双工;主从通信(总线上支持多个主机和多个从机,总线上任何能够进行发送/接收数据的设备都可以占领总线。当然,任意时间点上只能存在一个主控。多主控,主器件同时争夺总线控制权时,可仲裁)。

答案:C


5.() 电路的逻辑功能特点是, 任意时刻的输出仅仅取决于该时刻的输入, 与电路原来的状态无关

A. 静态逻辑
B. 组合逻辑
C. 动态逻辑
D. 时序逻辑

答案:B

A:静态逻辑电路中靠稳定的输入信号使MOS晶体管保持导通或截止状态,从而维持稳定的输出状态。输入信号存在,对应的输出状态存在;只要不断电,输出信息可以长久保持;

C:动态逻辑电路中利用电容的存储效应来保存信息,即使输入信号不存在,输出状态也可以保持,但由于泄漏电流的存在,信息不能长期保持;

D:时序逻辑电路由存储电路和组合逻辑电路两部分组成,任何一个时刻的输出状态由当时的输入信号和电路原来的状态共同决定。


6.在芯片设计流程当中, 通常会进行后仿真(post-simulation) ,关于后仿的作用, 以下说法不正确的是

A. 抽检 netlist 是否和 RTL 功能一致
B. 抽检电路中是否出现有害的 glitch
C. 抽检时序是否有违规
D. 抽检电路中是否存在亚稳态

答案:后仿,是指综合后仿真,综合后用DC导出门级网表,网表Netlist带有时延信息,将网表和verilog文件结合在一起,用VCS编译仿真,就能得到带有时延的波形信息。所以A当然是后仿的作用,后仿主要是检查电路考虑时延后的各种时序是否出现违例,所以CD也正确,选B。


7.以下关于异步处理正确的是

A 信号经过两级触发器即可完成异步信号的传递‘
B 只要信号传递的两端时钟频率不相等, 即认为是异步信号
C 异步复位信号需要经过同步处理后再使用是安全的
D 异步 FIFO 中使用格雷码传递异步计数器可以保证每一拍传递的数据都是准确的

答案:C

A:信号分为单bit和多bits信号,若是多bits信号,就不能通过两级触发器传递;

B:错误的原因是不是没有考虑整数倍频率且相位差为0的两种时钟;

C:异步复位信号需要经过同步处理后再使用是安全的 (异步复位,同步释放)

D:使用格雷码如果出错只会有一位数据跟上一次数据不一样,应该不能保证每一拍都是正确的


8.关于跨时钟域电路的设计, 以下说法不正确的是

A 单 bit 信号经两级 D 触发器同步后即可进行跨时钟域传递
B 采用单一时钟的电路不会产生亚稳态
C 异步 FIFO 的两个时钟频率相同也可以正常工作
D 跨时钟域电路当中的亚稳态无法消除

答案:B,单一时钟电路,时钟频率高了也会出现时序违例,导致亚稳态发生。

4 种方法跨时钟域处理方法

(1)打两拍,两级触发器同步—单bit数据跨时钟域处理,适用于慢时钟域数据到快时钟域;

(2)异步FIFO—多bit数据跨时钟域处理;

(3)格雷码转换;

(4)加握手信号。


9.衡量数字通信系统传输质量的指标是

A 信噪比
B 噪声功率
C 语音清晰度
D 误码率

答案:D,衡量数字通信系统传输质量的指标分为两种:可靠性和有效性指标,有效性主要指标为传输速率,可靠性主要指标误码率或者说是误信率


10.以下代码片段实现的电路功能是

Input [3:0] in;
output [3:0] out;
wire [3:0] a,b;
assign a=in<<1;
assign b=in>>3;
assign out=a|b;
A 对输入信号 in 先右移 3 位, 再左移 1 位
B 对输入信号 in 循环左移 1 位
C 对输入信号 in 循环右移 3 位
D 对输入信号 in 先左移 1 位,再右移 3 位

答案:B

假设4bit输入信号in为[A,B,C,D],那么A=in<<1=[B,C,D,0],B=in>>3=[0,0,0,A];out=a|b,符号“|”是按位或,0||X=X,从而有out=[B,C,D,A],和输入相比循环左移了1位,选择B。


11. 当一个乘法器需要10个cycle才能完成计算任务,对其需要设置multicycle,setup会设置为10,hold设置为()

A.9
B.不需要设置
C.10
D.1

答案:A,在多周期设置中,Setup的周期是X,设置Hold周期为X-1。具体STA知识可以查看笔者其他文章 静态时序分析(STA)附秋招面试提问


12. 以下工艺器件中,电阻值的最大的是()

A. AA
B. Contact
C. Poly
D. VIA

答案:C,

1.AA(Active Area):活性区域,指用于制作晶体管等器件的区域,通常由氧化物和硅等材料组成。

2.Contact:接触,指将金属或其他导电材料与晶体管或其他器件的材料(如硅)相连接的结构。

3.Via:过孔,指用于连接不同层次(如金属层和多晶硅层)的导线的孔洞结构。

4.Poly(Polysilicon):多晶硅,指用于制作栅极等器件的材料,通常具有良好的导电性能和机械强度。

这些工艺结构中,电阻阻值最大的一般是多晶硅(poly),因为多晶硅的电阻率比金属和硅等材料高得多,通常在半导体器件中用作电阻器等元件。而其他结构(如AA、contact和Via)通常是用于连接和控制器件的,电阻阻值较小。


13. 当clock的周期是10ns,对于模块的input需要添加input delay,假设外部延迟是6ns,内部延迟是4ns,那模块的input delay需要设置为()

A. 5ns
B. 6ns
C. 4ns
D. 10ns

input_delay 下的是外部信号的delay,内部还有的裕量是clock_period - input_delay,一般在逻辑的顶层,下的外部逻辑的delay。比如:set_input_delay -clock CLK $dly [get_ports D]

答案:B,6ns。


14. 以下叙述中,不正确的是()

A. N MOS位于PWELL中
B. P MOS的substrate是N参杂
C. POLY的电阻值比Metal高
D. P WELL的参杂浓度比P Sub高

答案:A,N MOS位于P substrate中,即我们熟知的NMOS导电是在P型衬底中,加正向电压,栅极附近吸收电子形成N型导电沟道,所以N MOS位于P 衬底中。P MOS 则相反。


15. 以下对于MOORE/MEALY状态机的特点描述正确的是()

A. Moore状态机的输出仅与当前状态值相关,Mealy状态机的输出不仅与当前状态有关,也与当前输入值有关
B. Mealy状态机更容易出现错误
C. Moore状态机可以没有default状态
D. Mealy状态机的输出仅与当前状态值相关,Moore状态机的输出不仅与当前状态有关,也与当前输入值有关

答案:A,A是正确的,B选项,只要设计正确,两者都不会出问题。C选项,需要有default状态。D结论与A相反错误。


16. 已知Y=A(~B)+B+(~A)B,下列结果中正确的是()

A. Y=B
B. Y=A
C. Y=(~A)+(~B)
D. Y=A+B

答案:D。最暴力的方法就是画出真值表然后试答案,简单的方法就是化简表达式:

Y=A(~B)+B+(~A)B=A(~B)+(1+(~A))B=A(~B)+B=A+B,选D


17. 关于同步复位和异步复位说法错误的是()

A.异步复位在使用时,复位信号仍旧需要先经过同步后才能使用
B.同步复位在复位时会产生大的瞬态power
C.异步复位容易在输出产生毛利,从而影响后续电路工作
D.在大fanout时,异步复位时序更容易满足

答案:D。

A正确。

B选项,同步复位在复位时通常会产生较大的瞬态功率。这是因为在复位时,所有需要复位的寄存器都会被同时清零或设置为一个特定值,这会导致大量的开关操作和电荷移动,从而产生较大的瞬态电流和功率,正确。

C选项说的正是异步复位的缺点,正确。

D选项错误,在异步复位时序设计中,扇出较小时,由于电路的传输延迟较小,复位信号能够更快地传播到各个部分,因此容易满足时序要求。反之,扇出较大时,由于电路的传输延迟增大,可能会导致复位信号的传播速度变慢,从而导致时序不满足。


18. 16进制有符号数0×C6的十进制数是()

A.-57
B.-56
C.-59
D.-58

答案:D。0xC6 = 0b1100_0110;最高位是1,即符号位为1,是负数,在verilog中用补码表示,换算回来按位取反+1得到十进制数值,0b0011_1010=-(32+16+8+2)=-58,


19. 0×6F5A的十进制数是()

A.28510
B.其他均不正确
C.67532
D.28506

答案:D。


20. 16进制有符号数0×A7,其中低4bit为尾数,截掉后4bit,四舍五入后是()

A.0×9
B.0×8
C.0×A
D.0×B

答案:C。0xA7=0b1010_0111,低4bit四舍五入,当低4bit>=8时进位,当低4bit<=7时不进位。0111=7,不进,选C。


21. 异步FIFO中,指针编码应该使用什么编码方式()

A、One-hot
B、One-cold
C、Binary
D、Gray

答案:D。格雷码,处理跨时钟域问题。Gray编码相邻的两个数之间只有一位二进制数不同。在异步FIFO中,使用Gray编码来表示指针,可以避免读取指针值时出现的不稳定状态和错误读取问题。


22. 摩尔定律中写道,IC上可容纳晶体管数量约每多少个月增加一倍?()

A、10个月
B、12个月
C、18个月
D、24个月

答案:C,18个月,记住即可。


23. 在工作过程中,如果芯片过热,需要动态降低功耗开销,下面哪个方法不能实现这个功能()

A、降低芯片工作电压
B、降低芯片工作频率
C、增加低功耗cell比率
D、能芯片时钟门控

答案:C。动态功耗计算公式:CV^2f。A降低电压、B降低频率都能减少动态功耗。D是低功耗设计clock gating方法,可以降低功耗。C选项确实可以降低功耗,但是审题“工作过程中,芯片过热”,这种情况下,没法直接增加低功耗cell比率降低功耗,选C。


24. 对于32K个MAC,工作在1GHz时钟,满载情况下的峰值性能为多少OPS()

A、8 Tops
B、16Tops
C、32Tops
D、64 Tops

答案:一个MAC(Multiply-Accumulate)指的是一种基本的计算单元,可以进行乘加运算,可用于数字信号处理(DSP)中。32K个MAC的峰值性能取决于时钟频率,即32K * 1GHz = 32 Tops(Tera Operations per Second),因此选项 C 的答案是32Tops。1Tera = 1000G=10^12


25. 组合逻辑电路的逻辑冒险现象是由于( )引起的

A、电路有多个输出
B、逻辑门类型不同
C、电路未达到最简
D、电路中存在延时

答案:D。逻辑冒险(Hazard)是指由于在组合逻辑电路中信号传输延迟引起的问题,可能导致输出信号产生错误或不稳定的情况。


26. 若要将异或门当作反相器(非门)使用,则输入端A B的连接方式是( )

A、A或B中有一个接“0”
B、A和B并联使用
C、A或B中有一个接“1”
D、不能实现

答案:C。异或门,两端输入相反时,输出1。如果A或B中有一个为 1,则异或门的输出为另一个输入端的反相值,即反相器。


27. 下面那个功能不是在综合过程中实现的( )

A、translate
B、DFX insert
C、retiming
D、mapping

答案:B。

A、translate:将高级描述语言代码(如 Verilog、VHDL)转换为中间表示(如 RTL、gate-level netlist)的过程,也可以称为解析、语法分析、建立语法树。

B、DFX insert:指在通过对RTL代码的修改,增加一些附加电路或修改原有电路,以实现某些特定设计目标的操作。例如可靠性(Design for Reliability)、测试性(Design for Testability)、可维护性(Design for Maintainability)等,与综合过程无关。

C、retiming:通过重新安排寄存器的时钟边沿,改变数据通路中组合逻辑和寄存器之间的时序关系,以优化时序和减少功耗的技术。

D、mapping:将门级网表中的逻辑元件映射到目标芯片的逻辑单元(如查找表、寄存器)上,以满足特定的约束条件,如时序约束、面积约束、功耗约束等。


28. 下面哪个FP32数据格式是对的(符号位指数位小数位)( )

A、1.8.23
B、1.5.26
C、2.8.22
D、2.5.25

答案:A。在IEEE 754标准中,单精度浮点数(FP32)格式总共占用32位,由三部分组成:符号位、指数位和小数位。其中符号位占1位,指数位占8位,小数位占23位,在表示格式时,通常使用“符号位.指数位.小数位”的形式进行表示。


29. 下列不属于验证方法学的是( )

A、UVM
B、OVM
C、DVM
D、VMM

答案:C。UVM: Universal Verification Methodology。OVM: Open Verification Methodology。。VMM: Verification Methodology Manual。C不知道指啥,动态电压管理(Dynamic Voltage Management)、分布式虚拟内存(istributed Virtual Memory)?


30. 半导体工艺制程中的7nm,5nm对应的是( )

A、晶体管宽度
B、栅极宽度
C、源极宽度
D、金属线宽度

答案:B。半导体工艺制程中,7nm和5nm是指芯片制造工艺的特征尺寸。特征尺寸指的是芯片上最小的物理结构尺寸,低尺寸工艺中通常指晶体管的栅极宽度,但目前高尺寸工艺通常都采用三维晶体管,即在垂直方向上做多个晶体管,用低工艺的水平堆叠晶体管来达到高工艺的性能,进而自称是高工艺。对于这道单选题来说,硬选的话,选B,答案有些不妥。


31. 一个八位D/A转换器最小电压增量为0.01V,当输10011100时,输出电压为( )V

A 1.28
B 1.45
C 1.54
D 1.56

答案:D。10011100 = 156


32. 下述概念中不属于面向对象这种编程范畴的是()

A对象、消息
B继承、多态
C类、封装
D过程调用

答案:D。面向对象编程的核心概念包括对象、类、封装、继承、多态和消息。过程调用是指调用一个已定义的过程或函数来执行一段特定的操作,不是面向对象编程的概念。


33. 组合逻辑电路通常由( )组合而成

A记忆元件
B门电路
C计数器
D以上都正确

答案:B。


34. 三极管作为开关时工作在什么区域()

A饱和区+放大区
B击穿区+截止区
C放大区+击穿区
D饱和区+截止区

答案:D。在饱和状态下,三极管导通。在截止状态下,三极管截止。


35. 在C语言中(以16位PC机为例),5种基本数据类型的存储空间长度的排列顺序为()

A char<int<long int<=float<double
B char=int<long int<=float<double
C char<int<long int=float=double
D char=int=long int<=float<double

答案:A。 在16位的PC机中,char占1个字节,int占2个字节,long int占4个字节,float占4个字节,double占8个字节。


36. 下面表达式计算结果为4的是()

A 11/3
B 11.0/3
C (float)11/3
D (int)(11.0/3+0.5)

答案:D。A选项=3。B选项=3.67。C选项=3.0。


37. 关于this指针使用做法正确的是()

A 保证每个对象拥有自己的数据成员,但共享处理这些数据的代码
B 保证基类私有成员在子类中可以被访问
C 保证基类保护成员在子类中可以被访问
D 保证基类公有成员在子类中可以被访问

答案:A。this指针是一个指向当前对象的指针,它是在类的内部使用的。this指针的作用是保证每个对象拥有自己的数据成员,但共享处理这些数据的代码。当一个成员函数被调用时,this指针指向调用该函数的对象。通过this指针可以访问对象的数据成员和成员函数。


38. 在timescale 1ns/10ps的条件下,仿真器在6125ps时的打印时间格式为()

A 6
B 61
C 613
D 6125

答案:A。因为$time系统函数返回的是当前仿真时间,而不是当前的时间单位或最小时间精度。timescale 1ns/10ps中:

要计算实际时间,就用$time*时间单位得到实际时间。

1.时间单位为1纳秒(ns),即1个时间单位代表1纳秒。

2.时间精度为10皮秒(ps),即仿真器的最小时间精度为10皮秒,表示的最小时间间隔为10皮秒。


39. 下列描述中采用时钟正沿触发且reset异步下降沿复位的代码描述是()

A always@(posedge clk or negedge reset) if(!reset)
B always@(posedge clk or reset) if(!reset)
C always@(posedge clk or negedge reset) if(reset)
D always@(negedge clk or posedge reset) if(!reset)

答案:A。时钟正边沿触发,排除D。异步下降沿复位,排除B。reset下降沿后reset=0,判断复位if条件应该为if(!reset),排除C,选A。


40. 一个数组元素a[1]与下面哪个表示等价()

A *a+1
B a+1
C *(a+1)
D &a+1

答案:C。摘抄自紫光笔试题,IC相关选择题中间突然来一道考察C语言的选择题,有点猝不及防。这是考察指针和数组的关系,a[1]指数组第二个元素的元素值,不是数组的地址。A选项,是a数组第一个元素值+1。B选项,数组第二个元素的元素地址。C选项,正确,括号内为第二个数组元素的地址,外面再加一个指针解码符号,得到第二个元素的值。D选项,和A选项一样。


41. 在systemverilog中声明随机变量的关键词为()

A randa
B randc
C randomize
D urandom_range

答案:B。randc声明随机变量。随机变量只能在class中声明,SV中,rand和randc都只能修饰类的成员变量。

1.rand,表示每次随机化这个类时,这些变量都会赋一个值,每次随机的概率都是一样的

2.randc,周期随机性,即所有可能出现的值都赋过值后随机值才可能重复


42. 在设计中出现端口和驱动该端口位宽不匹配的情况,verilog/systemverilog默认处理方法错误的是()

A如果端口的位宽和驱动该端口的信号位宽相同,则该值可以无变化的通过该端口
B如果驱动端口比端口的接收端的位宽多,则驱动信号的高位bit会被截断
C如果驱动端口比端口的接收端的位宽多,则驱动信号的低位bit会被载断
D如果驱动端口比端口的接收端的位宽少,则依据verilog的赋值规则进行高比特位扩展

答案:C。高bit会被截断。ABD都对。


43. linux下,删除文件命令是()

A mkdir
B rm
C mv
D del

答案:B。A选项,创建文件夹make direction缩写。B选项,删除文件remove缩写。C选项,移动文件move缩写。D选项,delete是windows系统删除文件的命令。


44.

timescale 1ns/1ps
forkbegin #1;endbegin #2;end
join_none
$display($time);

上述代码中需要等待多长时间?()

A 1ns
B 2ns
C 0ns
D 3ns

答案:C。考察对fork join的理解。

1. fork-join语句会等待所有子程序都执行完毕后再继续执行后续代码。当所有子程序都完成后,join语句才会返回。

2. fork-join_any语句会等待至少有一个子程序执行完毕后就会继续执行后续代码。当有一个子程序完成后,join语句就会返回。

3. fork-join_none语句不会等待子程序执行完毕,而是直接继续执行后续代码。这种语句常用于一些无需等待子程序执行完毕的情况。


45.构成C语言程序的基本单位是()

A 函数
B 过程
C子程序
D 子例程

答案:A,函数。


46. 在veriliog HDL的always块语句中的语句是如何执行的

A 顺序
B 并行
C 顺序或并行
D 不一定

答案:C。描述组合逻辑时,always 语句块里面都用阻塞赋值,就是顺序执行的。描述时序逻辑时,always 语句块里都用非阻塞赋值,并行执行。


47. 在C语言中,一个int型数据在内存中占2个字节,则unsigned int型数据的取值范围为

A 0~255
B 0~32767
C 0~65535
D 0~2147483647

答案:C。2^16=65536


48. 循环体至少被执行1次的语句是()

A for循环
B while循环
C do-while循环
D 任何一种循环

答案:C。


49. Verilog HDL中信号没有定义数据类型时,缺省为什么数据类型()

A reg
B wire
C tri
D z

答案:B,wire。module中输入输出端口没有定义数据类型的,都默认为线网wire类型。


50.状态机的编码风格包括一段式、两段式和三段式,下列描述正确的是( )

A一段式寄存器输出,易产生毛刺,不利于时序约束;
B二段式组合逻辑输出,不产生毛刺,有利于时序约束;
C三段式寄存器输出,不产生毛刺,有利于时序约束;
D所有描述风格都是寄存器输出,易产生毛刺,有利于时序约束。

答案:C。

  1. 一段式:一个always块,既描述状态转移,又描述状态的输入输出,当前状态用寄存器输出;

2. 二段式:两个always块,时序逻辑与组合逻辑分开,一个always块采用同步时序描述状态转移;另一个always块采用组合逻辑判断状态转移条件,描述状态转移规律以及输出,当前状态用组合逻辑输出,可能出现竞争冒险,产生毛刺,而且不利于约束,不利于综合器和布局布线器实现高性能的设计;

3. 三段式:三个always块,一个always模块采用同步时序描述状态转移;一个always采用组合逻辑判断状态转移条件,描述状态转移规律;第三个always块使用同步时序描述状态输出,寄存器输出。

三段式与二段式相比,关键在于根据状态转移规律,在上一状态根据输入条件判断出当前状态的输出,从而在不插入额外时钟节拍的前提下,实现了寄存器输出。


51. 线网中的值被解释为无符号数。在连续赋值语句中,assign addr[3:0]=-3;addr被赋予的值是( )

A 4'b1101
B 4' b0011
C 4' bxx11
D 4' bzz11

答案:A。-3 = 4'b1101,补码形式。


52. "a=4' b1100,b=4' bx110" 选出正确的运算结果( )

A a&b=0
B a&&b= 1
C b&a=x
D b&&a=x

答案:B。A选项,a&b=4'bx100;

参考笔者其他博客:Verilog 逻辑与(&&)、按位与(&)、逻辑或(||)、按位或(|)、等于(==)、全等(===)的区别_不吃葱的酸菜鱼的博客-CSDN博客


53. 下列描述代码可综合的是( )

A fork... join
B assign/deassign
C if ... else和case
D repeat和forever

答案:C。fork join是并行语句,不可综合。deassign是取消赋值,不可综合。forever不可综合。


54. reg[255:0] mem[7:0]正确的赋值是( )

A mem[5]==3' d0;
B mem[10]=8' d1;
C mem=0;
D mem[5][3:0]=4' d1;

答案:D。这句话的意思是,mem的深度是8,位宽是256。所以赋值应该是mem[10] = 256'd1。形如D选项,选中addr = 5空间的[3:0]bit赋值4'd1也是可以的。

reg [255:0] mem [7:0];
wire [3:0] mem_3_0;initial beginmem[5][3:0]=4'd1;
endassign mem_3_0 = mem[5][3:0];

55. 以下关于逻辑综合中解决congestion问题描述不正确的是( )

A禁用多引脚标准单元,例如4输入引脚以上的标准单元
B使用partial blockage以降低congestion区域的cell density
C过多使用MUX单元不利于congestion的优化,因此MUX单元要尽可能禁用
D尽可能使用DCG做逻辑综合

答案:C。

congestion(拥塞)是指在电路布局中一些特定的区域出现了密度过高、资源使用过多的情况,导致该区域的布局难度增加或无法满足设计要求的问题。

A选项,在芯片布局中,较大的标准单元往往需要更多的空间和资源来放置,因此在一些资源受限的区域,使用大型标准单元可能会导致congestion问题。因此,在这种情况下,可以考虑禁用一些多引脚的标准单元,或者采用小型的标准单元来替代大型标准单元,以达到优化congestion的目的。

B选项,Partial blockage是一种在芯片布局过程中对某些区域进行限制的技术,通过对布局规则的设定来限制某些区域的使用。在congestion区域中,可以通过采用partial blockage的方式来降低该区域中的单元密度,以达到优化congestion的目的。

C选项,MUX单元的作用是将多个输入信号按照选择信号的值进行复用,从而实现多路选择。在电路中使用MUX单元可以减少电路的面积和功耗,因此在合理使用的情况下,MUX单元可以用来优化congestion问题。选项C描述不正确。

D选项,DCG(Design Constraints Guide)是一种设计约束,可以在综合过程中对电路进行限制和指导,以优化电路的性能和功耗等参数。使用DCG可以帮助优化congestion问题,因为DCG可以指导综合工具在布局时遵循一些约束条件,从而避免出现congestion问题。


56. 综合不包括下面哪一个过程( )

A Translation
B Routing
C Mapping
D Logic Optimization

答案:B。routing是在布局布线阶段,综合是将RTL代码转换成门级网表阶段,没进行布局布线。


57. 下面关于FIFO的描述正确的是()

A FIFO的读写必须属于同一时钟域
B FIFO是先进先出的存储器
C外部不可以直接操作FIFO的读写地址
D FIFO的空信号在写时钟域产生,满信号在读时钟域产生

答案: A选项,异步FIFO读写不是同一时钟域。


58. Verilog语言中,下列哪些语句不可以被综合( )

A generate语句块
B for语句块
C function语句块
D force语句

答案:D。前三个选项在一定情况下都可以综合。


59. 下面表达式中结果位1' b1的是( )

A 4' b1010&4' b1101
B !4' b1001 || !4' b0000
C &4' b1101
D ~4' b1100

答案:B。A选项,4'b1000。C选项,1'b0。D选项,4'b0011。


60.关于正则匹配,描述错误的是()

A、\w可以匹配a-z、A-Z以及0-9,无法匹配下划线
B、\s可以匹配任意空白符,包括换行符
C、^表示一行的开头
D、\d可以匹配0-9

答案:A。

. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字 等价于 ‘[^A-Za-z0-9_]’。
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
\w能不能匹配汉字要视你的操作系统和你的应用环境而定


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

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

答案:B。

Stuck-at故障模型是在数字电路测试中最广泛使用的一种故障模型,它是一种假设在电路中的信号线上“卡住”(永远保持高电平或低电平)的故障。

选项A, 组合逻辑上的Fault点可以做故障合并:在一个组合逻辑电路中,可以将多个故障合并成一个,以提高测试效率。

选项B,用于覆盖内部得时序故障:stuck-at故障模型主要用于检测组合逻辑电路中的故障,不用于检测时序故障。

选项C,正常Capture阶段只有1个Pulse:在正常情况下,capture阶段只有一个时钟脉冲用于将电路中的数据存储到寄存器中。

选项D, 对于Full-scan设计可以达成很高得故障覆盖率:使用Full-scan技术可以提高stuck-at故障的覆盖率,因为它可以将所有的内部节点都扫描出来,从而使得测试覆盖率更高。


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

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

答案:B。

电迁移EM(Electron Migration)是由于电流通过导线时引起的电荷堆积和电场强度变化,导致导线材料的移动和损耗,进而影响芯片性能和寿命。C选项,增加导线宽度可以减少电流密度,从而减少电场强度变化和电荷堆积,降低电迁移的风险。D选项,增加导线间距可以减少导线之间的相互作用和耦合,从而降低电迁移的风险。


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

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

答案:A。setup time slack 中有clock cycle这一项,setup violation会直接影响到时钟频率。


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

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

答案:A。奈奎斯特采样定理指出,如果要对一个带宽有限的信号进行采样,那么采样频率必须高于信号最高频率的两倍,否则信号将无法完整地还原出来,产生混叠现象。


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

A.主存用于存放CPU正在执行的程序,速度慢,容量较大
B.Cache用于存放CPU当前访问频繁的程序和数据、速度快、容量小
C.辅存用于存放需要联机保存但暂不执行的程序和数据,速度快,容量极大
D.加大Cache的容量可以使主存能够存放更多的程序和数据

答案:B。A选项,主存不存CPU执行程序。C选项,辅存速度快、容量极大不合理。D选项,Cache容量增加和主存容量无关。


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

A.find.-name,“*.next”命令会列出当前目录及子目录下所有以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就不会执行

答案:B。B选项错误,应该用cp master.map master1.map。mv master.map master1.map是重命名操作。


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

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

答案:C。选项A,新版本可能会有bug和兼容性问题。C选项,Formal工具一般和综合工具配套使用,可以对综合后的结果进行验证,确保电路的正确性,选项正确。D选项,不同版本可能处理小问题的细节不同,应选择合适的版本,而不是固定一个版本。


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

int           addr     = 32'ha;
bit           is_legal = 1;
bit  [33:0]   info0;
initial begin if(addr[0])is_legal = 0;else is_legal = 1;info0 = ~is_legal;info0 = {info0,addr};info0 = {info0,1'b0};$display(“0x%0h”,info0);
end

A.0x1_0000_0000

B.0x2_0000_0000

C.0x14

D.0x2_0000_0014

答案:D。十六进制a=4'b1010。所以addr[0] = 0。is_legal = 0。仿真结果如下:

  info0 = ~is_legal;      // info0 = 34'h3_ffff_ffffinfo0 = {info0,addr};   // info0 = 34'h3_0000_000ainfo0 = {info0,1'b0};   // info0 = 34'h2_0000_0014

69. 假设:

class trans_ext extends trans_base;

int a = 0;

endclass,

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

A.trans_ext tr_el;
trans_ext tr_e2;
trans_base tr_b;
tr_el = new();
tr_b = tr_el;
$cast(tr_e2,tr_b);
$display(''a is %0d'',tr_b.a);

B.trans_ext tr_el;
trans_ext tr_e2;
trans_base tr_b;
tr_el = new();
tr_b = tr_el;
$cast(tr_b,tr_e2);
$display(''a is %0d'',tr_b.a);

C.trans_ext tr_el;
trans_ext tr_e2;
trans_base tr_b;
tr_el = new();
tr_b = tr_el;
$cast(tr_e2,tr_e1);
$display(''a is% 0d'',tr_b.a);

D.trans_ext tr_el;
trans_ext tr_e2;
trans_base tr_b;
tr_el = new();
tr_b = tr_el;
$cast(tr_e1,tr_e2);
$display(''a is%60d'',tr_b.a);

答案:A。这主要考察的是SV中,系统函数 $cast(tgt,src) 可以做动态转换。把右侧的变量转换成左侧的变量类型。

从父类句柄转换为子类句柄时,需要使用 $cast( ) 函数进行转换,否则会出现编译错误,把父类句柄转换成子类句柄只有这一种方法,一般是在父类句柄指向子类对象的时候,又想要访问子类的成员变量时,使用cast函数转换。如果父类句柄指向的是父类对象,那么不能用cast函数转换,哪怕转换了也会转换失败,即函数返回0。

这里使用父类句柄方位子类成员变量,首先声明两个子类句柄tr_e1,tr_e2和一个父类句柄tr_b;然后创建一个子类的对象tr_el = new();再将父类句柄指向子类对象tr_b = tr_el;因为要通过父类访问子类的成员变量,所以需要进行cast转换,$cast(tr_e2,tr_b)。最后再display。所以选择A。

具体可以参考笔者其他博客:验证基础-类型转换、虚方法、回调函数、对象拷贝_显示转换 静态转换_不吃葱的酸菜鱼的博客-CSDN博客


70. 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];

答案:选A。B选项,arr[0]被赋值了new[4],但arr[1]没有,所以arr[1][0]就会报错。C选项,动态数组赋值不带[]。D选项,new函数只能给动态数组赋值,不能指定到数组的某个元素。


71. 下列电路中属于时序逻辑电路的是( )

A.编码器
B.计数器
C.数据选择器
D.译码器

答案: B。ACD都可以用组合逻辑实现,B计数器要用时钟上升沿触发、计数。


72. 关于同步设计描述正确的是( )

A.时钟上未叠加任何用户功能逻辑
B.所有寄存器的异步置位及异步复位端口上未叠加任何用户功能逻辑
C.同步设计便于静态时序分析
D.所有寄存器均采用同一时钟

答案:C。选项A,低功耗设计clock gating就在时钟上添加逻辑了。选项B,同步复位异步释放。选项D,分频器,也是同步电路。


73. 下面哪种措施不能减少亚稳态影响( )

A.用反应更快的FF
B.引入同步机制,防止亚稳态传播
C.改善时钟质量,用边沿变化平缓的时钟信号
D.提高系统时钟频率

答案:D。


74. 下列关于实现不符合低功耗设计规范要求的是( )

A.在不进行算术、逻辑运算的时候,使这些模块的输入保持“0”,不让操作数进来,输出结果不会翻转;而如果进行这方面的运算时,再将它们打开
B.FPGA全功能版本在产品适用温度范围内,结温不超过阀值的90%
C.接口电平如果可选,选择高电平模式
D.在满足性能要求时,尽量采用低的系统时钟

答案:C。无论是动态功耗还是静态功耗,增加电平,都会增加功耗。


75. 下列说法错误的是( )

A.两个向量进行比较操作或加减操作或赋值操作时,两个向量的位宽要相等,避免隐式扩展;
B.if/else语句配对使用,case语句加default项;组合逻辑中在所有条件下都要对信号赋值,如果要保持不变用a=a的方式赋值;
C.可综合代码中,除了for语句中的循环变量可以定义为integer型外,所有变量和信号都只能为wire或reg型,不能定义为整型、实数型、无符号型、realtime型和time型;
D.条件语句,如果无优先级关系,尽量采用case,避免多级else if影响时序;

答案:B、C。选项B,用a=a会综合出latch。选项C,整形、无符号型可综合。


76. 下列说法正确的是( )

A.在always语句中赋值的变量,可以是wire也可以是reg
B.reg变量一定被综合为寄存器
C.always块只能用来描述组合逻辑
D.在assign语句中赋值的变量要定义为wire

答案:D。A选项,只能是reg。B选项,组合逻辑的always用reg不会综合出寄存器。C选项,always可以描述时序逻辑。


77. 我们通常所说的时序逻辑电路是指( )

A.锁存器
B.D触发器
C.RS触发器
D.触发器

答案:B。触发器分为边沿触发和电平触发,我们通常所说的触发器,一般指D触发器,上升沿触发。


78. 对于信号定义语句:reg[0:4] always,a;说法正确的是:( )

A.bit定义顺序应该从高到低;
B.信号定义为reg型,只能使用在时序电路的赋值中;
C.每个信号应单独用一行来声明;
D.不能使用关键字定义信号名;

答案:D。A选项,大小端可以高到低或者低到高。B选项,定义成reg可以在组合逻辑always语句块中使用。C选项,多信号可以放在一行声明。


79. 格雷码(gray code)比二进制码(binary code)有什么优势?( )

A.编码实现电路更小;
B.实现电路速度更快;
C.更容易判断不同的编码是否相等
D.相邻的两个编码只有一比特发生跳变;

答案:D。格雷码特点。


80. 以下哪个阶段的仿真可以真实的模拟实际的环境( )

A.综合后仿真
B.布局布线后仿真
C.编译后仿真
D.综合前仿真

答案:B。


81. 形式验证可以判断( )

A.两个设计是否等价
B.设计时序是否满足
C.其他均不能保证
D.设计功能是否正确

答案:A。

形式验证技术:等价性检查和属性检查。


82. 哪些情况下不会产生latch电路?( )

A.使用if选择语句的组合逻辑没有else部分表达;
B.使用case选择语句的组合逻辑没有default表达
C.时序逻辑中if选择语句,没有else部分表达。
D.组合逻辑中条件不全的case语句没有default赋值;

答案:C。C选项不会综合出latch


83. SystemVerilog中,下面那种数组在使用前需要先执行new操作。( )

A.动态数组
B.联合数组
C.多维数组
D.压缩数组

答案:A。SV基础。


84. 下面两端代码中in,q1、q2和q3的初值分别为0,1,2,3,那么经过1个时钟周期后,左侧q3的值和右侧q3的值分别变成了( )

always @(posedge clk)
begin q1=in;q2=q1;q3=q2;
end
always @(posedge clk) begin q1<=in;q2<=q1;q3<=q2;
end

A.0,0
B.0,2
C.0,3
D.2,0

答案:B。阻塞性赋值串行、非阻塞性赋值并行。


85. 下面那些模块划分方式是不合理的( )

A.将不同优化目标的逻辑分开
B.模块划分根据开发人员的个数进行
C.将存储逻辑独立划分
D.将相关的逻辑或者可以复用的逻辑划分在同一个模块内

答案:B。


86. 如下图,对时钟到输出时间分析正确的是( )

A.tCo = Data Delay-clock Delay+Micro Tco
B.tCo = Data Delay+Clock Delay-Micro Tco
C.tCo = Clock Delay-Data Delay+Micro tCo
D.tCo = Data Delay+Clock Delay+Micro Tco

答案:D。


87. 关于verilog代码风格,以下说法错误的有:( )

A.每个文件只能定义一个模块
B.Verilog区分大小写,所有信号命名能以大小写来区分不同信号
C.多个reg变量赋值,如果赋值条件完全相同,可以放在同一个always块内
D.每行只能有一个Verilog语句

答案:B。

从规则角度分析,选项A,每个文件可以定义多个模块,且能编译通过,但就代码风格而言,每个文件只定义一个模块。

选项B,虽然这是合法的,但是变量Ready和ready容易出现歧义,就代码风格而言,不允许。

选项C,正确。

选项D,每行可以有多个verilog语句,但就代码风格而言,B的风格最差。


88. 完全消除亚稳态的方法正确的是( )

A.降低时钟频率
B.使用寄存器打拍同步
C.其他均不正确
D.使用异步fifo传递异步信号

答案:C。亚稳态只能降低其影响,不可完全消除。


89. 下列不属于异步时序电路设计特征的是:()

A.容易组织流水,提升芯片速率
B.不利于时序分析
C.依赖逻辑时延,时延不好控制
D.容易产生毛刺

答案:A。在跨时钟域信号处理的时候,都要对信号进行打拍、同步,之后才能进行流水。要考虑数据打拍延迟,流水组织并不容易,但确实可以提升芯片速率。


90. 以下哪一项对于提高系统处理能力没有帮助( )

A.减少寄存器翻转率
B.扩大数据位宽
C.缩短处理流水
D.提升系统工作频率

答案:A。减少寄存器翻转率可以降低功耗,不能提升性能。


91. 同步电路设计中出现setup time不满足、不可以采样下面哪种措施解决( )

A.降低时钟频率
B.pipeline
C.增加时钟频率
D.减小信号延迟

答案:C。


92. 对于initial语句,说法错误的是:( )

A.在模拟的0时刻开始执行;
B.这是一种过程结构语句
C.可用于给实际电路赋初值
D.在仿真过程中只执行一次;

答案:C。initial语句快不可综合。


93. 异步时钟数据采样的方法错误的是( )

A.使用fifo隔离进行多bit的采样;
B.握手信号后再采样;
C.高频时钟直接采样低频时钟的多bit数据;
D.单bit高频时钟脉冲展宽后给低频时钟进行采样

答案:C。不可直接采样,需要进行信号同步。


94. Verilog语言的层次高低对应( )

A.系统级,行为级,功能级,寄存器传输级,门级
B.系统级,行为级,寄存器传输级,功能级,门级
C.系统级,功能级,寄存器传输级,行为级,门级
D.系统级,功能级,行为级,寄存器传输级,门级

答案:A。

Verilog语言是一种多层次的硬件描述语言,不同层次的描述方式对应着不同的抽象程度和实现方法。以下是从高到低的五个层次及其含义:

1. 系统级(System Level):该层次主要描述系统的高层次抽象,例如输入输出接口、处理器、内存等。在该层次下,主要是通过函数调用等方式描述系统的功能和数据流,并且常常使用高级编程语言进行描述,例如C++、Python等。

2. 行为级(Behavioral Level):该层次主要描述模块的行为,例如模块如何响应输入、产生输出以及模块之间的数据传输等。在该层次下,主要是使用语句和操作符等方式描述模块的行为,例如if-else、for、assign等。

3. 功能级(Functional Level):该层次主要描述模块的功能,例如模块的输入输出接口、操作和算法等。在该层次下,主要是使用模块实例化和信号连接等方式描述模块的功能,例如module、input、output等。

4. 寄存器传输级(Register Transfer Level,RTL):该层次主要描述模块的数据流和状态转移,例如模块内部的寄存器、时序逻辑等。在该层次下,主要是使用寄存器和时序逻辑描述模块的状态转移,例如always @(posedge clk)、reg、wire等。

5. 门级(Gate Level):该层次主要描述模块的硬件实现方式,例如使用哪些逻辑门、多路器等。在该层次下,主要是使用逻辑门和时钟触发器等基本电路组件描述模块的硬件实现,例如and、or、not、dff等。


95. 表示任意两位无符号十进制数需要( )位二进制数

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

答案:A。表示0-99,用7bit二进制数,可以表示0-127。


96. 模块端口的输入信号,如果没有进行赋值,其值是( )。

A.1
B.X
C.Z
D.0

答案:C。高阻态。


97. 常说的7nm工艺,7nm指的是晶体管的( )

A.漏极宽度
B.栅极宽度
C.整体宽度
D.源极宽度

答案:B。前面出现过类似的题。


98. Verilog语言与C语言的区别,不正确的描述是( )

A.Verilog语言可实现并行计算,C语言只是串行计算;
B.Verilog语言可以描述电路结构,C语言仅仅描述算法;
C.Verilog语言源于C语言,包括它的逻辑和延迟;
D. Verilog语言可以编写测试向量进行仿真和测试。

答案:C。verilog不源于C语言,逻辑和延时更不必说了。


99. 数据位宽8bit,地址位宽13bit的RAM,其大小为多少?

A.4KB
B.8KB
C.16KB
D.32KB

答案:B。13bit的地址代表有2^13=1024*8的元素个数,8bit*1024*8/1024/8=8KB。1Byte=8bit,1KB=1024Byte。


100. 在verilog中,以下不属于分支语句的是( )

A.case
B.if-else
C.repeat
D.casez

答案:C。repeat是重复语句。既然题目出现了casez,那我们聊一下case和casez的区别。

case 和 casez 的主要区别在于匹配的精度。case 可以精确匹配表达式的值,而 casez 则允许对表达式的值进行模糊匹配。

case 用于对表达式的值进行精确匹配,它将表达式的值与各个 case 语句的值逐一比较,当找到与表达式值相等的 case 时,就执行相应的代码。

casez 则允许对表达式的值进行模糊匹配,它将表达式的值转换为二进制,并将高阻态 (Z) 和无法识别的状态 (X) 视为通配符。例如用casez来实现一个3-8译码器

module decoder(input [2:0] in, output [7:0] out);always @(*)
begincasez(in)3'b0???: out = 8'b00000001;3'b1???: out = 8'b00000010;3'b?0??: out = 8'b00000100;3'b?1??: out = 8'b00001000;3'b??0?: out = 8'b00010000;3'b??1?: out = 8'b00100000;3'b???0: out = 8'b01000000;3'b???1: out = 8'b10000000;default: out = 8'b00000000;endcase
endendmodule

101. 一个八位D/A转换器最小电压增最为0.01V,当输入10011100时,输出电压为( )V。

A.1.28
B.1.45
C.1.54
D.1.56

答案:D。2^7+2^4+2^3+2^2=128+16+8+4=156;156*0.01=1.56。


102. 在verilog HDL的always块语句中的语句是如何执行的( )

A.顺序
B.并行
C.顺序或并行
D.不一定

答案:C。组合逻辑always 语句块中用阻塞性赋值,串行执行。时序逻辑always语句块中用非阻塞赋值,并行执行。(要非说,硬要在时序逻辑always块里交叉用阻塞和非阻塞赋值那也可以选D)


103. 以下哪个不是异步处理的通用方法( )

A.synchronizer
B.fifo
C.handshake protocol
D.sampling by DFF

答案:D。A选项同步器是处理异步的方法;B选项,fifo先进先出缓存,用于解决不同速度的数据处理之间的数据缓存和调度问题,异步fifo可以解决跨时钟域问题;C选项,握手protocol当然是处理异步的办法。D选项,用寄存器直接采样不正确,需先进行同步。


104. Verilog HDL中信号没有定义数据类型时,缺省为什么数据类型

A.reg
B.wire
C.tri
D.Z

答案:B。verilog基础题。隐式定义。


105. 项目后仿阶段,不需要哪个文件?

A.标准单元库
B.网表
C.SDF
D.RTL

答案:D。后仿需要四个文件:综合生成的网表.v文件、.sdf文件,标准单元库.v文件和前仿时的tb文件。

后仿步骤可参考博客: 使用VCS对电路进行后仿真_早睡身体好~的博客-CSDN博客


106. How many logic gates(only NAND and NOT gate)used in a D latch?( )

A.4
B.5
C.6
D.7

答案:B。电路如下:

参考博客:触发器(SR锁存器、SR触发器、JK触发器、D触发器、T触发器)_Jobs-Wang的博客-CSDN博客


107. 以下对hold timing有帮助的是

A.提高时钟频率
B.降低时钟频率
C.提高工作电压
D.降低工作电压

答案:D。改变时钟频率对改善hold violation没有帮助,C,提高工作电压,会增加电容充放电速度,会让hold violation更容易发生。选项D,降低工作电压可以增加ck_to_Q的时间,有利于避免hold violation。


108. 以下哪项工作需要手工进行门级设计?( )

A.行为级描述
B.综合
C.ECO
D.验证

答案:C。

需要手工进行门级设计的工作是C.ECO。ECO指Engineering Change Order,即工程变更单,通常在产品设计过程中,当需要对设计进行更改时,需要手动修改网表中的逻辑门,并进行后续仿真验证。因此,ECO工作需要手工进行门级设计。而行为级描述、综合和验证这些工作一般可以通过EDA工具自动完成,不需要手工门级设计。


109. At which level is STA usually done?( )

A.Behavior Level
B.Register Transfer Level
C.Gate Level
D.System level

答案:C。STA (Static Timing Analysis)是分析调试一个门级系统时序性能的方法。门级电路表示逻辑门和连线的实际物理结构,这是数字电路中的最低级别。在门级电路中,时序分析需要考虑延迟和时钟等因素,以确保电路的时序满足设计要求。在行为级描述、寄存器传输级别(Register Transfer Level)和系统级别中,时序分析更关注的是功能和性能等方面的设计,而不涉及时序的具体细节。因此,STA通常在门级电路中进行。


110. In Verilog_hdl,a=4'b1011,so &a=?

A.4'b1011
B.4'B1111
C.1'b1
D.1'b0

答案:D。位与运算,有0出0,选D。


111. 下列语句( )不能在module中独立存在

A.task
B.initial
C.always
D.forever

答案:D。forever必须在过程语句块中。


112. CMOS工艺中,PMOS的衬底连接;

A.VDD
B.GND
C.Source
D.Drain

答案:A。模拟电路基础。我们对NMOS熟悉一些,对于NMOS来说,栅极接高电压,形成电子导通沟道,NMOS是P型衬底,接地。所以在NMOS的栅极接高电压时与衬底形成电压差,在NMOS栅极附近形成导电沟道。那么PMOS就反过来,N型衬底,接VDD。


113. A=(0.8125)10,十进制转二进制,则A=

A(0.1101)2
B.(0.0101)2
C.(0.1011)2
D.(0.1111)2

答案:A。

0.8125*2=1.625,取整数部分1。

0.625*2=1.25,取整数部分1。

0.25*2=0.5,取整数部分0。

0.5*2=1,取整数部分1。

参考博客:小数十进制转二进制-CSDN博客


114. 运算assign SUM=a[7:0]+b[7:0] +c[7:0] +d[7:0]+e[8:0],为了SUM没有溢出,SUM的位宽最小为多少

A.10
B.11
C.12
D.13

答案: B。相当于三个9bit数相加,sum位宽取11bit。


115. 下列描述中采用时钟正沿触发reset异步下降沿复位的代码描述是

A.always@(posedge clk or negedge reset) if(reset)
B.always@(posedge clk or reset) if(!reset)
C.always@(posedge clk or negedge reset) if(!reset)
D.always@(negedge clk or posedge reset) if(reset)

答案:C。


116. 组合逻辑电路通常由( )组合而成

A.记忆元件
B.门电路
C.计数器
D.以上都对

答案:B。


117. 以下哪个不是Verilog的keyword?

A.input
B.assign
C.write
D.module

答案:C。关键字。

参考博客:Verilog的关键字_verilog关键字_小默haa的博客-CSDN博客


118. APR最终输出什么数据给Foundary?

A.GDS
B.DEF
C.Verilog
D.SPEF

答案:A。APR(Automatic Place and Route,自动布局布线)工具最终会输出GDSII文件,即刻度数据格式文件,用于制造芯片。GDSII文件包含了所有物理层面的信息,包括了芯片的几何形状、连线等细节信息。Foundry(晶圆代工厂)会使用GDSII文件来制造芯片。


119. 假设在CRC校验中使用的生成多项式是G(X)=X^3+X+1,4位的原始报文为1010,求编码后的报文

A.1010 011
B.1010 000
C.1011 011
D.1011 000

答案:A。CRC校验数字通信系统中的一种检错方法,主要利用除法和余数的原理来进行错误检测。多项式X^3+X+1的二进制bit串为:1011。原始报文为1010,在后面添加3个0,即添加(多项式最高次数的“0”),得到1010000。用二进制除法规则,用1010000除以1011,计算余数:

得到1010000÷1011=0111……011,余数位宽为多项式最高次数,接着拼接输入原始报文和余数结果,得到1010 011,选A。CRC校验的时候,发送和接收方要确定一个共同的生成多项式,这样发送方发送原始报文+CRC编码余数。接收方将原始报文与生成多项式做除法,看最后的余数和发送发计算的余数是否一致。如果一致,则数据传输没出错,如果不一致,则数据传输出错。


120. AX14不包括下面哪个接口信号

A.AWID
B.ARID
C.WID
D.RID

答案:C。AXI总线基础。


121. In ARM AMBA AHB protocol, which of following responses is ONE cycle response? ()

A.OKAY
B.ERROR
C.RETRY
D.SPLIT

答案:A。protocal原文如下:


122. What is the major goal of the scan-reorder? ( )

A.Maximum coverage
B.Minimum IR Drop
C.Minimum wire length
D.Minimum Slack

答案:A。

scan-reorder是一种设计优化技术,其主要目标是通过重新排列设计中寄存器的扫描链路(scan chain),从而提高测试质量和效率。它的主要优点包括:

  1. 提高测试质量:通过重新排列扫描链路中的寄存器,可以更好地控制测试数据的传播路径,从而提高测试覆盖率和故障检测能力。

  1. 提高测试效率:通过优化扫描链路,可以减少测试数据的存储和传输时间,从而加快测试速度和降低测试成本。

  1. 减少功耗:通过合理排列寄存器,可以减少测试时的功耗,从而提高芯片的可靠性和稳定性。

  1. 提高可维护性:通过优化扫描链路,可以更好地控制设计中寄存器的访问顺序,从而更容易进行硬件调试和验证。


123. In following circuit, which pattern could detect the “SAP1” fault on the input of AND gate? ( )

A.a:0, b:0, c:1
B.a:0, b:1, c:0
C.a:1, b:0, c:1
D.a:0, b:0, c:0

答案:B。c=0时,与门的另一端为1,如果总输出为1则SAP1=1,否则SAP1=0。当a=0,b=1时,SAP1=0,总输出为0,所以SAP1=0即fault。


124. Choose the right descriptions of the difference between latch and flip-flop listed below ( )

A.flip-flop saves area
B.latch can’t avoid glitch
C.flip-flop is easier for timing closure
D.latch runs slower than flip-flop

答案:C。一个FF是两个latch拼起来的,所以FF面积会比latch大,延迟会比latch高,排除AD。选项B,latch是可以避免glitch的,在clock gating中,通常会使用厂商包装好的,用latch实现的clock gating,厂商通过调整器件延时,使得latch实现的clock gating一定不出现glitch,那么在大量使用latch clock gating的时候,就会比使用FF做clock gating的面积&功耗小很多。


125. Which of the following regular expressions (in Perl flavor) could match any of the empty lines (i.e., no character or only with one or more space/TAB character in a line) ( )

A.^\s*S
B.^[^\S]*S
C.^\S*S
D.^\S+S

答案:A。正则表达式,s表示空格字符,包括空格、制表符、换行符等。\s*表示匹配0到任意个空格字符;\S表示匹配非空格字符。^表示行首,^\s*S表示以一个空格字符打头,后面又跟着0到任意个空格字符,再以一个非空格字符结尾的行。


126. Which of the following are LVS(Layout Versus Schematic) check items?( )

A. Shorts
B. Opens
C. Minimum width rules
D. Spacing rules

答案:A,B。后端知识,如果网表节点数目比原理图多,可能会有open;反之可能会存在short。C,D一般包含在LEF中


127. What’s the main usage of Scan shift registers? ( )

A.Provide Control & Observe capacity
B.Provide Lock and un-lock statement
C.Provide Control & stability check
D.Provide clock observation

答案:A。Scan Shift Register(也称为扫描链)的主要用途是为了提供芯片测试时的控制和观察(C&O)能力。扫描链是一系列连接在移位寄存器配置中的触发器,允许芯片的内部状态被捕获并通过专用引脚进行移位以进行测试。这使得可以全面测试芯片内的逻辑路径,并提供观察内部节点输出的手段。


128. What kind of MBIST logic can improve memory yield? ( )

A.Redundancy
B.ECC
C.Read Margin block
D.Fuse Bank

答案:A。冗余逻辑(Redundancy)可以提高存储器的良率,是一种常见的MBIST逻辑实现方式。通过向存储器添加冗余列或行,可以在存储器出现故障时重新映射正常单元的地址,从而提高存储器的可靠性。选项B,ECC(Error Correction Code)是一种检测和纠正单个位错误的技术,虽然可以提高存储器的可靠性,但不会直接提高存储器的良率。选项C,Read Margin Block(RMB)是一种通过向MBIST添加读取修饰器来提高读取边际的技术,可以提高存储器的可靠性,但不会直接提高存储器的良率。选项D,Fuse Bank通常用于存储和控制存储器的配置和测试数据,与MBIST逻辑的良率没有直接关系。


129. 以下verilog变量名合法的是( )

A. 3sum
B. a/b
C. ab@cd
D. subSme_

答案:D。verilog命名以字母或者下划线打头,可以出现字母、数字、下划线和钱字符“$”。


130. 如下对于procedural block说法错误的是( )

A.代码中的procedural block是同时执行的
B. initial和always procedural block可以嵌套
C. initial procedural block只执行一次
D. always procedural block可以循环执行

答案:B。不可嵌套。


131. 下面那个不是IC设计前端的FLOW( )

A.RTL设计
B.综合
C.门级验证
D.布局布线

答案:D。布局布线是后端的FLOW。


132. 下面哪种不属于Vim编辑器的工作模式( )

A.命令模式
B.插入模式
C.底行模式
D.列操作模式

答案:D。VIM的工作模式有命令、插入、底行、可视化、普通、替换模式等。


133. 下面哪个是最简单的逻辑门( )

A.与门
B.或门
C.非门
D.与非门

答案:C。非门,由一个CMOS组成。


134. 如下的几个Verilog描述层次中,我们常用的是哪个层次( )

A. Gate Level
B. Algorithmic
C. Register Transfer Level
D. Switch Level

答案:C。我们通常都是在寄存器传输级进行coding,


135. 在systemverilog中声明随机变量的关键词为( )

A. randa
B. randc
C. tandomize
D. urandom_range

答案:B。SV基础。


136. linux常用命令中,下列哪个命令用于修改文件的所属群组( )

A. cat
B. chgrp
C. chown
D. chmod

答案:B。change group。


137. 在systemverilog中,可以在哪里定义类( )

A. program
B. module
C. package
D.以上都可以

答案:D。SV基础。


138. 正确描述FIFO特性的为( )

A.将满信号(almost_full)和将空信号(almost_empty)是必须使用的
B.FIFO可以作为数据缓冲模块
C.满信号在读时钟域产生
D.FIFO可以通过写入地址直接访问

答案:B。满信号在写时钟域产生。FIFO读写要求先进先出,不可通过地址直接访问。


139. 以下哪个不属于面向对象编程(OOP)特性( )

A.封装
B.继承
C.多态
D.重载

答案:D。SV基础。


140. systemverilog中以下语句中哪一个表示等待至少一个进程完成,然后再执行后继的语句( )

A. fork_join
B. fork_join_none
C. fork_join_any
D. fork_join_one

答案:C。考察fork join的用法。

1. fork-join语句会等待所有子程序都执行完毕后再继续执行后续代码。当所有子程序都完成后,join语句才会返回。

2. fork-join_any语句会等待至少有一个子程序执行完毕后就会继续执行后续代码。当有一个子程序完成后,join语句就会返回。

3. fork-join_none语句不会等待子程序执行完毕,而是直接继续执行后续代码。这种语句常用于一些无需等待子程序执行完毕的情况。


141. systemverilog中能够从当前for循环或者while程序块中跳出并运行下一段程序的语句是( )

A. continue
B. break
C. stop
D. finish

答案:B。SV&&C语言基础。


142. 用补码方式表示的有符号二进制数1011.10换算成十进制为多少( )

A.-4.5
B.4.5
C.-5.5
D.5.5

答案:A。最高位为1,是负数。带小数的补码容易给人搞蒙,以后遇到带小数的东西,什么都别管,先把小数去了,把数值求出来之后,再通过移位把小数点加上。

101110 去掉符号位 = 01110,把补码转化为原码=10010 = 18。所以有符号数101110=-18,算完这个再把小数点加上,定点小数是2位,-18右移2bit=-18>>2=-18/4=-4.5,选A。


143. 下列哪种常用电平标准是单端的( )

A.PECL
B.LVDS
C.RS485
D.RS232

答案:D。

A. PECL (Positive ECL)是一种差分信号电平标准,其主要应用于高速数字信号传输和时钟信号传输。PECL工作电压范围广,通常为3.3V或5V,具有高速、低噪声、低功耗等优点。

B. LVDS (Low Voltage Differential Signaling)是一种差分信号电平标准,其主要应用于高速数字信号传输,工作电压通常为1.2V至3.6V之间,具有高速、低功耗、抗干扰能力强等优点。

C. RS485是一种标准的串行通信接口标准,其主要应用于工业自动化和控制领域。RS485采用差分信号传输,支持多节点、远距离通信、抗干扰能力强等特点。

D. RS232是一种标准的串行通信接口标准,其主要应用于计算机和通信设备之间的数据传输。RS232通信采用单端传输,使用标准的DB9接口,通信距离较短,通常在15米以内,通信速率较低,但具有易于实现、使用方便等优点。


144. 以下的哪个timescale directive定义下,#1.23表示1.23ps( )

A. timescale1ps/10fs
B. timescale 1ps/100fs
C. timescale 1ns/1ps
D. timescale 1ns/1ops

答案:A。


145. 修改文件夹"test"以及其下面的所有文件权限为User自己可读可写可执行,Group和Other设定为仅仅可读( )

A. chmod-R 755 test
B. chmod-R 744 test
C. chmod-R 722 test
D. chmod 755 test

答案:B。可以使用数字来表示权限。每个权限都对应一个三位数字,分别对应 User、Group 和 Other,数字分别为 4、2、1,分别表示读、写、执行的权限,三个数字相加就是总权限。因此User=4+2+1=7; Group=Other=4。选B。


146. 下面哪个phase在UVM tree中是按照自上而下的顺序执行( )

A. build_ phase
B. connect_ phase
C. end_ of_ elaboration_ phase
D. start_ of_ simulation_ phase

答案:A。

在UVM中,build_phase是自上而下执行的,也就是说,它会从UVM test中的build_phase开始执行,然后逐步向下执行,直到达到了UVM testbench中的最底层组件。

这是因为,UVM中的build_phase是用来建立UVM组件之间的连接关系的,而这些组件之间的连接关系是自下而上建立的。也就是说,组件的实例化顺序是自下而上的,即最底层的组件最先实例化,然后向上逐层实例化,最终到达UVM test。

因此,为了建立正确的连接关系,UVM中的build_phase需要从UVM test开始执行,逐层向下执行,以便正确地建立组件之间的连接关系。


147. 下面那些systemverilog数据类型不是双状态数据类型( )

A. bit
B. integer
C. real
D. byte

答案:找四值逻辑,选B。


148. 下列关于mbist测试描述正确的一个是:( )

A、mbist测试实现没有面积开销
B、mbist测试频率和mem工作频率不一致
C、mem repair可以提高良率
D、mbist测试对mem性能没有影响

答案:C。

选项A,mbist测试需要在mem中添加一些测试电路,会有面积开销。选项B,测试频率可以和mem工作频率不一致也可以一致。选项C,在MEM Repair阶段,根据故障映射表,可以通过不同的方法来修复故障单元。例如,可以将故障单元替换为备用单元,或者通过将存储器单元的地址重新映射到备用存储器单元来修复故障单元。选项D,mbist测试在一定程度上可以提升mem的可靠性和性能。


149. 下列关于芯片中信号串扰描述错误的一个量:( )

A、串扰会导致信号延迟和毛刺
B、增强侵害网络单元驱动能力可以减小串扰影响
C、在受害网络上插入缓冲器可以减小串扰影响
D、增加导线间距可以减小串扰影响

答案:B。选项B说反了,应该在受害网络上增强驱动能力。选项C,在受害网络上插入缓冲器就是一种增强驱动能力减少串扰影响的方法。

芯片上的串扰(Crosstalk)串扰是由互连线之间的寄生耦合引起的噪声,这种耦合反映了物理世界非理想化的特性。随着芯片特征尺寸的细化,互连线的物理尺寸以及间距变小,从而导致互连线之间的耦合效应增大,,串扰随之产生并增强。

侵害网络(aggressor net或attacker):产生串扰信号源的网络。

受害网络(victom net):收到串扰的网络。


150. 关于异步复位,以下说法正确是:( )

A、奇存器的时钟状态对是否能复位没有影响
B、奇存器的时钟状态对是否能解复位没有影响
C、复位信号上是否有毛刺没有影响
D、异步复位信号不需要同步到对应的时钟域上

答案:不确定。复位信号一般是时序逻辑,能否复位必须要让目的寄存器采集到复位信号,如果复位信号没在目的时钟的有效期内触发,也不会产生复位。C,复位信号上有毛刺会有影响,所以一般异步复位信号都要有对应的滤毛刺电路。 D选项,需要同步,否则解复位的时候会出问题,所以异步复位都要进行异步复位同步释放。


151. 1个16Kx 8位的存储器,其地址线和数据线总和是( )

A、48
B、46
C、17
D、22

答案:D。地址线=4+10=14位,数据线=8,总和=14+8=22.


152. 下列关于多sit数据跨时钟域的处理思路,错误的有( )

A、发送方给出数据,发送方给出握手请求,接收方收到后回复,发送方撤销数据。
B、发送方给出数据,接收方用本地时钟同步两拍再使用;
C、发送方把数据写到异步fifo,接收方从异步fifo里读出;
D、对于连续变化的信号,发送方转为格雷码发送,接收方收到后再转为二进制。

答案:B。多bit跨时钟域不能用两级同步。


153. 用于下载编程文件/调试物理FPGA器件的通信技术名称是什么?( )

A、HDMI
B、USV
C、JTAG
D、JPEG

答案:C。


154. 某嵌入式设备包含linux内核,bootrom,bootioader,文件系统镜像system.img,则它们在嵌入式设备开机时的启动加载顺序为?( )

A、linux-> bootrom->bootioader->system.img
B、bootrom->bootioader-> linux-> system.img
C、bootioader->system.img-> linux-> bootrom
D、linux-> system.img->bootrom-> bootioader

答案:B。

一般情况下,嵌入式设备的启动加载顺序如下:

  1. BootROM:芯片上的一段固化的ROM程序,负责在设备上电后最先启动。它会初始化芯片和系统总线,检查并加载BootLoader(引导加载程序)。

  1. BootLoader:是一段独立的程序,负责在启动过程中完成对系统硬件和内核的初始化。它的作用是将内核镜像从外部存储器(如Flash)中加载到系统内存中,并启动内核。

  1. Linux内核:是系统的核心,负责管理系统资源、进程调度、设备驱动等。

  1. 文件系统镜像system.img:是一个包含文件和目录的映像文件,包括应用程序、库文件、配置文件等系统文件,用于支持设备的各种功能。


155. 预设clk为周期为10ns的时钟,以下选项中能正确将clk延时8ns的clk_dly信号是:( )

A、assign #8ns clk_dly = clk;
B、assign #8ns clk_dly <= clk;
C、always@(clk) begin clk_dly = #8ns clk; end
D、always@(clk) begin clk_dly <= #8ns clk; end

答案:

选项A,连续赋值过程定义延迟。右侧更新数据后等待期间如果发生了数据改变,则刷新等待时间,即只有持续延时时间的信号会被延时赋值给左侧。周期为5ns,所以这句的结果是clk_dly一直保持。

选项B,没有这种用法,语法错误。

选项C,阻塞赋值,always语句块里是组合逻辑触发,clk一变就触发阻塞性延迟8ns刷新,而clk 5ns一变,导致clk_dly一直保持,和A一样。

选项D, 非阻塞过程性延迟赋值。


156. 32bit位宽的异步fifo,写时钟1000M,读时钟续率800M,在数据包大小为4KB,包间隔足够大时,fifo的最小深度为( )

A、158
B、205
C、638
D、820

答案:B。

数据包大小为4KB,FIFO数据位宽为32bit即4Byte。故传输数据共4KB/4B=4096个数据。写数据速度是读数据的5/4倍,即每写入5个数据,被读出了4个数据,当写入4096个数据时,读出了4096/5*4个数据,还有1/5的数据没被读出。4096*1/5取上整=205。


157. According to the timing report information given below, the clock period value in constraints should be?

startpoint: din_reg  (rising edge-triggered flip-flop clocked by CLK),
Endpoint: dout_ reg (rising edge-triggered flip-flop clocked by CLK).
Path troup: CLK.
Path Type: max
Point    Incr    Path
clock CLK (rise edge)    0.00    0.00.
clock network delay(idea1)    0.00    0.00
din_reg/CK (DFFX1)    0.00    0.00
din_reg/Q (DFFX1)    24.86    24.86
U3/X(BUFX1)    7.46    32.31
dout_reg/D (OFFX1)    0.00    32.31
data arrival time        32.31
clock CLK (rise edge)    50.00    50.00
clock network delay (ideal)    0.00    50.00
clock uncertainty    -5.00    45.00
dout_reg/CK (DFFX1)    0.00    45.00
library setup time    7.90    37.10
data required time        37.10
data required time        37.10
data arrival time        -32.31
slack (MET)        4.78

A. 32.31
B. 50
C. 37.10
D. 4.78

答案:B。两个clock CLK (rise edge) 的间隔为50ns,即时钟周期为50ns。


158. Which statement is NOT correct?( )

A. A static method has no access to non-static members (class properties or methods).
B. A static method can directly access static class properties or call static methods of the s
C. Static methods can be virtual
D. The static class properties can be used without creating an object of that pe.

答案:

方法可以声明为静态。

静态方法受所有类作用域和访问规则的约束,但其行为类似于可以在类外调用的常规子程序,即使没有类的实例化。

静态方法不能访问非静态成员(类属性或方法),但可以直接访问静态类属性或调用同一类的静态方法。

在静态方法主体中访问非静态成员或特殊this句柄是非法的,会导致编译器错误。

静态方法不能是虚的。


159. The logic module composed of two flip-flops. The delay value of each part: the output delay of the D flip-flop: Tco: setup time: Tsu; hold time: Thold; the clock period: T; the delay from the clock to the first-stage clock terminal: T1, to the clock delay of the second stage is T2; the delay of the combinational logic between the two flip-flops is Tcomb. Given T, the maximum Tcomb is______.

A. T-Tco- Tsu- Thold -(T1-T2)
B. T-Tco- Tsu +Thold -(T1-T2)
C. T-Tco- Tsu -(T1-T2)
D. T-Tco- Thold -(T1-T2)

答案:C。

setup : T1 + Tco + Tcomb + Tsu < T2 + T

hold : T1 + Tco + Tcomb > T2 +Thold

Tcomb > T2-T1+Thold-Tco;

Tcomb < T -Tco-Tsu-(T1-T2);

求Tcomb最大值,所以选C。


160. In SDC clock constraint definition, if master clock MST_CLK is 1000ps, what's the clock period or generation clock GEN_CLK?( )

create_ clock [get_ ports MST_CLK_PORT] -name MST_CLK-period 1000 -waveform {0 5000}
create_ generated _clock [get ports GEN_CLK _PORT] -name GEN_CLK -source [MST_ CLK_ PORT] –master_ clock MST _CLK -edges {1 3 5}

A. 1000ps
B. 2000ps
C. 3000ps
D. 5000ps

答案:B。

MST_CLK 的周期是 1000ps。

-edge:作为一个对应源时钟边沿的整数列表,表明从哪个沿产生生成时钟的边沿。时钟沿的个数为奇数个,至少3个。由1开始计数,表示第一个上升沿。

-edges {1 3 5} 则表示主时钟的第 1,3,5个边沿对应生成时钟的边沿。也就是二分频,选B。


161. Which statement is correct?( )

A. UVM test termination is using raise/drop uvm_object
B. When we set the verbosity to UVM_ LOW, the message with UVM_NONE cannot be issued.
C. If we set the configuration object in test layer, both subcomponents and sequences can retrieve its handle.
D. In SV language, It fails to cast a null pointer to an object. “$(abc, null);”

答案:A。

选项A,UVM1.1之后,结束仿真的机制有且仅有一种,就是利用objection挂起机制来控制仿真结束。uvm_objection类提供了一种所有component和sequence共享的计数器。如果有组件来挂起objection,那么它还应该记得落下objection。这个objection机制非常重要,在仿真的过程中,至少要有一个component挂起objection来防止仿真结束,这是UVM的范式。

选项B,错误,UVM_NONE的重要程度高于UVM_LOW,哪怕设置了UVM_LOW,UVM_NONE还是可以被报告。

选项C,不确定

选项D,可以将一个空指针给一个对象。


162. Which of the following descriptions of code coverage are incorrect?

A. A code coverage rate of 100 percent indicates that code bugs have been eliminated
B. Code coverage includes functional coverage
C. Code coverage includes conditional coverage
D. Code coverage includes statement coverage

答案:A。选项A,代码覆盖率到100%不代表没bug了,错误。

代码覆盖率常用的指标:

语句覆盖(statement coverage),决策覆盖(decision coverage)也叫分支覆盖(branch coverage),条件覆盖(condition coverage)多重条件覆盖(multiple condition coverage)条件/决策覆盖(condition/decision coverage),改进的条件/决策覆盖(modified condition/decision coverage),路径覆盖(path coverage),函数覆盖率(function coverage);调用覆盖率(call coverage);循环覆盖率(loop coverage)等等。


163. The time required for an input data to settle_______ the triggering edge of clock is known as “Setup Time”.( )

A. Before
B. During
C. After
D. All of the above

答案:A。建立时间概念。


164. The difference in the clock latency between two sink pins is called.

A. Clock transition
B. Clock skew
C. Clock network delay
D. Clock jitter

答案:B。

Clock transition是时钟0-1翻转时间。

Clock skew是一个信号时钟沿着同一个时钟网络到达源寄存器和目标寄存器的时间差。

Clock network delay是时钟从时钟源到目的寄存器的时间。

Clock jitter是由于晶振不稳定导致的时钟抖动,不可避免。


165. Suppose metal min width is 3x and metal min-space is 5x, the metal pitch is: ( )

A. 4x
B. 5x
C. 6x
D. 8x

答案:D。

Metal pitch是指金属层上相邻两个电路线之间的距离,也可以理解为金属层的线宽和线间距之和。


166. What is the advantage of the cells with high threshold voltage?

A. High speed
B. Low leakage current
C. Small cell size
D. None of above

答案:B。

低阈值标准逻辑单元速度快、漏电流大。

高阈值标准逻辑单元速度慢、漏电流小。


167.为了避免50Hz电网电压的干扰进入放大器,应选用哪种滤波器?

A. 带通
B. 带阻
C. 低通
D. 高通

答案:B。

带通滤波器(Band-pass filter):只允许一定频率范围内的信号通过,其他频率的信号被滤除。它可以用于信号的频率分析和滤波,例如在调制解调、通信系统和音频信号处理等领域中。

带阻滤波器(Band-stop filter):只允许一定频率范围之外的信号通过,其他频率范围内的信号被滤除。它也被称为陷波器或拒频器,可以用于去除特定频率的干扰信号。

低通滤波器(Low-pass filter):只允许低于截止频率的信号通过,高于截止频率的信号被滤除。它可以用于去除高频噪声或者只保留低频信号的应用,例如音频信号处理中的低音增强。

高通滤波器(High-pass filter):只允许高于截止频率的信号通过,低于截止频率的信号被滤除。它可以用于去除低频噪声或者只保留高频信号的应用,例如音频信号处理中的高音增强。


168. Which of the following memories needs to keep refreshing? ( )

A. DRAM
B. SRAM
C. Flash
D. ROM

答案:A。


169. 单稳态触发器的输出状态有( )

A.一个稳态、一个暂态
B.两个稳态
C.只有一个稳态
D.没有稳态

答案:A。

一、单稳态触发电路:其工作特性具备如下三个特点。因此被广泛用于脉冲整形、延时(产生滞后于触发脉冲的输出脉冲)以及定时(产生固定时间宽度的脉冲信号)等。

(1)、它有稳态和暂稳态两个不同的工作状态。

(2)、在外界触发脉冲的作用下,能从稳态翻转到暂稳态,在暂稳态维持一段时间后,再自动返回稳态。

(3)、暂稳态维持时间的长短取决于电路本身的参数,与触发脉冲的宽度和幅度无关。

参考博客: 单稳态触发电路_单稳态电路_大不列颠小小咸鱼的博客-CSDN博客


170. 下列关于FTL, CMOS, ECE电路描述不正确的是( )

A. CMOS电路的输入端不用的话不能悬空,TTL的输入端不用的时候可以悬空。
B. CMOS输出可以直接驱动TTL输入,反之亦然。
C. ECL电路工作在截止区或线性区。
D. ECL集成电路的开关管具有很高的输入阻抗和低的输出阻抗,所以带负载能力强

答案:B。

TTL: 晶体管-晶体管逻辑(Transistor-Transistor-Logic )电路。

CMOS:互补型金属氧化物半导体(Complementary Metal-Oxide-Semiconductor)电路。

ECL:发射极耦合逻辑(emitter coupled logic)电路。

A: CMOS 电路不使用的输入端不能悬空,会造成逻辑混乱。因为CMOS电路输入阻抗非常高,很容易收到干扰,必须将不用的输入端接地。TTL电路不使用的输入端悬空为高电平。

B: TTL与CMOS电平、驱动能力不匹配,需要接口转换电路。

C: ECL电路(即发射极耦合逻辑电路Emitter-Couple Logic)是一种非饱和型的数字逻辑电路,电路内晶体管工作在线性区或截止区,速度不受少数载流子的存储时间的限制,所以它是现有各种逻辑电路中速度最快的一种, 能满足高达10Gbps工作速率

D: 由于 ECL 门电路的射极耦合电阻较集电极电阻大得多,因而输入阻抗高;输出电路是工作在放大状态的射极跟随器,其输出阻抗很低,因而 ECL 门电路带负载能力强。


171.如图所示的P型半导体MIS结构的C-V特性图中,AB段表示多子积累,CD段表示( )

A.平带状态
B.多子耗尽
C.少子反型
D.多子积累

答案:B。


172. 下列说法错误的是( )

A.为了节省功耗,多电压域设计中,电压域的划分越多越好
B. level shifter一般放在receiving domain
C.为了降低功耗,可以将大块的SRAM分割成多个小快
D.隔离单元在power down的情况下,一般将信号固定在高阻态

答案:A。

选项A.电压域划分越多,需要的level shifter数量就越多,设计复杂度也就越高,同时level shifter也会占用芯片面积和功耗,因此需要在电压域划分和level shifter的数量之间做出平衡。

选项B. level shifter通常被放在receiving domain中,因为其主要作用是将发送端和接收端之间的电压差转换为接收端可接受的电压范围内的信号,从而实现数据传输。

选项C.将大块的SRAM分割成多个小块可以降低功耗,因为小块SRAM的读写操作速度更快,访问时不需要同时打开所有SRAM单元,也可以避免因为大块SRAM同时访问时引起的功耗过大的问题。

选项D.隔离单元在power down的情况下,通常将信号固定在高阻态,避免漏电流导致的功耗和干扰。


173. 下列关于同步时序逻辑电路和异步时序逻辑电路中说法正确的是( )

A.异步时序逻辑电路有统一的时钟信号
B.异步时序逻辑电路的状态只有在时钟信号到来的时候才会发生变化
C.同步逻辑电路输出状态与时钟信号无关
D.同步时序逻辑电路有统一的时钟信号

答案:D。选项B,复位信号。


174.以下关于数字集成电路功耗的叙述中,不正确的是:( )

A.翻转功耗和短路功耗都属于动态功耗
B.翻转功耗是逻辑转换中对负载电容充放电产生的
C.翻转功耗的大小和电路时钟频率无关
D.可以通过降低电源电压来减小电路总功耗
E.在电路中多采用低阈值晶体管(LVT)可以减小静态功耗

答案:C


175.以下verilog代码中,clk,rst_n分别为时钟和复位信号,叙述不正确的有:( )

input clk, rst_n;
reg [3:0] counter;
reg out1;
reg out2;always @(posedge clk or negedge rst_n)
beginif(~rst_n) counter <= 4'b0;else counter <= counter + 1;
endalways @(posedge clk or negedge rst_ n)
beginif(~rst_n) out1 <= 1'b0;else if(counter[1:0] == 0) out1 <= 1'b1;else if(counter[1:0] == 3) out1<= 1'b0;
end
always@(*)out2 = counter[0] & counter[2];

A.counter [0]和counter[2]都来自寄存器,所以out2不会产生glitch
B.这段代码综合出的电路中,共有6个寄存器
C.out1可以认为是占空比为50%的时钟
D.out1的频率 是clk的1/4

答案:D。选项AB错误,out2是组合逻辑,不会综合出寄存器,组合逻辑可能产生glitch,C占空比为75%。


176.以下对计算机体系结构的叙述中,不正确的是:( )

A.CPU可以访问系统中所定义的所有地址空间
B.存储器分级的目的是解决存储容量与速度之间的矛盾
C.处理器采用流水线设计是为了提高时钟频率
D. write-through和write -back都属于cache的写策略

答案:A。CPU只能访问它所连接到的总线的地址空间,它不能访问不属于它所连接的总线的地址空间。

选项D正确,写策略是指当CPU要写入数据到Cache时,该数据是直接写入主存,还是先写入Cache,在一定条件下再写入主存。Write-through指的是数据写入Cache的同时也写入主存,Write-back指的是只有当该数据被替换出Cache时,才会写回主存。这两种写策略在实现上有所不同,但都可以用于Cache的设计。


177.下图所示的电路中,下列时序约束正确的是( )

时钟频率SCLK为200M

A. set_output_delay -min 1.9 -clock SCLK [get_ ports RDY]
B. set_output_delay -max 2.2 -clock SCLK [get_ports RDY]
C. set_output_delay -max 3.1 -clock SCLK [get_ ports RDY]
D. set_output_delay -min 1.0 -clock SCLK [get_ports RDY]

答案:C。

set_output_delay -min 2.2 -clock SCLK [get_ ports RDY]

set_output_delay -max 3.1 -clock SCLK [get_ ports RDY]


178.以下关于AMBA总线的叙述中,正确的是:( )

A. AHB支持burst传输
B.位宽为32 bit的BUS,每一笔读或写操作的数据都是32 bit
C. APB中可以有多个 master
D.时钟频率和数据位宽相同的情况下,APB的理论最大带宽是AHB的2倍

答案:A。选线B,可以小端少bit。选项C,APB是一主多从总线。选项D,理论最大带宽是AHB的1/2。


179.以下关于综合的叙述中,不正确的是:( )

A. clock uncertainty包括clock jitter和clock skew
B.对芯片中的子模块,综合阶轻set_input_delay设置的编入delay是不精确的
C.时序约束越紧越好,以给后端留出足够的余量
D.综合会把RTL代码最终转换为由工艺库中的逻辑单元组成的网表

答案:C。约束越紧,可能资源效果越多,功耗也会随之增加。


180.以下关于复位的叙述,错误的是:( )

A.相比同步复位,异步复位不需要时钟沿,所以对毛刺敏感
B.大多数工艺库中的触发器都有异步复位端,使用异步复位不需要额外组合逻辑
C.异步复位,同步释放可以防止复位释放时出现亚稳态
D.异步复位不需要进行recovery time和removal time检查

答案:D。异步复位同样需要进行recovery time和removal time检查,以确保复位信号在被释放之后芯片能够正常工作。


190.针对以下verilog代码的叙述,正确的是:( )

input clk, rst_n;
input [1:0] be;
input [1:0] data_in;
reg [1:0] data_out;
always@(posedge clk or negedge rst_n)if(~rst_n)data_out <= 2’ b00;else if(wen)data out <= (data_out & ~be) | (data_in & be);

A. wen=1'b1, be=2'b10时,data_out[1:0]=data_in[1:0]
B.代码中没有与第二个if匹配的else,判断条件不全,会导致综合出锁存器
C. wen=1'b1时,be的作用是控制data_out的各bit是否被写入为data_in对应bit的值
D. wen=1'b1,be=2'b00,data_in=2'b11时,data_out = 2'b00

答案:C。be的作用是控制data_out的各bit是否被写入为data_in对应bit的值。

若be=2'b10,~be=2'b01,data_out = {data_in[1], data_out[0]}


191.下列关于电路中锁相环的说法正确的是:( )

A.典型的锁相环由三个基本的部件构成,高通滤波器是其中一个
B.数字锁相环的英文缩写为APLL
C.锁相环可以用于信号相位和幅度的锁定
D.锁相环的输出电压可以和目标电压相位不同

答案:D。选项A,典型的锁相环由三个基本的部件构成为相位比较器、环形滤波器和电压控制振荡器。选项B,DPLL。选项C,锁相环主要用于相位和频率的锁定。


192.下列说法关于电路分析的方法错误的是:( )

A.频域分析方法可以用于研究信号幅度和相位随频率的变化规律
B.时域分析方法将激励与响应的电压、电流都表示为时间的函数
C.叠加定理可以用于线性电路的功耗计算,但不适用于非线性电路
D.瞬态分析常用非正弦信号作为电路的激励

答案:C。叠加定理只适用于线性电路,用于功率计算。


193. 下列关于全通系统的滤波器的零极点分布情况正确的是( )

A.极点在单位圆内,零点在单位圆外
B.极点在单位圆内,零点在单位圆内
C.极点在单位圆外,零点在单位圆内
D.极点在单位圆外,零点在单位圆外

答案:A。

参考博客: 数字滤波器(二)--最小相位延时系统和全通系统_爱吃骨头的猫、的博客-CSDN博客


194.下列关于CMOS器件特性说法正确的是:( )

A.一般而言,随着温度的升高,器件的动态功耗会大幅度增加。
B.一般而言,随着温度的升高,器件的静态功耗会减少。
C. NLDM与CCS都是延时计算模型,更小的工艺节点一般采用NLDM模型
D.同一电压下,HVT的leakage要比SVT的leakage要小。

答案:C。选项A,动态功耗公式为:P_dynamic=1/2CV^2f,温度升高,动态功耗不会大幅度增加。选项B,温度升高,电流增大,静态功耗会增加。

选项C,NLDM模型:精度较高,能够准确地计算各种情况下的延时时间。CCS模型:精度相对较低,但是计算速度快,适合大规模的电路设计和仿真。

选项D:HVT的leakage要比SVT的leakage大。这是因为HVT工艺使用的晶体管的漏电流比SVT工艺的晶体管漏电流大,而漏电流与晶体管的体积和电压有关。HVT工艺使用的晶体管相对于SVT工艺的晶体管来说,体积更大,而电压相同,漏电流就更大。


195.在多时钟域数字电路中,经常存在从一个clock domain(Clock A)到另一个clock domain (Clock B)的信号传输,这种传输路径称为CDC path。关于CDC以下哪个说法是对的?( )

A.只要Clock B快于Clock A,FB就不会有问题
B、只要Clock A的latency小于Clock B的latency,FB就不会有问题
C、FB会出现亚稳态(meta-stability)
D、FB在任何情况下都没有问题

答案:C,FB出现亚稳态。


196.电路如图所示,其中A,B,C,D分别是4个输入管脚,Z是输出管脚。假设某一个颗芯片由于生产缺陷造成内部节点E与地短路(其值始终保持为0),通过下面那种输入管脚激励的组合,可以通过在输出管脚观测的方法判断E点是否有制造缺陷?( )

A、ABCD=0111
B、ABCD=0011
C、ABCD=0001
D、ABCD=1011

答案:C。缺陷使得E为零,检测有无缺陷就让C为0,D为1,这样F为0。再让AB=0,使得Z为1。若Z不为1,则E有缺陷,故ABCD=0001。


197. Memory内部存储单元的耦合故障是指某个单元存储值的改变会使相邻存储单元变成相同的值。下面哪种测试算法可以将存在这种故障的芯片筛选出来?( )

A、往相邻的存储单元写入相同的值,然后读出比较是否符合预期
B、往相邻的存储单元写入不同的值,然后读出比较是否符合预期
C、往相间隔的存储单元写入相同的值,然后读出比较是否符合预期
D、往相间隔的存储单元写入不同的值,然后读出比较是否符合预期

答案:B。故障使相邻存储值一样,我们就存入不同的值。


198.OCV (on chip variation)是指工艺等因素导致的同一芯片上不同位置的MOS晶体管的性能会有一些差异。在静态时序分析中,下面哪项属于模拟OCV而做出的设置?( )

A、设置时钟uncertainty
B、设置timing derate
C、设置多个library覆盖不同corner,不同温度,不同电压
D、设置线与线之间的干扰

答案:D。STA不能设置线之间的干扰。


199.以下verilog语句:

always @(mem_array[addr])data = mem_array[addr);

其中,data的取值有哪些取值敏感?( )

A、addr的值
B、mem_array[addr]的值
C、mem_array[addr]的值以及addr的值
D、都不敏感

答案:C。使用了always块来定义一个组合逻辑电路,当mem_array[addr]的值发生变化时,会根据新的mem_array[addr]的值来计算data的值,并且这个过程是立即发生的。


200.可以正确表述以下fork join_any语句的是( )

initial beginfork 进程a进程b进程cjoin_any进程d
end

A、进程启动先后顺序从先到后:a,b,c,d
B、进程a,b,c同时启动,a,b,c有一个进程结束,进程d就可以启动
C、进程a.b,c,d同时启动
D、进程a,b,c同时启动,a,b,c进程都结束后,进程d再启动

答案:B。

1. fork-join语句会等待所有子程序都执行完毕后再继续执行后续代码。当所有子程序都完成后,join语句才会返回。

2. fork-join_any语句会等待至少有一个子程序执行完毕后就会继续执行后续代码。当有一个子程序完成后,join语句就会返回。

3. fork-join_none语句不会等待子程序执行完毕,而是直接继续执行后续代码。这种语句常用于一些无需等待子程序执行完毕的情况。


201.为了保证代码以及验证活动的质量,通常要统计什么( )

A、仿真覆盖率及故障覆盖率
B、功能覆盖率及行覆盖率
C、代码覆盖率及功能覆盖率
D、逻辑覆盖率及反转覆盖率

答案:C。


202.高频时钟域的数据(每时钟周期都变化)传递给低频时钟域时,哪种同步方式正确?( )

A、使用握手信号进行同步
B、使用异步FIFO
C、使用同步FIFO
D、使用打2拍进行同步

答案:B。快时钟数据每周期都变化,就没法通过脉冲展宽让慢时钟抓到所有数据了,所以使用异步FIFO缓存数据。


203.己知一套串行编码规则如下,编码后的信号与前一个时钟编码前的电平相同表示为1,与前一个时钟编码前的电平不同表示为0.且不允许出现编码后连续6个时钟为相同电平(如果出现需要插入1个bit,该bit是将编码后信号进行一次取反)。假定编码后信号初始为低电平,则二进制序列01010011111110010编码后的二进制编码是( )

A、110010000011110110
B、110010000001111010
C、001000001111010100
D、以上都不对

答案:D这道题就按着题目规则来就行。写三个编码,前三个都是0就能选D了。


204.关于Verilog HDL中的数字,请找出以下数字中最大的一个( )。

A、8'b1111_1110
B、3'o276
C、3'd170
D、2'h3E

答案:A。有陷阱,只有A选项是8bit的。


205.下面代码描述的是一个什么样的电路?( )

always @(posedge clk or negedge rst_n)beginif(rst_n==1'b0)a<=1'b0;else if(b>1'b0)a<=b;
end

A、综合为Latch
B、带同步复位的D触发器
C、带异步复位的D触发器
D、组合逻辑

答案:C。


206.D触发器:Tsetup=3ns,Thold=1ns,Tck2q=1ns,该D触发器最大可运行时钟频率是( )

A、1GHZ
B、500MHZ
C、250MHZ
D、200MHZ

答案:C。让建立时间和保持时间都满足要求,Tcycle >= 4ns。这里Tck2q=1ns刚好等于Thold的大小,如果Thold改成2ns,就隐藏了一个Tlogic最小为1ns的陷阱,这题将会更好。


207.以下不能提高验证环境的可重用性的是( )

A、使用宏定义
B、使用绝对路径索引文件
C、使用factory进行重载
D、使用intertface进行连接

答案:B。使用绝对路径,换个环境就不行了,不利于重用。


208.组合逻辑电路的竞争冒险现象是由于( )引起的

A、电路存在延时
B、电路有多个输出
C、电路未达到最简
D、逻辑门类型不同

答案:A,竞争冒险是由于组合逻辑延时不同,到达逻辑门不同导致的毛刺问题。


209.关于Task与Function语句,以下不正确的是( )

A、在Function中,可以调用Task
B、Function至少有一个输入变量
C、function必须要有返回值
D、Task可以有返回值

答案:A。


210.数字电路设计中,下流哪些手段无法消除竞争冒险现象( )

A、增加冗余项消除逻辑冒险
B、降低时钟频率
C、增加选通信号,避开毛刺
D、加滤波电容,消除毛刺

答案:B。竞争冒险是组合逻辑的概念,和时钟无关。


211.关于代码覆盖率,描述正确的是( )

A、代码覆盖率不包括toggle覆盖率
B、代码覆盖率包括line覆盖率
C、代码覆盖率包括功能覆盖率
D、代码覆盖率达到100%,表示验证足够完备,可以停止验证

答案:B,代码覆盖率包括行覆盖率,也即下面所说的path coverage。

代码覆盖率主要包含:

  1. 行覆盖率(Line Coverage):指被执行到的代码行占总代码行数的比例。

  1. 分支覆盖率(Branch Coverage):指对于if语句、switch语句等分支结构,所有可能的执行路径被覆盖到的比例。

  1. 条件覆盖率(Condition Coverage):指所有可能的布尔表达式的取值都被覆盖到的比例。

  1. 路径覆盖率(Path Coverage):指对于代码中所有可能的路径,是否都被执行到的比例。

  1. 翻转覆盖率(toogle Coverage):翻转覆盖率衡量的是哪些单比特变量的值为0或1,表明代码中信号的0到1和1到0的翻转情况。

6.有限状态机覆盖率(FSM coverage):有限状态机覆盖率衡量的是状态机中哪些状态和状态转换已经被访问过。表明状态机中各个状态的覆盖情况。


212. UVM中以下描述不正确的是( )

A、connect_phase的执行是自上而下
B、reset_phase在main_phase之前执行
C、可以在build_phase进行objection的raise
D、build_phase的执行是自下而上

答案:A

选项A,connect_phase的执行顺序是由各个组件的连接关系决定的,与代码编写的顺序无关。

选项B,reset_phase是在build_phase之后,在main_phase之前执行的。

选项C,raise_objection方法可以在 build_phase 和 run_phase 中使用。

D选项正确,build_phase是UVM中各个阶段中第一个执行的阶段,它的执行顺序是从最底层的组件开始,自下而上进行的。


213.关于异步复位,描述错误的是( )

A、数字设计经常使用异步复位同步释放
B、异步复位可以节省资源
C、使用异步复位有利于进行时序分析
D、异步复位对毛刺很敏感,抗干扰能力差

答案:C。异步复位对毛刺敏感,尤其跨时钟域时需要对异步复位信号进行同步,不利于时序分析。


214.关于动态数组和队列,描述错误的是( )

A、动态数组需要调用delete函数释放空间
B、队列在扩大时,sv会自动分配空间
C、动态数组和动态队列实例化使用new[]
D、队列相关函数包括pop_front()、push_back()

答案:C。没有动态队列这种说法,队列不用new函数,用自带的pop_front和push_back函数。


215.有一个FIFO设计,输入时钟100MHz,输出时钟70MHz,输入数据模式固定,其中1000个时钟中有700个时钟写传输连续数据。为了避免FIFO下溢/上溢,FIFO最小深度是多少( )

A、360
B、1170
C、420
D、270

答案:C。读写速率一致,FIFO不会溢出。假设背靠背传输连续写入了1400个数据,此时读出了980个数据,FIFO最小深度为420。


216.芯片中有关GPIO的叙述,不正确的是( )

A、GPIO般只具有0态和1态,不具有高阻状态
B、GPIO的引脚一般是多功能复用的
C、GPIO作为输入接口时具有缓冲功能
D、GPIO作为输出接口时具有锁存功能

答案:A。

GPIO在某些情况下可以设置为高阻状态,如在输入模式下设置为输入使能和高阻。


217.下面关于AHB协议描述错误的是( )

A、Burst传输不能跨越1KB地址边界
B、HRESP[1:0]有OKAY、ERROR、SPLIT和RETRY
C、Burst传输包括single传输、定长传输和不定长传输
D、读写操作的地址相位只会维持1拍时钟

答案:D。如果总线在等待握手,地址还会继续维持,


218.下面哪个不属于跨时钟域数据传递的基本方法( )

A、信号通路上插入isolation
B、使用FIFO
C、使用多级触发器缓冲
D、使用握手协议

答案:A。选项A中提到的isolation在跨时钟域数据传递中通常用于解决异步复位/时钟等问题。当一个模块工作在一个时钟域中,而另一个模块工作在另一个时钟域中,而两个时钟域之间没有公共时钟信号时,会出现异步信号传输的问题。这时,可以在信号通路上插入isolation电路,用于隔离两个时钟域之间的信号,保证传输的正确性。


219.以下为文件后缀为某代工厂提供的库文件,合法的电压,环境温度范围内,以下哪种情况内部信号速度最快( )

A、SS_-40°C
B、FF_-40°C
C、SS_125°C
D、FF_125°C

答案:B,Fast corner。


220.以下Verilog运算符优先级由高到低正确的是( )

A、&,|,&&,^,!
B、^,!,&,|,&&
C、!,|,&,&&,^
D、!,&,^,|,&&

答案:D。


221.下面哪个phase属于task phase( )

A、connect phase
B、build phase
C、report_phase
D、reset phase

答案:D。


222.以下不能对多bit的数据总线的时钟异步处理的是( )

A、Gray-code
B、寄存器同步
C、FIFO
D、Dmux synchronizer

答案:B。寄存器同步不能同步多bit信号。


223.关于’uvm_do_on和’uvm_do_on_with,表述不正确的是( )

A、在使用之前对应的对象需要进行实例化
B、都有三个参数
C、第二个参数可以是virtual sequencer
D、第一个参数必须是transaction指针或者sequence指针

答案:B。

uvm_do_on用于显式地指定使用哪个sequencer发送此transaction。它有两个参数,第一个是transaction的指针,第二个是sequencer的指针。

uvm_do_on_with,它有三个参数,第一个参数是transaction的指针,第二个是sequencer的指针,第三个是约束:


224.Which's setup timing check in right waveform?( )

A. T1
B. T2
C. T3
D. T1+T2

答案:A。setup time为数据到来之前需要保持的时间


225.Which stage of detecting a fault is at least cost to a company? ( )

A. Wafer
B. Packaged chip
C. Board
D. System

答案:D。在流片之前纠错成本最低。


226.Which of the following expressions is true?

A. a=4'df
B. C=3 'd8
C. B=5 'h1
D. d=3 'b2

答案:C。选项A,十进制没有f。选项B,3bit表示不到数字8。D选项,二进制没有2。


227.Which of the followings is not allowed to be in an interface class?( )

A. Pure virtual methods
B. Type declarations
C. Cover groups
D. Parameter declarations

答案:A。接口可以有参数、常量、变量、函数和任务。可以声明接口中元素的类型,也可以将类型作为参数传入。cover group可以在包、模块、程序、接口或类中定义。


228.Which of the following arrays need new constructor in system Verilog?

A. Multidimensional arrays
B. Dynamic arrays
C. Associative arrays
D. Queues

答案:B。动态数组的创建需要使用构造函数new函数。


229.Which one of the following items can't be considered to decrease the power of a design? ( )

A. use high Vt cells
B. increase clock frequency.
C. add clock gating
D. decrease voltage supply.

答案:B。使用高Vt的库,电流会变小,功耗降低。选项C,门控时钟,减小功耗。


230.The time required for an input data to settle________ the triggering edge of clock is known as “Setup Time”. ( )

A. Before
B. During
C. After
D. All of the above

答案:A。setup time定义,在时钟上升沿到来之前,数据需要保持不变的时间。


231.Which equation compute the local skew in below circuit? ( )

A. Path1-Path2
B. Path3-Path2
C. Path3-Path1
D. Path4-Path2

答案:B。skew分为global skew和local skew。这里的local skew是指design 中两个相关寄存器 latency 之差的最大值。

参考博客:一网打尽时钟树综合Clock Skew_IC拓荒者的博客-CSDN博客


232.Which of the following is having highest priority at final stage (post routed) of the design?

A. Setup violation
B. Hold violation
C. Skew
D. None

答案:B。hold violation是最难修复的,所以具有最高优先级。


233.Which of the following tools can be used for timing tape out sign-off? ( )

A. Modelsim
B. Primetime
C. Redhawk
D. Design compiler

答案:B。

Modelsim:Mentor公司的RTL仿真工具。

PrimeTime: PrimeTime(PT)是Synopsys的sign-off quality的静态时序分析工具。

Redhawk: Synopsys 集成RedHawk分析融合技术的 IC Compiler II 在设计者的流程中引入了电源完整性分析和修复功能,提供了在物理设计步骤中的签核精度结果。

Design compiler: Synopsys 逻辑综合工具。


234.下列不属于嵌入式设计处理器本身带有的基本接口是( )

A.串口
B. PCIE
C.并口
D.AD/DA

答案:B。嵌入式设计处理器本身带有的基本接口包括串口(UART)、并口(SDIO)和AD/DA等模拟接口,但不包括PCIE接口。


235.已知下左图中施密特触发器为右图中所示电路,电源电压是10V, R1=10KΩ,R2=20KΩ,该多谐振荡器中的电路参数VDD=10V,R=10kΩ,C=0.01uF,则该电路的振荡周期是( )

A. 0.2197ms
B. 0.4297ms
C. 0.1099ms
D. 0.3296ms

答案:不会做,留一手。


236.In Linux system, which of following commands can be used to mount a U-disk to the system()

A. mount /dev/hda /mnt/udisk
B. mount /dev/sdb1 /mnt/udisk
C. mount /dev/fd0 /mnt/udisk
D. umount -n /mnt/udisk

答案:B。

mount命令用于挂载Linux系统外的文件。

hda一般是指IDE接口的硬盘。

第一个硬盘名为/dev/sda,第二块硬盘命名为/dev/sdb,以此类推。sdb1则表示这块硬盘的分区1。

fd表示软盘驱动器。

umount可卸除目前挂在Linux目录中的文件系统。


237.In amplification mode, which of the following is correct for this transistor?()

A. VC>VB>VE
B.VC<VB<VE
C.VB<VC<VE
D. VB>VC>VE

答案:B。

箭头是PN结的方向,由P指向N。

这是一个PNP型晶体管

晶体管发射区掺杂浓度高,基区很薄且掺杂浓度很低。集电区面积大。

晶体管在放大状态时,发射结正向偏置而集电结反向偏置。所以VE>VB>VC。


238.The following figure shows the CMOS inverter circuit, which is composed of two enhanced MOSFET, one N-channel structure, the other is P-channel structure. Which of the following conditions is necessary to make the circuit function?()

A. VDD= (VTN-|VTP|)
B. VDD> (VTN+|VTP|)
C. VDD < VTN+|VTP|)
D. VDD= (VTN+|VTP|)

答案:B。电源电压 VDD 大于两个管的开启电压的绝对值之和。


239.The main performance indexes of computer network are? ( )

A. rate
B. bandwidth
C. handling capacity
D. delay
E. use ratio
F. packet loss probability

答案:ABCDEF。

计算机网络的性能指标如下:

  1. 速率rate

  1. 带宽bandwidth

  1. 吞吐量throughput

  1. 时延delay/latency

  1. 时延带宽积

  1. 往返时间Round-Trip Time,RTT

  1. 利用率


240.如下图的逻辑电路,其逻辑表达式为:( )

A. X=A'B+CD'
B. X=B+A'CD
C. X=A'B+CD
D. X=A'+BCD

答案:卡诺图化简。X =ABCD+A' =BCD+A'。


241.布尔代数(A+C) (A+B+C) 等于( )

A. A+BC
B. A+C
C.AB+BC
D.A+B+C

答案:B。(A+C) (A+B+C) =A+C+AC+AB+BC+AC=A+C


242.十进制数46的格雷码是哪个?( )

A.100011
B.101110
C.111001
D.111110

答案:C。

先写出46(D)的二进制:101110(B)。

二进制转换格雷码机制:格雷码的最高位和二进制的最高位是一样的,格雷码的其他位可以用二进制对应位和相邻高位的异或得到,即

assign gray_value[ i ] = binary_value[ i ] ^ binary_value[ i + 1 ];

格雷码为:111001,选C。


243.X表示任意项,如图所示卡诺图,求化简后的逻辑表达式( )

A. AB+BC
B. BC+C'D'
C. B+C'D
D. AB+B'C'

答案:B。看卡诺图可以直接给出结果:C'D'+BC


244.如图所示电路为下列哪种组合逻辑电路( )

A.NAND
B.NOR
C.AND
D.XOR

答案:D。

F=(((AB)'A)'((AB)'B)')',分别计算((AB)'A)'=A'+B。((AB)'B)'=B'+A。所以F=((A'+B)(B'+A))'。

(A'+B)(B'+A)=A'B'+AB,再取反,F=(A'B'+AB)',是异或。


245.如图所示逻辑电路,其中FA为全加器,LG为单个逻辑门,若F=0时,输出为X3X2X1X0+Y3Y2Y1Y0;F=1时,输出为X3X2X1X0-Y3Y2Y1Y0,则LG应为:( )

A.OR
B.NOR
C.NAND
D.XOR

答案:D。特殊值法,只看最低位。

F=0时,Z0=X0+F+B=X0+Y0。即F=0时,B=Y0

F =1时,Z0=X0+F+B=X0+1+B=X0-Y0。即F=1时,B=-Y0-1。

当LG为异或门时,满足第一条也满足第二条。

第二条有:Z0=X0+F+B=Z0=X0+1+Y0'=X0+1+1-Y0=X0-Y0。这里1+1进位。


246.如图所示逻辑电路,A/B/C/D四个输入共有几种组合会让Y输出为1?( )

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

答案:A。

这种题需要把Y表达式用最小项写出来,然后看有几个最小项,就用几种组合令Y为1。

Y=AB异或(C+D)'=AB异或C'D'。

A异或B=A'B+AB'。

所以Y=AB异或C'D'=(AB)'C'D'+AB(C+D)=(A'+B')C'D'+ABC+ABD=A'C'D'+B'C'D'+ABC+ABD。

Y=A'(B+B')C'D'+(A+A')B'C'D'+ABC(D+D')+AB(C+C')D

=A'BC'D'+A'B'C'D'+AB'C'D'+ABCD+ABCD'+ABC'D。

六种,选A。


247.如图所示电路,LG为哪种逻辑门电路,才可以得到如表的实验结果?( )

A.AND
B.NOR
C.NAND
D.XOR

答案:C。

题目有误,第一行和最后一行都是OFF。假设最后一行为ON ON 暗。

那真值表就是:

1

1

0

1

0

1

0

1

1

1

1

1

与非门,选C。


248.如图所示电路,其中D触发器的PR、CLR为0有效,若VDD开启前电容已完全放电,则下列叙述正确的是( )

A.电源开启后,LED亮,按下S1放开后,LED暗,之后再按下S1时,LED没有变化
B.电源开启后,LED亮,按下S1放开后,LED开始闪烁,再次按下S1则停止闪烁,LED灭,重复以上动作
C.电源开启后,LED暗,按住S1按钮时,LED亮,放开S1则LED灭,重复以上动作
D.电源开启后,LED暗,按住S1按钮时,LED闪烁,放开S1则LED灭,之后再按S1时,LED没有变化

答案:电源开启,CLK收到上升沿,把D端送到Q端,Q'为0,LED为亮。按下S1,异步复位,Q'为高,LED灭。之后再按S1就没用了,因为没有CLK时钟沿把D端数据送到Q端。

PRN是异步置位,可以将输出Q置为输入D(输出Q立马变成输入D)

CLRN(CLR)是异步复位,将输出Q置0。


249.有一个4位计数器,可计数范围为0~9,若输入时钟频率为1MHz,请问最高位的输出频率与正脉冲的宽度为多少?( )

A.输出频率100kHz,正脉冲宽度为2us
B.输出频率100kHz,正脉冲宽度为5us
C.输出频率500kHz,正脉冲宽度为2us
D.输出频率500kHz,正脉冲宽度为8us

答案:A。输出频率是1MHz的1/10=100kHz。正脉冲宽度为2个周期,2us.


250.Single Choice: Given the following FIFO and rules, how deep does the FIFO need to be to prevent underflow or overflow?

RULES:

clk_A=25MHz;

clk_B=100MHz;

en_B is periodically asserted: period is 4us, dutycycle is 25%

Pick ONE option

A. 100 entries
B. 75 entries
C. FIFO will overflow anyway
D. 10 entries

答案:B。en_B是一个占空比25%的信号,这样读写速率刚好相同,FIFO不会溢出。clk_A周期为40ns,clk_B周期为10ns。en_B周期为4000ns,其中有1000ns为高,3000ns为低。假设A为写时钟,B为读时钟。在en_B为低的3000ns里,A狂写,3000/40=75,之后1000ns,读的速度比写的快。选B。


二、多选题

1. 信号跨时钟域时,会出现亚稳态,其失效性和哪些因素有关__________

A.信号发射端的寄存器输出信号的翻转率
B.信号发射端的寄存器时钟频率
C.信号接收端的寄存器时钟频率
D.同步寄存器的级数

答案:A,B,C,D

翻转率:指在单位时间内,一个逻辑门的输出从低电平变为高电平或从高电平变为低电平的次数。

A. 信号发射端的高存器输出信号的翻转率:亚稳态的出现是由于信号传输过程中的时序关系导致的,翻转率高的信号容易在传输过程中出现时序问题,从而导致亚稳态的产生。

B,C:频率不同的时钟传输数据,有可能会出现亚稳态。

D. 同步寄存器的级数:同步寄存器的级数越多,信号传输的延迟就越大,从而增加了亚稳态产生的风险。


2. 哪些Verilog的写法是不能综合的__________

A.输入为变量的除法
B.循环边界未在编译时指定的for循环
C.含有时序电路的function函数
D.输入为变量的乘法

答案:B,C。A选项除法可以综合,但可能会产生较大的delay和消耗大量的资源,不建议直接写“/”。


3.关于异步fifo说法正确的是____________

A.异步fifo的reset信号,可以经过时钟同步后直接使用
B.读写指针需要通过格雷码做过域处理
C.使用中,读写clock可以是同步的
D.地址格雷码过域时,信号延迟必须小于1个源时钟的周期

答案:B,C。

A选项:异步FIFO的reset信号不应该直接通过时钟同步器使用,因为异步FIFO的复位信号并没有跟读写时钟同步,会存在不同步的情况。使用异步FIFO的reset信号时,通常需要使用专门的同步电路对其进行同步,保证其同步到读写时钟的时序。

D选项,在特殊情况下,可能需要更长时间来完成信号的同步,信号延迟可以大于1个源时钟周期。


4.关于clock以下说法正确的是_____________

A.在clock path上可以使用OAI等组合控制逻辑
B.clock可以被当成data使用
C.在设计中尽可能的使用上升沿触发的逻辑
D.clock jitter越小越好

答案:A,B,C,D。A选项,clock gating就是用OAI(或与非)门控制的。B选项,在加密解密电路中,时钟信号可以用作密钥的一部分,也可以用作算法中的一个参数。C选项,时钟上升沿的稳定性通常比下降沿更好。D选项,Clock jitter是指clock信号的时钟抖动,jitter越小,clock越稳定。


5.Hold violation可以通过__________方式解决

A.降低工作电压
B.升高工作电压
C.在capture clock path上插入clk buffer
D.降低时钟频率
E.提高时钟频率
F.在data path上插入delay cell

答案:A,F。改变时钟频率对hold violation没有影响,因为hold violation的计算公式里没有clock cycle。降低工作电压可以增加ck_to_Q的时间,有利于避免hold violation。C选项,插clock buffer只会改变clock latency,而在hold violation的计算公式中, clock latency会被消掉,因此改变它不会对hold time slack产生影响。


6.以下说法正确的是__________

A.当工作电压从1.0V降低到0.9V,系统功耗会降低20%
B.当工艺从0.18um升级到0.13um,工作电压和频率不变的情况下,芯片面积减小,功耗不变
C.85C的leakage power是25C的10倍
D.降低系统时钟频率一半,延长系统运行时间一倍,会降低系统的power

答案:D。A选项,动态功耗计算公式为:CV^2*f。不考虑静态功耗的情况下,工作电压降低到0.9V,动态功耗降低到原来的81%,和选项描述不符,但在绝对多选的情况下,BC肯定错,可以选AD。B选项,功耗会变小,因为走线电容都变小了。 C选项:按照统计数据,85c的leakage大约是25c的8倍左右,即温度每升高20度,leakage翻一倍。


7. 以下哪些是第三代移动通信标准

A EDGE
B TD-SCDMA
C LTE
D WIFI

答案:B。

第三代移动通信标准通常指的是3G标准,主要包括以下几种:

  1. CDMA2000(Code Division Multiple Access 2000):是由3GPP2(3rd Generation Partnership Project 2)制定的一种3G标准,主要应用于北美和亚太地区,提供高速数据传输、语音和多媒体服务。

  1. WCDMA(Wideband Code Division Multiple Access):是由3GPP(3rd Generation Partnership Project)制定的一种3G标准,主要应用于欧洲和亚洲地区,支持高速数据传输、语音和多媒体服务。

  1. TD-SCDMA(Time Division-Synchronous Code Division Multiple Access):是由中国自主研发的一种3G标准,主要应用于中国境内,支持高速数据传输、语音和多媒体服务。

  1. WiMAX(Worldwide Interoperability for Microwave Access):是由IEEE(Institute of Electrical and Electronics Engineers)制定的一种3G标准,采用OFDM技术,主要应用于宽带无线接入领域。

A. EDGE是一种用于GSM网络的高速移动数据传输技术,其速率可达到384kbps,属于2.5G移动通信标准。

B. TD-SCDMA是中国自主研发的3G移动通信标准之一,全称是Time Division-Synchronous Code Division Multiple Access。

C. LTE(Long-Term Evolution)是一种4G移动通信标准,是目前主流的4G技术之一,具有高速数据传输、低时延、高可靠性等特点。

D. WIFI是一种局域网技术,属于无线局域网标准,其速率通常较快,但覆盖范围较小,适用于家庭或办公室等小范围网络。


8.下面哪个选项不可以消除hold time violation()

A 插入buff
B 提高时钟频率
C 降低时钟频率
D 提高电压

答案:B,C,D。A选项,在数据端插入buffer,可以让数据更迟到达后一个寄存器(增加logic delay),进而缓解hold time violation。由STA理论可知,hold time slack计算公式中没有clock cycle,所以改变时钟频率不会改善hold time violation。D选项,提高电压,会让电路中晶体管充放电速度更快,导致数据更早到达,会使得hold time violation更容易发生。


9. 下面那些是基于Systemverilog的验证方法学?()

A VMM
B OVM
C UVM
D AVM

答案:A,B,C,D。


10. 下面哪种方式可以对时序进行检查()

A 即时断言
B 开发断言
C 建立时间约束
D 保护时间约束

答案:C,D。都属于时序分析的部分。


11. 芯方中设计中功耗密度过大,会产生什么不良影响()

A Hot-spot
B电压下降
C不满足时序约束
D封装成本变高

答案:A,C,D。A选项,当芯片中设计的功耗密度过大时,会出现局部的温度升高,即出现“热点”(hot-spot)。B选项,温度升高导致晶体管临界电压下降,这可能会导致电路的电性能发生变化,从而导致电路行为不稳定,不满足时序约束等问题。D选项,温度升高也会对封装造成不良影响,例如,可能会导致封装材料失效,从而增加封装成本。


12. 数字电路的验证维度有哪些()

A完备性
B复用性
C高效性
D满足性能

答案:A,B,C,D。参考博客:芯片验证全视之三: 验证能力的五个维度_OnePlusZero的博客-CSDN博客


13. 在验证中下列关于代码覆盖描述错误的是()

A代码覆盖率包括语句覆盖率
B代码覆盖率包括条件覆盖率
C代码覆盖率包括功能
D代码覆盖率达到100%说明所有Bug已清除

答案:C,D。代码覆盖率不包括功能覆盖,而是只包括代码执行路径的覆盖情况。


14. 关于systemerilog中new操作的下列描述中,错误的是()

A 它可以用来动态创建对象和对象数据
B使用它创建对象时调用构造函数
C new操作被定义成一个需要有返回类型的函数
D使用它创建对象数组时必须指定对象的初始值

答案:C,D 。构造函数不仅分配内存,还初始化变量。在默认情况下,它将变量设置成默认数值(二值变量为0,四值变量为X)等等。可以通过自定义new函数将默认值设成你想要的数值。所以new函数也称为“构造函数”。但是new函数不能有返回值,因为构造函数总是返回一个指向类对象的句柄,其类型就是类本身。


15. 以下同步逻辑电路和异步逻辑描述正确的是()

A同步逻辑电路是时钟之间没有固定的因果关系,异步逻辑电路是各时钟之间有固定的因果关系
B同步逻辑是由时序电路(寄存器和各种触发器)和组合逻辑电路构成的电路,其所有的操作都是在严格的时钟控制下完成的。
C异步逻辑电路不同时钟域之间不需要进行时钟同步
D 异步逻辑可能存在多个时钟信号,或者不存在时钟信号,电路中一个逻辑的变化就会引起整个电路逻辑的变化。

答案:B,D。A选项,说反了。同步逻辑电路是由时钟信号进行驱动的,各个时钟信号之间有固定的相位关系,而异步逻辑电路是没有时钟信号进行驱动,不同部分之间没有固定的相位关系。C选项,跨时钟与需要同步。


16. 超大规模集成电路计中,为了高速设计,采取以下哪些措施()

A 流水线设计
B 并行化设计
C 资源共享
D 串行化设计

答案:A,B。A选项,切流水减小寄存器之间组合逻辑delay,从而可以增加系统最大运行频率,进而实现告诉设计。B选项,并行化设计,以牺牲数倍资源的代价,提升系统数倍性能。C选项, 资源共享有助于降低面积和功耗。D选项, 串行化设计则会导致系统速度降低,因此不是高速设计的措施。


17. 竞争冒险现象可以怎样消除?()

A 加入滤波电容
B引入同步机制
C不加选通信号
D增加冗余逻辑

答案:A,B,D。A选项,加入滤波电容,滤除毛刺,同时可以对窄脉冲起到平波的作用。B选项,加入同步机制,消除因为组合逻辑传输延时不一致引起的信号竞争。D选项,增加冗余逻辑,来改善组合逻辑传输路径延时不一致的问题,进而避免信号竞争。


18. 下列关于Setup/Hold Time说法正确的是?()

A如果DFF的Hold时间不满足,通常可以通过增加数据路径延时来解决
B如果DFF的Setup时间不满足,通常可以通过增加数据路径延时来解决
C如果DFF的Hold时间不满足,通常可以通过增加时钟路径延时来解决
D如果DFF的Setup时间不满足,通常可以通过增加时钟路径延时来解决

答案:A,D。数据路径延时指的是从前一个DFF到后一个DFF数据传输的delay。时钟路径延迟指的是时钟到后一个DFF的delay t2减去时钟到前一个DFF的delay t1。增加时钟路径延迟,可以让后一个寄存器更慢采样,有利于避免setup violation。减少时钟路径延迟,可以让后一个寄存器更快采样,有利于避免hold violation。

DFF的hold时间不满足,代表数据到达后一个DFF的速度太快了,数据还没保持足够长的时间就被更新了,因此可以通过增加数据路径延时来解决或者减短时钟路径延时,让后一个寄存器采样时间更早,选A正确。DFF的setup时间不满足,代表数据到达后一个寄存器的时间太慢了,应该在后一个寄存器DFF的数据采样窗口之前到来,可以通过


19. 下列数据类型中属于四状态类型的有哪些()

A int
B logic
C bit
D time

答案:B,D。

总结一下system verilog变量数据类型:

四值逻辑类型:integer、reg、logic、wire、tri、time。

二值逻辑类型:byte、shortint、int、longint、bit。

有符号类型:byte、shortint、int、longint、integer。

无符号类型:bit、logic、reg、wire、tri、time。

简答题第6题有张绿皮书sv数据类型的截图,可以参考。


20. 低功耗电路实现的方法有()

A 降低工作电压
B增加负载电容
C降低电路面积
D尽可能提高电路性能

答案:A,C。B选项,增加负载电容会导致电路在充电和放电时需要更多的电荷移动,因此需要更多的电流,进而导致功耗增加。D选项,提升电路性能(提高时钟频率)会增加动态功耗。


21. 请找出以下总线中的串行总线()

A AXI
B SDIO
C UART
D IIC

答案:C,D。

  1. AXI(Advanced eXtensible Interface)总线:是ARM公司提出的高性能、可扩展的片上总线,支持高带宽和多处理器访问。主要应用在SoC(System on Chip)中。

  1. SDIO(Secure Digital Input/Output)总线:是一种专门用于存储设备(如SD卡、MMC卡等)的输入输出接口,可以支持高速数据传输和安全数据存储。

  1. UART(Universal Asynchronous Receiver/Transmitter)总线:是一种异步串行通信总线,用于将数据从一台设备传输到另一台设备。常用于计算机和外部设备(如调制解调器、打印机等)之间的数据传输。

  1. IIC(Inter-Integrated Circuit)总线:是一种串行双向通信总线,用于连接集成电路芯片和其他外设,主要用于短距离、低速率的通信,例如连接温度传感器、EEPROM等设备。

需要注意的是,UART和IIC虽然都是串行总线,但它们的应用场景和传输方式是不同的。UART是异步传输,即每个数据字节都有起始位和停止位,而IIC是同步传输,不需要起始位和停止位。


22. 下列哪些方式可以减少亚稳态问题的影响()

A 提升系统时钟频率
B 用反应更快的FF
C 架构上增加data toggle rate
D 改善时钟质量

答案:B,D。用反应更快的FF,可以减少T ck_to_Q,有利于避免setup violation。改善时钟质量,有利于减少clock jitter对时序的影响。


23. 正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等,字符集是指在单个位置上能匹配的各种模式字符的集合,部分字符集的简写形式如下表所示。

简写

匹配

\d

十进制数字

\D

非十进制数字

\s

空白字符

\S

非空白字符

\w

单词字符([A-Za-z0-9_])

\W

非单词字符

\n

换行符

请问:“\W*\s*input\s*wire\s*(\[\d+\:\d+\])*\s*(\w+)\s*”可以匹配到下边哪个或哪些选项?

A. input wire [3:0] num1
B. // input wire num2
C. // input wire [WIDTH-1:0] num3
D. Input wire [10:0] num4
E. input wire [BIT:0] num5

答案:A,B。\W* 匹配尽可能多非单词字符;\s*匹配尽可能多空白字符;input 字符串;\s*匹配尽可能多空白字符;wire 字符串;\s*匹配尽可能多空白字符;圆括号表示分组(\[\d+\:\d+\])*,匹配尽可能多的字符串中形如"[数字:数字]"的字符串;\s*匹配尽可能多空白字符;(\w+)匹配尽可能多单词字符;\s*匹配尽可能多空白字符。这里*表示0-多个;+表示1-多个。

C选项,WIDTH错误;D选项,Input错误;E选项,BIT错误。


24. 下列属于DFT故障模型的是:()

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

答案:A,B,C,D

Stuck-at 故障是最常用的故障模型,某些互连线出现了问题,导致线上的电平永远固定在0或者1。

Bridging Faults 当电路中的两条或更多条互联线意外连接在一起时,就会发生 Bridging Fault。

Transition Delay Faults 跳变故障因逻辑门故障节点延时,导致未能在期望时间内由1翻转为0或由0翻转为1。

IDDQ Faults,芯片在工作状态下的静态电流偏高,导致电压下降,影响芯片正常工作。

参考博客:可测性设计学习笔记_lu-ming.xyz的博客-CSDN博客


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

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

答案:A,B,D。

A. 时钟网络延时:时钟信号从源头到达各个时钟触发器的传输延时,影响芯片的时序约束,延时越小越好。

B. 时钟信息偏差:时钟信号在经过长路径后,由于晶体管的温度、电压等因素的影响,可能会出现时钟信息偏差,导致时序违例,因此需要对偏差进行补偿或者增加时钟校准电路。

D. 时钟树功耗:时钟树的功耗应该尽可能小,但是过小会导致时钟树的延时过大,影响芯片的性能。因此,需要在时钟树综合中平衡时钟树的功耗和时钟树延时。


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

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

答案:A,B,C,D。

选项A,增大电源网络密度可以提高芯片的电源供应稳定性,减少电源波动对芯片静态压降的影响,降低芯片静态压降。

选项B,减小封装电感可以降低电感值,从而减少电感对芯片静态压降的影响,降低芯片静态压降。

选项C,增加芯片内电容可以提高芯片的电容性质,从而降低芯片的电阻值,减少静态压降。

选项D,降低工作效率可以降低静态压降。


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

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

答案:A,B。

C选项,异步FIFO采用格雷码是为了解决数据转换时出现的不确定状态问题,而不是提高电路速度。

D选项,双比特信号打两拍不能完全避免亚稳态问题的发生,只是减小了亚稳态问题的可能性。


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

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

答案:B,D。与非门和或非门。

参考博客:逻辑电路nand_通用逻辑门(NAND,NOR)_cumt30111的博客-CSDN博客


29. 下面哪些是AHB的特性

A.split transaction
B.burst transfer
C.non-tristate implementation
D.out-of-order data transmission

答案: A,B,C。乱序发送是AXI的特性。

AHB主要用于高性能模块(如CPU、DMA和DSP等)之间的连接,作为SoC的片上系统总线,它包括以下一些特性:

单个时钟边沿操作;

非三态的实现方式;

支持突发传输;

支持分段传输;

支持多个主控制器;

可配置32位~128位总线宽度;

支持字节、半字和字的传输。

流水线方式

一个周期内完成总线主设备( master )对总线控制权的交接


30. 请选出以下能实现burst传输的片内总线

A.APB
B.AHB
C.SPI
D.AXI

答案:B,D。APB和SPI不支持burst传输,这个需要自己去学习AMBA总线4.0,以及常用的串行总线运行规则。


31. 以下同步逻辑电路和异步逻辑电路描述正确的是

A 同步逻辑电路是时钟之间没有固定的因果关系,异步逻辑电路是各时钟之间有固定的因果关系
B 同步逻辑是由时序电路(寄存器和各种触发器)和组合逻辑电路构成的电路,其所有
的操作都是在严格的时钟控制下完成的。
C 异步逻辑电路不同时钟域之间不需要进行时钟同步
D 异步逻辑可能存在多个时钟信号,或者不存在时钟信号,电路中一个逻辑的变化就会
引起整个电路逻辑的变化。

答案:B,D。A选项,说反了。C选项,错误,异步逻辑电路中各时钟域之间需要进行时钟同步,否则可能会出现数据错误和稳态震荡等问题。


32. 超大规模集成电路设计中,为了高速设计,采取以下哪些措施

A.流水线设计
B.并行化设计
C.资源共享
D.串行化设计

答案:A,B。流水线和并行化都是面积换速度的案例。


33. Verilog与其他编程语言有哪几种接口机制?

A.PLI
B.DPI
C.NPI
D.VPI

答案:A,B,C,D

PLI(Programming Language Interface)是Verilog的原始扩展接口,它允许用户通过C语言编写的动态链接库将自定义函数嵌入到Verilog模拟器中。这些函数可以被Verilog中的testbench调用,以提供一些额外的仿真控制和数据分析能力。

NPI(Native Programming Interface)是SystemVerilog中的一种扩展接口,它提供了一种新的、更简单的方法来实现Verilog和C/C++的互操作性。与PLI不同,NPI使用C++语言来实现,允许用户以原生C++的方式编写代码,而无需使用C语言和动态链接库。

Verilog可以与EDA工具的接口进行集成,例如与模拟器、综合器、布局布线工具等进行接口通信。这些接口机制通常使用VPI (Verilog Programming Interface)或DPI (Direct Programming Interface)。


34. UPF描述了以下哪些信息( )?

A.power distribution architecture
B.power data
C.power strategy
D.usage of special cell

答案:A,B,C,D。

UPF (Unified Power Format) 是一种格式,用于描述芯片级别的电源管理信息,其中包括用于控制电源管理的设计元素,如电源域、电源模式、电源网、电源对象等。

A选项,描述了电源网络架构;B选项,描述了每个电源域的电源需求、功耗限制等信息。C选项,功耗策略。D选项,使用特殊单元(special cell)进行电源管理是一种在UPF描述中经常用到的技术。特殊单元是具有特殊电源控制功能的电路单元,可被用来提供更精细的电源管理能力。


35. 芯片设计关注的PPA具体指哪几个方面?

A.Performance
B.POWER
C.Architecture
D.Area

答案:A,B,D。PPA,power、performance、area。


36. 代码覆盖率主要包含

A.行覆盖率
B.条件覆盖率
C.toggle覆盖率
D.功能覆盖率

答案:A,B,C。

代码覆盖率主要包含:

  1. 行覆盖率(Line Coverage):指被执行到的代码行占总代码行数的比例。

  1. 分支覆盖率(Branch Coverage):指对于if语句、switch语句等分支结构,所有可能的执行路径被覆盖到的比例。

  1. 条件覆盖率(Condition Coverage):指所有可能的布尔表达式的取值都被覆盖到的比例。

  1. 路径覆盖率(Path Coverage):指对于代码中所有可能的路径,是否都被执行到的比例。

  1. 翻转覆盖率(toogle Coverage):翻转覆盖率衡量的是哪些单比特变量的值为0或1,表明代码中信号的0到1和1到0的翻转情况。

6.有限状态机覆盖率(FSM coverage):有限状态机覆盖率衡量的是状态机中哪些状态和状态转换已经被访问过。表明状态机中各个状态的覆盖情况。


37. 在验证中下列关于代码覆盖率描述错误的是

A.代码覆盖率包括语句覆盖率
B.代码覆盖率包括条件覆盖率
C.代码覆盖率包括功能
D.代码覆盖率达到100%说明所有Bug已消除

答案:A,B。C选项,代码覆盖率不包括功能覆盖率。D选项,代码覆盖率只能表示代码的所有地方都被跑过了一遍,但不代表功能均正确。


38. EDA验证中,下面哪种方式可以对时序进行检查

A.即时断言
B.并发断言
C.建立时间约束
D.保护时间约束

答案:C,D。断言属于功能验证的需求,它并不直接对电路时序进行检查,而是通过对逻辑行为进行验证来检查电路是否符合设计规范。


39. 以下哪些是power special cell ( )?

A.buffer
B.level shifter
C.power switch
D.isolation

答案:B,C,D。

A. buffer:缓冲器,用于在信号路径上提供放大和缓冲功能。

B. level shifter:电平转换器,用于将一个电平转换为另一个电平,通常用于不同电源电压下的电路之间。

C. power switch:功率开关,用于在电路中打开或关闭电源,以控制电路的功耗。

D. isolation:隔离单元,用于在电路中隔离电源或信号,以防止信号冲突或电路损坏。


40. 关于时序逻辑电路Pipeline设计说法正确是( )?

A.Pipeline可以提高吞吐率
B.Pipeline可以降低单个任务的latency
C.Pipeline可以提高时钟频率
D.Pipeline需要对流水线进行切割,设计时要对流水线进行均衡,以保证时序的接近

答案:A,C,D。

pipeline只是提高系统的吞吐量,不能改善单个任务的latency。


41. Which of the following factors are considered to evaluate the quality of a clock tree? ( )

A.Insertion delay
B.Skew
C.Local cell density
D.Dynamic power consumption

答案:A,B,C,D。

时钟树的好坏通常从以下几个方面进行评价:

  1. 时钟偏移和抖动:时钟树的设计应尽量减少时钟偏移和抖动,以保证时钟信号在整个芯片内的稳定性。

  1. 时钟功耗:时钟信号是芯片中功耗最大的信号之一,时钟树的设计应尽量降低功耗。

  1. 时钟频率:时钟树的设计应该使时钟频率稳定,减少时钟周期变化和波动。

  1. 时钟延迟:时钟树的设计应该减少时钟延迟,保证时钟信号的传输速度,减少时钟树对芯片的性能影响。

  1. 时钟分布:时钟树的设计应尽可能均匀地分布在芯片上,以避免时钟信号在某些区域过于密集而导致的问题,例如时钟插入、时钟抖动和EMI等问题。

  1. 时钟树的可测试性:时钟树的设计应考虑可测试性,方便后续测试和故障排除。

  1. 时钟树的成本:时钟树的设计应考虑成本因素,包括设计时间、布局面积、功耗等方面的成本。


42. We need to define clock specification in SDC file, using commands like below:

create_clock -name GFXCLK -period 600 -waveform {0 300}

what can we know from this command? ()

A.Clock frequency
B.Clock duty cycle
C.Clock source latency
D.Clock name

答案:A,B,D。-name给了名字,-period给了占空比,waveform {0 300} 表示时钟信号的起始时间是 0 纳秒,时钟周期为 300 纳秒。


43. Why should we use double width and double spacing rule for clock net routing? ()

A.Reduce resistance
B.Avoid noise
C.Increase capacitance
D.Take more routing resource

答案:A,B。用更大的线宽可以减小电阻。用更大的线间距,可以减少导线与导线之间的耦合电流,减小噪声,同时减小电容。


44. Developing FPGA or ASIC solution to meet same function requirement. Which description are correct? ( )

A. FPGA is fast time to market
B. FPGA is more flexible to be developed and programmed in keeping changing area
C. ASIC’s per chip cost is cheaper
D. FPGA has better power performance

答案:A,B,C。FPGA确实比ASIC要灵活,但平均成本ASIC会比FPGA低,并且ASIC是专用集成电路,不会像FPGA一样为了编程的灵活性增加很多逻辑,因此ASIC功耗会比FPGA少很多,所以选ABC。


45. Which among the following types are USB Transfer types? ( )

A.Control Transfer
B.Isochronous Transfer
C.Asynchronous Transfer
D.Interrupt Transfer
E.Bulk Transfer

答案:A,B,D,E。

USB(Universal Serial Bus)是一种常用的串行总线标准,用于连接计算机和各种外围设备,以实现数据传输和电源供应等功能。在USB标准中,数据传输可以分为以下几种类型:

  1. Control Transfer:用于在USB设备和主机之间进行命令和控制信息的传输,如设置设备地址、读取设备描述符等。Control Transfer是必须被支持的数据传输类型。

  1. Bulk Transfer:用于传输大量数据,无需保证实时性和可靠性,适合用于打印机、存储设备等应用。

  1. Interrupt Transfer:用于传输实时数据,要求保证低延迟和可靠性,适合用于鼠标、键盘等应用。

  1. Isochronous Transfer:用于传输对时间敏感的实时数据,如音频和视频数据等,需要保证数据带宽和传输速率的稳定性和实时性。


46. About MOSFET, which is/are right? ( )

A.gm=Ig/Vgs
B.MOSFET consist of mental, oxide and semiconductor
C.Improving W/L can increase the Ig
D.The channel direction of MOSFET is related to crystal orientation

答案:B,C。选项A,gm=△Ig/△Vgs。选项D,沟道方向和晶向无关,和电压与衬底有关。


47. Which are proper prototype? ( )

A.Int funct(char x, char y);
B.Double funct(char x);
C.Void funct();
D.Char x();

答案:A,B,C。D选项,首先声明数组的时候应该用[],其次声明的数组没有给长度。


48. 下列属于DFT质量的衡量指标有:( )

A、测试覆盖率
B、测试电路面积开销
C、测试时间
D、故障模型

答案:A,B,C。

DFT(Design for Testability,测试性设计)的质量主要考虑以下几个指标:

  1. 故障覆盖率(Fault Coverage):指测试集合能够检测出的故障占全部可能故障的比例。故障覆盖率越高,说明设计的可测性越好。

  1. 测试模式数目(Test Pattern Count):指设计所需的测试集合中测试模式的数量。测试模式数目越少,说明设计的可测性越好。

  1. 测试时间(Test Time):指进行完整的测试所需的时间。测试时间越短,说明测试效率越高,设计的可测性越好。

  1. 灵活性(Flexibility):指设计的测试方法是否适用于各种不同的测试需求。灵活性越好,说明设计的可测性越高。

  1. 可靠性(Reliability):指测试结果的准确性和稳定性。可靠性越高,说明设计的可测性越好。

  1. 设计开销(Design Overhead):指增加可测性所需要的设计开销。设计开销越小,说明设计的可测性越好。


49. 下列关于OCC(on chip clock controller)行为描述正确的是:( )

A、用于控制高频和低频测试时钟的切换
B、用于控制产生指定数目的shift时钟
C、用于控制产生指定数目的capture时钟
D、切换过程可能产生毛刺

答案:A,B,C。选项D,OCC是一个有寄存器构成的电路,不会产生毛刺。

OCC(On-Chip-Clock)含义及功能和结构_cy413026的博客-CSDN博客


50. 下列属于芯片流片前的检查有:( )

A、设计规则检查
B、天线效应检查
C、电路与版图一致性检查
D、形式验证

答案:A,B,C。

芯片流片前的检查主要包括以下几个方面:

1.逻辑电路检查:对设计电路的原理图进行全面的逻辑验证,包括逻辑正确性、时序正确性、时序收敛等方面的验证。
2.物理电路检查:对电路布局进行全面的电气验证,包括布局规则是否符合要求、元件是否正确布置、布局连线是否符合电气规范等方面的验证。
3.DRC/LVS检查:通过设计规则检查(DRC)和电路验证规则检查(LVS)等软件工具对电路进行检查,确保电路设计符合芯片工艺的制造规范和标准,避免因为设计规则违反导致制造失败。
4.电磁兼容性检查:对芯片的电磁兼容性进行检查,包括对芯片的辐射和敏感度等方面的检查,确保芯片符合电磁兼容性标准,避免因为电磁干扰导致芯片运行不正常。
5.热分析检查:对芯片的热分析进行检查,包括对芯片的功耗、散热等方面的检查,确保芯片在正常工作状态下不会过热,避免因为芯片过热导致芯片运行不正常。
6.仿真验证:对芯片进行仿真验证,包括逻辑仿真、时序仿真等方面的验证,确保芯片设计符合预期要求,避免因为设计缺陷导致芯片运行不正常。


51. 下列哪些因素与标准单元动态功耗有关?( )

A、工作频率
B、工作电压
C、亚阈值泄漏电流
D、输出负载

答案:A,B,D

动态功耗公式为:

选项D影响的是公式中的电容C。


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

A、共有4级分解;
B、每级有8个蝶形算法;
C、每个蝶形算法需要1次复数乘法;
D、每个蝶形算法需要1次复数加法;

答案:A,B,C。

FFT特点:

1.共有级运算,16点FFT即4级运算。

2.每一级有N/2个蝶形运算。

3.每个蝶形需要一次复数乘法和两次复数加法。


53. 以下哪些活动可以通过形式验证保证( )

A、RTL和RTL的一致性
B、RTL的功能完整性
C、RTL和综合网表的一致性
D、两张不同网表的一致性

答案:A,C,D。

形式验证的目标:

1. RTL与RTL:确认新的RTL与原来RTL在功能上是否一致。

2. 门级网表与RTL:确定DC综合的逻辑是正确的。

3. 两个门级网表之间:确认版图输入信息与版图输出信息。


54. 根据约束关系set_clock_groups -async -group{CLK1}{CLK2CLK3},下图中哪些路径会进行时序检查

A、Path1
B、Path2
C、Path3
D、Path4

答案:A,C,D。

set_clock_groups命令禁用所识别的时钟组之间的时序分析,而不禁用同一组内的时钟之间的时序分析。

-asynchronous 表示两个时钟组是异步的,没有固定相位关系。

-group 对时钟编组。

这句约束的意思就是 时钟组{CLK1} 和 时钟组{CLK2 CLK3} 是异步的。

所以跨这两个时钟域的信号不会进行时需检查。

参考博客:FPGA时序约束学习(1)-如何约束时钟_lu-ming.xyz的博客-CSDN博客


55. 随着IC电路设计工艺的进步,漏电功耗占比越来越大,不考虑温漂的影响,以下那些技术能够用于降低漏电功耗?( )

A、clockgating(时钟门控)
B、DVFS(动态电压频率调整)
C、power gating(电源门控)
D、DFS(动态频率调整)

答案:B,C。漏电功耗,主要和电压有关。


56. 在SOC验证应用中,以下哪些选项属于Emulator(仿真加速器)的特点( )

A、比基于FPGA的原型验证平台频率更高
B、加速软件开发,降低验证周期
C、系统级验证,模拟真实场景
D、支持带时序的后仿

答案:A,B,C,D。Emulator是专门用来加速验证的,相对于基于FPGA的原型验证平台,Emulator的仿真速度更快,可以更快地验证设计。Emulator可以支持更大规模的设计,可以加速大规模设计的验证,而基于FPGA的原型验证平台的规模受限于FPGA的大小。支持带有时序的仿真。


57.假设,在某SoC环境中,有一个UART控制器,将其链接至主机并打开串口工具进行连接后,假设已排除所有的硬件电路故障,那么以下说法正确的是:

A、假设终端显示的字符均为乱码,则很有可能是波特率设置不正确
B、假设没有任何显示,则很可能是代码对UART控制器未进行初始化
C、假设该串口输出正常,却无法接收输入的字符,则很可能是UART的中断信号未正确连接
D、假设UART的输出完全正常,但是无法接收输入的字符,则很可能是未设置正确的波特率

答案:A,B,C。选项D,输出完全正常,可以排除波特率的问题。


58. Which are the basic steps about logic synthesis?

A. Translate
B. Mapping
C. Optimization
D. Over Constraint

答案:A,B,C。

Synopsys综合工具DC处理流程 :synthesis=translation+mapping+optimization

translation:把设计的HDL描述转化为GTECH库元件组成的逻辑电路;GTECH库是Synopsys公司提供的通用的、独立于工艺的元件库。

mapping:将GTECH库元件映射到某一特定的半导体工艺库上,此时的电路网表包含了相关的工艺参数。

optimization:根据设计者设定的时延、面积、线负载模型等综合约束条件对电路网表进一步优化的过程。


59. Which of the following methods could reduce power consumption for a chip? ( )

A. Use higher advanced process
B. Shut down some useless logic modules
C. Raise voltage
D. Lower frequency

答案:A,B,D。

A选项,芯片制程越先进,更低的供电电压产生更低的动态功耗。B选项,关停一些逻辑,动态、静态功耗都下降。C选项会增加静态功耗。D选项会降低动态功耗。选择ABD。


60.How to fix hold violation in ECO stage?( )

A. Insert delay cells
B. Sizing up cells
C. Add delay in capture clock tree
D. Add delay in launch clock tree

答案:A,D。

ECO(Engineering Change Order)是芯片设计中的一个阶段,通常在设计流程的后期。这个阶段的目的是通过对设计进行修改,来解决各种问题,如功耗,时序,信号完整性,容量等方面的问题。ECO的过程通常涉及到修改电路的逻辑、物理布局等,以满足设计要求。

A选项,插buffer可以修复hold violation。B选项,Sizing up cells是指修改晶体管尺寸,对修复hold violation起不到什么大作用。C选项,应该在launch端增加delay。


61. ESD (Electrostatic discharge) is the sudden flow of electricity between two electrically charged objects cansed by contact, an electrical short, or dielectric breakdown. What are the ESD cases in daily life?( )

A. The static electricity you can feel after drying clothes in a tumble dryer
B. Rub a carpet and then touch a metal door handle
C. Touch a metal stick with anti-static gloves
D. The shock when touching the banister of an escalator

答案:A,B,D。

生活中静电放电 ESD (Electrostatic discharge) 的例子:

A: 用滚筒烘干机烘干衣服后能感受到的静电

B:摩擦地毯,然后触摸金属门把手

C: 使用防静电手套接触金属棒

D: 触摸扶梯扶手时的点击


62. Dynamic power is proportional to( )

A. Frequency
B. Load Capacitance
C. Work temperature
D. Threshold Voltage

答案:A,B。


63. Which of the following descriptions is correct about inverter?( )

A. CMOS inverter VTH is about 1/2VDD
B. When input is low, the output voltage=VDD
C. Inv is an important device for Memory
D. We want smaller SNM in the circuit

答案:A,B。

Latch和FF对Memory很重要,跟inverter没啥关系。SNM是静态噪声容限,SNM越大代表电路的抗干扰性越好。


64.PN结的特性包括哪些

A. 单向导电性
B. 电容特性
C. 电阻特性
D. 击穿特性

答案:A,B,D。


65. PC协议的层次包括哪些

A. Transaction Layer
B. Data Link Layer
C. Physical Layer
D. Network Layer

答案:A,B,C。

PC(Peripheral Component Interconnect)是一种常用的计算机总线标准,其协议层次包括以下四个部分:

1.物理层(Physical Layer):主要负责传输数据的物理部分,包括总线宽度、时钟频率、传输速率等硬件相关的细节。

2.数据链路层(Data Link Layer):负责数据的传输、流量控制、错误检测和纠正等功能,确保数据的可靠性。

3.传输层(Transaction Layer):负责管理数据的传输、缓存和重传等操作,处理多个数据传输请求和响应之间的关系。

4.应用层(Application Layer):为上层软件提供一系列的访问和控制接口,实现数据的传输、存储和处理等功能。


66.which of following code would print “hello”( )

A.
int main(){    int num= 100;char*p= NUL;char str[]="hello";num= strcpy (p,str);printf ("%s\n", str);return 0;
}B.
int main(){char*p=NULL;char str[]="hello";sprintf (p,str);printf ("%s\n",p);return 0;
}C.int main() {int num=100;char*p=(char*)malloc(20);char str[]="hello";num=strcmp(p,str);printf ("%s\n", p);free(p);return 0;
}D.
int main(){char*p=(char*)malloc(20);char str[]="hello";sprintf (p,str);print("%s\n", p);free(p);return 0;
}

A. A
B. B
C. C
D. D

答案:A,D。

在C语言中,sprintf()函数用于将格式化的数据写入到一个字符串中,其语法如下

int sprintf(char *str, const char *format, ...)

其中,第一个参数是指向目标字符串的指针,第二个参数是格式化字符串,后面的参数是要格式化输出的数据。sprintf()函数返回写入到字符串中的字符数。

例如:

#include <stdio.h>
int main()
{char str[100];int num = 123;float f = 3.14159;sprintf(str, "The number is %d and the float is %f", num, f);printf("%s\n", str);return 0;
}

输出结果为:

The number is 123 and the float is 3.141590

A:strcpy:char *strcpy(char *dst, const char *src);

这里将str复制给p,不过最终输出str。

B:sprintf: int sprintf( char *buffer, const char *format [, argument,…] );

将字符格式化输出到另一个字符串。

这里指针没有指向已开辟的空间。

C: strcmp() 函数用于对两个字符串进行比较(区分大小写)。

int strcmp(const char* stri1,const char* str2);


67. 以下关于verilog的叙述中,正确的是:( )

A.描述组合逻辑的always块中,可以通过在最开始给变量赋初值的方式避免综合出锁存器(latch)
B. generate语句可以用来多次例化某一模块
C.用于综合的代码里,对同一寄存器的赋值可以出现在两个always块中
D. systemverilog用于验证的语言,因此不能被综合
E.状态机的状态编码等常量一般用parameter定义

答案:ABE。


68.下列可以用于消除电路中竞争冒险的方法是:( )

A.在组合逻辑输出端接入小的滤波电容
B.修改逻辑设计
C.引入选通脉冲
D.在设计中增加冗余项

答案:BCD。A选项不是解决竞争冒险的方法,而是用于平滑掉数字信号中的抖动。


69.以下关于亚稳态的叙述中,正确的是:( )

A.数据的跨时钟域传输,一定会导致亚稳态出现
B.时序电路中建立时间或保持时间违例会导致亚稳态
C.寄存器发生亚稳态时,在最终稳定之前,不能确定其输出端是逻辑高或是逻辑低
D.如果不对亚稳态进行处理,错误数据或亚稳志可能在电路中传播,导敦芯片功能错误

答案:BCD。


70.下列说法错误的是:( )

A.(10101.001)2对应的10进制数为15.125
B.在余三码中,0110与1000的和为1110
C.霍夫曼编码的结果都是等长的码字
D.在BCD码中,5+7的结果是1100

答案:ACD。

A.(10101.001)2对应的10进制数为(1 × 2^4 + 0 × 2^3 + 1 × 2^2 + 0 × 2^1 + 1 × 2^0 + 0 × 2^-1 + 0 × 2^-2 + 1 × 2^-3)10 = 21+ 0.125 = 21.125。因此选项A错误。

B.在余三码中,0110的反码为1001,1000的反码为0111,因此两者之和为1110。因此选项B正确。

C.霍夫曼编码的结果是不等长的码字,常用于数据压缩等领域。因此选项C错误。

D.在BCD码中,5用二进制表示为0101,7用二进制表示为0111,将它们相加得到(0001)BCD,即0001 + 0101 + 0111 = 1101BCD,因此选项D错误。


71.以下关于FIFO的叙述中,正确的是:( )

A.异步FIFO中格雷码到二进制码的转换电路是为了产生访问存储器的地址
B.读写时钟频率相同时,读写地址可以不使用格雷码编码
C.跨时钟域导致的“虚满”喊“虚空”不会引起功能错误
D.对深度为32的异步FIFO,读地址指针需要5bit
E.同步FIFO因为读写时钟相同,不会出现溢出

答案:ACD 。选项B错误,格雷码是为了解决亚稳态问题采用的。选项E错误,读写时钟相同,不代表读写速率相同。


72.下列说法错误的是:( )

A.推挽输出需要设置上拉电阻
B.开漏输出需要设置上拉电阻
C.开漏输出可以用于线与的实现
D.推挽输出不能输出真实的低电平

答案:AD。

参考博客: 推挽输出&&开漏输出_推挽输出和开漏输出_翔在天上飞的博客-CSDN博客


73.一个设计好的CMOS逻辑电路标准单元的延时主要取决于下面哪些因素?( )

A、Input transition
B、Output transition
C、Input load
D、Output load

答案:ACD。

选项A,Input transition,即输入信号的上升时间和下降时间,输入信号的变化越快,延时通常越大。

选项C,Input load,即输入负载,也就是连接到输入端口的电容负载,负载越大,延时通常越大。

选项D,Output load,即输出负载,也就是连接到输出端口的电容负载,负载越大,延时通常越大。


74.如果到达某个寄存器的timing path存在hold违例,下面哪些方法可以修复违例?( )

A、在该寄存器的数据端增加buffer以增大数据延迟
B、在该寄存器的时钟端增加buffer以增大时钟延迟
C、在前一级寄存器的时钟端增加buffer以增加前一级寄存器时钟的延迟
D、在该寄存器与前一级寄存器之间增加latch

答案:AC。让该寄存器数据慢点到来,让前一寄存器时钟慢点到来。


75.以下C语言声明语句,其中阐述正确的是( )

extern int *x;

extern int y[];

A、第一条语句声明x是个int类型的指针
B、第一条语句声明x是个int类型的数据
C、第二条语句声明y是个int类型数组,长度未确定
D、第二条语句声明y是个int类型数组,长度确定

答案:AC。


76.UVM中virtual sequencer有哪些特点( )

A、virtual sequencer控制其它的sequencer
B、virtual sequencer并不和任何的driver相连
C、virtual sequencer并不处理item
D、virtual sequencer主要协调不同的sequencer的执行

答案:ABCD。

参考博客:UVM基础-Sequence、Sequencer(二)_uvm sequencer_不吃葱的酸菜鱼的博客-CSDN博客


77.以下关于verilog function和task描述正确的是( )

A、Function结构中可以加入延时控制
B、Task结构中可以加入延时控制
C、Function中可以调用task
D、Task结构中可以调用function

答案:BD。function和task的区别

task:

任务能调用另一个任务,也能调用另一个函数;
任务可以在非0仿真时刻执行;
任务可以包含延迟、时间或者时序控制声明语句;
任务可以没有或者有多个输入(input)、输出(output)和双向(inout)变量;
任务不返回任何值,任务可以通过输出(output)或者双向(inout)变量传递多个值;
任务的调用是通过一条单独的任务调用语句实现;
任务调用只能出现在过程块中;
任务的执行可以由disable语句进行中断。

function:

函数能调用另一个函数,但不能调用另一个任务;
函数总是在仿真时刻0就开始执行;
函数一定不能包含任何延迟、事件或者时序控制声明语句;
函数至少有一个输出变量,可以有多个输入变量;
函数只能返回一个值,函数不能有输出(output)、或者双向(inout)变量;
函数不能单独作为一条一句出现,它只能以语句的一部分的形式出现;
函数调用可以出现在过程块或者连续赋值语句中;
函数的执行不允许由disable语句进行中断。


78.关于跨时钟处理以下描述正确的是( )

A、单bit信号跨时钟同步时可直接用目标时钟打2拍
B、多bit信号跨时钟同步时可直接用目标时钟打2拍
C、异步FIFO读写指针同步时需要使用格雷码
D、同步FIFO读写指针相互传递时可以不使用格雷码

答案:ACD。


79.systemverilog中C语言可以通过以下哪些方式访问到DUT中的信号?( )

A、PLI
B、VPI
C、DPI
D、force或deposit

答案:ABC。

选项A,PLI(Programming Language Interface):PLI接口与VPI类似,也可以在C/C++代码中读写SystemVerilog中的变量或调用SystemVerilog中的函数。但是,PLI接口是Verilog语言的一部分,只能在Verilog编译器中使用。PLI接口提供了一系列的回调函数,可以用于访问和操作Verilog中的各种对象。

选项B,VPI(Verilog Programming Interface):VPI接口与DPI类似,可以在C/C++代码中读写SystemVerilog中的变量或调用SystemVerilog中的函数。VPI是一种面向对象的接口,提供了一系列的函数和回调函数,可以用于访问和操作SystemVerilog中的各种对象。

选项C,DPI(Direct Programming Interface):使用DPI可以将SystemVerilog与C/C++代码集成。通过DPI接口,可以在C/C++代码中直接读写SystemVerilog中的变量或调用SystemVerilog中的函数。


80.下列关于同步复位和异步复位的区别,说法正确的是( )

A、同步复位在时钟边沿判断复位条件,完成复位动作
B、异步复位不管时种状态,只要复位条件成立就完成复位动作
C、异步复位信号一般同步释放的
D、同步复位信号不允许出现毛刺

答案:ABCD。同步复位、异步复位都应该同步释放,以免出现亚稳态。


81.CMOS芯片设计中动态功耗和下列哪些因素相关( )

A、电压
B、频率
C、电阻
D、负载电容
E、工艺
F、工作温度

答案:ABD。考虑动态功耗,动态功耗公式1/2V^2Cf,根据公式可以确定ABD。选项E工艺是否选择不确定。


82.与FPGA全局时钟资源相关的有( )

A、BUFG
B、DCM
C、NOT
D、DFF

答案:ABD。BUFG(Buffered Universal Global Buffer)和DCM(Digital Clock Manager)是与FPGA全局时钟资源相关的两个重要组件。BUFG是一种特殊的时钟缓存器,可以将来自FPGA器件边缘的时钟信号传输到FPGA器件内部的任何位置,并确保时钟信号的延迟和抖动保持最小。DCM是一种时钟管理器,可以生成时钟信号,并且可以对时钟信号进行相位偏移、频率调整、时钟倍频和分频等操作。

NOT是逻辑非门,与时钟无关。DFF通过全局时钟控制锁存数据。


83.下面属于双状态数据类型的是( )

A、byte
B、logic
C、bit
D、integer

答案:AC。


84.在静态时序分析中计算时钟延迟需要考虑以下哪些因素( )

A、时钟源的抖动(jitter)
B、寄存器的建立和保持时间
C、时钟树不平衡引入的偏差(skew)
D、工艺特性造成的on-chip variation

答案:ACD。计算时钟的延迟,和寄存器无关,注意审题。


85.以下逻辑(A,B,D)能实现:输入三个1bitA,B,C变量,若其中两个以上变量为1,则输出1:

A、x=(A&B)|(B&C)|(C&A)
B、x=(~A&B|~B&A)^C
C、x=(~A&B|~B&A)?C:A
D、x=(~A&B|~B&A)?C:B

答案:ACD。特殊值法。


86.如下verilog描述中哪个或者哪几个会生成寄存器( )

A、always@(clk)
reg_a<=reg_b;
B、always@(negedge clk)
reg_a<= reg_b;
C、always@(posedge clk)
reg_a<=reg_b;
D、assign reg_a=reg_b;

答案:BC。只有BC是时钟边沿触发。


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

A、将部分组合逻辑电路搬移到前级path上
B、使用更先进工艺的工艺库
C、降低时钟频率
D、在这条path上插入寄存器

答案:ABC。选项D插入寄存器增加了pipeline。


88.关于重载,下面描述正确的有( )

A、函数、任务可以被重载
B、transaction可以被重载
C、sequence不能被重载
D、UVM factory机制的重载要求重载的类必须派生自被重载的类

答案:ABD。sequence可以被重载。在UVM中,重载是指在同一作用域内定义具有相同名称但参数类型和数量不同的函数、任务、task、方法等。通过重载,可以提高代码的复用性和灵活性,同时使代码更加易读易懂。


89.对改善亚稳态问题有效果的方法是( )

A、引入同步机制,如加两级触发器
B、降低时钟频率
C、改善时钟质量,用边沿变化快速的时钟信号
D、用反应更快速的DFF

答案:ABCD


90.有关virtual sequencer描述正确的是( )

A、virtual sequencer并不和任何driver相连
B、virtual sequencer可以控制其他sequencer
C、sequence并不在virtual sequencer里产生和传递
D、virtual sequencer自身可以传递transaction

答案:ABC。

参考博客:UVM基础-Sequence、Sequencer(二)_uvm sequencer_不吃葱的酸菜鱼的博客-CSDN博客


91.下列哪些class派生来自uvm_component( )

A、Sequencer
B、Monitor
C、Transaction
D、Driver

答案:ABD


92.关于线程,以下描述正确的是( )

A、disable语句可以提前结束所有线程
B、fork...join、fork... join_none、fork...join_any语句块都是以并发方式执行
C、fork...join_none内部的任意一个语句块执行完成之后,父线程才能继续执行
D、fork...join_any内部的所有语句块执行完成之后,父线程才能继续执行

答案:AB。


93.给定正则表达式/^[0-5]?[0-9]$/,满足此匹配条件的字符串是()

A.9
B.10
C.00009
D.999
E.99

答案:这个正则的意思是匹配行首[0-5]零次或一次,同时匹配行尾[0-9]一次,满足要求的为AB。选项C错在0重复了不止一次。


94.处理器中哪些相关会引起流水线冲突()

A.数据相关
B.结果相关
C.指令相关
D.资源相关
E.控制相关

答案:ADE

流水线冲突是在CPU流水线中发生的一种现象,通常是由于某些指令在执行过程中依赖于之前的指令或者因为数据相关性引起的。处理器中下面几个相关的情况可能会引起流水线冲突:

  1. 数据相关:当一条指令需要用到另一条指令的运算结果时,就会产生数据相关性。如果这两条指令之间的间隔时间不足,那么就会导致数据相关的流水线冲突。

  1. 资源相关:当多条指令需要使用同一部件时,例如ALU、寄存器等,就会产生资源相关性。如果这些指令在同一时钟周期内需要访问这些部件,就会导致资源相关的流水线冲突。

  1. 控制相关:当一个指令需要改变程序计数器(PC)的值时,就会产生控制相关性。这种情况下,处理器必须等待上一条指令完成才能确定下一条指令的地址,因此也会导致流水线冲突。

处理器中还有一些优化技术,如预测分支、超标量执行等,可以减少流水线冲突的发生。但是,这些技术并不能完全消除流水线冲突,因此在编写程序时,需要尽可能地减少相关性以提高程序的执行效率。


95.下列关于cache写命中时处理错误的是()

A.直接将数据存储至主存中,不再调入Cache中
B.将被访问次数最少的存储行换出,并将行计数器清零
C.不直接修改主存,只改cache,设置脏位,标记数据是否已经被修改
D.把数据同时写入Cache和主存,使用写缓冲

答案:ABD。

选项C正确,不直接修改主存,只改Cache,设置脏位,标记数据是否已经被修改。

在处理器访问Cache时,如果Cache中已经有该数据,即发生了Cache写命中,那么处理器就不需要再次访问主存了,可以直接在Cache中进行数据的读取和修改。但是,为了保证数据的一致性,在Cache中修改数据时,需要设置脏位,表示数据已经被修改过,并且将修改后的数据存储到Cache中,而不是直接修改主存中的数据。

选项A是不正确的,因为直接将数据存储至主存中会导致Cache和主存中的数据不一致。

选项B也是不正确的,因为被访问次数最少的存储行并不一定包含要修改的数据,换出该行对数据一致性没有影响。

选项D也不正确,因为在写缓冲中的数据并没有被写入主存和Cache中,可能会导致数据不一致性。写缓冲主要用于优化写入操作的速度。


96.Which descriptions are correct for System-Verilog language?( )

A. Inheritance
B. Classed based OOP
C. Prototype -based OOP
D. Polymorphism
E. Encapsulation

答案:ABDE。

SystemVerilog与C++类似,是基于类的面向对象。基于原型(prototype-based)典型的是JavaScript。

SystemVerilog面向对象的三个特征:

  • 封装 Encapsulation

  • 继承 Inheritance

  • 多态 Polymorphism


97.Memory BIST can test below elements in the design. ( )

A. Address decoder
B. Memory Array
C. ECC(Error Check & Correct) logic
D. Memory access control logic

答案:。DFT知识,不确定。


98.Select the items which could contribute to functional coverage? ( )

A. SV Cover groups
B. SV Assert Property
C. PSL
D. SV Cover Property

答案:ABD。

选项A. SV覆盖组:覆盖组用于对覆盖项进行分组,并在仿真中跟踪其覆盖率。通过使用覆盖组,您可以为设计指定覆盖目标。

选项B. SV断言属性:断言可用于验证设计是否满足某些功能要求。通过在测试台中添加断言,可以检查设计是否正确运行。

选项C. PSL:PSL(属性规范语言)是用于指定设计必须满足的属性的语言。可以使用PSL检查设计是否满足某些功能要求。

选项D. SV覆盖属性:覆盖属性用于为设计指定覆盖目标。通过使用覆盖属性,您可以跟踪设计中特定信号或事件的覆盖率。


99.Which are the main components of a testbench? ( )

A. Monitor
B. Checker
C. Scoreboard
D. Reference model
E. FIFO

答案:ABCD。

参考博客:从零开始,搭建一个简单的UVM验证平台(一)_不吃葱的酸菜鱼的博客-CSDN博客


100.We need to define clock specifications in SDC file, using commands like below:

Create_clock -name GFXCLK -period 600 -waveform {0 300 }

what can we know from this command? ( )

A. Clock frequency
B. Clock duty cycle
C. Clock source latency
D. Clock name

答案:ABD。

-name:指定一个字符串作为时钟名字。

-period:定义时钟周期。

-waveform:时钟信号的占空比。{上升沿时间, 下降沿时间}


101.Which ways are efficient for cross talk fix?( )

A. Use wide net
B. upsize driving cell
C. add keep out margin
D. downsize driving cell

答案:ACD。

  1. 使用宽线:减少交叉干扰的一种方法是在受影响的信号之间使用更宽的线。更宽的线会创造更多距离,减少干扰的可能性。

  1. 添加保留间隙:保留间隙是围绕关键元件或敏感信号周围的空白区域。在敏感信号周围添加保留间隙可以防止其他信号干扰它。

  1. 减小驱动单元的大小:在某些情况下,驱动单元可能太大,强度过强,从而干扰了信号。在这种情况下,通过减小驱动单元的大小来降低信号强度可以减少交叉干扰。


102.How to fix the EM problem on signal net?

A. set non default rule for violation signal net, increase wire width
B. set non default rule for violation signal net, decrease wire width
C. decrease the signal net fanout
D. increase the signal net output load

答案:ACD

A. 设置违规信号网络的非默认规则:这可能涉及更改信号迹线之间的间距规则,调整过孔的尺寸或位置,或添加地面层或屏蔽。增加导线宽度:这可能有助于降低导线中的电流密度,减少电磁问题。但是,增加导线宽度可能会增加电容和信号延迟,需要平衡权衡。

选项C. 减少信号网络扇出:这可能有助于减少信号网络中流动的电流量,从而减少电磁问题。但是,减少扇出可能也会影响设计的性能和功能。

选项D. 增加信号网络输出负载:这可能有助于减少信号网络中的峰值电流并减轻电磁问题。但是,增加输出负载可能也会影响电路的功耗和信号完整性。


103.Which solutions can be used to reduce parasitic for critical net? ( )

A. Reducing Interconnect Resistance
B. Increasing Wire Spacing
C. Reducing parasitic for Correlated Nets
D. Routing in lower (thinner) metals

答案:ABC。选项D,用更薄的金属会增加互联电阻,增加寄生效应。

  1. 降低互连电阻:通过使用更宽的金属线或增加金属层的厚度来减少线路的电阻,从而降低寄生效应。

  1. 增加线间距:通过增加线之间的距离,可以减少线之间的电容,从而降低串扰的影响。

  1. 使用屏蔽技术:可以在关键网络附近使用屏蔽技术,如金属屏蔽、阻抗匹配等,来降低噪声和干扰的影响。

  1. 优化布局:合理的布局可以减少信号路径的长度和复杂性,从而减少寄生效应的影响。


104.请判断以下哪些电路是时序逻辑电路()

A.计数器
B.寄存器
C.译码器
D.触发器

答案:ABD。

判断一个器件是否属于时序逻辑电路,可以通过以下几个方面进行考虑:

  1. 器件的作用:时序逻辑电路通常用于存储、控制、计数等需要考虑时间因素的应用中。如果该器件的作用与这些应用相关,则可能属于时序逻辑电路。

  1. 器件的输入输出特性:时序逻辑电路的输出结果受到输入信号的时间顺序和状态的影响,因此,器件的输入输出特性也可以是判断其是否属于时序逻辑电路的重要依据。

  1. 器件的内部结构:时序逻辑电路通常由触发器、计数器、状态机等组成,这些器件内部具有存储器件、时钟信号控制等结构,因此,可以通过分析器件的内部结构,来判断其是否属于时序逻辑电路。

如果一个器件的作用与存储、控制、计数等需要考虑时间因素的应用相关,并且具有时序逻辑电路的特征,例如内部结构具有存储器件、时钟信号控制等结构,则可以判断该器件属于时序逻辑电路。


105.Which of the following descriptions is true of digital signals()

A. It is a discrete signal in time, but it cannot be a discrete signal numerically
B. The signal is discontinuous in time and always occurs in a sequence of discrete moments
C. Numerically quantized, can only be evaluated by a finite number of increments or steps
D. It is a continuous signal in time, and it must be a discrete signal numerically

答案:BC。选项A,数字信号在时间和数值上都是离散信号。选项B,信号在时间上是不连续的,并且总是发生在一系列离散的时刻中(边沿触发,电平触发)。选项C正确,数字信号表示连续变量需要做近似,例如用数字信号表示函数sinx,对离散x取值、计算、存表查询。选项D,信号在时间上连续明显错误。


106.What are commonly used techniques to reduce dynamic power in low power design?

Pick ONE OR MORE options

A. Bus signal encoding, bus decoding (5 points)
B. Clock gating
C. Power gating
D. Dynamic voltage and frequency scaling(DVFS)
E. Body biasing

答案:ABCDE。选项A,总线信号编码,可以降低总线上信号的变化次数,从而降低动态功耗。

选项E,Body biasing是一种在数字电路中用来优化电路性能和功耗的技术。它可以通过改变晶体管的阈值电压来调整其开启和关闭的电压,从而调整电路的速度和功耗。body biasing可以使晶体管在其最优工作点附近工作,从而降低晶体管的开关延迟,并且降低晶体管在切换时的能量消耗,从而降低动态功耗。此外,通过调整晶体管的阈值电压,可以改变晶体管的饱和电流和漏电流,从而降低静态功耗。这也可以通过body biasing来实现。


三、填空题

  1. verilog 当中 a=4’b10x1;b=4’b10x1;那么逻辑表达式 a==b 为_______ a===b 为________

答案:x,1

相等运算符(==):参与比较的两个操作数必须逐位相等,其相等比较的结果才为 1, 如果某些位是不定态或高阻值,其相等比较得到的结果是不定值。

全等运算符(===):全等比较是对这些不定态或高阻值的位也进行比较,两个操作数必须完全一致,其结果才是 1,否则结果是 0

逻辑运算符可参考笔者其他文章:Verilog 逻辑与(&&)、按位与(&)、逻辑或(||)、按位或(|)、等于(==)、全等(===)的区别


2. 4bit 的信号输入和 8bit 的信号输入的乘法器内部计算输出信号至少需要______ bit 的位宽

答案:4bit信号的最大值为4'b1111 = 15, 8bit信号的最大值为8'b1111 1111 = 255;

乘积输出最大值为:255 * 15 = (2^4 - 1) * (2^8 - 1) = 2^12 - 2^8 -2^4 + 1,至少需要12bit位宽。

改一下题目:3bit信号输入和4bit信号输入的乘法器输出至少需要多少bit位宽?

max_output = 3'b111 * 4'b1111 = 7 * 15 = (2^3 - 1) * (2^4 - 1) = 2^7-2^4-2^3+1,用7bit即可描述,得出结论,X bit信号输入和 Y bit信号输入的乘法器输出信号至少需要(X+Y)bit。


3. 通常情况下, 芯片工作温度较________, 工作电压较_______ , 速度最快。

答案:电子迁移率主要受晶格散射影响,即随温度升高迁移率下降,芯片工作温度较低,则速度较快。芯片供电电压影响到电容充放电速度,电压降低时,芯片会变慢,电压升高时,芯片会变快。


4.以下代码的打印输出是___________

always@(posedge clk) begin
a=0;
a<=1;
$display(“%0b”,a);
end

答案:0,同一时刻阻塞赋值和非阻塞赋值发生,以阻塞赋值结果为准。


5. 全部使用组合逻辑实现 A, B, C 的运算实现|A*(B+C)|^2 共需使用_______ 个乘法器与_______个加法器

答案:6个乘法器,5个加法器

此题:设A = Ar + Ai*j, B = Br + Bi*j, C = Cr + Ci*j,

A*(B+C) = (Ar*(Br+Cr) - Ai*(Bi+Ci)) + (Ai*(Br+Cr) + Ar(Bi + Ci))*j,令Br+Cr = Dr, Bi+Ci = Di;

则,要求的是复数的模的平方,|A*(B+C)|^2 = 实部的平方 + 虚部的平方 = (Ar*(Br+Cr) - Ai*(Bi+Ci)) ^ 2 + (Ai*(Br+Cr) + Ar(Bi + Ci)) ^ 2

= Ar^2*(Dr^2 + Di^2) + Ai^2*(Di^2 + Dr^2) ,其中Br+Cr = Dr, Bi+Ci = Di;

乘法器使用:Ar*Ar;Ai*Ai;Dr*Dr;Di*Di;Ar^2*(Dr^2 + Di^2);Ai^2*(Di^2 + Dr^2);6个乘法器

加法器使用:Br+Cr;Bi+Ci; Di^2 + Dr^2;Ar^2*(Dr^2 + Di^2) + Ai^2*(Di^2 + Dr^2) ;4个加法器


6. [Python] list1 = [0, 1, 2, 3, 4, 5],则list1[ : -2]=___

答案:[0,1,2,3]。考察python语法。


7.退出仿真的函数是哪个____

答案:$finish。


8. UVM中哪个phase是自下而上执行顺序?____

答案:build_phase

在 UVM 中,build_phase 是自下而上执行的 phase,也是 UVM 中最先执行的 phase。build_phase 用于创建和连接测试组件,其执行顺序与 testbench 中组件的继承关系相关,一般从下往上依次执行,即先创建和连接最底层的组件,再依次向上创建和连接其它组件。在 build_phase 中,我们可以使用 UVM 提供的各种工厂和配置机制,动态地创建测试组件并进行配置,以满足测试需求。


9.某一数模转化器的精度为6位,电压转换范围为0-6.3V,那么当输入数字信号为011011的时候,输出电压是( )V

答案:2'b011011转十进制等于16+8+2+1=27,即2.7V。


10.在进行256点FFT分析时,如果信号采样率为4096Hz,那么FFT变换之后的频谱分辨率为( )Hz。

答案:4096/256=16,分辨率为16Hz。


11.以下verilog代码实现了( )分频(注意:填阿拉伯数字)

module div(input  clk     ,input  rst     ,output clk_ out
);
reg [1:0]cnt1;
reg [1:0]cnt2;
reg c1k1;
reg clk2;
always@(posedge clk or negedge rst_n) if(!rst_n)  begin cnt1<=2' b00;else if(cnt1==2'b10) cnt1<=2'b00;else  cnt1<=cnt1+1'b1;always@(negedge clk or negedge rst_n)if(!rst_n) cnt2<=2 'b00;else  if(cnt2==2'b10) cnt2<=2'b00;else  cnt2<=cnt2+1'b1;always@(posedge clk or negedge rst_n)if(!rst_ n) c1k1<=1'b0;else  if(cnt1==2'b00||cnt1==2'b10) clk1=~clk1;else  clk1<=clk1;always@(negedge clk or negedge rst_n)if(!rst_ n)  clk2<=1'b0;else  if(cnt2==2'b00||cnt2==2'b10) clk2<=~clk2;else  clk2<=clk2;assign clk_out=clk1&clk2;
endmodule

答案:clk1和clk2都是占空比为66%的三分频,clk2错开clk1半个周期,两者相与输出占空比为50%的三分频。


12.考虑如下所示的计算机指令:

Loop:     fld    f0,0(x1)fadd.d    f4,f0,f2fsd    f4,0(x1)addi    x1,x1,-8bne    x1, x2, Loop

已知fld指令需要2T的时间,fadd.d需要3T的时间,fsd, addi, bne个需要1T的时间,那么通过指令的重新排布,完成上述单次Loop所需的最少时间为( )T

答案:

  • fld f0,0(x1):从内存中以x1为基地址,偏移量为0的位置(也就是x1指向的位置)读取一个双精度浮点数,存入浮点寄存器f0中。

  • fadd.d f4,f0,f2:将f0寄存器中的值和f2寄存器中的值相加,结果存入f4寄存器中。

  • fsd f4,8(x1):将f4寄存器中的值存储到以x1为基地址,偏移量为8的内存位置中。

  • addi x1,x1,-8:将x1寄存器中的值减去8,即将x1寄存器指向前一个双精度浮点数所在的内存地址。

  • bne x1,x2, Loop:比较x1寄存器的值和x2寄存器的值,如果不相等,跳转到Loop标签处执行。

观察指令可以发现,fld指令需要等待访存,fadd.d指令需要等待fld指令的结果,fsd指令也需要等待fadd.d指令的结果。因此,可以采用指令重排的方法来减少总的执行时间。

一种可能的指令重排方式如下:

Loop:fld f0,0(x1)addi x1,x1,-8fadd.d f4,f0,f2fsd f4,8(x1)bne x1,x2,Loop

指令重排后,fld指令和addi指令可以并行执行,fadd.d指令等待fld指令的结果,fsd指令等待fadd.d指令的结果。因此,单次Loop所需的最少时间为:

2T (fld和addi并行执行) + 3T (fadd.d执行) + 1T (fsd执行) + 1T (bne执行) = 7T

因此,完成上述单次Loop所需的最少时间为7T。


13.已知VIL_max为最大允许输入低电平,VIH_ min为最小允许输入高电平,VOL_max为最大输出低电平,VOH_min为最小输出高电平,则输入高电平的噪声容限VNH=( )V

电路类型 电源电压 VIL_max VIH_min VOL_max VOH_min

CMOS 3.3V 1.1V 2.2V 0.1V 3.2V

答案:1V,如下图:


14.下图的电路中,flip-flop 2的setup time slack= ( ) ns.(注意:填阿拉伯数字)

答案:0.3+0.65+0.35+T_slack = 0.5+10-0.35算出T_slack=8.85ns。


15.某一异步FIFO,写时钟频率为200MHz,每100个周期会写入30个数据,读时钟频率为100MHz,每10个周期可以读出7个数据,则此FIFO的最小深度为( ).(注意:填阿拉伯数字)

答案:容易算出,读的速度比写的速度快,所以FIFO不会溢出。写的30个数据,占写时钟的30周期,对应读时钟的15周期。读时钟的15周期最少读出9个数据,所以FIFO最小深度为21。


以下system verilog代码,到55ns时执行了( )次打印(注意:填阿拉伯数字)

initial begin$display("start");#10 $display("test");fork$display("test");#50 $display("test");#10 $display("test");begin#30 $display("test");#10 $display("test");endjoin_any$display("test");#80 $display("test");
end

答案:7次打印.

1. fork-join语句会等待所有子程序都执行完毕后再继续执行后续代码。当所有子程序都完成后,join语句才会返回。

2. fork-join_any语句会等待至少有一个子程序执行完毕后就会继续执行后续代码。当有一个子程序完成后,join语句就会返回。

3. fork-join_none语句不会等待子程序执行完毕,而是直接继续执行后续代码。这种语句常用于一些无需等待子程序执行完毕的情况。


16.以下verilog代码的印出的值为( )

reg signed [7:0] a, b, c;
initial begina=8'h14;b=8'b11110010;c=a+b;$display("%d",c);
end

答案:6。b=8'b11110010,有符号位为补码表示,按位取反加1得到b=-14。a=20,所以20-14=6。


17.已知八进制数: (362) 8,求它的

十进制数是:

二进制原码是:

反码是:

补码是:

十进制数:3*8^2+6*8+2=192+48+2=242

二进制原码是:242一直除以2求余。

242/2=121...0

121/2=60 ...1

60 /2=30 ...0

30 /2=15 ...0

15 /2=7 ...1

7 /2=3 ...1

3 /2=1 ...1

1 /2=0 ...1

从下往上写,二进制原码为:11110010(B)

反码是:00001101

补码是:00001110


18.写出图中CMOS电路的输出逻辑表达式:Z1= 、Z2=

左图:不看B的情况下,容易看出A1和A2组成或非门,两者同时为0,则输出1。A1和A2的上拉网络和B并联,下拉网络和B串联。所以最后就是A1和A2的或非再与B与非,Z1=(B(A1+A2)')'=A1+A2+B'。

右图:ABC或非再接一个非门,也就是ABC的或,Z2=A+B+C。


19.Assuming a=1'b1; b=1'b0what's the final values of a and b?

always@(posedge

clk)

begin

a=b;

b=a;

end

always@(posedge

clk)

a=b;

always@(posedge clk)

b=a;

always@(posedge

clk)

begin

a<=b;

b<=a;

end

always@(posedge clk)

a<=b;

always@(posedge clk)

b<=a;

a= ?

b= ?

a= ?

b= ?

a= ?

b= ?

a= ?

b= ?

1:阻塞赋值,a=0,b=0。

2:仿真结果为a=0,b=0。

3:非阻塞赋值:a=0,b=1。

4:非阻塞赋值:a=0,b=1。


20.Complete the blanks inthe following question with the appropriate answer.

There is a FIFO, at the input side, there will be atmost 80 valid input out of 100 cycles; at the output side there will be atleast 8 available slots out of 10 cycles, please specify what is the minimized FIFOdepth for this case. Depth=_________

答案:34。写数据100周期最多有80个valid,读数据10周期至少有8个有效,意味着最差情况FIFO也不会溢出。假设输入背靠背传输连续写入160个数据。输出前五周期读3个,最后五周期读3个,中间150周期读15*8=120个,所以写入80个数据,读出6+120=126个,FIFO深度为160-126=34。容易误判32深度。



四、判断题

1. 可以通过两级触发器防止亚稳态传播,也可以用来同步多bit信号。

答案:错误。同步多bit信号,使用两级触发器在传输过程中,多个位的变化可能不是同时发生的。因此同步多bit信号,通常采用格雷码+两级同步的方式来保证每次数据跳变都只改变1bit。


2. 时钟域A的多bit信号一定要经过同步才能被时钟域B采用。

答案:错误。表述太过绝对,当时钟域A下的多bit信号能够稳定被时钟域B采集时,可以不同步,题目表述太过绝对。


3. 如果DFF的hold时间不满足,可以通过降低时钟频率来解决。

答案:错误。降低时钟频率无法解决hold violation,可以改善setup violation。


4. 假定没有毛刺产生,异步复位信号可以不管时钟,只要复位信号满足条件,就能完成复位动作。

答案:错误。异步复位信号是一种用于将电路恢复到其初始状态的信号,不依赖于时钟信号。当异步复位信号被激活时,电路将被强制进入其初始状态,无论时钟信号是否存在。

即使没有毛刺产生,异步复位信号也需要满足一些条件,例如保证信号的稳定性和正确性,以及在电路中的正确实现。使用异步复位信号时,需要考虑异步复位信号可能带来的不良影响,例如在复位期间可能出现的电路振荡或不稳定行为。


5. 状态机没有冗余状态时,可以不写default状态。

答案:错误。即使状态机没有冗余状态,也应该编写一个默认状态,以处理未定义的输入或其他异常情况。默认状态可能只是一个简单的错误处理状态,但是它可以提高状态机的健壮性和可靠性。


6. 状态机如果状态未列全,不需要使用default状态。

答案:错误。状态没列全,更要使用default。


7. #UDLY语句可以被综合成延时电路

答案:错误。延时语句不可综合。


8. 中断指示寄存器由实时告警的状态触发,是只读寄存器

答案:正确。

中断指示寄存器是一个只读寄存器,它的状态由硬件设备或中断控制器触发,并用于指示处理器当前需要响应的中断请求。通常情况下,中断指示寄存器的状态只能被读取,不能被写入,因为它的状态是由硬件设备自动设置的,处理器不能主动地改变它的状态。一些处理器可能会提供一些控制信号,允许软件清除中断指示寄存器中的某些标志位,但这些标志位的设置通常是由硬件设备自动完成的,处理器不能直接改变它们的状态。因此,中断指示寄存器通常是一个只读寄存器。


9. 如果两个时钟的频率不同,则两个时钟为异步时钟

答案:错误。相位差固定,以及时钟频率比为整数倍的时钟也可称为同步时钟。


10. 用于逻辑的真假判断,结果为单比特,0或1。!用于数据按位取反,结果是单个或多个比特

答案:错误。按位取反操作符为“~”,“!”为逻辑取反,结果只能是单bit。


11. 异步电路都不需要STA进行约束检查。

答案:错误。异步电路可以下set_false_path约束,也可以下set_max_delay和set_min_delay约束,都属于时序约束,STA需要进行检查的。


12. 单bit电平信号使用级联三触发器电路跨异步时钟城可以消除亚稳态。

答案:亚稳态不可消除和避免,只可以降低其影响。


13. 时序逻辑电路按照其触发器是否有统一的时钟控制分为同步时序电路和异步时序电路。

答案:正确。


14. 设计异步FIFO时,FIFO深度必须是2的整数次幕,才能使用格雷码

答案:错误。FIFO深度可以不是2的整数次幂,使用格雷码。


15. 基于Verilog HDL,时钟或复位信号可以出现在赋值表达式中。

答案:正确。可以,clock gating。


16. 线型信号必须显式定义

答案:错误。Verilog程序模块中输入、输出信号类型默认自动定义为wire型


17. 编码中可以使用显式端口映射,也可以使用位置端口映射,位置端口映射方式更好。

答案:错误。显示映射更好,不受端口声明顺序的影响。哪怕例化的模块修改了端口的顺序,也不影响例化结果。位置映射则不行。


五、简答题

1. setup time和hold time是否可以同时为负,为什么?

答案:setup time 和 hold time可以为负,但不能同时为负。

从定义上去分析,setup time是指寄存器的输入数据在时钟上升沿到来之前,数据需要保持不变的时间。hold time是指寄存器的输入数据在时钟上升沿到来之后,数据需要保持不变的时间。

所以setup time+ hold time其实是给了寄存器一个能够准确采样输入信号的时间窗口,如果setup time和 hold time都为负,则setup time+ hold time<0,即寄存器采样数据的时间窗口为负,就没法准确采样数据,所以答案为否。


2. 写出如下电路图的真值表

答案:考察与门和异或门输入与输出的关系。(tip:这是一个1bit全加器电路,S为和,C为进位)

与门:两个输入1–>输出1,其他情况–>输出0。

异或门:两个输入不同–>输出1, 输入相同–>输出0

B=0

B=1

B=0

B=1

A=0

C=0

C=0

S=0

S=1

A=1

C=0

C=1

S=1

S=0


3. 芯片设计三个核心指标为PPA,请解释这三个字母分别代表什么,并阐述你对PPA的理解。

答案: 在芯片设计中,PPA代表“性能(Performance)、功耗(Power)和面积(Area)”,是三个关键指标,也是衡量芯片设计质量的重要标准。

  1. 性能(Performance):是指芯片在特定工作负载下的运行速度和处理能力,通常用时钟频率、吞吐量、延迟等指标来衡量。

  1. 功耗(Power):是指芯片在工作时消耗的能量,通常用静态功耗和动态功耗来表示。静态功耗是指芯片在工作时未做任何操作时的能耗,动态功耗则是指芯片在执行各种操作时所消耗的能量。

  1. 面积(Area):是指芯片的物理大小,通常用晶圆面积或晶体管数量来表示。芯片的面积越小,就可以在同样的封装中容纳更多的芯片,从而降低制造成本和提高性能。

在实际应用中,设计师需要根据具体的应用场景和需求来确定PPA的优先级和权重,以实现最优的设计效果。


4. 根据自己的理解列出经典处理器CPU执行大致阶段,以及各阶段的大致行为。

1.取指阶段(Instruction Fetch):从内存中取出下一条指令,存储到指令寄存器中。

2.译码阶段(Instruction Decode):将指令寄存器中存储的指令解码成对应的操作码和操作数,并确定指令的类型。

3.执行阶段(Execution):根据指令的类型和操作数,执行相应的操作,例如算术运算、逻辑运算、存储器读写等。

4.访存阶段(Memory Access):如果执行的操作需要访问内存,那么就将需要读取或写入的内存地址计算出来,并从内存中读取或写入数据。

5.写回阶段(Write Back):将执行结果写回到寄存器文件或存储器中,更新寄存器或存储器中的数据。

为了提高 CPU 的执行效率,现代处理器还会采用诸如流水线、超标量、动态执行等技术,将指令执行的不同阶段并行处理,从而实现更高效的指令执行。


5. 芯片设计中有些情况下会考虑将不同模块分时启动、分时停止,请闸述你对该场景的理解。

  1. 降低功耗:在芯片启动阶段,如果所有模块都同时启动,那么可能会导致瞬时功耗过高,超出电源的承受范围。而将不同模块分时启动可以避免这种情况的发生,从而降低整个芯片的功耗。

  1. 加快启动时间:将不同模块分时启动可以避免同时启动导致的系统响应时间过长的问题,从而加快芯片启动的速度。

  1. 方便调试和测试:在芯片设计的过程中,将不同模块分时启动、分时停止可以方便芯片设计人员对不同模块的功能进行测试和调试,从而提高开发效率和测试效果。


6. What is The Difference Between Byte And Bit [7:0]

答案:很容易让人陷入误区就是1 byte = 8 bit,但其实这是考察system verilog中byte变量类型和bit变量类型的区别。byte类型为二值逻辑有符号数,bit类型为为二值逻辑无符号数。SV数据类型如下:摘抄自绿皮书


7. What Is The Use Of $cast?

答案:动态转换中,当我们使用类的时候,类句柄的向下转换,即从父类句柄转换为子类句柄时,需要使用 $cast( ) 函数进行转换,否则会出现编译错误,把父类句柄转换成子类句柄只有这一种方法,一般是在父类句柄指向子类对象的时候,又想要访问子类的成员变量时,使用cast函数转换。如果父类句柄指向的是父类对象,那么不能用cast函数转换,哪怕转换了也会转换失败,即函数返回0.

详细可参考笔者其他文章:验证基础-类型转换、虚方法、回调函数、对象拷贝_显示转换 静态转换_不吃葱的酸菜鱼的博客-CSDN博客


8. What is The Difference Between Mailbox And Queue?

答案:考察SV基础,

1.mailbox必须通过new()函数例化,而队列只需要声明即可。

2.mailbox的存取方法put()和get()是阻塞方法,即使用它们时,方法不一定会立刻返回,而队列所对应的是存取方式,push_back()和pop_front()方法都是非阻塞的,会立刻返回。

3.在传递形式参数时,如果是input方向,那么信箱类型传递的是句柄,而队列类型则完成的是队列内容的拷贝。


9. How To Call The Task Which is Defined In Parent Object Into Derived Class ?

答案:考察SV基础,子类可以通过super.xxx访问父类的成员变量和方法。


10. sequence如何启动,说出任意种方法

start方法是uvm中启动sequence最本质、最根本的方法。start方法是“uvm_seuquence_base”类中的一个task。

    my_sequence seq;seq = my_sequence::type_id::create("seq");seq.start(m_my_driver);

11. Without Using Randomize Method Or Rand, generate An Array Of Unique Values?

使用时间作为随机因素:可以使用当前时间或仿真时间作为随机种子,并使用一些算法(例如,线性同余法)来生成伪随机数。

module testbench;initial beginint unsigned random_number;timeunit 1ns;time seed = $realtime;repeat (10) beginseed = seed + $realtime;$display("Seed: %0d", seed);random_number = seed % 31;$display("Random number between 0 and 30: %0d", random_number);endend
endmodule

12. 请列出SRAM与DRAM的不同之处?

SRAM(静态随机存取存储器)和DRAM(动态随机存取存储器)是两种常见的计算机内存类型,它们有以下几个不同之处:

  1. 存储原理:SRAM使用存储电路来存储数据,因此不需要刷新电路,存储速度快,一般用作Cache;DRAM使用电容来存储数据,需要定期进行刷新,存储速度较慢。

  1. 存储密度:由于SRAM的存储原理,每个存储单元需要的晶体管数量较多,因此相比于DRAM来说存储密度较低。

  1. 功耗:由于SRAM不需要进行刷新,因此功耗比DRAM低。

  1. 成本:由于制造工艺和存储密度的不同,SRAM的制造成本比DRAM高。

  1. 容量:由于存储密度的不同,DRAM比SRAM更适合存储大量数据。


13. 请列出一般系统中的Memory hierarchy.并解释系统中为何需要将存储器分层

一般系统中的Memory hierarchy如下:

  1. 寄存器(Register)

  1. 高速缓存(Cache, SRAM)

  1. 主存储器(Main Memory, DRAM)

  1. 辅助存储器(Auxiliary Storage)

存储器的速度越快,成本就越高。相反,存储器的成本越低,速度就越慢。使用Memory hierarchy可以通过在不同层次上使用不同类型的存储器来提高性能,并同时控制成本。例如,在寄存器中存储最频繁使用的数据,而在辅助存储器中存储不常用的数据,这样可以实现快速访问常用数据并降低成本。


14. 在一个CPU系统中,有2个Mster通过个2x1的AXI总线访问一个Slave,简述如何构造验证场景来进行验证,并保证验证的完备性

为了构造验证场景来进行验证并保证完备性,可以按照以下步骤进行:

  1. 设计测试计划:根据需求和规格文档,设计测试计划,确定需要验证的功能、性能和接口要求。

  1. 搭建仿真环境:根据需求和规格文档,搭建仿真环境,包括CPU系统、2个Master、AXI总线和1个Slave等组成部分。

  1. 编写测试用例:根据测试计划,编写测试用例,涵盖各种情况,包括正常情况、边界情况和异常情况等,例如读写操作、多Master并发操作等。

  1. 运行仿真:在仿真环境下运行测试用例,观察仿真结果,包括响应时间、数据正确性、错误处理等,以验证功能和性能的要求是否被满足。

  1. 分析仿真结果:根据仿真结果,分析测试用例的覆盖率和测试结果的有效性,发现和解决潜在的问题,以保证验证的完备性。

  1. 重复测试:在验证完成后,进行回归测试,保证之前通过的测试用例仍然可以通过,以保证系统的稳定性和可靠性。

  1. 提交验证报告:最后,根据验证结果,编写验证报告,总结验证的过程和结果,记录所有测试用例和验证结果,包括通过和失败的用例,以及未覆盖的部分和需要优化的地方等。

通过以上步骤的验证,可以确保验证场景完备性,使得设计实现能够满足系统规格要求,同时保证设计的正确性、可靠性和性能。


15. 用Veilog HDL简单实现x[7: 0]*480

先化简一下,x[7:0] * 480 = x [7:0] * (512-32)

assign out = (x<<9) - (x<<5);


16. 时序约束中,setup violation和hold violation的常见原因是什么?

这个从setup time slack和hold time slack的计算公式上出发解释就行。

setup_slack = clk_period + clk_path2_delay - dff_set_up - clk_uncertainty + clk_path1_delay + ck_to_q + logic_delay。

产生setup time violation的常见原因,可以是:1.时钟频率过高;2.数据路径组合逻辑延迟太大;3.异步电路信号采集错误;4.时钟抖动不稳定;5.后端寄存器时钟到达时间过慢。

hold time slack = clk_path1_delay + ck_to_q + logic_delay + clk_path2_delay + dff_hold + clk_uncertainty

产生hold time violation的常见原因,可以是:1.数据路径组合逻辑太短;2.时钟抖动不稳定;3.后端寄存器时钟到达时间过快。


17. FPGA产生两个输出脉冲,要求这两个脉冲之间的延迟为0.5ns,请描述你的实现方案。

用FPGA内部的模块,IODelay Components。

参考博客:产生脉冲之间的延迟_fpga产生ns级脉冲_傻童:CPU的博客-CSDN博客


18. 请画出如下语句综合后对应的电路(禾赛科技2022提前批)

reg out, int1, int2;
always @(posedge clk) beginout <= in1 & in2out <= in1 ^ in2out <= in1 l in2
end

会综合出最后一句out <= in1 l in2。

Verilog设计与逻辑综合实例解析(含代码) - 知乎 (zhihu.com)


19. 请画出如下语句综合后对应的电路

wire wire1, sel1, sel2, a,b,c;
assign wire1 = sel1==1 ? a : sel2 ? b: c

用了两个三目运算符,其实逻辑就是:

if(sel1==1)wire1 = a;
else if(sel2==1)wire1 = b;
else wire1 = c;

综合出来是组合逻辑,用两个二选一的mux来做选择。


20. 请用尽量少的2选1 MUX实现一个两输入异或门。

用两个2选1 mux就行了。


21. 请分别解释LUT,CLB,BRAM,ISERDES,GTP,DSP

  • LUT (Look-Up Table):是FPGA中的基本逻辑单元,可以将其看作一个可编程的查找表,可实现各种逻辑运算和算术运算。LUT通常由多个输入和一个输出组成,其输入经过查找表的查找后,通过一个可编程的输出来输出结果。LUT是FPGA的重要组成部分,其数量和大小对FPGA的性能和资源占用有着重要的影响。

  • CLB (Configurable Logic Block):是FPGA中的一个可配置的逻辑块,由多个LUT、寄存器和其它可编程逻辑组成。CLB是FPGA中的核心组件之一,用于实现各种逻辑运算和状态机等电路功能。

  • BRAM (Block RAM):是FPGA中的一种存储器块,可用于存储数据和程序。BRAM可以配置为不同的宽度和深度,支持单口和双口读写操作。BRAM在FPGA中被广泛应用于FIFO缓存、DMA控制器、图像处理、FFT等领域。

  • ISERDES (Input Serializer/Deserializer):是FPGA中的一种输入序列化/反序列化器,用于将外部高速数据信号转换成FPGA内部时钟域的同步信号。ISERDES可以通过编程来配置各种输入时序和时钟域信息,可支持多种标准协议,如DDR、PCI Express、SATA等。

  • GTP (Gigabit Transceiver):是FPGA中的一种高速串行收发器,用于支持各种高速串行协议,如PCI Express、SATA、10G Ethernet等。GTP支持数据速率高达10Gbps以上,具有低功耗和低噪声等特点。

  • DSP (Digital Signal Processor):是FPGA中的一种可编程数字信号处理器,通常由多个硬件乘加器和寄存器文件组成,可用于实现各种数字信号处理算法,如滤波器、FFT、卷积、乘法累加等。DSP在FPGA中被广泛应用于音频、视频、雷达、通信等领域。


22. 请说明采用查表法实现8bit除以8bit的方法,并说明资源消耗情况。

要求x/y,就是求x*1/y

对1/y做查表法,y是ram的地址,1/y的结果用matlab算出来,保存为8bit二进制小数(整数为0),放到ram里。这样就用了2^8=256个 * 8bit = 256byte的ram空间。然后再和x相乘就行了


23. 使用verilog实现2个8bit补码的相加。

参考博客:补码加法运算_溢出判断——Verilog实现 - 代码先锋网 (codeleading.com)

module top_module (input [7:0] a,input [7:0] b,output [7:0] s,output overflow
); assign s=a+b;assign overflow=((~a[7])&(~b[7])&s[7])|(a[7]&b[7]&(~s[7]));
endmodule

24. 简述流水线设计的方法和作用。

方法:将较长的组合逻辑拆分成小段,在它们中间加寄存器减小组合逻辑delay

作用:可以提高时钟频率,提高数据吞吐量


25. 怎样用D触发器、与或非组成二分频电路?

将寄存器的输出Q端通过一个非门连接到寄存器的输入D端,每周期输出被取反一次,取反两次为Q的一周期。


26. 请根据下面的设计描述,尽可能多的列出你所能想到的用于功能验证的测试点

一个异步FIFO, rdata和wdata均为8位数据,FIFO深度为16,当rst_n输入为低时,FIFO被复位,当wclk的上升沿采样到wr为高时,数据被写入FIFO,当rclk的上升沿采样到rd为高时,FIFO输出数据。此外,当FIFO为空时,empty信号输出为高,当FIFO满时,full信号输出无高。

1.写入和读取数据的基本测试,包括边界情况和常规情况。
2.确认写入数据和读出数据的一致性。
3.在FIFO满时进行写入测试,确认full信号是否正确。
4.在FIFO为空时进行读取测试,确认empty信号是否正确。
5.确认重置信号是否能够正确地清空FIFO,并设置empty和full信号的值。
7.验证读写时钟(rclk和wclk)是否正确的采样信号,并检查数据是否正确地从FIFO中读出。
8.测试FIFO深度是否正确,并确认FIFO是否可以正常处理各种数据数量。
9.测试不同的写入速率和读出速率,以确保FIFO在不同情况下的稳定性和正确性。
10.检查FIFO的异步读写是否能够正常工作。
11.确认FIFO是否能够正确地检测并处理任何错误,例如溢出和下溢。


27. 用D触发器搭建4进制的计数器。

module counter4(input             clk    ,input             reset  ,output reg [1:0]  cnt
);always@(posedge clk) beginif (reset) begincnt <= 2'b00; // 初始化为 0endelse begincase(cnt)2'b00: cnt <= 2'b01;2'b01: cnt <= 2'b10;2'b10: cnt <= 2'b11;2'b11: cnt <= 2'b00;endcaseend
endendmodule

28. 设计一个同步fifo,读写时钟相同,其中在写入时每100个时钟周期会写10个,具体哪个时刻写入不确定,在读出侧每10个cycle会读1个,计算FIFO的最小深度?

答案:18。背靠背传输。

参考博文:FPGA笔试面试题之FIFO深度计算【字节跳动】【大疆】【简便计算公式】


29. 如下代码在综合时是否可以综合出时钟门控电路?如果能,画出时钟门控示意图,如果不能,请修改使信号out可以综合出时钟门控电路。

always @(posedge clk or negadge rst_n) beginif(rst_n==1'b0)out <= 64'b0;else if (en)out <= data;elseout <=64'b0;
end

不能综合出门控时钟

module clkGating(input clk,input rst_n,input out_en,input [63:0] data,output reg out);reg en1;
wire clk_en;always@(posedge clk or negedge rst_n) beginif(!rst_n)beginen1 <= 1'b0;endelse beginen1 <= out_en;end
endassign clk_en = clk & en1;always @(posedge clk_en or negedge rst_n) beginif(rst_n==1'b0)out <= 64'b0;elseout<= data;
endendmodule

30. 用Verilog语言实现一个带使能的模100异步清0计数器;模块定义为module count (out, count_en, clr, clk);

module count (out, count_en, clr, clk);output reg [6:0] out;input count_en, clr, clk;always @(posedge clk or negedge clr)beginif (!clr) beginout <= 7'd0;endelse if (count_en) beginif (out == 7'd99) beginout <= 7'd0;endelse beginout <= out + 1;endendendendmodule

31. 动态功耗和静态功耗分别指的是哪些?可以通过什么方法降低?

动态功耗:P_dynamic= k*C*V*V*f + m*V*I_sc,和 电压、负载电容、工作时钟频率、信号翻转率、短

路电流有关;

电压角度:

(1)降低工作电压;(2)多电压域;(3)动态电压缩放DVS技术(处理器在不同工作模式下使用不同电压);(4)电源关断技术,power-gating;

负载电容角度:与工艺有关

(1)按比例缩小集成度,降低器件电容;(2)多芯片系统中,可以考虑多芯片封装,减低接口间电容;(3)合理的布局布线;

工作时钟频率角度:

(1)降低工作频率;(2)多时钟域;(3)门控时钟,clock gating;

数据翻转率角度:

(1)使用格雷码等状态翻转比较少的编码;(2)数据不操作说,保持上次的值,而不是强制置0或者置1;(3)使用使能信号、片选信号,减少不必要的切换;

静态功耗:P_static = V*I_leak,和 电压、漏电流 有关,而漏电流和工艺有关;

电压角度 V:

(1)降低工作电压;(2)多电压域;(3)动态电压缩放DVS技术(处理器在不同工作模式下使用不同电压);(4)电源关断技术,power-gating;

电流角度 I_leak(漏电流):

(1)使用HVT高阈值晶体管,漏电流小;(2)多阈值;


32. s(t)为fsk调制信号s(t)=x(n)sin(w1t)+x’(n)sin(w2t), {w1>w2},x(n)={1,011,01}.带通滤波的通带为w1±a,0<(w1-w2)/2 下图给出包络检波的解调框图,请画出b,c,d各点的波形,a点波形图如下。

在信号处理中,常见的一些基本概念如下:

  1. 带通滤波(Band-pass filtering):指将信号中某个特定频率范围内的信号通过,而将其他频率的信号阻止或衰减,从而实现对信号的滤波处理。带通滤波器通常用于去除信号中的噪声或某些频率成分,以获得更清晰的信号。

  1. 全波整流(Full-wave rectification):是指将信号的负半周期变为正半周期。通常使用二极管或整流电路来实现,可以将信号的幅值放大。

  1. 低通滤波(Low-pass filtering):是指将信号中的高频成分滤除,只保留低频成分。低通滤波器常用于去除信号中高频噪声,平滑信号或降低信号带宽。

  1. 抽样判决(Sampling and decision):是指对信号进行采样,通过一个决策器来对样本进行分类,以获得更好的信号质量。抽样判决通常用于数字通信中的调制解调过程中,可以使传输信号的抗干扰能力更强,同时提高误码率。


33.

1)请解释什么是input delay,什么是output delay?可以通过作图等方式来解释。

input delay:时钟触发后信号信号到达输入端口前经过的延迟。

output delay:输出端口输出信号后到下一个触发器采样前信号的传输延迟。

2)有如下图所示电路示意图,已知clock-2-Q的delay为1.5ns,时钟周期T=12ns,F0与F1之间的skew为1ns,setup time为1ns,hold time为0.5ns,为保证电路不会出现setup time violation和hold time violation的情况,求tc0_max, tc0_min, tc1_max,tc1_min

skew = 1ns,是指时钟到达F1比时钟到达F0早1ns。

这样的话,F0.clk->F1.D路径的偏斜就是 -1ns。F1.clk->F0.D路径的偏斜就是 1ns。

F0.clk->F1.D路径:

建立关系:tcq + tc0 + tsetup < tclk + tskew,1.5 + tc0 + 1 < 12 + (-1) ,tc0 < 8.5ns
保持关系:tcq + tc0 > thold + tskew,1.5 + tc0 > 0.5 + (-1),tc0 > -2ns。

F1.clk->F0.D路径:

建立关系:tcq + tc1 + tsetup < tclk + tskew,1.5 + tc1 + 1 < 12 + (1) ,tc0 < 11.5ns
保持关系:tcq + tc1 > thold + tskew,1.5 + tc1 > 0.5 + (1),tc0 > 0ns。

3)什么是OCV,为什么要使用OCV,并在所示的电路示意图中指出哪些路径受到OCV的影响?

On Chip Variation(OCV)是指芯片内部电路因为制造工艺的变化而导致的性能差异。这种差异可能会导致芯片设计者所预测的电路性能与实际电路性能不一致。OCV的影响因素有很多,例如制造工艺的变化、温度、电压、Aging等,这些因素都会导致电路性能的变化。

OCV影响的主要是器件性能,因此有器件的路径都会受OCV影响

参考博客:

介绍一下芯片OCV_伟酱的芯片后端之路的博客-CSDN博客

STA - PVT、RC、OCV_zhuangdk的博客-CSDN博客


34. 以下程序的功能是求100-999之间的水仙花数(水仙花数是指一个三位数的各位数字的立方和是这个数本身,如:153=1^3+5^3+3^3).请补充【 ?】处的代码

#include<iostream h>
int fun(int n){int i,j,k,m;m=n;【1】for(i-1;i<4;i++){【2】m=(m-j)/10;k=k+j*j*j;}if(k==n)【3】else return(0);
}
void main(){int i;for(i=100;i<1000;i++){if(【4】==1)cout<<i<<"is ok!"<<endl;}
}

补充后的代码

#include<iostream h>
int fun(int n){int i,j,k,m;m=n;k = 0;                    // 需要将 k 的初值设为 0for(i-1;i<4;i++){j=m % 10;              //取m的个位数m=(m-j)/10;k=k+j*j*j;}if(k==n)return(1);            //是水仙花数else return(0);
}
void main(){int i;for(i=100;i<1000;i++){if(fun(i)==1)         //如果是水仙花数,则输出cout<<i<<"is ok!"<<endl;}
}

35.题目描述如下,共5个小题:

Q1:如果报从FF_A到FF_B path的setup违例,请问是违反FF_A的setup还是FF_B的setup?(+2)如果报从FF_A到FF_B path的hold违例,请问是违反FF_A的hold还是FF_B的hold?(+2)

即数据在到达后一个寄存器的时候到达的太晚(setup violation)或太早(hold violation)a) 违反的是后一个寄存器FF_B的setup。b)违反的是后一个寄存器FF_B的hold

Q2请写出FF_A到FF_B path setup检查需满足period的条件公式?(+4)

CLK_D_A + A_CK2Q + Comb_D + B_setup < T + CLK_D_B
setup_slack = T + CLK_D_B - CLK_D_A - A_CK2Q - Comb_D - B_setup > 0

Q3.请写出FF_A到FF_B path hold检查需满足的条件公式?(+4)

CLK_D_A + A_CK2Q + Comb_D > CLK_D_B + B_hold
hold_slack = CLK_D_A + A_CK2Q + Comb_D - CLK_D_B - B_hold > 0

Q4.如果发现组合逻辑Comb_D太大超出预期,请列出可能的原因?(+4)

使得组合逻辑太大的原因有很多,比如①组合逻辑中有很多级联运算(乘法)、②组合逻辑的运算位宽很大,导致综合出来的门电路扇入扇出很大、③组合逻辑中有很多多余的操作,例如不必要的运算等、④输入的变量过多也会导致综合出来的门很复杂。

Q5.如果Comb只是两级buffer组成,Comb_D太大超出预期请列出可能的原因?(+4)

①buffer的负载过重,即大扇入扇出,缓冲器的负载过重可能导致缓冲器的传输延迟时间增加
②buffer本身质量就不好,具有较大延迟


36. 某主频为400MHz的CPU执行标准测试程序,程序中指令类型、执行数量和平均时钟周期数如下:

指令类型 指令执行数量 平均时钟周期数

整数 45000 1

数据传送 75000 2

浮点 8000 10

1.求该计算机的有效CPI(Cycle Per Instruction). MIPS(Million Instruction Per Second)和程序执行时间。

CPI = (整数指令执行次数 × 整数指令的平均时钟周期数 + 数据传送指令执行次数 × 数据传送指令的平均时钟周期数 + 浮点指令执行次数 × 浮点指令的平均时钟周期数) ÷ 总指令执行次数
CPI = (45000 × 1 + 75000 × 2 + 8000 × 10) ÷ (45000 + 75000 + 8000) = 2.5
其次,计算 MIPS:
MIPS = 主频 × 10^6 ÷ CPI
MIPS = 400 ÷ 2.5 = 160
最后,计算程序执行时间:
程序执行时间 = 总指令数 × CPI ÷ 主频
由于没有给出总指令数,我们需要先计算出来:
总指令数 = 整数指令执行次数 + 数据传送指令执行次数 + 浮点指令执行次数
总指令数 = 45000 + 75000 + 8000 = 128000
程序执行时间 = 128000 × 2.5 ÷ (400 × 10^6) = 0.8 秒
因此,该计算机的有效CPI为2.5,MIPS为160,程序执行时间为0.8秒。

2.若将CPU中浮点单元加速10倍,CPU整体性能提升比例是多少?

CPU整体性能提升比例可以用 Amdahl's Law 来计算:
加速前浮点指令所占的比例为 P,CPU 整体性能提升比例为 S,则有:
S = 1 ÷ (1 - P + P ÷ 10)
其中,P = 浮点指令执行次数 ÷ 总指令执行次数,即
P = 8000 ÷ (45000 + 75000 + 8000) = 0.0476
代入计算可得:
S = 1 ÷ (1 - 0.0476 + 0.0476 ÷ 10) ≈ 1.05
因此,若将上面CPU中浮点单元加速10倍,则 CPU 整体性能提升比例约为 1.05 倍。


37. 为该逻辑表达式作化简:Y=A'BC+ABC'+ABC+AB'C+AB'C'('表示取非运算)

利用卡诺图化简:Y=A+BC


38. 某IP有支持3种op操作:WRITE/READ/NOP,其中这个IP 40%是处于读的状态,40%是处于写状态,20%左右是处于NOP状态,请写出constraint(sv代码)

答案:这是一道验证的手撕题,涉及到的知识是生成随机变量,然后给随机变量下随机生成的权重约束即可。目的是随机生成三个OP code,按照比例4:4:2的方式送给slave。

randc int OP_code;
constraint OP_dist{OP_code dist {0:=40,1:=40,2:=20};
}

参考笔者其他博客:验证基础-随机约束与随机控制_地址不互相重叠 约束 sv_不吃葱的酸菜鱼的博客-CSDN博客


39. Please provide Linux shell command(s)to find all files which contains string "Montage" or "montage" in the/home/user.

答案:grep -rli 'Montage\|montage' /home/user/

- `grep` 命令用于在文件中搜索指定的模式。 - `-r` 选项用于在指定的目录和其子目录中递归搜索。 - `-l` 选项用于只输出包含模式的文件名,而不是匹配的行。(字母L的小写,如果没有这个,则会输出所有含有字段的文件名及对应行) - `-i` 选项用于忽略大小写。 - `'montage'` 是要搜索的模式。 - `/home/user/` 是要搜索的目录。


40. What's the Non_Blocking assignment(b <= a)and Blocking assignment(b = a)?

阻塞赋值(blocking assignment)使用等号(“=”)进行赋值,例如:`a = b;` 表示把变量 b 的值赋给变量 a,执行这条语句时,程序会等待赋值操作完成后再执行下一条语句。阻塞赋值是一种同步的赋值方式,它会按照顺序执行每个赋值语句,并且在当前赋值语句执行完毕之前,不会执行下一个赋值语句。

非阻塞赋值(non-blocking assignment)使用“<=”进行赋值,例如:`a <= b;` 表示把变量 b 的值赋给变量 a,执行这条语句时,程序不会等待赋值操作完成后再执行下一条语句,而是直接执行下一条语句。非阻塞赋值是一种异步的赋值方式,它可以同时执行多个赋值语句,每个语句的执行时间是不确定的。非阻塞赋值的执行顺序是无关紧要的,它只保证了所有赋值语句在一个时钟周期内都执行完毕。


41. Please use verilog write an 8bits asynchronous reset D flip-flop(8bits低有效异步复位的D触发器)

module ff_8bits(input         clk    ,input         rstn   ,input  [7:0]  D      , output [7:0]  Q
);
reg [7:0] Q_reg;
always @(posedge clk or negedge rstn)beginif(!rstn)beginQ_reg <= 8'd0;endelse beginQ_reg <= D;end
end
assign Q = Q_reg;
endmodule

42. What's the difference between "task" and "function" in Verilog?

task:

任务能调用另一个任务,也能调用另一个函数;
任务可以在非0仿真时刻执行;
任务可以包含延迟、时间或者时序控制声明语句;
任务可以没有或者有多个输入(input)、输出(output)和双向(inout)变量;
任务不返回任何值,任务可以通过输出(output)或者双向(inout)变量传递多个值;
任务的调用是通过一条单独的任务调用语句实现;
任务调用只能出现在过程块中;
任务的执行可以由disable语句进行中断。

function:

函数能调用另一个函数,但不能调用另一个任务;
函数总是在仿真时刻0就开始执行;
函数一定不能包含任何延迟、事件或者时序控制声明语句;
函数至少有一个输出变量,可以有多个输入变量;
函数只能返回一个值,函数不能有输出(output)、或者双向(inout)变量;
函数不能单独作为一条一句出现,它只能以语句的一部分的形式出现;
函数调用可以出现在过程块或者连续赋值语句中;
函数的执行不允许由disable语句进行中断。


43. Please use two methods to generate a 100MHz Clk signal in testbench,you can use verilog or system verilog

//method 1
always #5 clk = ~clk;
//method 2
initial beginforever #5 clk = ~clk;
end

44. What's the setup time and hold time in Synchronous circuit,and how to resolve if setup time was not met?

建立时间是指数据在寄存器采样之前,数据需要保持不变的时间

保持时间是指数据在寄存器采样之后,数据需要保持不变的时间

当出现了setup violation,可以通过如下方式解决:

a). 降低时钟频率;

b). 对critical path切分pipeline;

c). 用更好、更稳定的时钟;

d). 用采样速度更快的FF(让ck_to_q的时间变短)。


45. 请用下面CMOS组成反相器,与非门,或非门。

左边的为NMOS,右边的为PMOS,其实就是用NMOS、PMOS搭建反相器,与非门和或非门。

反相器:上拉PMOS,下拉NMOS。

与非门:上拉两个并行的PMOS,下拉两个串行的NMOS。

或非门:上拉两个串行的PMOS,下拉两个并行的NMOS。


46. What's the result of these function print A and print B?

`timescale  1ns/10psclass BasePacket;int A=1;int B=2;function void printA;$display ("BasePocket::A is %0d", A);endfunctionvirtual function void printB; $display ("BasePacket::B is %0d", B);endfunction
endclassclass My_Packet extends BasePacket;int A=3;int B=4;function void printA;$display("My_Pocket::A is %0d", A);endfunction virtual function void printB;$display("My_Pocket::B is %0d", B);endfunction
endclass module tb_sv();
BasePacket P1;
My_Packet P2;initial beginP1=new();P2=new();P1.printB;P1=P2;P1.printA;P1.printB;P2.printA;P2.printB;
end
endmodule

答案:验证题,涉及到的知识点有继承、虚方法、父类子类调用同名成员变量和方法的问题。

首先,定义了两个类class,父类BasePacket,子类My_packet继承自父类BasePacket。子类和父类里面都有A、B两个变量,以及printA和printB两个打印方法。其中printB是虚方法。接着开始声明两个类,以及创建了各自的变量new(),。

这道题涉及的知识点有点多,容我一一道来

虚方法(virtual function):

当不同的句柄类型指向同一个对象的时候,它们调用的函数或者变量可能结果会不一样。在父类句柄指向子类对象的时候,如果子类和父类都定义了一个同名的方法,那么这个父类句柄只能访问父类的该方法而不能访问子类的方法,而事实上我们把它指向一个子类的对象更希望的是调用函数的时候它也能调用子类的方法,要想这样做,可以用cast函数把父类的句柄类型转换成子类的句柄,但是如果每次都这么做会使得代码很冗余,还容易出错。
虚方法要解决的问题就是一个动态绑定,不管句柄类型如何,只要你指向的是子类对象,那么调用方法的时候即使有同名方法,也会调用子类中的方法。虚方法通过virtual声明,只需声明一次即可。注意虚方法解决的是方法的同名索引,不能索引成员变量,没有虚成员的说法。

步骤分析:

题目总共有五个pinrt函数,主要看这五个print函数的各自结果是什么:

第一个print:父类对象访问父类虚方法,输出B is 2。这个没什么歧义。

第二个print:将父类句柄指向子类对象,使用printA,由于printA不是虚方法,所以父类句柄只能访问父类的该方法而不能访问子类的方法,调用的printA是父类的printA,故输出A is 1。

第三个print:将父类句柄指向子类对象,使用printB,由于printB是虚方法,只要你指向的是子类对象,那么调用方法的时候即使有同名方法,也会调用子类中的方法。调用的是子类中的printB,故输出B is 4。

第四个print:子类继承父类,在父类和子类里,可以定义相同名称的成员变量和方法(形式参数和返回类型也应该相同),而在引用时,将按照句柄类型来确定作用域。 printA是子类的方法,子类直接调用printA,作用在子类的作用域,输出A is 3。

第五个print:和第四个print一致,输出B is 4。

vcs仿真结果如下与分析一致:


47. 一个好的验证流程可以在一定程度上保证验证的质量和效率,假设当你要验证一个DUT的时候。你会按照怎样的流程进行验证?请列出每个step并给出详细说明

以下是一个基本的DUT验证流程,包含了常见的步骤和建议:

1.确认验证需求和规范:确定DUT的验证需求,包括所需的输入、输出、时序等,并确定使用的验证规范(如UVM、OVM等)。
2.编写测试计划:编写测试计划,包括测试目标、测试场景、测试用例、测试环境等。
3.编写测试用例:根据测试计划编写测试用例,每个测试用例应当包含输入、输出、预期结果以及实际结果比较。
4.构建验证环境:构建DUT的验证环境,包括建立信号接口、创建仿真模型、设置仿真时钟、生成仿真数据等。
5.运行仿真:使用仿真器运行测试,对DUT进行功能验证、时序验证、边界条件验证等。
6.分析仿真结果:对仿真结果进行分析,检查实际结果与预期结果是否一致,识别故障点并进行debug。
7.确认验证覆盖率:通过评估测试用例的覆盖率,确认已经充分验证了DUT的功能。
8.优化验证:根据覆盖率评估结果,对测试计划、测试用例、验证环境等进行调整和优化,以提高验证效率和覆盖率。
9.验证通过:当DUT的验证结果满足设计规范和验证需求时,确认验证通过并准备进行后续流程,如集成测试、验证报告等。

总之,一个好的DUT验证流程应当具备规范、可重复、可扩展、高效的特点,能够充分覆盖DUT的功能和时序,并保证验证结果的准确性和可靠性。


48.如何用一个2选一的MUX和一个INV实现异或。

out = A'B+AB',异或逻辑


49.What are recovery and removal times?请描述recovery时间和removal时间的概念。

同步电路中,输入数据需要与时钟满足setup time和hold time才能进行数据的正常传输,防止亚稳态;

类似的,对于一个异步复位寄存器来说,置位和复位信号同样需要和时钟满足recovery time和removal time才能有效进行置位和复位操作

recovery time:恢复时间。撤销复位时,恢复到非复位状态的电平必须在时钟有效沿到来之前的一段时间到来,才能保证时钟能有效恢复到非复位状态,此段时间为recovery time。

removal time :撤销时间。撤销复位时,在时钟有效沿到来之后复位信号还需要保持的时间为撤销时间removal time。

comment:从定义可以看出,recovery time和removal time都指的是撤销复位或者置位而言的,即系统或者设备将要work起来,并不是指复位和撤销置位(系统或者设备都要停止work了,还管它亚稳态作甚!)


50.The clock cycle is T, the clock toregister output delay is Tco, setup and hold time of a register are Tsetup andThold, what's the Tdelay constrain?时钟周期为T,时钟到寄存器输出延时Tco,寄存器建立时间Tsetup,寄存器保持时间Thold。请描述逻辑延时Tdelay的建立和保持时间要求(不考虑时钟延时)。

STA分析。

setup分析:Tco+Tdelay+Tsetup<T

hold分析:Tco+Tdelay>Thold


51.What's the difference between a LATCH anda DFF?请描述LATCH和DFF的概念和区别?

1、latch由电平触发,非同步控制。在使能信号有效时latch相当于通路,在使能信号无效时latch保持输出状态。DFF由时钟沿触发,同步控制。

2、latch容易产生毛刺(glitch),DFF则不易产生毛刺。

3、如果使用门电路来搭建latch和DFF,则latch消耗的门资源比DFF要少,这是latch比DFF优越的地方。所以,在ASIC中使用latch的集成度比DFF高,但在FPGA中正好相反,因为FPGA中没有标准的latch单元,但有DFF单元,一个LATCH需要多个LE才能实现。

4、latch将静态时序分析变得极为复杂。


52.What's the difference between asynchronous and an asynchronous circuit?同步电路和异步电路的区别是什么?

同步电路和异步电路的区别在于电路触发是否与驱动时钟同步,从行为上讲,就是所有电路是否在同一时钟沿下同步地处理数据。


53.What is IR-drop, in which area will beeasy to have IR-drop problem ?什么是IR-drop,在那些地方容易出IR-drop问题?

IR-drop是指由于电阻对电流的阻碍而产生的电压下降。在一个电路中,当有大量电流通过一条线路或电源时,电路的电阻会导致该线路或电源的电压下降,这种现象就是IR-drop。

IR-drop问题通常在芯片的电源和地电路中出现,特别是在大型数字电路中,如处理器和存储器。这些电路中的大量晶体管和连线会导致电阻增加,从而导致IR-drop问题。此外,在高速设计中,电源和地电路中的电感和电容也会导致电压下降,并增加IR-drop问题的发生。


54.How do you synchronize an asynchronousinput?异步信号如何进行同步?

单bit:从慢到快,采用两级触发器,减少可能出现的亚稳态影响;从快到慢,脉冲展宽

多bit:异步FIFO、DMUX、Dual RAM;寄存器锁存,握手协议,有效使能后同步;


55.There is an X present in my gate-levelsimulation due to a timing violation. How do you identify the source of it andthe type of violation? 如果在后仿中波形中出现了X,如何去定位,且可能是什么问题?

1、仿真pattern自身原因,比如程序使用了未初始化(写)的存储区,读出红X的数据并使用,导致红X传播;

2、仿真环境或者平台原因,模型或者整chip顶层PIN脚的信号没有驱动,是高阻Z态,进入数字逻辑内部变成红X传播;

3、DFF、gating cell等由于setup/hold不满足,或者rst信号的recovery/removal不满足,或者异步逻辑同步的第一拍DFF,产生红X引起传播;

4、不带复位端的DFF引起X传播

X态也就是亚稳态,他是会传播的:亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。


56.Please describe the ECO flow(includingpre-mask ECO and post-mask ECO).请描述ECO流程,包括pre-mask和post-mask ECO。

ECO(Engineering Change Order)流程是在芯片设计完成后,发现问题需要修正时所采取的一种流程。这个过程主要分为两个阶段:pre-mask ECO 和 post-mask ECO。

  1. pre-mask ECO:pre-mask ECO 是在设计完成后芯片还未进入工艺制造前所进行的修改。该流程的主要目的是解决设计中存在的问题,如电路逻辑不正确、功耗太高或者时序不满足等问题。在 pre-mask ECO 过程中,设计团队通常使用 RTL 仿真验证 EC0 的修复效果,并进行网表级仿真,以确保修复不会引入新问题。

  1. post-mask ECO:如果在芯片生产后还存在问题,则需要进行 post-mask ECO。这个过程的主要目的是在芯片生产过程中发现的问题进行修复。在 post-mask ECO 过程中,设计团队需要将已制作的芯片样品反馈回来进行修改,从而修复设计中的问题。通常,post-mask ECO 采用物理层面上的修改来解决问题,例如通过引入金属连接或者改变物理结构等方式进行修复。

总体来说,ECO 流程是在芯片设计完成后所进行的一种修复流程。其中 pre-mask ECO 是在芯片制造前进行的修改,而 post-mask ECO 是在芯片生产后进行的修改,通过这两个过程来确保芯片设计的正确性和完整性。


57.What are various techniques to resolve routing congestion?如何解决routing congestion问题?

Routing congestion是指在布线时出现的信号线相互干扰或布线资源不足的情况,导致某些信号线无法被成功布线。以下是几种解决routing congestion问题的方法:

1.增加布线资源:可以增加布线资源,如增加线路的层数、增加线宽等。但这种方法可能会导致板子变得更大,成本更高。

2.降低信号速率:减少信号的传输速率可以减少信号线之间的干扰。但是这种方法可能会影响电路的性能和速度。

3.重分配布局:重新安排电路的布局,以减少布线资源的使用。这可以通过重新设计PCB布局来实现。

4.使用优化的布线算法:使用能够处理routing congestion问题的优化布线算法,例如Maze routing算法和Lee-Moore算法等。这些算法会优化路径选择和布线资源的使用,从而减少routing congestion的发生。

5.使用阻抗匹配:对布线电路进行阻抗匹配,使其更加稳定和可靠,从而减少信号线之间的干扰。这种方法需要专业的阻抗匹配工具和技术。


58.Please describe the rtl with INV, AND, OR andDFF. 请用与、或、非门和寄存器画出代码所描述的电路。

always@(posedgeclk or negedge rst_n)
beginif(!rst_n) begincnt<= 2'd0;endelse if(cnt_en) beginif(ina)cnt <= cnt+2'd1;endelse begincnt <=2'd0;end
end

异步复位寄存器。代码中涉及到了加法和选择,先画一个全加器的门级电路。全加器涉及到异或,所以再画一个异或电路。最后根据代码中的mux情况,把全加器和mux连起来。(tips:笔者画图的时候忘记不能用mux了,可以用与门和或门实现二选一mux)

59.What are the different sources of powerconsumption? Please describe different techniques used to reduce powerconsumption.芯片的功耗分为哪种类型,请描述降低功耗的方式。

功耗分为动态功耗和静态功耗。

动态功耗公式为:P_switch=1/2CV^2f。

降低动态功耗

(1)使用门控时钟
降低活动因子是降低功耗的非常有效的办法
(2) 减小毛刺
毛刺会增大活动因子,有可能使门的活动因子增加到1以上。
(3)减小负载电容
电容来自于电路中的连线以及晶体管。缩短连线长度,良好的平面规划和布局可以使连线电容减小。选择较小的逻辑级数以及较小的晶体管可以减小器件的翻转电容。
(4)电压域
动态功耗与电压有平方的关系,降低电源电压可以显著降低功耗。将芯片划分成多个电压域,每个电压域可以根据特定电路的需要进行优化。例如,对于存储器采用高电源电压来保证存储单元的稳定性,对于处理器采用中等大小的电压,对运行速度较低的IO外围电路采用低电压。解决跨电压域信号传输的方法是使用电平转换器。
(5)动态电压调整DVS
CPU处理不同的任务有不同的性能要求。对于低性能要求的任务,可以使时钟频率降低到足以按预定时间完成任务的最低值,然后使电压降低到该频率下工作所需要的最小值就可以节省大量的能耗。
(6)降低频率
动态功耗正比于频率,芯片只应当工作在所要求的频率下,不能比所要求的还要快。由前面小结可以,降低频率还可以采用较低的电源电压,大大降低功耗。
(7)谐振电路
谐振电路通过使能量在储能元件如电容或电感之间来回传送而不是将能量泄放到来减小翻转功耗。

降低静态功耗:

(1)电源门控
减小静态电流最容易的方法就是关断休眠模块的电源。这一技术称为电源门控。
(2) 多种阈值电压和栅氧厚度
有选择的应用多种阈值电压可以使具有低Vt晶体管保持性能而又使具有高Vt晶体管的其他路径减少泄漏。
大多数纳米工艺的逻辑管采用薄栅氧,IO晶体管采用厚的多的栅氧以使它们能够承受较大的电压。
(3)可变阈值电压
通过体效应可以调制阈值电压。在休眠模式下应用一个反向体偏置减小泄漏。在工作模式下利用一个正向体偏置来提高性能。
(4)输入向量控制
由前面可知,堆叠效应和输入排序会引起亚阈值泄漏和栅泄漏的变化。因此,一个逻辑模块的泄漏与门的输入有关。输入向量控制是当模块置于休眠模式时,应用一组输入图案使模块的泄漏最小。这些输入向量可以通过寄存器上的置位/复位输入端或通过扫描链加入。

参考博客:静态功耗与动态功耗_yuzhong_沐阳的博客-CSDN博客


60.Implement below RTL logic with DFF andNOR/NAND/INV cells:

always@(posedge clk or negedge rst_n) beginif(!rst_n)C<=1'b0;else if (B)C<=~A;else;
end    

不考虑复位信号,C的表达式可以写为:C = B'C+BA',进而得到电路图。


61.什么是亚稳态?如何防止亚稳态传播或减少亚稳态概率?

亚稳态是指触发器无法在某个规定时间段内达到一个可确认的状态。当一个触发器进入亚稳态时,既无法预测该单元的输出电平,也无法预测何时输出才能稳定在某个正确的电平上。在这个稳定期间,触发器输出一些中间级电平,或者可能处于振荡状态,并且这种无用的输出电平可以沿信号通道上的各个触发器级联式传播下去。

亚稳态具有如下特点:

1)亚稳态违背了时序,无法在规定时间成为稳态。

2)亚稳态输出不确定,但是会传给后一级触发器。这会导致后级电路出错。所以亚稳态危害很大。

3)亚稳态最终都会稳定下来,但需要较长的时间。

Tsu为建立时间:是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被稳定的打入触发器,Tsu就是指这个最小的稳定时间。

Th为保持时间:是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被稳定的打入触发器,Th就是指这个最小的保持时间。

Tco为输出时间:是触发器在clk时钟上升沿到来之后需多长的时间才能稳定输出的的时间。

Tmet:亚稳态输出恢复到稳定状态所需的超出Tco的额外时间称为稳定时间,即经过这段时间,亚稳态变成稳态了。

如果数据传输中不满足触发器的Tsu和Th,就会造成数据不稳定,从而导致亚稳态。

如何避免亚稳态:

异步信号、跨时钟域信号都是亚稳态高发区。

对于异步信号,一般采用多级同步器,可以避免亚稳态的发生。

对于跨时钟域信号,通常有4 种方法跨时钟域处理方法

(1)打两拍,两级触发器同步—单bit数据跨时钟域处理,适用于慢时钟域数据到快时钟域;

(2)异步FIFO—多bit数据跨时钟域处理;

(3)格雷码转换;

(4)加握手信号(guide信号)。


62.翻译以下段落,并根据描述画出I2C接口的start和stop时序:

The I2C bus employs two signals, SDA(data)and SCL (clock), to communicate between integrated circuits in a system.Thebus transfers data serially, one bit at a time. The 8-bit address anddatabytes are transferred with the most-significant bit (MSB) first. Inaddition, each byte transferred on the bus is acknowledged by the receivingdevice withan acknowledge bit. Each transfer operation begins with the masterdevicedriving a start condition on the bus and ends with the master devicedriving astop condition on the bus. The bus uses transitions on the data pin(SDA) whilethe clock is at logic high to indicate start and stop conditions. Ahigh-to-lowtransition on the SDA signal indicates a start, and a low-to-hightransitionindicates a stop. Normal data-bit transitions must occur within thelow time ofthe clock period.

I2C总线采用两个信号,即SDA(数据)和SCL(时钟),在系统中的集成电路之间进行通信。该总线逐位串行传输数据。8位地址和数据字节以最高位(MSB)优先的顺序传输。此外,总线上传输的每个字节都由接收设备用一个确认位进行确认。每次传输操作都是由主设备在总线上发送起始条件并以主设备在总线上发送停止条件结束。总线在时钟处于逻辑高电平时使用数据引脚(SDA)上的转换来表示起始和停止条件。SDA信号上的从高到低的转换表示起始,而从低到高的转换表示停止。正常的数据位转换必须在时钟周期的低电平期间内发生。


63.The following schematic shows datapath operators going into a register. From power perspective, figureout the inefficient part and draw a new schematic with your fix.

低功耗设计,加一个门控时钟:


64.Suppose there is a logfile

The file's content is like:

<MESSAGE LEVEL>_<MESSAGE_TYPE>_<MESSAGE_ CONTENT>

<MESSAGE_ LEVEL> should be "ERROR" or"WARNING" or "INFO"

<MESSAGE_TYPE> should be "TYPE" plusan integer number.

Please write a function named as printErrors to parse the log, filter out required information and print some messages. Given astring logPath representing the log file path.

The requirements are:

a. The output messages should be ERROR level and their MESSAGE_CONTENT should contain “NVIDIA_SOC”

b. Sorted the output order by MODULE_TYPE number

c. Use any script language you like.

###

Example 1:

log file.

ERROR_TYPE1_NVIDIA

INFO_TYPE1_NVIDIA SOC

ERROR_ TYPE4_THIS_IS_NVIDIA_SOC

WARNING_TYPE2_SOC

ERROR_TYPE1_SOC

ERROR_TYPE1_NVIDIA_SOC_TEAM

ERROR_TYPE4_NVIDIA_SOC

ERROR_TYPE12_NVIDIA_SOC

Example 2:

log file:

ERROR_TYPE1_NVIDIA

ERROR_TYPE12_NVIDIA_SOC

ERROR_TYPE1_Nvidia_soc

INFO_TYPE2_NVIDIA_SOC TEAM

ERROR TYPE12 NVIDIA SOC

###

Please provide your answer in the following editor


65.Gate level logic netlist_ais optimized to netlist_b in back-end flow. And they are checked by formalcheck tool to prove whether they are functional equivalence. Please answer belowquestions.

1.What is the concept of combinational and sequential logic?Please classify A/B/C/D cells in below netlist_a schematic, which belong to combinational logic and which belongs to sequential logic?

①:

组合逻辑输出仅依赖于输入,而与电路的先前状态无关。

时序逻辑输出不仅取决于输入,还取决于电路的先前状态。

②:

A是时序逻辑,BCD是组合逻辑。

2. If the value vector 110 is applied to the left three flops D pin After 1 cycle what is the D pin value of the reg_d in netlist_a/netlist_b?

netlist_a:输出1

netlist_b:输出0

3. Please estimate if above netlists are function equivalent or not according to the netlist schematics and explain why?

不等效,结果都不一样。


66. 3-stages pipelinecircuit shown as below.

The clock period is 0.9

The clock uncertainty is 0.1

The cell delay for F1/F2/F3 from CP-> Q are 0.15

The library setup require time for F1/F2/F3 are 0.1

1. Please calculate the setup slack between F1 and F2

答案:setup 时序分析公式如下

clk_latency + clk_pathF1_delay + ck_to_q + logic_delay < clk_period+clk_latency + clk_pathF2_delay - dff_set_up - clk_uncertainty

1.3+0.6+0.15+0.8<0.9+1.3+0.5-0.1-0.1

2.85<2.5

time slack = - 0.35ns

2. Please describe what's clock skew and suggest how to fix the setup violation between F1 and F2 with clock skew

clock skew就是同一个时钟源到不同寄存器中间的时间差,也就是上面的:

clk_pathF2_delay-clk_pathF1_delay

上一题中的clock skew = -0.1

从clock skew的角度出发,修复时序违例,可以在后一级时钟的时钟路径上加buffer,把clk_pathF2_delay增大。

3. Please re calculate the slack betweenF2 and F3 after the setup violation between F1 and F2 are fixed to 0

修复了时序为例后,clk_pathF2_delay=0.85ns。用第一题同样的公式可以计算出F2和F3的setup time slack:

clk_latency + clk_pathF2_delay + ck_to_q + logic_delay < clk_period+clk_latency + clk_pathF3_delay - dff_set_up - clk_uncertainty

1.3+0.85+0.15+0.1<0.9+1.3+0.5-0.1-0.1

2.4<2.5

time slack = 0.1ns


67.Please use NAND2 gatesto create new logic signal as below: (Use as less gates as possible) New_ logic= ECO_SELECT? Original_logic & mask: original logic;

答案:可以把上面的逻辑表达式化为加法形式。

上面的公式太复杂,用简单字母表示:

Y=A?B&C:B=ABC + A'B=B(AC+A')=B(A'+C)=B(AC')'

C接一个与非门得到C'。C'和A接一个与非门得到(AC')'。B和(AC')'接两个与非门得到B(AC')',所以总共需要四个与非门。


68.Design a sequence(10100) detector. The logic with single bit input and single bit output. When detecting input bit with the sequence of 10100 output pulse with one cycle of 1'b1,otherwise output keeps 1'b0. (No need to write RTL code, just provide a schematic diagram or a state machine flow chart.)

画序列检测的状态转移图。S5状态输出1,其他情况输出0.


69.如下所示assertion,请问在图示波形中哪个时钟可以判定为success?

答案:

disable iff语句可以用来在某个条件下暂时禁用一个断言。

EN信号高电平有效,等到A上升沿的时候,其前一个周期(~B)成立,等待0个周期,(B&&~C)成立,等待1个周期;直到D为1的过程中,(B&&C)语句一直成立;等待1个周期,B成立。

所以综上所述,第15个时钟会判定为success。

参考博客:systemVerilog Assertion (SVA)断言语法_OnePlusZero的博客-CSDN博客


70.有一个电路模块M,其功能如下图。

假设只有如下器件:

请用上述器件搭建实现该功能的电路。

数字在2,3,7,5,4,0循环,用二进制表示就是:010,011,111,101,100,000,很容易发现相邻两个数字的变化只有1bit,进而联想到这是格雷码。类似格雷码,但又有所区别,因为格雷码从010到下一位是110,这里是011,所以需要做个判断。具体实现就是计数器从2到3的时候,输出结果右移一位,计数器到7的时候,下一周期转到0。再从2开始计时。

题目出的不好,这样子没规律搭电路很费时,又不知道有啥意义,最后还给了每个门的时间,又没给时钟周期,STA分析都做不了。

或者有人发现有规律的话,在评论区补充,我修改一下。


71.请回答以下问题:

(1)请简单解释时钟的skew和jitter的概念

Clock skew是一个信号时钟沿着同一个时钟网络到达源寄存器和目标寄存器的时间差。

Clock jitter是由于晶振不稳定导致的时钟抖动,不可避免。

(2)请描述可测性设计(DFT:design for test)与验证的区别是什么

可测性设计是指在设计阶段考虑测试的策略和工具,以确保芯片可以被有效地测试和诊断。可测性设计的目标是设计一个易于测试和诊断的芯片,以便在生产和使用过程中可以快速、准确地检测故障并进行修复。可测性设计包括设计布线、设计扫描链、测试点的选择等等。

验证则是验证设计是否符合规格说明书和要求。验证的目的是确保设计满足其预期的功能和性能,并且在各种情况下都能正常工作。验证过程通常使用仿真、验证工具和硬件测试进行。

简而言之,DFT旨在使芯片易于测试和诊断,而验证则旨在验证设计是否符合规格说明书和要求。


72.下图电路在同一时钟域中,实现的功能是在SEL0与SEL1分别为0和1时,将DATA0加DATA1的结果传给REG输入端。

现需要降低该电路的功耗,请使用常见的逻辑单元,在不改变上述电路功能的原则下修改,画出修改后的电路图。

一个二选一MUX需要用4个与非门实现:

一个与门用两个与非门实现,一个非门用一个与非门实现。

优化后的电路实现了相同的功能,相比较两个MUX(八个与非门),这里只用了五个与非门,博主没有细想,可能还有优化空间,欢迎评论区讨论。


六、逻辑推理题

1. p先生、Q先生都具有足够的推理能力,而且都不说谎,这天,他们正在接受推理面试,他们知道桌子的抽屉里有16张扑克牌:

红桃A、Q、4

黑桃J、8、4、2、7、3

草花K、Q、5、4、6

方块A、Q

约翰教授从这16张牌中挑出一张牌来,并把这张牌的点数告诉p先生,把这张牌的花色告诉Q先生,这时,约翰教授问P先生和Q先生:你们能从已知的点数或花色中推知这张牌是什么牌吗?

P先生:“我不知道这张牌。

Q先生:“我知道你不知道这张牌”

P先生:“现在我知道这张牌了。”

Q先生:“我也知道了”

请问,这张牌是什么牌,并说明理由。

答案:红桃4。

有16张牌,P和Q先生都不会说谎,P知道牌的点数,但却说自己不知道这张牌,意味着这张牌的点数不是16张牌中唯一的那张,即可以排除:黑桃J、8、2、7、3,草花K、5、6这些唯一点数的牌,可以确定牌的点数为:A、Q、4

Q先生知道牌的花色,就知道P先生不知道这张牌,意味着Q先生知道的花色中出现的点数在其他花色里都出现过,即没有唯一点数的牌,因此可以确定Q先生知道的花色为:红桃和方块。此时可能的牌只剩下:

红桃A、Q、4

方块A、Q

但此时P先生却说自己知道这张牌是什么了,那么只能是红桃4,因为只有在P先生知道点数为4的情况下,才能唯一确定花色为红桃。


2. There is a triangle and on it there are 3 ants one on each corner and are free to move along sides of triangle, what is probability that they will collide?( )

A.25%
B.50%
C.75%
D.33.3%

答案:C。碰撞的概率=1-不碰撞的概率,三只蚂蚁不发生碰撞就是都朝顺时针或者逆时针走,有两种可能。三只蚂蚁在三角形的三个角,各有往左、往右两种选择,故总可能是2^3=8种,所以碰撞的概率是1-2/8=0.75,选C。


3.有三堆乒乓球,每堆分别有4个,5个,6个,你和小明轮流去拿乒乓球,每次只能在同堆中取1-3个球,最后一次拿球的人失败。你先取,请给出一种必胜策略,并证明。

4个一堆的,先取直接取3个,这样小明最少取1个,必胜

5个一堆的,无论取几个必输。取1个,小明取3个;取2个,小明取2个;取3个,小明取1个。必输

6个一堆的,需要总结规律。关键点就在4个球,无论前面怎么取,都要使得在对方取完球之后剩下的球的个数在[2-4]之间,则能必胜。所以6个一堆的,只要取1个,那么小明无论怎么取都会在[2-4]之间,轮到我们取,取到只剩1个球即可。

三局两胜,赢了。

七、python、C语言、脚本编程题

1. 请用C语言写一个程序,计算输入字符串中每个字母的个数(字符串只包括小写字母)。举例如输入字符串为:aaaaabbcccefff,则结果打印为:5a2b3c1e3f。(联发科2022提前批)

答案:C语言编程题,需要记得一些C语言的基本语法,熟悉一下指针和数组,这类题目一般都不会太难。

#include <stdio.h>void main(){char str[100] = {0};int count[26] = {0};int i = 0;int count_index;scanf("%s", str);while(str[i] != '\0'){count_index = (str[i]- 'a');count[count_index] = count[count_index] + 1;i++;}for(i=0;i<26;i++){if(count[i]!=0){printf("%d%c",count[i],'a'+i);}}printf("\n");
}

输出结果:


2. [python]请使用种您熟悉的语言(C, Java, Python)定义二叉树的节点,并使用深度优先搜索,获取一个给定二叉树的最大深度,返回深度值。(联发科2022提前批)(同时也是Leecode easy 题)

比如,给定二叉树[3,9,20, null,null,15,7],

3

/ \

9 20

/ \

15 7

返回它的最大深度3.

答案:定义一个二叉树的结点结构体TreeNode,然后用递归的方式去访问二叉树的所有叶子节点,退出条件为not root,即root = None,即不存在的节点,此时not root 为真,退出该次递归函数。

class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution:def maxDepth(self, root):length = 0def dfs(root, d):nonlocal lengthif not root:returnlength = max(length,d)dfs(root.left, d+1)dfs(root.right, d+1)dfs(root, 1)return lengthif __name__ == '__main__':# 定义题中所给的树root = TreeNode(3)root.left = TreeNode(9)node = TreeNode(20)root.right = nodenode.left = TreeNode(15)node.right = TreeNode(7)s = Solution()  # 例化类,才能调用类中的类函数print(s.maxDepth(root))

3. [python]给你个字符串表达式s,请使用一种您熟悉的语言(C Java, Python)实现一个基本计算器来计算并返回它的值(运算只包含+-和括号)。(联发科2022提前批)

示例1:

输入:s=“1+1”

输出:2

示例2:

输入:s=“2-1+2”

输出:3

示例3:

输入:s=“2-1+2”

输出:3

示例3:

输入:s=“(1+(4+5+2)-3)+(6+8)”

输出:23

代码:

使用栈存储当前括号外的结果和符号,并使用递归处理括号内的表达式。在循环中分别处理数字、加号、减号和括号。如果遇到数字,则计算当前数字;如果遇到加号或减号,则将当前数字和符号推入栈中,并将当前数字和符号重置;如果遇到左括号,则递归处理括号内的表达式,并返回括号内的计算结果和括号结束的位置;如果遇到右括号,则将当前数字和符号推入栈中,并返回括号外的计算结果以及右括号结束的位置。

最后,我们将栈中的所有数字和符号相加,就可以得到整个表达式的计算结果。

def calculate(s: str) -> int:num = 0     # 记录当前数字sign = 1    # 记录当前符号stack = []  # 用来存储当前括号外的结果和符号res = 0     # 用来记录最终结果for i in range(len(s)):if s[i].isdigit():num = num * 10 + int(s[i])elif s[i] == '+':res += num * signnum = 0sign = 1elif s[i] == '-':res += num * signnum = 0sign = -1elif s[i] == '(':stack.append(res)    # 先存结果,再存数字stack.append(sign)    res = 0sign = 1elif s[i] == ')':res += num * signnum = 0res *= stack.pop()res += stack.pop()return res + num * signif __name__ == '__main__':s = "(1+(4+5+2)-3)+(6+8)"print(calculate(s))

输出结果:23

4. [Python]请用python写一段程序,用尽量少的语句实现下面功能:定义一个函数,判断给定目录下是否存在result.log文件,如果存在,则从result.log文件中找出所有包含fail字样(不区分大小写)的行,并将这些内容保存到一个名为fail.log的文件中,如果文件不存在则抛出异常()(联发科2022提前批)

代码:使用了os模块中的join()函数来拼接目录路径和文件名,open()函数以只读模式打开result.log,并以写入模式打开fail.log文件,lower()函数将每行字符串中的字母转为小写字母,writelines()函数将包含fail字样的行写入fail.log文件中。程序还使用了异常处理机制来处理找不到result.log文件的情况。

import osdef find_fail_lines(dir_path):try:with open(os.path.join(dir_path, 'result.log'), 'r') as f1, open(os.path.join(dir_path, 'fail.log'), 'w') as f2:fail_lines = [line for line in f1 if 'fail' in line.lower()]f2.writelines(fail_lines)print('Successfully saved fail lines to fail.log')except FileNotFoundError:print('result.log file not found in the directory')# example usage
find_fail_lines('E:/modelsim_project/file_handle/')

5.请写段Python代码,打开一个文件,扫描每行,如果该匹配到“biren01”,“biren02”,……“biren99”则以行号Key,将匹配到的“birenxx”保存下来(2022壁仞)

要写这段代码要知道,在 Python 中,可以使用 enumerate 函数来同时获取文件的行号和内容,例如:

with open('file.txt') as file:for i, line in enumerate(file, 1):print(f"Line {i}: {line}",end="")

其中变量i为行的行号,变量line存储一整行,结果展示如下:

代码:

keywords = {}  # 创建一个空字典,用于保存匹配到的关键字和行号
with open('file.txt') as file:for i, line in enumerate(file, 1):for j in range(1, 100):keyword = f'biren{j:02d}'  # 生成关键字,如 'biren01'、'biren02' 等if keyword in line:if i not in keywords:  # 如果当前行号还没有在字典中出现过,则添加新的键值对keywords[i] = [keyword]else:  # 如果当前行号已经在字典中存在,则将匹配到的关键字添加到已有的列表中keywords[i].append(keyword)
for key, value in keywords.items():print(f"行号 {key},匹配到的字符为:{value}")

第五行f'...' 表示一个格式化字符串,其中 {j:02d} 是一个占位符,表示将 j 的值格式化为两位数字,并且如果 j 不足两位,则在前面补零。这里的 d 表示将 j 格式化为十进制整数。因此,对于 j=1,生成的字符串就是 'biren01',代码输出结果如下:


6. 用C语言统计100~1000里面共有多少个素数,并且把所有素数打印出来。素数又称质数。所谓素数是指除了1和它本身以外,不能被任意整数整除的数.

写一个判断是否是素数的函数,返回True or False,做个循环,对i=2到i = 根号num范围进行遍历,如果num对i取模等于零,代表i是num的因数。

#include <stdio.h>int is_prime(int num) {if (num <= 1) {return 0;}for (int i = 2; i * i <= num; i++) {if (num % i == 0) {return 0;}}return 1;
}int main() {int count = 0;printf("素数有:");for (int i = 100; i <= 1000; i++) {if (is_prime(i)) {count++;}}printf("共有%d个素数\n", count);return 0;
}

7. [python]现在有两个数组a=[1,1,2,4,5],b=[1, 1,2,3,7],请用python/perl实现,找到这两个数组的交集和并集

这里直接用python的集合变量set来做。

a = [1,1,2,4,5]
b = [1,1,2,3,7]
intersection_A_B = set(a)-(set(a)-set(b))
union_A_B = set(a).union(set(b))
print(intersection_A_B)
print(union_A_B)

代码结果:


8. Please use any a programming language to locate the largest element in the matrix(矩阵)and print largest value,row and column of this largest value.

Matrix: matrix [3][4]={{0,1,2,3},{8,7,6,5},{-5,9,-3,4}}

#include <stdio.h>
int main(void){int matrix[3][4] = {{0,1,2,3},{8,7,6,5},{-5,9,-3,4}};int row,column,max;max = 0;for (int i =0;i<=2;i++){for(int j=0;j<=3;j++){if(matrix[i][j]>=max){row = i;column = j;max = matrix[i][j];}}}printf("max value is:%d,the row is:%d,the column is:%d\n",matrix[row][column],row+1,column+1);
}

数字IC笔试题---千题解,量大管饱,图文并茂相关推荐

  1. 数字IC笔试题,大疆校招16题(仅供参考)

    \\\插播一条: 自己在今年整理一套单片机单片机相关论文800余篇 论文制作思维导图 原理图+源代码+开题报告+正文+外文资料 想要的同学私信找我. 数字IC笔试题,大疆校招16题(仅供参考) 1.异 ...

  2. 禾赛科技2021数字IC笔试题

    笔试题A 1道单选,6道问答 单选1:八进制数657的16进制表示是什么? (1AF) 问答: 使用1个或非门搭建非门,有几种方法? 使用二输入MUX搭建与非门 化简逻辑表达式out=A+B((AB+ ...

  3. 艾为数字ic面试题_数字IC笔试题(2017年)

    转眼之间又到了一年一度的校招时间,回想去年这个时候,真的是经历了长达数月的兵荒马乱.现在也入职几个月了,想给去年的自己找工作做个总结,也供今年校招的童鞋做一些参考. 废话不多说,结合多家的笔试题,变来 ...

  4. 南芯半导体数字IC笔试题

    笔试题型 总共八道题,其中前四道为5分的画图题和简答题,后四道为20分的设计题和简答题,题目较为基础,难度不大. (1)跨时钟域的问题 (2)竞争与冒险 (3)数字IC的素质与技能 (4)消除毛刺电路 ...

  5. 数字IC笔试题(2)——降低动态IR DROP

    (华为海思芯片多选)降低动态IR DROP的方法包括()(注意:题目中的IP DROP实际应该是IR DROP) A. 降低工作频率: B. 增加接入的电源地IO数量: C. 增加LVT cell的比 ...

  6. 商汤 / 澜起科技数字IC笔试题

    文章目录 商汤 澜起 商汤 1.芯片中降低功耗的方法有哪些,各有什么优缺点?   1.系统级的低功耗设计方法     (1)多电压设计:压与功耗有着密切的联系.因此功耗的降低可以考虑使用低一点的电压. ...

  7. 华为2022数字芯片笔试题

    单选 1.ASIC开发流程中,如下环节的先后顺序是? A. RTL-> Synthesis->P&R B. Synthesis->P&R->RTL C. Syn ...

  8. 数字IC笔面基础之触发器——DFF、TFF、JKFF(附Verilog实现)

    数字IC笔面基础之触发器 写在前面的话 关键点: D触发器 基本正边沿触发D触发器 异步复位D触发器 带清零和置一的D触发器 T触发器 JK触发器 总结 写在前面的话 触发器是数字IC最基础的知识点, ...

  9. 数字IC笔面基础,动不动就手撕——奇偶分频器(分频器简介和Verilog实现)

    分频器简介和Verilog实现 写在前面的话 偶数分频 级联触发器实现2^n偶数分频 计数器实现2n偶数分频 奇数分频(常考) 奇数分频,占空比50%(最常考,要求熟练掌握一种) OR操作,2N+1 ...

最新文章

  1. windows10 下 cuda安装
  2. 【转摘】PYTHON 正则表达式
  3. Spinnaker:云原生多云环境持续部署的未来这样玩!
  4. Smart Paster...great tool to paste large strings into Vs.net
  5. 【Pytorch神经网络理论篇】 15 过拟合问题的优化技巧(二):Dropout()方法
  6. 简单参数让谷歌Chrome浏览器单进程运行
  7. 1046 划拳 (15 分)—PAT (Basic Level) Practice (中文)
  8. 第一个Eureka Service
  9. codesmith执行时提示“调用的目标发生了异常”的处理过程经验。
  10. 关于2006年上半年网工试考一览
  11. java recv failed,java.sql.SQLException: I/O Error: Software caused connection abort: recv failed
  12. html5游戏生成apk,html5 如何打包成apk
  13. 火车票_ _购买卧铺下铺的总结
  14. 【开源教程2】疯壳·开源编队无人机-硬件资源简介
  15. 视觉伺服控制工具Visual Servoing Platform---VISP(7)----vpServo这个看懂了就会用VISP了,很简单
  16. Linux嵌入式设备U盘挂载和拷贝文件
  17. 从春招到秋招,一个本科生的求职之路
  18. donate.ouyangsong.com
  19. 单元格等于计算机日期,《excel表格怎样自动填写日期》 Excel单元格中自动获取当前日期与时间...
  20. Qt 之 ActiveX控件跑官方例程记录

热门文章

  1. Mac上的平铺式桌面:chunkwm
  2. Hive---Hive函数
  3. [资源]开源项目汇总
  4. 数据库管理员 DBA 数据库管理: 数据库基础
  5. 【视频制作】我们的相册【第1期】
  6. 为什么苹果在德国遵守禁售令,在中国却不用?
  7. 从一份配置清单详解Nginx服务器配置
  8. 泛式算法,仿函数和迭代器失效问题
  9. 台湾地区信用卡客户贷款违约预测
  10. linux手机内存碎片整理软件,讲解macOS和Linux不用碎片整理的原因,而Windows需要碎片整理...