Loading

chipyard——DUT/testbench/host

一,简介

chipyard中有两类DUT,一类是无法自启动,必须由主机将测试程序加载到DUT的内存中,并向DUT发信号,表示程序已准备好运行。还有一类可以自启动的DUT,具有bootrom,可自行加载程序。

chipyard主机(host computer/outside world)与DUT的两种通信方式:

  • 使用Tethered Serial Interface (TSI) 或者Debug Module Interface (DMI) 和 主机Front-End Server (FESVR)与testbench 通信
  • 使用 JTAG接口与主机OpenOCD和GDB进行通信

图示如下 :

 二,FESVR

FESVR是一个用于管理主机机器和RISC-V DUT之间通信的C++库。对于调试,它提供了一个简单的API,用于在DUT上重置、发送消息以及加载/运行程序。它还模拟外围设备。它可以与模拟器(VCS、Verilator、FireSim)结合使用,也可以在已tape-out的芯片的引导程序中使用。

具体来说,FESVR使用主机目标接口(HTIF)进行与DUT的通信,HTIF是一种通信协议。它使用FIFO非阻塞接口与DUT进行通信。它定义了一种协议,可以读/写内存,加载/启动/停止程序等。TSI和DMI均以不同的方式实现了HTIF协议,以便与DUT通信。

三,Tethered Serial Interface (TSI)

默认情况下,Chipyard使用Tethered Serial Interface (TSI)与DUT通信。TSI协议是HTIF的一种实现,用于向RISC-V DUT发送命令。

这些TSI命令是能够访问DUT内存空间的简单R/W命令。在仿真期间,主机将TSI命令发送到测试硬件中的仿真存根SimSerial(C++类)中,该测试硬件位于SimSerial Verilog模块中(均位于generators/testchipip项目中)。然后,这个SimSerial Verilog模块将由仿真存根接收的TSI命令发送到一个适配器,将TSI命令转换为TileLink请求。这个转换是由SerialAdapter模块(位于generators/testchipip项目中)完成的。在将事务转换为TileLink后,TLSerdesser(位于generators/testchipip中)将序列化事务并将其发送到芯片(这个TLSerdesser有时也称为数字串行链接或SerDes)。一旦芯片接收到序列化的事务,就会对其进行反序列化并掌控芯片上的TileLink总线处理请求。在仿真中,FESVR重置DUT,将测试程序写入内存,并通过中断向DUT指示启动程序(参见Chipyard启动过程)。在仿真中,使用TSI与DUT通信是目前最快的机制(与DMI/JTAG相比),也是FireSim使用的机制。

四,Debug Module Interface (DMI)

DMI 协议是 HTIF 的实现。为了使用 DMI 协议与 DUT 通信,DUT 需要包含一个调试传输模块 (DTM)。DTM 在 RISC-V 调试规范中给出,并负责管理 DUT 和 DMI 另一侧 (在本例中为 FESVR) 之间的通信。这是通过具有 HasPeripheryDebug 和 HasPeripheryDebugModuleImp 特征的 Rocket Chip 子系统来实现的。在模拟过程中,主机将 DMI 命令发送到名为 SimDTM (C++ 类) 的模拟存根,该存根位于 SimDTM Verilog 模块中 (两者都位于 generators/rocket-chip 项目中)。然后,这个 SimDTM Verilog 模块将接收到的 DMI 命令发送到 DUT,DUT 将其转换为 TileLink 请求。这个转换由位于 generators/rocket-chip 项目中的名为 DebugModule 的 DTM 完成。当 DTM 接收到要加载的程序时,它开始逐字节将二进制代码写入内存。这比 TSI 协议通信管道 (即 SimSerial/SerialAdapter/TileLink),直接将程序二进制写入内存,要慢得多。

五,JTAG 

DUT需要包含一个SimJTAG模块。一旦JTAG接口被公开,主机可以通过一个名为SimJTAG(C ++类)与DUT进行JTAG通信,该stub位于SimJTAG Verilog模块中(两者都位于generators / rocket-chip项目中)。当仿真正在运行时,该仿真存根将创建一个套接字,OpenOCD和GDB可以连接到该套接字。默认情况下,Chipyard设计实例化了已配置为使用JTAG的DTM(即RocketConfig)。

六,其他分析

假设基于chipyard的芯片已经tapeout并准备测试,我们可以用serial-link与之通信。

例如,ucb使用的一个常见的测试设置包括一个运行RISC-V软核的FPGA,该FPGA能够与DUT通信(通过FMC)。这个RISC-V软核将作为运行在DUT上的测试的主机。这是通过RISC-V软核运行FESVR,在FPGA上发送TSI命令给SerialAdapter/TLSerdesser来实现的。一旦命令被转换为序列化的TileLink,它们就可以通过一些模块发送到DUT。与仿真类似,如果芯片请求外部内存,它可以通过串行链路将事务发送回来。然后由FPGA DRAM来服务请求。如下图所示:

posted @ 2023-05-10 16:37  Haowen_Zhao  阅读(526)  评论(0编辑  收藏  举报