2022年3月在芯动科技官网投的FPGA岗,当天就过了简历筛选,拿了笔试机会。芯动的题目中规中矩,比较偏向于基础概念题。10道单选题,5道多选题,5道简答题。
1、综合是EDA设计流程的关键步骤,在下面对综合的描述中,()是错误的。答案:D
A、综合就是把抽象设计层次中的一种表示转化成另一种表示的过程。
B 、综合就是将电路的高级语言转化成低级的,可与FPGA/CPLD的基本结构相映射的网表文件。
C、为实现系统的速度、面积、性能的要求,需要对综合加以约束,称为综合约束。
D、综合可理解为,将软件描述与给定的硬件结构用电路网表文件表示的映射过程,并且这种映射关系是唯一的(即综合结果是唯一的)。
2、关于异步设计的危害,下面说法错误的是 ()。答案:D
A、信号的时延随着每次布局布线的不同而不同,随着PVT的改变而改变,因此可靠性很差,而且不容易移植。
B、异步设计会产生毛刺。
C、异步设计不能做静态时序分析(STA)。
D、异步设计会带来很大的同步翻转噪声。
解析:同步翻转噪声指的是大量触发器在同一时刻进行电平切换,会在相邻管脚引入噪声,因此,同步设计才会带来同步翻转噪声。所以D错误。其余选项均正确。
3、状态机的编码风格包括一段式、两段式和三段式,下列描述正确的是()答案:C
A、一段式寄存器输出,易产生毛刺,不利于时序约束;
B、二段式组合逻辑输出,不产生毛刺,有利于时序约束;
C、三段式寄存器输出,不产生毛刺,有利于时序约束;
D、所有描述风格都是寄存器输出,易产生毛刺,有利于时序约束。
4、关于函数的描述下列说法不正确的是()答案:B
A、函数定义中不能包含任何时序控制语句;
B、函数至少有一个输入,包含任何输出或双向端口;
C、函数只返回一个数据,其缺省为reg类型;
D、函数不能调用任务,但任务可以调用函数。
1、下列关于代码覆盖率描述错误的是:()答案:AB
A、代码覆盖率达到百分之一百说明代码 bug已消除
B、代码覆盖率包括功能覆盖率
C、代码覆盖率包括条件覆盖率
D、代码覆盖率包括语句覆盖率
注: 覆盖率是衡量设计验证完成程度的指标,并不是验证的目的。任何覆盖率达到100%并不代表芯片bug 已消除。代码覆盖率包括行覆盖率、条件覆盖率、状态机覆盖率和翻转覆盖率。功能覆盖率反映开发出来的需要覆盖的功能点覆盖的比例。断言覆盖率测量断言被触发的频繁程度
这道题,我属实第一次看过,整emo了
2、在高速的系统设计中,下列哪种优化方案的可以提高系统的工作频率()答案:ABC
A、树型结构
B、迟置信号后移
C、流水线
D、资源共享
不用说啦,我参加了几场笔试,这道题是必考题。
注: D是资源((面积)优化,树形结构、迟置信号后移、流水线均能提高系统工作频率。
3、下面关于PLL电路表述正确的是:()答案:BC
A、 PLL属于模拟电路,无法用全数字电路实现
B、PLL相对于参考时钟,可以输出分频、倍频、分数频的时钟
C、 PLL输入的参考时钟jitter,在PLL输出时会变大,也有可能变小
D、 PLL的jitter值等于同步数字电路中 clock Q uncertainty的设定值
注: A选项—PLL可以用数字电路实现;D选项—clock uncertainty是pre_layout设置的,用来建模不确定性。包括jitter + skew + margin;C选项—jitter在线路传输过程中也会被改变。
4、设两输入或非门的输入为x和y,输出为z ,当z为低电平时,有()
A、x和y同为高电平
B、x为高电平,y为低电平
C、x为低电平,y为高电平
D、x和y同为低电平
注: 选ABC这3个都可以只要有个高电平,非后,一定低电平
1、寄存器和锁存器有什么区别?在写RTL代码中,应该如何避免代码综合生成锁存器?
答:
区别:
①、寄存器是同步时钟控制,而锁存器是电位信号控制。锁存器一般由电平信号控制,属于电平敏感型。寄存器一般由时钟信号信号控制,属于边沿敏感型。
②、寄存器的输出端平时不随输入端的变化而变化,只有在时钟有效时才将输入端的数据送输出端,而锁存器的输出端平时总随输入端变化而变化,只有当锁存器信号到达时,才将输出端的状态锁存起来,使其不再随输入端的变化而变化。
避免:(我自己表述的答案,不一定是正确的)
组合逻辑中,如果没有给所有可能发生的输入分配输出,他没有地方可以去,就有可能产生锁存器,用来保存数据。(注意:需要注意的是,只要组合逻辑会产生锁存器,时序逻辑不会)
尽量在case中使用default,在if中使用else,把未知状态分以一定状态,就能避免产生锁存器。
2、设计一个去抖动电路,要求能过滤脉冲宽度在2个时钟周期内的抖动。
module dbc(
input clk,
input rst_n,
input signal_i,
output signal_o
);
reg [2:0] signal_3;
always@(posedge clk or negedge rst_n) begin
if(!rst_n)
signal_3 <= 0;
else begin
signal_3 <= { signal_3[1:0],signal_i };
end
end
always@(posedge clk or negedge rst_n) begin
if(!rst_n)
signal_o <= 0;
else if( signal_3 == 3'b111 )
signal_o <= 1'b1;
else if( signal_3 == 3'b000 )
signal_o <= 1'b0;
else ;
end
endmodule
3、用Verilog实现一下逻辑,接口信号如下:
input clk,
input rst_b,
input req_in,
output req_in_ack,
input [31:0] data_in,
output reg data_out_wd,
output reg [31:0] data_out
当req_in_ack和req_in都为高时,说明本模块有能力接收data_in,挡在data_in中找到数据32‘ha5a5_5a5a,特殊字符能全部保存到一个深度为4的sy_fifo(已有的现成IP)中,当fifo为空的时候,将数据读取到data_out……(题目我记不太清了,大概就是这样)
答:这道题,我没写。会的大佬,可以做一下,把答案分享在评论区。
4、这道题题目我记不清了,大致就是根据代码,让你画RTL原理图。
图倒是还在,我是做在草稿纸上的,哈哈哈
5、如何降低系统功耗? (原题记不住了,大概是这样)
答:
①、降低电压;
②、降低时钟频率;
③、尽量使用MOS管;
④、不使用的器件,可以设置休眠模块。
总结:这大致就是我花了一个多小时做的FPGA开发岗试卷,暂时就分享到这里,后面还有其他面试,有机会再分享。其他大佬如果有心得,可以私聊分享一下。嘿嘿,让我少走点弯路,第一次求职,道路曲折qaq。