锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Verilog笔试面试常考易错点整理

时间:2022-11-11 00:30:00 ss8550高频三极管

我在数字IC求职,微信官方账号如下,欢迎关注!微信官方账号会定期推送求职过程中积累的知识点和题目!

数字IC剑指offer
1. Verilog为什么适合描述硬件设计?
1)always块间并行,符合硬件中电路并行计算的特点
2)always时钟触发的特性符合寄存器的行为
3)Verilog它是一种自上而下的层次化设计方法,可以将复杂的大型数字系统分为小型4和相对简单的单元电路,以加快大型数字系统的设计和调试
4)Verilog行为级描述可以简化硬件电路的设计,借助高级语言的精致结构
5)Verilog支持开关级、门级、RTL算法级、系统级设计

2. 阻塞赋值与非阻塞赋值的区别
阻塞赋值的操作符为=,阻塞的概念是指同一个always在块中,后面的赋值句在概念上是在前一句赋值句结束后开始赋值的,可以认为是顺序执行,用于设计组合逻辑;
非阻塞赋值的操作符合<=,非阻塞赋值的操作可视为两个步骤:1)在赋值时间开始时计算非阻塞赋值RHS表达式,2)在赋值时刻结束时更新非阻塞赋值LHS表达式。是同时赋值的操作,并行执行,用于时间逻辑的设计

3. 为什么用于综合?verilog不建议使用for循环?
DC无法优化for循环的逻辑只是简单的扩展和复制,可能会增加电路面积,降低性能

4. 防止综合出Latch
1)在if-else和case判断所有条件分支
2)在组合逻辑过程中,敏感向量列表包含所有要读取的信号(包括RHS判断句中的信号)(注意:对模拟有影响,但综合工具会自动完成敏感向量列表,所以综合电路中不会有latch的)
3)不要给自己赋值。
4)不要出现组合逻辑环路

5. verilog可综合风格
1)时序逻辑用非阻塞赋值,组合逻辑用阻塞赋值,相同always当块中有时序逻辑和组合逻辑时,不要在同一个块中使用非阻塞赋值always不要将块混合在两个或两个以上always同一变量赋值块
2)所有内部寄存器都可以通过复位来预测信号的初始状态
3)不混合使用上升下降边(可考虑使用倍频时钟设计)
4)不使用initial,不要使用延迟或循环次数不确定的循环语句
5)防止出现Latch(除非目的性Latch)
不能综合的句子:
Forever、fork/join、initial

6. verilog可综合、不可综合的句子汇总
所有综合工具都支持结构
always,assign,begin,end,case,wire,tri,aupply0,supply1,reg,integer,default,for,function,and,nand,or,nor,xor,xnor,buf,not,bufif0,bufif1,notif0,notif1,if,inout,input,instantitation,module,negedge,posedge,operators,output,parameter

不支持所有综合工具的结构
time,defparam,$finish,fork,join,initial,delays,UDP,wait

有些工具支持一些工具不支持的结构
casex,casez,wand,triand,wor,trior,real,disable,forever,arrays,memories,repeat,task,while。

注:while例如,在某些情况下是可以综合的while(posedge clk)这和always@(posedge clk)作用一样。

7. function和task
组合逻辑只能实现综合任务和函数


8. 一段、两段、三段
一段式(避免):将整个状态机写在一起always在块中,将状态转移判断的组合逻辑与状态寄存器转移的时间逻辑混合在一起,不仅描述了状态转移,还描述了转移状态的输入和输出。一段不利于时间限制、功能变更和调试,不利于综合器和布局布线器的设计优化,不能很好地表示米勒FSM输出,容易写Latch。
两段式:其中一段always该模块使用同步顺序来描述状态转移,而另一个模块使用组合逻辑来判断状态转移条件,并描述状态转移规律。优点是不仅易于理解和维护,而且有利于综合器和布局布线器的优化设计,有利于增加时间限制。缺点是,由于输出直接采用组合逻辑,容易产生毛刺。
三段式:一个always块采用同步顺序描述状态转移,二是用组合逻辑判断状态转移条件,描述状态转移规律,三是用同步顺序电路描述次态输出。与两段相比,虽然代码结构稍微复杂,但消除了组合逻辑输出的不稳定性和毛刺,更有利于时间顺序路径分组,获得更好的综合布局布线结果

9. Mealy状态机和Moore状态机的区别、优缺点
1)Mealy状态机的输出不仅取决于当前状态,还取决于输入信号
优点:与实现功能所需的状态数相比moore型号较少,更有利于设计复杂的状态机
缺点:如果不对输出做同步处理,输出容易出现glitch;由于输出不仅取决于状态,还取决于输入,因此输出的译码电路将更加复杂mealy能跑的频率比moore低一些
2)Moore状态机的输出仅取决于当前状态
优缺点:互换;moore类型最重要的特点是隔离输入和输出(但对于三段设计,mealy类型也是隔离的)

10. 选择状态机编码
二进制编码和格雷代码使用更多的组合逻辑,使用最少的触发器,而独热代码相反,独热代码的优点是只需要比较一个bit,它简化了更多的逻辑,提高了状态转换的速度,降低了毛刺的概率,提高了稳定性。缺点是需要更多的触发器资源
二进制编码和格雷码更有效,而独热编码更有效。

11. 独热码的优点?
? 特征向量可以映射到欧洲空间,使特征之间的距离计算更加合理
? 状态机使用独热码,无需翻译,可简化相关组合逻辑
? 降低毛刺产生概率,增强稳定性

12. DFT的意义及常用DFT技术
意义:
1) 缩短产品进入市场的时间(TTM)
2) 降低测试成本(COT)
3) 提高产品质量
技术:
1) 扫描设计(SCAN): 在电路中使用普通触发器(flip-flops)用扫描触发器代替,然后连接到扫描链
2) 内建自测试(BIST):根据自己的逻辑判断,需要大大减少管脚,用于判断RAM和ROM
3) 边缘扫描(Boundary Scan):在每个输入输出引脚上添加一个存储单元,然后将这些存储单元连接到一个扫描通道,形成一个扫描链

13. 竞争与冒险,Glitch及消除办法
竞争:在组合逻辑中,由于门的输入信号通过不同的通道会有不同的延迟,不同的到达时间被称为竞争,因此毛刺信号被称为冒险。
原因:组合逻辑延迟导致输入信号发生变化时,输出不能同步跟随输入变化,过渡时间后达到原始预期状态,然后产生小的寄生毛刺信号。
毛刺信号对所有输入都没有危害,比如触发器D端,只要毛刺不出现在时钟上升边缘,满足数据的建立和维护时间,就不会受到影响;但当毛刺信号成为系统的控制信号、握手信号、复位信号和时钟信号时,导致逻辑错误。
分类:冒险分为逻辑冒险和功能冒险。逻辑冒险是由逻辑表达引起的只有一个信号变化引起的冒险,可以通过代数或卡诺图判断;功能冒险是当两个或两个以上的输入信号发生变化时,不能通过修改逻辑表达来消除。
消除办法:
1) 用冗余项消除毛刺:在卡诺图的两个圆相切处加一个圆,可以消除逻辑冒险,但计数器型产生的毛刺无法消除
2) 取样方法(选择方法):信号稳定后添加取样脉冲,只有输出信号(触发器实际上相似)
3) 吸收方法:在输出端增加小电容器以消除毛刺,但会影响波形。可添加整形电路。该方法不应用于中间级
4) 定方法在输出端添加D触发器以消除,但有时会影响时间顺序。最好通过修改电路和其他方法彻底消除它
5) 计数器后接的组合逻辑glitch将二进制编码转换为格雷码可以完全消除
6) 增加选择信号,避免毛刺
参考:https://www.cnblogs.com/IClearner/p/7233495.html

14. case/casez/csex的区别
首先要明确的是’?‘代表的不是don’t care,而是’z’。再有就是case/casez/casex其实都是可综合的,这一点也要记住
表达式的值是按从上到下的顺序来与分支条件的比较,如果相等,则不再与下面的分支相比较而直接执行该分支的语句

case语句的表达式的值有4中情况:0、1、z、x。4种是不同的,故表达式要严格的相等才可以操作分支语句。
casez语句中的表达式情况有三种:0、1、x。不用关心z,z可以和任何数值相等,即z =0.z= 1,z=x;
casex语句的表达式情况有二种:0、1.不用关心x和z。即x=z=0,x=z=1

综合时的差别:
1) case(不是casez/casex的时候)的index列表里面的x和z,都被综合工具认为是不可达到的状态就被去掉了
2) casez和casex里面的x/z都被认为是don’t care,所以综合出的电路会是一致的,因此这两个在综合来看没有孰优孰劣
具体参考:https://www.cnblogs.com/fhyfhy/p/4552387.html

17. 同步设计的优越性及设计规则
优越性:
1) 同步电路所有触发器都接一个CLK,有时钟树保证skew很小,经过工具优化很容易满足setup和hold的时序要求
2) 同步电路可以很容易的组织流水线,提高芯片的运行速度
3) 同步电路可以很好利用先进的设计工具,如静态时序分析工具等,加快设计进度

设计规则:
1)尽可能整个设计只使用一个主时钟,同时只使用同一个时钟沿
2)当全部电路不能用同步电路设计时,可以分成若干局部同步电路,局部同步电路之间的接口当作异步接口处理
3)电路实际频率不能大于理论最大频率,留有余量,保证芯片可靠
4)电路中所有寄存器、状态机在复位时都应处于已知的状态

18. 同步电路和异步电路的概念
 同步电路:电路中存储元件的状态只在时钟沿到来时才能同步发生变化,且是同一个时钟(或者是相位固定的同步时钟),占据了当前数字芯片的绝大多数部分。
 异步电路:存储元件的状态随输入信号的变化立刻发生变化,信号之间的传递通过握手协议来完成,异步电路时序很复杂,规模通常无法做大,限制了其用途。

19. 同步时序电路和异步时序电路的优缺点比较
同步电路优势:
1、 可有效避免毛刺,提高设计可靠性
2、 对PVT变化的适应性更强,而异步电路受PVT影响导致的器件延时变化大
3、 可以简化时序分析过程,而异步设计不能做STA
4、 工艺兼容性更好,可移植性强
同步电路缺点:
1、 需要更多逻辑资源,且过高的信后翻转率使得功耗大于异步设计
异步电路优势:
1、 不存在skew的问题

同步电路优点:
1) 可以利用先进STA工具,简化时序分析过程,时序收敛更方便
2) 可以更方便的组织流水线,提高芯片速度
3) 可以有效避免毛刺,提高设计可靠性
4) 工艺兼容性好,可移植性强

20. 功能覆盖率、代码覆盖率、断言覆盖率
功能覆盖率:用来衡量哪些设计特征已经被测试程序测试过的一个指标,首要的选择是使用更多的种子来运行现有的测试程序;其次是建立新的约束,只有在确实需要的时候才会求助于定向测试,改进功能覆盖率最简单的方法是仅仅增加仿真时间或者尝试新的随机种子。
验证的目的就是确保设计在实际环境中的行为正确。设计规范里详细说明了设备应该如何运行,而验证计划里则列出了相应的功能应该如何激励、验证和测量。功能覆盖率是和设计意图紧密相连的,有时也称为”规范覆盖率“,而代码覆盖率则是衡量设计的实现情况。

代码覆盖率:衡量验证进展的最简易的方式是使用代码覆盖率。这种方式衡量的是多少行代码已经被执行过。代码覆盖率衡量的是测试对于设计规范的“实现”究竟测试得有多彻底,而非针对验证计划。多少行代码已经被执行过(行覆盖率),在穿过代码和表达式中的路径中有哪些已经被执行过(路径覆盖率),单比特变量的值是0或1(翻转覆盖率),状态机中有哪些状态和状态转换被访问过(有限状态机覆盖率)
代码覆盖率包括:语句覆盖率(行覆盖率)、分支覆盖率(判定覆盖)、条件覆盖率、路径覆盖率、循环覆盖率、有限状态机覆盖率、翻转覆盖率
分支覆盖率和条件覆盖率的区别:条件覆盖不是将判定中的每个条件表达式的结果进行排列组合,而是只要每个条件表达式的结果true和false测试到了就OK了。因此,我们可以这样推论:完全的条件覆盖并不能保证完全的判定覆盖。

断言覆盖率测量断言被触发的频繁程度。

21. 条件运算符对x和z的处理

22. 乒乓buffer的概念
ping-pong buffer 也叫双缓存 double buffer, (必须是两个)就是一个缓存在写入的时候, 另一个缓存同时在处理的结构. 用来提高计算机运行速度, 在显示数据处理中常常用到。
可以提高系统的数据吞吐率,两个存储器是并行处理的。

乒乓buffer是一种常用的提高数据通路带宽的技术,是一种面积换性能的经典设计。个人理解:乒乓buffer并不能提高频率,但是可以提高数据吞吐率。
应用场景:
1)下游必须等到上游数据全部写完或者积累到某个程度才能开始读
2)上游必须等到下游数据全部读完或者读到某个程度才能开始写
如果没有以上约束,就没必要用乒乓buffer,直接使用普通的buffer即可。乒乓buffer要解决的关键性能点就在于上下游的互相等待这段latency

23. FPGA资源包括:
可配置逻辑块阵列(LUT/DFF/MUX)
可配置IO(多种电平标准)
布线资源:可编程内部连线资源
BlockRAM
时钟资源(PLL/clk/gating)
IP资源(DSP/PCIE)

24. 线与逻辑
OC(Open Collector)门,又称集电极开路,OD(Open Drain)漏极开路,通过名称就可以判断,OC门是针对三极管来说的,而OD门是针对MOS管而言
线与逻辑:即两个输出端(包括两个以上)直接互连就可以实现“AND”的逻辑功能
所谓漏极开路门(OD门)是指CMOS门电路的输出只有NMOS管,并且它的漏极是开路的。使用OD门时必须在漏极和电源VDD之间外接一个上拉电阻(pull-up resister)RP。如图所示为两个OD与非门实现线与,将两个门电路输出端接在一起,通过上拉电阻接电源

当两个与非门的输出全为1时,输出为1;只要其中一个输出为0,则输出为0,所以该电路符合与逻辑功能,即L=(AB)’(CD)’

25. Modelsim仿真步骤
vlib->vmap->vlog->vsim->run

26. 同步通信和异步通信有什么区别?UART、SPI和I2C分别属于什么类型的通信方式?
同步通信需要相同频率的时钟,逐字符发送接收,发一个收一个,收一个发一个,不能有间隙。
异步通信可以任意间隙,接受端随时准备,发送端任意时刻发送 ,需要加停止位和开始位。
UART异步通信 全双工 2线 RX TX
I2C 同步通信 半双工 2线 SDA SCL
SPI 同步通信 全双工 3线或四线 MOSI MISO SCLK SS(片选)

27. >>和>>>的区别

是逻辑右移,左边补0

是算术右移,考虑符号位,如果是0,则左边补0,如果是1,则左边补1

29. 奇偶检验
奇偶校验位是在一串二进制码的最后添加的一位,它使得整个二进制串的1的个数为奇数或者偶数。因此奇偶校验分为两种,奇校验和偶校验。
计算校验位需要对二进制码中的1进行计数。如果1的数量为奇数,并且使用偶校验,则校验位为1,使得整体1的个数为偶数。如果1的数量为偶数,并且使用偶校验,则校验位为0,使得整体1的个数为偶数。奇校验类似。奇偶校验位可以通过对所有的比特位进行异或得到。

30. 写一段代码,用半加器组成全加器
module half_adder(input_0, input_1, sum, carry);
input input_0, input_1;
output sum, carry;
assign sum = (input_0)^(input_1);
assign carry = (input_0)&(input_1);
endmodule

module full_adder(input_0, input_1, input_2, sum, carry);
input input_0, input_1, input_2;
output sum, carry;
reg sum_intermediate, carry_intermediate_0, carry_intermediate_1;
half_adder ha1(input0,input1,sum_intermediate,carry_intermediate_0);
half_adder ha2(sum_intermediate,input2,sum,carry_intermediate_1);
assign carry = (carry_intermediate_0)|(carry_intermediate_1);
endmodule

31. FPGA的基本结构?
FPGA由6部分构成,分别为可编程输入/输出单元、基本可编程逻辑单元、丰富的布线资源、嵌入式块RAM、底层嵌入功能单元、内嵌专用硬核
1、 可编程输入/输出单元
可通过配置适应不同的电器标准和I/O物理特性;可调整阻抗特性、输出驱动电流等。
2、 基本可编程逻辑单元
由LUT和寄存器构成,通过LUT来实现组合逻辑
3、 丰富的布线资源
包括全局性的专用布线资源、长线资源、短线资源等;
4、 嵌入式块RAM
可配置为单端口RAM、双端口RAM、CAM、FIFO等存储结构
5、 底层嵌入式功能单元
指通用程度较高的嵌入式功能块,如PLL、DSP等;
6、 内嵌专用硬核
通用性较弱的硬核,并不是每个FPGA都有的

32. 模块划分的依据以及注意事项
 划分依据
1) 按照逻辑功能划分:如IO、Memory、PLL、CORE、JTAG等,CORE中继续按照功能划分,这样做的好处,一个是可以很好的复用资源,另一个是更利于综合工具优化时序
2) 按照设计大小和规模划分:模块大小适中,设计大小一般设为一晚上的运行时间,白天人工处理和处理结果。模块太大,对综合工具和计算机配置要求高,模块太小,会造成层次过多,不利于综合工具优化
3) 按照时钟域划分:除了跨时钟域同步模块,其余模块每个仅有一个时钟,有利于时序约束和综合工具优化

 注意事项
1) 顶层模块应只是各个子模块的连接,不能有胶合逻辑
2) 寄存模块的输出
3) Pad与core分离,I/O、三态都应在顶层描述
4) 结构层次不能太多

33. 高频设计中,可以采用哪些手段提供系统工作频率?
 流水线
 寄存器配平
 关键路径优化
 串转并(如RCA改成超前进位加法器)
 树形结构
 迟滞信号后移
 DC逻辑优化中的flatten
 采用先进工艺

34. 如何提升设计的性能?
性能可以由带宽、吞吐率、时延来评估
 空间并行:面积换性能(更宽的总线等等)、DC逻辑优化中的flatten(将复杂的逻辑运算转换成积之和的形式)
 时间并行:流水线(充分调度资源,使得尽可能少的处于闲置状态)、行波进位加法器改成超前进位加法器
 算法和硬件的优化,硬件优化比如工艺、关键路径优化
35. 面积优化方法?
 资源共享
 串行化
 后端:对正slack的路径,移除buffer或者downsize

36. If-else和case综合的电路区别,以及如何采用case实现带优先级的选择?
https://mp.weixin.qq.com/s/EwjsNTmoX-INUtunVntCLw

if-else,assign a = c? b : d这种写法会综合出MUX
case,assign a = c&b | ~c&d这种写法会综合出AOI

思考:MUX的三种组织方式(优先级MUX级联、AOI、同优先级MUX级联)

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章