type
status
date
slug
summary
tags
category
Property
Nov 30, 2023 02:46 PM
icon
password
属性
属性 1
描述
Origin
URL
海思笔试联发科IC笔试美芯晟笔试题1.简述一下IC前端设计流程和使用的工具2.触发器建立时间和保持时间的概念,为什么要满足触发器的建立时间和保持时间?3.什么是亚稳态,为什么会产生亚稳态,减少亚稳态的方法?4.用脚本将如下SDF文件中的SETUPHOLD所在行后面的数字分别加0.30.2。5.简述一下fork join, fork join_any , fork…join_none.的用法差异6.用三端式状态机实现一个序列检测模块。A为输入端,B为输出端,如果A连续输入1101则B输出为1否则为0。例如A输入00100111011011100,B输出为00000000010010000请画出state machine,并用RTL 描述state machine.画一下异步FIFO基本结构,并简述各模块功能及原理8.观察下面图示回答问题class类的运行结果、类成员属性、父类子类1. System Verilog 的 class2. System Verilog类成员3. 父类子类太初笔试题
海思笔试
1.漏电流和逻辑电路的设计工作频率的关系。
2.异步电路容易出现的问题。(STA无法检查时序,毛刺。)
3.WRR和RR仲裁
4.自动插入CLOCK GATING的代码风格有?(多选)
5.电源完整性和信号完整性。
6.data_arrival_time 的计算
7.DC优化timing的命令
8.memory的低功耗设计中使用的措施有?
9.从DC和PT的角度分析电路有多少条reg到reg的path?
10.FIFO的空满信号产生?
11.有一个四位D/A转换器,设它的满刻度输入为20V,当输入数字量为1101时,输出电压是?
12.访问DRAM和SRAM的低功耗设计方法?
13.SPI协议通过哪一种方式实现从机功能?
14.I2C总线可以达到的传输速率为?
15.关于宏定义的说法不正确的是?
16.task和function的区别是?
17.关于PLL输入时钟和输出时钟相位的关系?
18.持续收敛的PL3分频器的输入时钟和分频后的输出时钟的关系?
19.sv中的跳转操作命令有(disable\break\return\continue)
20.数字芯片后端的LVT\RVT\HVT的区别?
21.静态功耗和动态功耗?
22.数字芯片设计中的面积优化方法?
23.异步复位同步撤离电路的作用?
24.多比特信号跨时钟域常用的同步方式?
25.存储器中层次结构的理论基础局部性原理?
26.跨时钟域的处理三大方法?(打三拍?)
27.代码覆盖率能够确认边界点的测试?
28.报文处理设计规格支持的报文长度为36-256其余长度直接丢弃的?
29.队列代码题mem[5][4]是多少?
30.DCG和PR数据的一致性
31.DCG的run_time
32.DCG相对DC的优势
33.sv的四值类型?
34.影响芯片的静态功耗的因素?
35.STA将每条路径的延迟?
36.数字电路设计哪些可以作为调试信息?(多选)
37.状态机跳转出现死锁的代码是?
38.DCG早期判断design congestion
39.状态机出错时预复位可以自动恢复?(判断题)
联发科IC笔试
5.画出你最熟悉的一个项目框图。解释数据流,难点,如何解决的?
美芯晟笔试题
1.简述一下IC前端设计流程和使用的工具
答:前端设计流程:规格制定-详细设计- HDL编码-仿真验证-逻辑综合- STA-形式验证。具体为
1、规格制定
芯片规格,也就像功能列表一样,是客户向芯片设计公司提出的设计要求,包括芯片需要达到的具体功能和性能方面的要求。
2、详细设计
Fabless根据客户提出的规格要求,拿出设计解决方案和具体实现架构,划分模块功能。
3、HDL编码
使用硬件描述语言VHDL,将模块功能以代码来描述实现,也就是将实际的硬件电路功能通过HDL语言描述出来,形成RTL代码。
4、仿真验证
仿真验证就是检验编码设计的正确性,检验的标准就是第一步制定的规格。看设计是否精确地满足了规格中的所有要求。规设计和仿真验证是反复迭代的过程,直到验证结果显示完全符合规格标准。仿真验证工具Mentor公司的Modelsim, Synopsys的VCS,还有Cadence的Veridi均可以对RTL级的代码进行设计验证。
5、逻辑综合――Design Compiler
仿真验证通过,进行逻辑综合。逻辑综合的结果就是把设计实现的HDL代码翻译成门级网表netlist。综合需要设定约束条件,就是你希望综合出来的电路在面积,时序等目标参数上达到的标准。逻辑综合需要基于特定的综合库,不同的库中,门电路基本标准单元(standard cell)的面积,时序参数是不一样的。所以,选用的综合库不一样,综合出来的电路在时序,面积上是有差异的。一般来说,综合完成后需要再次做仿真验证(这个也称为后仿真,之前的称为前仿真)逻辑综合工具Synopsys的Design Compiler,仿真工具选择上面的三种仿真工具均可。
6、STA
静态时序分析,这也属于验证范畴,它主要是在时序上对电路进行验证,检查电路是否存在建立时间(setup time)和保持时间(hold time)的违例(violation)。这个是数字电路基础知识,一个寄存器出现这两个时序违例时,是没有办法正确采样数据和输出数据的,所以以寄存器为基础的数字芯片功能肯定会出现问题。STA工具有Synopsys的Prime Time。
7、形式验证
这也是验证范畴,它是从功能上对综合后的网表进行验证。常用的就是等价性检查方法,以功能验证后的HDL设计为参考,对比综合后的网表功能,他们是否在功能上存在等价性。这样做是为了保证在逻辑综合过程中没有改变原先HDL描述的电路功能。形式验证工具有Synopsys的Formality。从设计程度上来讲,前端设计的结果就是得到了芯片的门级网表电路。
2.触发器建立时间和保持时间的概念,为什么要满足触发器的建立时间和保持时间?
答:建立时间(setup time):是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器。
保持时间(hold time):是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被打出触发器。
如果不满足建立和保持时间,触发器将进入亚稳态,进入亚稳态后触发器的输出将不稳定,在0和1之间变化,这时需要经过一个恢复时间,其输出才能稳定,但稳定后的值并不一定是你的输入值。
3.什么是亚稳态,为什么会产生亚稳态,减少亚稳态的方法?
答:(1)亚稳态是指触发器无法在某个规定的时间段内到达一个可以确认的状态。
(2)亚稳态一般发生在跨时钟传输、异步信号采集中以及复位电路中。 在同步系统中,输入总是与时钟同步,因此寄存器的setup time和hold time是满足的,一般情况下是不会发生亚稳态情况的。
1、跨时钟域信号传输
产生:在跨时钟域信号传输时,由于源寄存器时钟和目的寄存器时钟相移未知,所以源寄存器数据发出数据,数据可能在任何时间到达异步时钟域的目的寄存器,所以无法保证满足目的寄存器Tsu和Th的要求,从而出现亚稳态。
消除:对异步信号进行同步处理;如添加两级D触发器、采用握手进行交互等。
2、异步信号采集
产生:在异步信号采集中,由于异步信号可以在任意时间点到达目的寄存器,所以也无法保证满足目的寄存器Tsu和Th的要求,从而出现亚稳态。
消除:采用FIFO对跨时钟域数据通信进行缓冲设计;
3、异步复位电路
产生:在异步复位电路中,复位信号的释放时间不定,难以保证满足恢复时间(Recovery Time)以及去除时间(Removal Time),从而出现亚稳态。
消除: 对复位电路采用异步复位、同步释放方式处理。
4.用脚本将如下SDF文件中的SETUPHOLD所在行后面的数字分别加0.30.2。
例如:28660行,0.141及0.144加0.3后分别为0.441及0.444;-0.052及-0.050加0.2后分别为0.148及0.150。
5.简述一下fork join, fork join_any , fork…join_none.的用法差异
答:fork join :内部 begin end 块并行运行,直到所有线程运行完毕才会进入下一个阶段。
Fork join_ any :内部 begin end 块并行运行,任意一个 begin end 块运行结束就可以进入下一个阶段。
Fork join_ none :内部 begin end 块并行运行,无需等待可以直接进入下一个阶段。
6.用三端式状态机实现一个序列检测模块。A为输入端,B为输出端,如果A连续输入1101则B输出为1否则为0。例如A输入00100111011011100,B输出为00000000010010000请画出state machine,并用RTL 描述state machine.
画一下异步FIFO基本结构,并简述各模块功能及原理
FIFO内部主要由读写FIFO控制模块和双口RAM模块组成。
(1)双口RAM模块
作用:用作存储模块,输入的读写地址都是二进制的。最高位用于存放空/满信号。
(2)FIFO判空模块
作用:输入读使能信号,产生对应二进制地址输出到RAM模块,并将二进制地址转化为相应的格雷码输出到同步模块,同步模块将该读地址同步到写时钟域中。
(3)读时钟域到写时钟域同步模块
作用:将FIFO判空模块生成的格雷码地址打一拍的延迟,然后将该地址输出到写时钟域。
8.观察下面图示回答问题
- 其中椭圆形图示表示逻辑延时
- Td表示延时的值,如如Td=0.5ns表示这个逻辑延时0.5ns,
- 所有的延时的单位均为ns
- DFF的SETUP TIME为1ns
- DFF的HOLD TIME为1ns
8.1这个电路最快的工作频率是多少
8.2如果时钟频率为20MHz(jitter为0.5ns)setup和hold的 slack是多少
class类的运行结果、类成员属性、父类子类
1. System Verilog 的 class
以下 SV 程序的运行结果为()
A. 00000000
B. 32’hFFFFFFFF
C. 00000001
D. X
答案:A
解析:new 函数中并没有把传入的 addr 值赋值给对象,所以不管 new 传入多少,都是打印的 bit [31:0] addr 的默认值,此处没有赋值,打印 0;
做如下修改:
(1)
操作后,addr 成功赋值给当前对象(this),打印 1;
(2)
function new(logic [31:0] addr =32'hFFFF_FFFF);
addr= addr;
$display("%0h", addr);
endfunction
其他位置不变,则打印 1,然后打印 0。
(3)
bit[31:0] addr = 32'h00220000;
打印 220000;
(4)
t1.addr= 3;
$display("t1.addr= %0h", t1.addr);
t1.display_addr();
打印:
t1.addr= 3
3
2. System Verilog类成员
System Verilog 中类默认的成员属性是()
A. private
B. local
C. automatic
D. public
答案:D
解析:
类中的成员属性:const,local,protected,static等;
公有和私有:
public:公有的,默认为 public,子类和类外都可以访问;
local:仅对该类的对象可见,子类和类外不可见;
protcted:该类和子类可见,类外不可见;
静态和动态:
static:静态,被该类的所有实例共享;
dynamic,动态,默认;
SystemVerilog 中不允许静态方法读取静态变量。
3. 父类子类
类中通过()关键字访问父类的成员
A. super
B. virtual
C. parent
D. this
答案:A
解析:
由于子类不能继承父类的构造方法,因此,要调用父类的构造方法,必须在子类的构造方法体的第一行使用 super() 方法,该方法会调用父类相应的构造方法来完成子类对象的初始化工作。
A:super,子类访问父类的成员,调用父类的构造方法;
B:virtual,虚函数;
C:parent,指向父类的指针,使用 parent 调用父类的构造函数进行父类的初始化;
D:this,自己用;
以下关于验证的描述,正确的是()
A.验证平台使用checker检测DUT的行为,只有知道DUT的输入输出信号变化之后,才能根据这些信号变化来判定DUT的行为是否正确;
B.System Verilog区别于verilog的一个重要特征是其具有面向对象语言的特性:封装、继承和多态;
C.UVM是Synopsys、Cadence、Mentor等EDA厂商联合发布的验证平台;
D.Verilog,System Verilog,System C, UVM都是验证常用的硬件语言;
答案:B
解析:
A. monitor 负责监测 DUT 的行为,checker 缓存每个 monitor 收集到的数据,和参考模型的输出去比较;
B. System Verilog 有 C++ 高级语言特性,面向对象编程OOP(Object Oriented Programming),封装、继承、多态;
C. 通用验证方法学(Universal Verification Methodology, UVM)是一个以System Verilog类库为主体的验证平台开发框架,是一种方法学,不是一个EDA验证平台工具;
D. UVM不是一种语言,是一种验证方法学;
太初笔试题
- 下列关于代码覆盖率描述错误的是: 答案:AB
2.代码覆盖率、条件覆盖率和状态机覆盖率均达到 100%,可以认为设计没有问题。
A:正确
B:错误
答案:B
解析:
覆盖率2个大方面:代码覆盖率,功能覆盖率。
代码覆盖率包括:
(1)语句覆盖率
(2)条件覆盖率;
(3)分支覆盖率;
(4)状态机覆盖率;
代码覆盖率100%不代表功能没问题。
(1)功能覆盖率高但是代码覆盖率低
分析未覆盖到的代码,推断仿真是否有遗漏的功能点,代码是否为冗余或不 可达代码;
(2)功能覆盖率低但是代码覆盖率高
仿真用例没有关注到一些功能点,需要修改测试用例。
代码覆盖率:
白盒覆盖率,一般仿真工具都有这个统计功能。代码覆盖率达到 100% 不代表设计没有问题。
(1)分支覆盖率
针对 if…else、case 等分支语句,看代码中设计的分支是否都被测试到了。
针对 if(条件1),只要条件 1 取 true 和 false 都执行过,则这个分支就完全覆盖了。
(2)语句覆盖率
语句覆盖率上不去时,可以查看未覆盖处的代码是测试用例的疏忽、冗余代码或是保护用途的代码,比如case的default;
(3)翻转覆盖率
包括两态翻转(0/1)和三态翻转(0/1/Z),常用的是两态翻转。对于单比特信号而言,若仿真用例使得该信号从0到1和从1到0的翻转均发生,则认为这里的翻转覆盖率是全面的(100%)。
即使翻转覆盖率达到 100%,分支覆盖率和语句覆盖率也不一定达到 100%。
(4)条件覆盖率与表达式覆盖率
条件覆盖率可以看作是对分支覆盖率的补充。每一个分支条件表达式中,所有条件的覆盖。
比如:
if(a&& b)
statement1;
else
statement2;
测试用例:a=1,b = 1 和 a = 0,b = 1
分支覆盖率100%,两个分支都覆盖了,但是条件覆盖率不是100%,有判断条件没有被测试到。
(5)状态机覆盖率
如下状态机实现代码中,需要分析其 FSM 覆盖率的分支有哪几个?
A. curr_st 为 1,next_st 为 2;
B. curr_st 为 2,next_st 为 3;
C. curr_st 为 3,next_st 为 0;
D. curr_st 为 0,next_st 为 1;
答案:ABD
解析:
A.curr_st 为 1,next_st 为 2,有这种跳转,对;
B.curr_st 为 2,next_st 为 3,有这种跳转,对;
C.curr_st 为 3,next_st 为 0,没有这种跳转,错;
D. curr_st 为 0,next_st 为 1,有这种跳转,对;
功能覆盖率
又称黑盒测试覆盖率,只关心功能,不关心具体的代码是如何实现的。如果想要统计功能覆盖率,需要在 SystemVerilog 编写的测试用例中添加覆盖组,仿真器基于它来统计功能覆盖率。
分为覆盖点(coverage points)和断言(arrertion)。
- 作者:Conor
- 链接:https://www.xzhh.top/article/questions
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。