使用其他编程语言(例如Specman e [4]和Cocotb / Python [5])实现验证框架的用户已经习惯了运行时灵活的交互式调试。用户可以将模拟运行到某个时间点,暂停模拟,激活调试提示符,然后调用任何testbench中的函数来更改测试方案的行为,然后再继续运行。在SystemVerilog中,由于语言的限制,一旦编译了一个测试平台,用户在仿真过程中几乎无法控制测试场景。当前,在仿真运行期间,用户仅能在仿真环境中使用差异种子或poke/force信号。
设想以下情形:用户需要运行长达几小时的长时间模拟。在模拟过程中,测试平台检查器会报告错误。如果用户需要更改激励以调试问题,则他们必须更新SV代码,重新编译测试平台,并等待很长时间才能再次发现错误。借助交互式调试库,用户可以尝试不同的调试方案而无需重新启动模拟。他们可以通过寄存器读取来查询设备状态,可以通过寄存器写入来尝试新的设备配置,通过执行更高优先级的新UVM序列来更改由测试平台产生的激励,或者可以调用任何测试平台的函数来帮助诊断问题。他们可以尝试数十种不同的情况,并在几分钟而不是几小时内找出错误。调试周转时间的大幅度减少可提高生产率,并且将时间用于隔离错误,而不是等待模拟编译/运行。
M. Peryer编写了cli_seq_pkg [6]进行了较早的尝试,以通过引入命令行调试接口来支持UVM中的交互式调试。 cli_seq_pkg的最大缺点是,每个序列都需要一个包装器类。每个包装器类都是手动创建的,或者由预处理脚本在两个阶段中生成的-解决方案既繁琐又容易出错。此外,作者没有提供cli_seq_pkg的源代码,并且本文中的描述没有包含足够的详细信息,以使用户可以轻松地重新实现该软件包。
J. McNeal和B. Morris编写了RESSL [7]进行另一种尝试,以实现读取,评估,启动序列循环。它的实现对现有的测试平台具有很高的侵入性。 RESSL需要UVM的被黑版本。 读取,评估循环中支持的所有序列必须派生自公共基类并手动注册到测试台中的序列注册表中。这些要求使得在大规模生产项目中采用非常困难,除非管理层强烈要求在整个项目中推动这些变化。
本文介绍的UVM交互式调试库(uvm_debug)是独立开发的,没有[6] [7]的先验知识。 uvm_debug库支持cli_seq_pkg的所有函数,并间接支持RESSL的所有函数,但功能更多。作者希望将Specman的强大调试功能和灵活性引入SV-UVM,以便多个SV测试平台环境可以从中受益。 uvm_debug库可从github [3]作为开源项目获得。设置uvm_debug库很容易且无干扰:只需下载代码,然后将.sv和.c文件与testbench一起编译即可。用户不必经历复杂的测试台连接过程或UVM源代码中的任何补丁。只需调用一个简单的函数即可初始化uvm_debug对象。
使用其他编程语言(例如Specman e [4]和Cocotb / Python [5])实现验证框架的用户已经习惯了运行时灵活的交互式调试。用户可以将模拟运行到某个时间点,暂停模拟,激活调试提示符,然后调用任何testbench中的函数来更改测试方案的行为,然后再继续运行。在SystemVerilog中,由于语言的限制,一旦编译了一个测试平台,用户在仿真过程中几乎无法控制测试场景。当前,在仿真运行期间,用户仅能在仿真环境中使用差异种子或poke/force信号。
设想以下情形:用户需要运行长达几小时的长时间模拟。在模拟过程中,测试平台检查器会报告错误。如果用户需要更改激励以调试问题,则他们必须更新SV代码,重新编译测试平台,并等待很长时间才能再次发现错误。借助交互式调试库,用户可以尝试不同的调试方案而无需重新启动模拟。他们可以通过寄存器读取来查询设备状态,可以通过寄存器写入来尝试新的设备配置,通过执行更高优先级的新UVM序列来更改由测试平台产生的激励,或者可以调用任何测试平台的函数来帮助诊断问题。他们可以尝试数十种不同的情况,并在几分钟而不是几小时内找出错误。调试周转时间的大幅度减少可提高生产率,并且将时间用于隔离错误,而不是等待模拟编译/运行。
M. Peryer编写了cli_seq_pkg [6]进行了较早的尝试,以通过引入命令行调试接口来支持UVM中的交互式调试。 cli_seq_pkg的最大缺点是,每个序列都需要一个包装器类。每个包装器类都是手动创建的,或者由预处理脚本在两个阶段中生成的-解决方案既繁琐又容易出错。此外,作者没有提供cli_seq_pkg的源代码,并且本文中的描述没有包含足够的详细信息,以使用户可以轻松地重新实现该软件包。
J. McNeal和B. Morris编写了RESSL [7]进行另一种尝试,以实现读取,评估,启动序列循环。它的实现对现有的测试平台具有很高的侵入性。 RESSL需要UVM的被黑版本。 读取,评估循环中支持的所有序列必须派生自公共基类并手动注册到测试台中的序列注册表中。这些要求使得在大规模生产项目中采用非常困难,除非管理层强烈要求在整个项目中推动这些变化。
本文介绍的UVM交互式调试库(uvm_debug)是独立开发的,没有[6] [7]的先验知识。 uvm_debug库支持cli_seq_pkg的所有函数,并间接支持RESSL的所有函数,但功能更多。作者希望将Specman的强大调试功能和灵活性引入SV-UVM,以便多个SV测试平台环境可以从中受益。 uvm_debug库可从github [3]作为开源项目获得。设置uvm_debug库很容易且无干扰:只需下载代码,然后将.sv和.c文件与testbench一起编译即可。用户不必经历复杂的测试台连接过程或UVM源代码中的任何补丁。只需调用一个简单的函数即可初始化uvm_debug对象。
举报