DPI是直接编程接口的缩写,它是SystemVerilog和C/C++等外语编程语言之间的接口。DPI允许在接口两边的语言之间直接进行跨语言函数调用。在C语言中实现的函数可以在SystemVerilog中调用(import),在SystemVerilog中实现的函数可以使用DPI层在C语言中调用(export)。DPI支持跨语言边界的function(零时间执行)和task(耗时执行)。SystemVerilog数据类型是惟一能够在任何方向上跨越SystemVerilog和外部语言之间的边界的数据类型。
import的DPI函数是用C语言实现并在SystemVerilog代码中调用的函数。
export的DPI函数是用SystemVerilog语言实现并导出到C语言的函数,这样就可以从C语言调用它。
函数和任务都可以导入或导出。
SystemVerilog语言支持许多不同的内置系统任务和函数,通常在任务/函数名称前加上“$”前缀。此外,语言还支持添加用户定义的系统任务和功能。下面是一些系统任务和功能的例子(根据功能分类)。对于完整的列表,可以参考LRM。
定向测试是一种编写定向测试来验证设计中的每个特性的方法。约束随机测试是一种使用约束随机生成器自动生成激励的方法,该生成器根据设计规范生成激励。下表比较了两者的优缺点。推荐的方法是混合使用这两种方法——约束随机覆盖大部分验证空间,然后指导测试覆盖难以到达的边界条件。
定向测试 | 约束随机测试 |
---|---|
针对每个功能点需要编写一个或者多个测试向量 | 使用激励发生器根据功能点,自动生成符合功能规范的测试向量 |
每次测试都能很简单的进行追踪,具有很好的可视化和可预测性 | 测试是自动生成的,因此只能通过收集覆盖率,并观察覆盖率确保功能的验证 |
当设计特征被充分了解后,定向测试的编写会更加简单 | 开发约束随机测试平台更加复杂,也更加需要经验。需要更多的事件来设计验证平台。 |
对于复杂的设计,定向测试的编写会变得非常困难并且事件消耗会很大 | 与大型测试套件相比,约束随机生成器在开发后更容易维护 |
定向测试编写仅限于通过理解设计规范确定的场景 | 约束随机生成器可以结合随机配置来覆盖更多的场景和特性,从而更好地强调设计,并覆盖手动识别可能遗漏的一些场景 |
自检测试是指在测试结束时通过某种方式来检测测试结果的测试。在测试中,可以通过计算某些内存操作的结果或从DUT(如状态寄存器或任何其他信息)收集结果来预测结果。
「SPEC」:有两个输入和输出端口A和B,如上所示。每个端口可以接收大小在64到1518字节之间的可变数据包。每个包将有一个4字节的源地址(Source Address)和4字节的目标地址(Destination Address),以及跨包计算的数据和一个4字节的CRC,如下所示。数据包将根据目标地址(Destination Address)被切换到一个输出端口。
正确答案将在下一期公布,或者到下面的文章获取答案