首页 > 其他分享 >chipyard——DUT/testbench/host

chipyard——DUT/testbench/host

时间:2023-05-10 16:47:16浏览次数:45  
标签:chipyard TSI DMI FESVR 通信 host 主机 DUT

一,简介

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来服务请求。如下图所示:

标签:chipyard,TSI,DMI,FESVR,通信,host,主机,DUT
From: https://www.cnblogs.com/hwzhao/p/17388405.html

相关文章

  • fatal: unable to access 'https://gitee.com/...': Could not resolve host: gitee.c
    把https模式换成ssh用gitremote-v查看使用的是https还是ssh等$gitremote-v>originhttps://github.com/USERNAME/REPOSITORY.git(fetch)>originhttps://github.com/USERNAME/REPOSITORY.git(push)使用gitremoteset-url命令将远程URL从HTTPS更改为SSH$gitremote......
  • rocky linux:修改hostname(Rocky Linux 9.1)
    一,修改hostname:1,通过hostnamectl命令修改hostname[root@blog~]#more/etc/hostnameblog[root@blog~]#hostnamectlset-hostnameimg[root@blog~]#more/etc/hostnameimg可以看到原本保存在/etc/hostname中的值在用hostnamectl命令处理后发生了变化所以我们也可以......
  • flink Connecting to remote task manager 'localhost/127.0.0.1:44489
    问题:启动集群后,执行任务时失败:Causedby:org.apache.flink.runtime.io.network.partition.consumer.PartitionConnectionException:Connectionforpartition47d4a412246bdbbc3447e1968e07c821#1@04049d45261135a1a8bae9c8f62a1ba4_0a448493b4782967b150582570326227_1_0not......
  • The connection to the server localhost:8080 was refused - did you specify the ri
    遇到如下问题:[root@k8s-node1~]#kubectlgetpodTheconnectiontotheserverlocalhost:8080wasrefused-didyouspecifytherighthostorport?解决方式:cd/etc/kubernetes/查看到有个文件:kubelet.conf(你们的有可能是admin.conf)执行命令echo"exportKUBECONFIG......
  • Git--no matching host key type found. Their offer: ssh-rsa
     解决方法:在用户目录下的.ssh文件夹下新建一个config文件Host*HostKeyAlgorithms+ssh-rsaPubKeyAcceptedKeyTypes +ssh-rsa......
  • Material Design WPF DialogHost 实现异步关闭
    在撰写一个按钮处理数据同步的事件时,处理前先弹出一个窗口,告知用户正在处理数据,处理数据后再关闭这个弹窗。 Button按钮的事件代码原先是这样,预想中是处理一些事情后,可以自动关闭弹窗。DialogHost_MySelf就是DialogHost。1this.DialogHost_MySelf.IsOpen=true;2/**......
  • ssh远程连接报错ssh_exchange_identification: Connection closed by remote host
    被远程主机拒绝此类报错为原因1:ssh连接数量过多导致如果问题是偶尔能登录一次,大多不能登录,建议往第一点方向排查[root@localhost~]#cat/etc/ssh/sshd_config|grepMaxSessions#MaxSessions10[root@localhost~]#cat/etc/ssh/sshd_config|grepMaxStart#MaxStartups10......
  • DUTCTF 201x RE20
    http://www.shiyanbar.com/ctf/50从FLAG上来看,应该是DUTCTF的原题,中等难度。20分也不高。首先搜索字符串,找到flag字样,然后上溯到函数头。之后对这段汇编代码进行分析,等效的伪代码是:charstr1[0x32];//ebp-0x64charstr2[0x32]="kow"*7;//ebp-0x44charstr3[0x32]=......
  • chipyard——自定义配置生成和前仿
    一,生成配置前面用rocket-chip仓库做了生成和前仿,为了方便扩展外设,这里转到chipyard仓库。首先我们生成一个之前用的配置: 为删SimDTM(我的测试框架不需要),先在rocket的subsystem/config下创建一个class: 然后在chipyard顶层创建config: makeCONFIG=MyConfig创建设计 发......
  • 解决报错requests.exceptions.ConnectionError: HTTPSConnectionPool(host=‘xxx’, p
    解决报错requests.exceptions.ConnectionError:HTTPSConnectionPool(host=‘xxx’,port=443):Maxretriesexceededwithurl使用requests时出错解决报错requests.exceptions.ConnectionError:HTTPSConnectionPool(host=‘xxx’,port=443):Maxretriesexceededwithurl......