封面
版权信息
作者简介
内容简介
自序
第1章 什么是疑难点?
第2章 SystemVerilog疑难点集合
2.1 数据使用
2.1.1 组合型数组和非组合型数组怎么区分?
2.1.2 组合型数组和非组合型数组如何做赋值?
2.1.3 在使用enum或struct时添加typedef与否的差别是什么?
2.1.4 什么是静态变量和动态变量?
2.1.5 struct和struct packed区别在哪里?
2.1.6 关联数组的散列存储表示什么?
2.1.7 如何将队列插入到另外一个队列中?
2.1.8 队列在赋值时使用操作符{ },那么它属于组合型吗?
2.1.9 数组的选取可以用两个变量作为索引边界吗?
2.1.10 parameter、localparam和const有什么联系和差别?
2.1.11 多维数组的声明和使用,哪种方式更合适呢?
2.2 操作符使用
- APP免费
2.2.1 { }操作符的使用场景有哪些?
- APP免费
2.2.2 条件赋值符?:和条件语句if-else的执行结果一致吗?
- APP免费
2.2.3 if和iff的应用场景分别有哪些?
- APP免费
2.2.4 使用foreach在轮循数组时按照什么顺序呢?
- APP免费
2.2.5 运算符的优先级是否有必要记忆呢?
- APP免费
2.2.6 assign连续赋值可以赋值给logic(var)类型吗?
- APP免费
2.2.7 ::和.这两个符号使用起来有哪些区别?
- APP免费
2.3 模块、接口与方法
- APP免费
2.3.1 module中的方法在声明时是否要添加automatic?
- APP免费
2.3.2 interface在何处需要使用virtual来声明呢?
- APP免费
2.3.3 initial和always的执行顺序是否与代码位置有关?
- APP免费
2.3.4 interface的modport和clocking block如何使用?
- APP免费
2.3.5 module和interface之间可以相互例化吗?
- APP免费
2.3.6 方法的参数默认方向该如何辨别?
- APP免费
2.3.7 return的使用场景有哪些?
- APP免费
2.3.8 task与function的联系和差别在哪里?
- APP免费
2.3.9 方法的参数默认值该如何使用?
- APP免费
2.3.10 方法中参数方向inout和ref有什么差别?
- APP免费
2.3.11 module和interface中的变量声明必须放置在头部位置吗?
- APP免费
2.3.12 如何例化和传递多个相同类型的接口?
- APP免费
2.3.13 使用while和forever语句时需要注意什么?
- APP免费
2.3.14 系统函数和内建方法有什么区别?
- APP免费
2.3.15 接口和模块的联系和差别是什么?
- APP免费
2.3.16 program和module的联系和差别是什么?
- APP免费
2.3.17 多个线程在仿真调度中是如何在不同的域之间执行和切换的?
- APP免费
2.3.18 时钟块在使用时需要注意哪些地方?
- APP免费
2.3.19 如何连接和驱动双向端口信号?
- APP免费
2.4 类的使用
- APP免费
2.4.1 类的成员变量在声明时或在new函数中初始化有何区别?
- APP免费
2.4.2 new函数与其他函数有哪些不同?
- APP免费
2.4.3 关键词new的使用场景有哪些?
- APP免费
2.4.4 对象占用的空间什么时候会被回收?
- APP免费
2.4.5 this的使用场景有哪些?
- APP免费
2.4.6 对象拷贝的种类如何划分?
- APP免费
2.4.7 this和super有什么联系和差别?
- APP免费
2.4.8 子类成员如何覆盖父类成员?
- APP免费
2.4.9 子类句柄和父类句柄的类型如何转换?
- APP免费
2.4.10 为什么父类句柄经常需要转换为子类句柄?
- APP免费
2.4.11 虚方法声明和不声明的区别是什么?
- APP免费
2.4.12 虚方法的描述符virtual应该在哪里声明?
- APP免费
2.4.13 句柄一旦不指向对象,该对象就被回收了吗?
- APP免费
2.4.14 什么时候该使用local和protected?
- APP免费
2.4.15 class和virtual class的区别是什么?
- APP免费
2.4.16 virtual修饰符在哪些场景中会用到?
- APP免费
2.4.17 子类能够使用与父类相同名称但不同参数的方法吗?
- APP免费
2.4.18 使用参数类或者接口时要注意哪些?
- APP免费
2.5 随机约束使用
- APP免费
2.5.1 rand描述符可用于哪些变量类型?
- APP免费
2.5.2 数组使用rand声明会发生什么?
- APP免费
2.5.3 句柄使用rand声明会发生什么?
- APP免费
2.5.4 rand和randc的区别在哪里?
- APP免费
2.5.5 内嵌约束中的local::表示什么?
- APP免费
2.5.6 是否可以利用动态数组对变量值的范围进行约束?
- APP免费
2.5.7 多个软约束在随机化时有冲突是否可以解决?
- APP免费
2.5.8 结构体是否可对其成员使用rand描述符?
- APP免费
2.5.9 如何随机化对象的多个成员且使每次数据不重复?
- APP免费
2.5.10 子类会继承还是覆盖父类的约束?
- APP免费
2.6 覆盖率应用
- APP免费
2.6.1 covergroup的采样事件如何指定?
- APP免费
2.6.2 covergroup如何对变量进行采样?
- APP免费
2.6.3 是否可对covergroup中的不同coverpoint指定采样条件?
- APP免费
2.6.4 covergroup在哪里定义和例化更合适?
- APP免费
2.6.5 如果covergroup中的bins没有被采样,可能有哪些原因?
- APP免费
2.6.6 如何减少不关心的cross bins采样数据?
- APP免费
2.7 线程应用
- APP免费
2.7.1 semaphore使用时需要初始化吗?
- APP免费
2.7.2 mailbox使用时需要例化吗?
- APP免费
2.7.3 fork-join_none开辟的线程在外部任务退出后也会结束吗?
- APP免费
2.7.4 父线程和子线程之间的执行关系是什么?
- APP免费
2.7.5 disable fork和disable statement有什么差别?
- APP免费
2.7.6 嵌套的fork有没有可能被disable fork误伤呢?
- APP免费
2.7.7 使用for配合fork-join_none触发多个线程时需要注意什么?
- APP免费
2.8 断言应用
- APP免费
2.8.1 SV语言如何控制断言的开关?
- APP免费
2.8.2 仿真器如何控制断言的开关?
- APP免费
2.8.3 断言在哪里定义和例化更为合适?
- APP免费
2.8.4 如何更好地让接口中的断言实现复用性?
- APP免费
第3章 UVM疑难点集合
- APP免费
3.1 UVM机制
- APP免费
3.1.1 是否所有的UVM对象都应该用工厂创建呢?
- APP免费
3.1.2 工厂创建uvm_object是否需要为其指定parent?
- APP免费
3.1.3 为什么建议配置放在对象创建之前?
- APP免费
3.1.4 UVM环境中进入new()和build_phase()有什么区别?
- APP免费
3.1.5 在创建组件时采用new()有什么影响?
- APP免费
3.1.6 UVM配置类的参数修改应该发生在什么时间?
- APP免费
3.1.7 UVM的消息严重等级是否可以屏蔽或修改触发动作?
- APP免费
3.1.8 UVM的消息严重等级是否可以修改?
- APP免费
3.1.9 通过uvm_config_db可以完成哪些数据类型的配置?
- APP免费
3.1.10 使用uvm_config_db时传递的参数类型是否需要保持一致?
- APP免费
3.1.11 如何设置timeout时间防止仿真超时?
- APP免费
3.1.12 set_drain_time()的作用是什么?
- APP免费
3.1.13 组件的phase方法中继承父类的phase方法是在做什么?
- APP免费
3.1.14 如何控制UVM最后打印的消息格式?
- APP免费
3.1.15 配置对象的层次为什么应与验证环境的层次相同?
- APP免费
3.1.16 uvm_config_db和uvm_resource_db在使用时有什么区别?
- APP免费
3.1.17 在继承UVM某些参数类时是否需要指定参数类型?
- APP免费
3.1.18 UVM中的注册类有重名时会发生什么?
- APP免费
3.1.19 为什么在build_phase中访问更低层次的组件会失败呢?
- APP免费
3.1.20 在UVM中是否可跨层次调用某些组件的方法?
- APP免费
3.1.21 在使用uvm_config_db时要注意什么?
- APP免费
3.2 通信与同步
- APP免费
3.2.1 event和uvm_event的联系和区别是什么?
- APP免费
3.2.2 sequencer和driver的类型参数REQ/RSP需要保持一致吗?
- APP免费
3.2.3 TLM FIFO的方法是否可以直接调用?
- APP免费
3.2.4 为什么uvm_object类型不能例化TLM端口?
- APP免费
3.2.5 UVM回调函数类的使用特点有哪些?
- APP免费
3.2.6 uvm_event应从哪里例化和获取?
- APP免费
3.2.7 TLM端口为什么没有注册过呢?
- APP免费
3.3 测试序列
- APP免费
3.3.1 m_sequencer和p_sequencer有什么区别?
- APP免费
3.3.2 为什么不建议在sequence中使用pre_body()和post_body()?
- APP免费
3.3.3 sequence如何通过uvm_config_db获得配置的变量?
- APP免费
3.3.4 start()和`uvm_do_on()有何区别?
- APP免费
3.3.5 uvm_sequence_library的作用是什么?
- APP免费
3.3.6 配置default_sequence和调用sequence::start()是否可同时进行?
- APP免费
3.3.7 一些sequence调用raise_objection()的目的是什么?
- APP免费
3.3.8 每一个sequence都需要调用raise_objection()吗?
- APP免费
3.3.9 set_automatic_phase_objection()使用起来方便吗?
- APP免费
3.3.10 如何终止一个正在执行的sequence?
- APP免费
3.3.11 发送sequence和sequence item的优先级问题是什么?
- APP免费
3.3.12 为什么sequence通过get_response()可以得到正确的response?
- APP免费
3.3.13 通过uvm_config_db::set()或start()挂载sequence有哪些联系和差别?
- APP免费
3.3.14 通过uvm_config_db挂载default sequence需要注意什么?
- APP免费
3.3.15 为什么不建议使用default_sequence挂载顶层序列呢?
- APP免费
3.3.16 uvm_sequence::start()挂载的sequencer什么情况下需要指定?
- APP免费
3.3.17 virtual sequence需要获得某些信号和状态应该如何实现?
- APP免费
3.3.18 怎么让sequence感知coverage的增长并及时停止呢?
- APP免费
3.4 寄存器模型
- APP免费
3.4.1 寄存器模型验证常见的测试点有哪些?
- APP免费
3.4.2 使用set_auto_predict()和predictor更新寄存器有什么区别?
- APP免费
3.4.3 如何对寄存器的某些域进行读/写操作?
- APP免费
3.4.4 uvm_reg_filed::configure()中的参数volatile的作用是什么?
- APP免费
3.4.5 uvm_reg的回调函数{pre,post}_{write,read}的用途是什么?
- APP免费
3.4.6 与uvm_reg_cbs相关的回调函数的用处是什么?
- APP免费
3.4.7 adapter中的provides_responses属性的作用是什么?
- APP免费
3.4.8 多个uvm_reg_block和uvm_reg_map的关系如何影响对寄存器的访问?
- APP免费
3.4.9 如果并行利用RGM对寄存器做读/写可能出现什么问题?
- APP免费
3.4.10 寄存器模型结构是否支持多个top RGM?
- APP免费
3.4.11 uvm_reg_map的数据位宽如果与总线不同需要做什么处理?
- APP免费
3.4.12 uvm_reg_map的数据位宽如果与子一级不同需要做什么处理?
- APP免费
3.4.13 寄存器模型的镜像值和期望值什么情况下相等或不相等?
- APP免费
3.4.14 uvm_reg的读/写动作在发起后没有结束的原因可能是什么?
- APP免费
第4章 Testbench疑难点集合
- APP免费
4.1 编译与导入
- APP免费
4.1.1 package中可以定义什么类型?
- APP免费
4.1.2 library和package怎么区分?
- APP免费
4.1.3 文件中出现typedef class X是什么意思?
- APP免费
4.1.4 `include和import的差别在哪里?
- APP免费
4.1.5 `include应该在哪里使用?
- APP免费
4.1.6 应该怎么理解域(scope)呢?
- APP免费
4.1.7 在系统验证阶段如何避免反复编译以节省时间?
- APP免费
4.1.8 如何解决和避免类重名或模块重名的问题?
- APP免费
4.2 验证组件实现
- APP免费
4.2.1 监测器采样数据需要注意哪些?
- APP免费
4.2.2 模块中的信号可以强制赋值和监测吗?
- APP免费
4.2.3 如何对设计层次中的某个实例进行侵入式赋值?
- APP免费
4.2.4 如何在仿真结束时打印一些测试总结信息?
- APP免费
4.2.5 为什么有时无法在sequence或test中使用force语句?
- APP免费
4.2.6 为什么寄存器模型机构应与验证环境层次保持一致?
- APP免费
4.2.7 为什么建议执行任务时各组件统一使用run_phase或main_phase?
- APP免费
4.2.8 如何更新driver的驱动行为?
- APP免费
4.2.9 force和$hdl_xmr_force、uvm_hdl_force等命令有什么差别?
- APP免费
4.3 测试平台控制
- APP免费
4.3.1 如何将覆盖率数据信息与测试用例关联?
- APP免费
4.3.2 系统验证如何实现C用例和UVM用例之间的互动?
- APP免费
4.3.3 系统验证时测试用例有误,是否可以避免重新仿真而只做局部修改?
- APP免费
4.3.4 如何在仿真过程中更好地控制验证环境的结构和行为?
- APP免费
4.3.5 不同目标具备不同timescale是否合适?
- APP免费
4.3.6 能否对其他组件执行的raise objection强行操作drop objection?
- APP免费
4.3.7 如何在回归测试中减少冗余的测试用例?
- APP免费
4.3.8 验证环境遇到reset时如何协调各验证组件?
- APP免费
4.3.9 仿真出现错误信息时如何让仿真停止?
- APP免费
4.3.10 Verilog如何实现在相同结构中采用不同设计模块?
- APP免费
4.3.11 仿真器如何实现在相同的结构中采用不同的设计模块?
- APP免费
封底
更新时间:2023-12-06 18:27:17