文章目录
-
- 前言
- Verilog 常见面试问题
-
- 基础级别问题
-
- 1. 阻塞和非阻塞赋值之间的区别
- 2. 任务和函数之间的区别
- 3. wire和reg之间的区别
- 4. 什么是Verilog中的generate块及其用途?
- 5. while循环和do-while循环之间的区别。
- 6. 任务中自动关键字是什么意思?
- 7. 组合电路和时序电路之间的差异。
- 8. 触发器(flip-flop)与锁存器(latch)之间的差异。
- 9. 通过示例解释静态变量与自动变量之间的差异。
- 10. Mealy状态机与Moore状态机之间有何不同?
- 11. 使用2:1 MUX实现XOR门
- 12. 使用2:1 MUX实现OR门
- 13. $stop 和 $finish 有何不同。
- 14. 设计一个频率/2电路,其中包含DFF。
- 15. $random 和 $urandom 有何不同。
- 中等级别问题
-
- 1. wire和reg的默认值是什么?
- 2. 解释惯性延迟(inertial delay)和传输延迟(transport delay)。
- 3. inter和intra赋值延迟的区别
- 4. full case和parallel case之间的区别
- 5. casex和casez之间的区别
- 6. 你能在同步模式和异步模式下实现DFF吗?
- 7. Verilog中#0是什么及其用途?
- 8. 如何在测试台中生成两个不同的时钟?
- 9. 使用2:1 MUX实现Flip-Flop。
- 10. 为序列检测器1010设计重叠和非重叠FSM。
- 11. 设计Mod-3计数器并绘制其波形图。
- 12. 编写一个D-Latch的Verilog代码。
- 13. 如何覆盖现有参数值?
- 14. 什么是综合?
- 15. 编写RTL代码以生成60%占空比时钟。
- 16. 编写RTL代码以生成100MHz时钟。
- 17. `define 和 `include 之间的差异。
- 18. Verilog中force 和 release 是什么? 下面这段代码将输出什么结果?
- 困难级别问题
-
- 1. 为什么program block内不经常使用always block?
- 2. FIFO是什么,编写Verilog代码进行设计?
- 3. 如果if-else中没有else部分会发生什么?
- 4. 解释FIFO中的overflow和underflow。
- 5. FIFO的所有不同应用有哪些?
- 6. 使用额外寄存器和不使用额外寄存器,来实现交换寄存器内容
- 7. 推断锁定(infer latch)意味着什么?如何避免它?
- 8. 如何在Verilog中定义 strength ?
- 9. Verilog中参数覆盖(parameter overriding)是什么?
- 10. 设计 divide-by-5 module。
- 11. 为5:1 MUX编写Verilog代码。
- 12. 你能谈谈Verilog事件调度器(scheduler)吗?
- 13. 双口RAM和FIFO之间的区别。
- 14. 如果c是时钟,x、y、z将输出什么?
- SystemVerilog 常见面试问题
-
- 基础级别问题
-
- 1. `byte a` 和 `bit [7:0] a`之间的区别
- 2. 为什么在SV中引入logic?或者为什么reg和wire不足以满足需求?
- 3. 寄存器(reg)和逻辑(logic)之间的区别是什么?
- 4. 2状态变量和4状态变量是什么?请提供一些例子。
- 5. 整数(integer)和int之间的区别是什么?
- 6. 打包数组(packed array)和非打包数组(unpacked array)之间的区别是什么?
- 7. 动态数组与关联数组有何不同?
- 8. 动态数组与队列有何不同?
- 9. 结构体(structure) 和联合体(union) 之间的区别是什么?
- 10. while循环与do while循环有何不同?
- 11. 函数(function) 和任务(task) 之间的差异是什么?
- 12. 传值调用(pass-by-value) 和传址调用(pass-by-reference) 方法分别是什么方法?
- 13. 为什么需要在SystemVerilog中进行随机化(randomization)?
- 14. 模块(module) 和程序块(program block) 之间有何差异?
- 15. 程序块如何避免竞争条件(race condition)?
- 16. `===`运算符与`==`运算符有何不同?
- 17. 什么是SystemVerilog接口,为什么要引入它们?
- 18. modport(模式端口, modport ) 和时钟块(clocking block), 它们分别指代什么?
- 19. final块是什么?initial块和final块之间的区别是什么?
- 20. 交叉覆盖(cross-coverage) 是指什么?
- 21. 代码覆盖率(code coverage) 和功能覆盖率(functional coverage) 有何不同?
- 22. 代码覆盖率的不同类型是哪些?
- 中等级别问题
-
- 1. 如何查找与关联数组项相关的索引?
- 2. fork-join、fork-join_any 和 fork-join_none 的区别
- 3. `always_comb` 和 `always@(*)` 之间的区别?
- 4. 结构体和类之间的区别
- 5. 静态变量和自动变量之间的区别
- 6. 类中静态方法和自动方法之间的区别
- 7. new[ ] 和 new() 之间有什么不同?
- 8. 浅拷贝(shallow copy)和深拷贝(deep copy)之间有什么不同?
- 9. 面向对象编程概念如何在验证中增加好处?
- 10. 继承是什么?
- 11. SystemVerilog 中 'super' 和 'this' 关键字是什么意思?
- 12. 多态性及其优点是什么?
- 13. 虚函数是什么?
- 14. 作用域解析运算符有何用途?
- 15. 虚函数和纯虚函数之间的差异。
- 16. 什么是虚接口及其需求是什么?
- 17. 虚类是什么?
- 18. 参数化类是指哪些内容?
- 19. rand 和 randc 有何不同?
- 20. pre_randomize 和 post_randomize 的差异。
- 21. 解释双向约束(bidirectional constraints)。
- 22. 是否可以覆盖现有约束条件?
- 23. 随机化操作符 :/ and := 的差异.
- 24. std::randomize 是做什么用途的 ?
- 25. 是否可以从约束调用一个函数 ? 如果可以,请举例说明。
- 26. 为提供范围0-100分布70%,并将剩余30%分配给范围101-255的8位变量编写约束。
- 27. 使用SV约束在10到30的范围内推导奇数。
- 28. 编写一个可被5整除的限制条件。
- 29. 编写一个检测8位序列中1个奇数数字的限制条件。
- 30. 如何禁用约束?
- 31. 如何禁用随机化操作?
- 32. 什么是 `timescale?
- 33. 静态转换和动态转换之间有什么区别?
- 34. 邮箱和队列之间有什么区别?
- 35. 信号量是什么,它在哪种情况下使用?
- 36. 时钟块中输入和输出抖动(skew)是什么?
- 37. 断言类型有哪些?
- 38. `$strobe`、`$monitor` 和 `$display` 之间的差异.
- 39. ignore bins 是指什么 ?
- 40. `ignore` 和 `illegal bins` 之间有何不同.
- 41. 如何定义回调函数 ?
- 42. DPI 是什么 ? 解释 DPI 导出和导入.
- 43. SystemVerilog 中按值传递和按引用传递是指什么?
- 44. SVA 中含义运算符是指什么? 解释其类型.
- 45. 以下代码生成了哪些 bins?
- 困难级别问题
-
-
- 1. 变量在SystemVerilog构造函数中的默认值是什么?
- 2. local 和 protected 访问限定符是什么?
- 3. 如何在SystemVerilog中实现randc函数?
- 4. 是否可以不使用rand或randc关键字生成随机数?
- 5. @posedge和$rose之间的区别是什么?
- 6. 如何确保地址范围从0x2000到0x9000被覆盖?
- 7. 谈论基本testbench components。
- 8. 解释验证周期及其闭合性。
- 9. 如何使用功能覆盖测试中断功能的功能性?
- 10. Verification中分层架构是什么意思?
- 11. 如何在SystemVerilog Monitor和Scoreboard之间建立通信?
- 12. class-based testbench和module-based testbench之间的区别。
- 13. 如果代码覆盖率为100%但功能覆盖率太低,您会采取哪种方法?
- 14. 如果功能覆盖率为100%但代码覆盖率太低,您会采取哪种方法?
- 15. 编写检测故障(glitch detection)的断言。
-
前言
VLSI领域是一个不断发展的行业,也被认为是所有行业的基础,因为现在大多数行业都依赖于计算机,这意味着它们与半导体领域相关。这是一个广阔的产业,可以在设计、验证(IP、子系统、SoC、形式化验证等)、物理设计、DFT、FPGA等不同子领域中工作。
根据工作描述可能涉及到候选人需要掌握各种主题, 包括**数字电路、Verilog、SystemVerilog、UVM、Assertions、TLM、Coverage、物理设计(Physical Design),可测试性设计(DFT,Design for Testability)、静态时序分析(STA)**等。如今,计算机体系结构中的缓存机制(Caching mechanism),一致性协议(coherency protocols),流水线概念(pipeline concept),并行性(parallelism),内存(memories)等)在处理器或控制器的开发中也扮演着重要角色。
本文将总结Verification领域最常问的面试问题,并将其分为三个类别 - Verilog语言和SystemVerilog语言以及UVM方法论的基本级别问题, 中级问题和困难级别问题。