今天为大家带来乐鑫科技提前批芯片岗的真题解析,不得不承认这份题目难度在面试题中算比较高的,涉及的知识面也很广。笔者水平有限,如有错漏,欢迎指正哈。之前文章中有几处错漏,这篇文章予以修正,欢迎大家继续拍砖。
此外想说的是,本文答案仅供参考,请大家带着批判的眼光看待,先做题再看解析,才能真正起到刷题的作用。
1. 请根据下面的设计描述,尽可能多的列出你所能想到的测试点:
一个异步FIFO,rdata和wdata均为8位数据,FIFO深度为16,当rst_n输入为低时,FIFO被复位,当wclk的上升沿采样到wr为高时,数据被写入FIFO,当rclk的上升沿采样到rd为高时,FIFO输出数据。此外,当FIFO为空时,empty信号输出为高,当FIFO满时,full信号输出为高。
解析:根据题目,主要有两个一级测试点:1. FIFO基本功能 2. 异步处理
对于FIFO基本功能,基本可以使用黑盒用例进行端到端测试,通过注入特定序列的输入检测输出是否符合预期,有以下二级测试点:
写端口时序行为与描述一致,检查数据在wr被采样时刻正确写入
读端口时序行为与描述一致,检查数据在rd被采样时刻正确读出
FIFO能保证先进先出
空信号能正确生成
满信号能正确生成
检查在写满读空之后是否有做读写保护防止数据覆盖(白盒可检查memory数据)
检查在写满读空之后是否有做读写保护防止空满信号错乱(白盒可检查指针,内部计数器)
检查是否能被正常复位,解复位后各输出信号初始状态(复位值)是否正常
对于异步处理,必须要进行白盒测试,假设内部实现是经典的异步FIFO实现,则有以下二级测试点:
格雷码转换逻辑的正确性
跨时钟域是否进行同步器打拍处理,以及指针信号经过同步器打拍延时对功能带来的影响(理论上不应该有任何影响)
频率不同对FIFO读写的影响,覆盖读快写慢和读慢写快(理论上不该有任何影响)
2. 请实现对4x4矩阵式键盘的按键识别,假设每次都是单按键输入,需要有去抖功能(持续20ms以上被认为是有效键值),模块时钟频率为1kHz,要求用状态机实现,定义状态,画出状态转移图,并用verilog完整描述该识别模块。矩阵式键盘电路结构参见下图,其中行线1~4由识别模块控制输出,列线5~8为识别模块的输入
解析:这个题目对熟悉单片机的同学比较友好,对没接触过的同学,可能就蒙圈了。在有限的题目描述里还没办法理解题目想让我们做什么,必须结合电路图来看。
首先必须要明确题目里说的输入输出是针对“识别模块”来说的,不是针对这一大块开关电路来说的。识别模块在图中太不起眼了..在输入输出1~8管脚的连接处,感觉出题者默认大家对此电路功能都很清楚。如果输入输出都搞反了,那更不知道这道题要做什么了。
这个题目对于处理模块来说,实际上想做的是按键识别,也就是通过对按键开关电路操作和观测来识别当前是哪个按键被按下了,然后输出该按键编码。可以看到每个按键都处于4x4矩阵的一个节点处,也就是说有(x,y)坐标,只要分别得到x和y的值就能锁定唯一按键。
如何得到x和y的值呢?首先需要观察,按键被按下之后会有什么效果。很明显,就是从电源VCC经过电阻到某一个识别模块控制输出端(比如说输出1)的电路导通了。这个时候如果这个模块输出(比如输出1)接地,那这就是一个完整的回路,而对于5~8来说,将观察到电压值从VCC变为0。因此通过控制1~4输出全接地,观察5~8是否有值拉低就可以判断是否有按键输入,同时可以得到输入键的横坐标x。
因为需要做去抖动功能,在看到5~8有拉低之后还要等上20ms才能确保是有效按键输入,题目频率是1kHz,20ms需要保证20个周期内5~8的值不变,如果跳变为全0,则重新重新开始等待按键输入。
如果有效按键输入被确认,接下来需要得到y坐标,同样可以通过控制1~4输出来观察5~8输入。要找到是哪一行的按键被按下,可以通过控制变量法,将1~4分别输出向量4‘’b0111,4’b1011, 4b1101, 4b1110,其中接VCC表示输出了高电平1,这个时候两端电压相等是没有电路导通的,只有输出接地0的那一路可能被导通。如果没被导通,那就是没有按键输入。这样依次排查可以找到纵坐标y值。
这里因为题目要求只要保证20个周期即可认为有效输入,而对于有效输入来说,其延续时间大部分情况下都远大于20个周期,因此在X_DETECT状态后4个周期内可以默认该有效输入依然保持有效,在X_DETECT期间不会因为按键本身无效导致结果错误。
最后就是简单地通过x和y坐标值查找或者计算得到具体的按键编码。状态转移图如下,verilog这里就不提供了,使用传统三段式写法写状态机就行。这里面Out[3:0]和In[3:0]分别对应4个输出和4个输入。
3. 用verilog实现CRC-8的串行计算,G(D)=D8+D2+D+1,计算流程如下
解析:这个题目涉及到状态机(控制通路)和移位计算(数据通路)的混合,稍微有点复杂。基本上围绕着控制通路和数据通路切分的思想来设计会比较清晰。
CRC串行计算的原理就是通过线性反馈移位寄存器进行输入数据移位,同时对应的生成多项式相应项数与对应数据位做异或反馈到输入端,当所有的数据位均移入时,移位寄存器的值就是CRC结果。
控制通路方面,一个状态机控制,需要以下几个状态:
IDLE:等待CRC开始信号
WAIT:等待有效位的串行输入进行移位,如果下一次输入为无效数据,停留此状态,否则跳转到CAL
CAL:做一次移位计算,如果下一次输入仍为有效数据,则停留此状态,否则回到WAIT状态。每次进入此状态,移位计数器加1,到达32时进入OUTPUT状态
OUTPUT: 完成32bit计算,开始输出移位数据,完成移位输出则回到IDLE
数据通路方面,就是8bit线性反馈移位寄存器,只有在CAL状态下可以进行移位,移位寄存器使能为1。此外该线性反馈移位寄存器的生成多项式对应bit在移位前需要做相应的异或运算,根据图示逻辑来写代码即可。当32bit的输入完全移入移位寄存器时,CRC计算完成,开始输出结果,只有在OUTPUT状态下数据的输出crc_valid才可以为高。
4. 将2004个”1”异或起来的结果为(0)。
解析:2004个”1”分组两两异或得到1002个“0”,接下去怎么异或都是0
5. 一个4bit的输入A,A!=4‘b0,A中从MSB开始出现的第一个1的位置上表示为B。e.g: A=4‘b0111, B=2’b10(从MSB开始,第一个1出现在A的bit2)。则
B[1]= A[3] | A[2]
B[0] = A[3] | (~A[2] & A1)
解析:当A[3]或A[2]为1时,B[1]为1;当A[3]为1或A[1]为1且其前面的A[n]都为0时,B[0]为1。这个题目画真值表也可以很快得到答案。
6. 一批IC样品在测试中发现有setup或者hold时序问题,现取A,B,C,D四种样品进行测试。A降温后停止工作,则可能是(setup(40nm以下工艺)/(hold(40nm以上工艺))问题。B升温后停止工作,则可能是(hold(40nm以下工艺)/(setup(40nm以上工艺))问题。C降压后停止工作,则可能是(setup)问题。D升压后停止工作,则可能是(hold)问题。
解析:温度和电压对应到管子行为上就是对于单个管子电流的影响。这里注意温度这个选项。升温会使载流子速率降低,但是相应的也会使Vth降低。这其实对于电流大小的影响是两个反方向的,要看谁占主导因素。对于40nm以上的工艺,而升温对于Vth的影响可以忽略,因此载流子速率对于电流的影响占主导因素,因此升温导致管子电流减少,充放电时延增加。而对于40nm以下的先进工艺,升温使Vth显著降低,因此Vth占主导,升温电流增大,时延减小。
对于电压,升压电流大时延小,降压电流小时延大。
setup问题是时序关键路径总时延过大,而hold问题则是总时延过小。
7. 用2048x12的ROM芯片,最多能实现(11)个输入(12)个输出的组合逻辑函数。
解析:2048=2的11次方,如果每个bit都作为1种输入,则最多有11个输入,2048种输入组合。12bit是ROM的数据位宽,每一种11输入的组合都能对应1个12bit的数据,如果12bit的数据每个bit都作为一个输出,这个ROM可以看成是12个11输入1输出的真值表。只要这12个真值表都不相同,即可认为是不同逻辑,而这是很显然的。
8. 以下verilog代码的out[7:0]的逻辑可以用一条assign语句重写为:
解析:通过位运算和AOI形式的选择逻辑来转换:
assign out= in & (a^b) | ~in & {in[6:0],1’b0};
9. OOP的三大特征是(封装性、继承性、多态性)。
10. 如下电路的逻辑功能为(5)进制计数器
解析:这是3级JK触发器,转为D触发器的格式写出Q0Q1Q2的表达式:
always@(posedge clk) Q0 <=Q2&Q0 | ~Q2&~Q0;
always@(posedge Q0) Q1 <= ~Q1;
always@(posedge clk) Q2 <= Q0&~Q1&~Q2;
给个初值3'b000,则状态跳转:000->011->010->001->100 ->000
11. 某个SRAM一共12根地址线A11~A0,32根数据线D31~D0,如果要实现2^20bytes的memory,需要(64)块这样的SRAM
解析:一块SRAM的大小是4K*4B=16KB,要实现1MB,需要1024/16=64块。
12. NAND和NOR Flash的主要区别是1.(NAND)中常存在坏块, 2.(NAND)容量可以做到很大,3.(NAND)写入速度比较快, 4.(NOR)读出速度比较快
解析:https://www.cnblogs.com/iriczhao/p/12128451.html#nod3-4
13. 已知R1=R2=R3=R4=R5=R6=R,下图从电源两端向右看去的等效电阻为(2R)
解析:
这个题目可以使用电流法,由于对称性,R4的电阻可以去掉,直接得出答案。
也可以用笨办法,将R2,R3,R4组成的三角形连接转成Y型连接再进行求解。
14. 在高速系统设计中,下列哪种优化方案可以提高系统频率(A,B,C)
A.迟置信号后移
B.树形结构
C.流水线
D.资源共享
解析:
A选项是高频设计中收敛时序的常用手段,基本思想是将关键路径上某个节点的信号挪到该路径靠后位置,缩短该关键路径延迟。具体可参考本公众号另一篇文章《芯片设计小实例——巧妙的mux“移动”》。
B选项树形结构,参考二叉树的概念,时序路径上n个输入做二叉树可以实现算法上的优化,得到更大的并行度,缩短时序路径。具体可参考本公众号另一篇文章《芯片设计小实例——优先级“转移”》
C选项流水线,深度越大每级的逻辑越少,相应的系统频率可以跑得更高
D选项资源共享,一般而言资源共享意味着通路复用,而通路复用是一种节省面积的做法,会导致很多原本不必要的通路长路径出现,具体可参考本公众号另一篇文章《芯片设计小实例——巧妙的mux“移动”》。该选项与A选项其实是硬币的两面。
15.下列属于动态验证范畴的是(A,C)
A. modelsim仿真
B. 形式验证
C. 后仿
D. STA
解析:所谓动态验证即验证结果依赖于向量输入,动态改变。形式验证和STA都不依赖于具体测试用例。
16.下列哪些方法是进行面积优化(B,C,D)
A. 寄存器配平
B. 逻辑优化
C. 资源共享
D. 串行化
E. 流水线设计
F. 关键路径优化
解析:寄存器配平,流水线设计,关键路径优化都是时序优化的手段,相应地都会或多或少以面积为代价。逻辑优化,资源共享,串行化本质上都是减少逻辑面积优化的手段。具体可参考本公众号另一篇文章《芯片设计小经验——面积缩减策略》。
17.可综合的verilog语法包括(A,B, C)
A.assign
B.for
C.always
D.wait
E.time
F.initial
18.在异步设计中对跨时钟处理的信号,功能验证时一般需要考虑以下哪些因素(A,B,C)
A. 信号高电平有效还是低电平有效
B. 信号变化的最小宽度
C. 时钟频率
D. 相位和抖动
解析:功能验证关注会影响功能并且不需要借助门级延迟等信息就可以判断对错的点。高低电平肯定是可以检测的。信号变化的最小宽度,在低频采高频的场景下功能仿真可以仿出漏采现象。时钟频率也是功能验证需要关注并且可以控制的,不同时钟频率的跨时钟域是否有频率不同导致的功能与预期不一致,这些是可以测到的。
19.
解析:FIFO深度的计算,首先考虑无反压场景下的极限流量差。这个题目本身也没有说可以反压,那么这只需要考虑读写极限流量差即可。通过burst rate和持续时间可以得到一个burst传输1280bits数据,在10us的初始化时间内最多可以传2个burst也就是2560bits,在这之后moduleB开始正常工作。假设极端场景下A仍然均匀不断地往B送数据,那么A在初始化结束后的第1us内传输1280bits,B在同样的时间内可以读走=640bits,这里又有640bits的累计。而这之后的4us内B可以读走640x4=2560bits,只剩余640bits,再到下一个burst周期结束buffer就可以被读空。因此极限流量差就是B初始化的10us内的2560bits加上刚结束初始化的1us的640bits,也就是3200/32=100个深度即可。选项里比100多的最少是128,所以选A。
20. 欲产生序列信号11010111.则至少需要(3)级触发器
解析:8bit的序列8个状态可以生成,8个状态用3bit的状态信号即可表征
21.C
解析:C是正确的。注意到优先级,set为1即赋值1,只有当set为0会看wr,wr为1才为wdata,最低优先级是q,只有当set,wr都为0才会保持q值。
22.关于跨时钟域电路的设计,下列说法正确的是(C,D)
A. 跨时钟域电路存在亚稳态风险,最好避免使用
B. 信号经两级d触发器同步后即可进行跨时钟域传递
C. 跨时钟域电路一定存在亚稳态
D. 采用单一时钟的电路也可能产生亚稳态
解析:A明显错误。B错在单bit电平信号才可以同步后直接传递,多bit信号不能直接同步,此外脉冲信号的两级打拍同步还需要先转为电平进行后再转脉冲。
只要涉及到异步电路跨时钟域,就一定存在亚稳态,亚稳态是不可能被消除的,只能通过合理的同步降低其发生概率。题目里如果说的是同步器之后的电路,那么经过合理的同步和亚稳态概率降低,将大概率不受亚稳态影响,那么C是错误的。如果包括了同步器采集的电路,那么是一定存在亚稳态的,那么C就是正确的。
采用单一时钟的电路,只要满足setup/hold的检测,就不可能产生亚稳态。如果不满足,则可能产生亚稳态,所以D正确。
23.若要将一异或非门当做反相器使用,则输入端A,B的连接方式是(B)
A. A和B并联使用
B. A或B中有一个接“0”
C. A或B中有一个接“1”
D. 不能实现
解析:这个题目通过画出异或非门的真值表即可。
欢迎大家继续关注我们后续文章。
本文作者 | L.L.