桥接应用与设计鸿沟:利用GDB代理协议远程控制VCS仿真

SNUG San Jose 2008 2008 20 页

桥接应用与设计鸿沟:利用GDB代理协议远程控制VCS仿真

作者: Kelly D. Larson, MediaTek Wireless, Inc. (kelly.larson@mediatek.com)


摘要

本文详细介绍了一个最近DSP项目顶层验证测试平台的增强功能,该功能使应用工程师能够访问RTL环境,而无需离开他们已经熟悉的开发环境。通过SystemVerilog结合C语言例程,使用DPI 直接编程接口,我们实现了一种方法,通过利用低级GDB协议接口从全功能调试器远程控制VCS仿真。这提供了启动正常VCS仿真,然后启动远程调试会话,通过Unix套接字连接到仿真的能力。


1.0 引言

在现代SoC设计流程中,应用工程师和设计/验证工程师之间存在显著的差距。应用工程师通常使用高级语言(如C/C++)进行软件开发,而设计和验证工程师使用Verilog/SystemVerilog和EDA仿真器。当应用工程师需要在RTL环境中调试软件时,他们通常被迫学习不熟悉的EDA工具和流程。

本文介绍的方法通过GDB代理协议桥接了这一差距,允许应用工程师使用他们熟悉的GDB调试器远程控制和检查VCS RTL仿真。

2.0 概述

2.1 先前的方法

先前的方法要求应用工程师学习VCS命令行接口和波形查看器,这既耗时又低效。应用工程师需要在他们的开发环境(通常包括GDB或基于Eclipse的IDE)和EDA工具环境之间来回切换。

2.2 RTL与"冻结"时间的能力

RTL仿真的一个独特优势是能够在任意时间点"冻结"整个设计状态。与真实硬件不同,RTL仿真可以在任何时钟边沿暂停,允许对设计的完整状态进行检查和修改。这一特性对于调试复杂的软件-硬件交互至关重要。

2.3 通信

GDB代理协议通过Unix域套接字提供通信通道。VCS仿真创建一个监听套接字,GDB调试器作为客户端连接到该套接字。通信使用标准的GDB远程串行协议(RSP)数据包格式。

3.0 实现

3.1 初始目标项目

目标项目是一个多核DSP设计,包含多个处理器核心、共享存储器和各种外设。应用工程师需要能够在处理器上加载和调试固件,而无需离开他们的标准开发工具。

3.2 扩展测试平台

通过在顶层SystemVerilog测试平台中添加DPI-C函数,我们实现了以下功能: - 创建Unix域套接字服务器 - 解析GDB RSP数据包 - 将GDB命令映射到仿真控制操作 - 提供寄存器/存储器读写访问

3.3 处理断点

断点处理是实现的關鍵部分。当GDB设置断点时,Testbench中的DPI函数将断点地址映射到相应的RTL位置。当仿真执行到达断点时,仿真暂停并通过套接字通知GDB。

3.4 SystemVerilog DPI

DPI 直接编程接口(DPI)是SystemVerilog标准的一部分,允许SystemVerilog代码直接调用C函数,反之亦然。我们使用DPI来实现: - gdb_server_start() - 启动GDB服务器 - gdb_packet_handler() - 处理传入的GDB数据包 - gdb_memory_read() / gdb_memory_write() - 存储器访问 - gdb_register_read() / gdb_register_write() - 寄存器访问

3.5 GDB代理协议

GDB远程串行协议(RSP)定义了调试器和目标之间通信的数据包格式。

3.5.1 数据包格式

标准RSP数据包以$开头,以#结尾,后跟8位校验和。数据包内容为ASCII编码的十六进制数据。

3.5.2 使用的数据包

实现了以下标准GDB RSP数据包: - g - 读取所有寄存器 - G - 写入所有寄存器 - m - 读取存储器 - M - 写入存储器 - s - 单步执行 - c - 继续执行 - z/Z - 清除/设置断点

4.0 结果

GDB代理接口成功地在实际项目中使用,实现了以下成果: - 应用工程师能够使用标准的GNU工具链调试固件 - 调试周转时间减少约50% - 应用工程师无需学习EDA工具即可访问RTL环境 - 系统支持多个并发GDB会话(每个处理器核心一个)

5.0 初始局限性与未来增强

5.1 缓存支持

初始实现不支持对处理器缓存的直接访问。计划在未来版本中通过扩展DPI接口来支持缓存状态查询。

5.2 完整寄存器写支持

当前实现对寄存器写入提供有限支持。未来计划实现对所有架构寄存器的完整读写支持。

5.3 异步暂停

当前实现仅在同步点(时钟边沿)支持暂停。计划添加对GDB中断命令的异步暂停支持。

5.4 SoC集成

计划将该方法扩展到支持多处理器SoC配置,包括异构处理器集群。

图片索引

本文共3张图片,存放于 _images/ 目录。