相比于SystemVerilog的语法和UVM的框架规范,在利用这两者搭建测试平台的过程中,仍然会出现一些对于芯片验证工程师而言“稀奇古怪”的问题。如果是SystemVerilog的语法问题,那么验证工具在编译时可以立刻告诉我们这一点。如果是UVM的框架规范问题,我们也可以在搭建测试平台之前,根据公司已有的框架建议去遵循,以便可以与其他验证框架保持一致。
而验证技术的疑难点,还无法用语法和框架规范去覆盖。验证技术的疑难点我们在本书中将其划分为三大类,分别是SystemVerilog疑难点、UVM疑难点和Testbench疑难点。这些疑难点大多来自日常工作中遇到的疑问和困难。工作中的疑问,会让这些问题一直藏在代码中,直到某一天暴露出来,而验证工程师才发现,他之前对该疑问的理解不够全面,甚至推翻了他对这一问题的理解;工作中的阻碍,又会常常让验证工程师受困于某个技术问题,在不能找到合适的解决方法之前,他可能受迫于项目压力,找了其他临时的替代办法绕过了这个问题,而这个问题在他没有解决之前,将会一直成为他的一个技术盲点。
如果我们既可以从理论、语法着手来解释一些疑问,也可以从一些实际代码用例来解决一些技术困难,那么这将为数以万计的验证工程师带来实际帮助。本书中的疑难点,一方面来自作者与验证工程师们交流问题时的总结,另一方面来自作者从事验证技术咨询时,帮助客户解决的问题。
基于与路科紧密联系的上千位工程师每日的工作问题交流,作者将近170个问题和近100个参考用例以合适的组织结构展现给读者。可以预见的是,在未来的几年中,作者还将继续收集代表性的疑难点,并持续更新本书的内容。本书的初衷是帮助验证工程师有效地处理好日常技术疑难点,尤其是当他身边缺少一位可以商量技术问题的伙伴时。
读者在阅读本书时,既可以利用休息的片段,找到自己感兴趣的疑难点翻阅,也可以在遇到某个问题时,到书里试着找到解决问题的线索。读者也可以用完整的时间从前到后翻阅这本书。如果读者的问题暂时没有能得到解决,可以将问题发送到邮箱bin.liu@rockeric.com。这些好的问题,也将持续被收录到书中,用来帮助验证工程师持续提升工作效率。
在每一个疑难点中,本书先分析再给出建议,对疑难点涉及的技术点单独给出关键词,在避坑指南中对易出错的地方给出提示。同时,对于一些需要结合特定场景的疑难点,给出了完整的参考代码。为便于读者随手做笔记,在疑难点的最后预留了空白处。