背景:

在之前相关文章的基础上,有两个多线程(hart)的cpu,每个cpu都有一个jtag(TAP)的debug module(DM),通过菊花链相连(测试了一共有2个TAP的情况),再用下riscv-debug-spec的图,途中红色圆圈,2个通过菊花链相连。调试的时候,只会调试某个cpu的某个hart,所以需要通过target.cfg来做jtag chain的声明,以及打开哪一个hart进行调试。菊花链的连接方式在此不做介绍;

调试时候的配置:

假设菊花链的连接方式是  tdi -> cpu1 -> cpu0 -> tdo的连接方式。

配置方式如下,该文件设置为target.cfg,启动openocd的时候加入,随后连接telnet ,用之前文章描述的命令做调试。如果有其他问题,可以私信沟通。

adapter driver ust_jtagprobe##    如下设置jtag 的频率为5Mhz
adapter speed 5000gdb_port 3334##    我们用tcl和telnet,选择对应的port
telnet_port 4445
tcl_port 6667set _CHIPNAME riscv
set _CHIP1    riscv_1
set _CHIP0    riscv_0##    声明2个cpu,每个2 个hart
set _TARGETNAME0 $_CHIP1.hart0
set _TARGETNAME1 $_CHIP1.hart1set _TARGETNAME2 $_CHIP0.hart0
set _TARGETNAME3 $_CHIP0.hart1##     声明2个jtag TAP,根据chain的顺序,倒序添加TAP
jtag newtap $_CHIP0 cpu -irlen 5 -ircapture 0x01 -irmask 0x1f -expected-id 0x**
jtag newtap $_CHIP1 cpu -irlen 5 -ircapture 0x01 -irmask 0x1f -expected-id 0x**##    声明每个target,假设我们调试cpu1,hart0
target create $_TARGETNAME2 $_CHIPNAME -chain-position $_CHIP0.cpu -coreid 0 -rtos hwthread -defer-examine
target create $_TARGETNAME3 $_CHIPNAME -chain-position $_CHIP0.cpu -coreid 1 -rtos hwthread -defer-examinetarget create $_TARGETNAME0 $_CHIPNAME -chain-position $_CHIP1.cpu -coreid 0 -rtos hwthread
target create $_TARGETNAME1 $_CHIPNAME -chain-position $_CHIP1.cpu -coreid 1 -rtos hwthread -defer-examine##    选中cpu1,hart0,调试,examine结束后发起挂起的请求
$_TARGETNAME0  configure -event examine-end {halt
}

jtag的菊花链通常是怎么搞

假如jtag的TAP的IR是5bit

jtag TAP的IR/DR对应关系
IR地址 DR DR的宽度(bit)
0x1 IDCODE 32
0x10 DTMCS 32
0x11 DMI 40 (根据spec的需要酌情修改)
0x1f BYPASS 1

如果是上述2章描述的chain的互联方式,如果调试cpu1.hart0, 会选中cpu1的TAP,cpu0的IR会选择为BYPASS,假设cpu1的TAP选中IR为DMI,那么JTAG port 会capture_IR,shift_IR, shift的时候会是10bit,随后会update_IR,update 阶段,可以让cpu1 IR设为DMI,cpu0 IR 设为BYPASS,随后capture_DR, shift_DR, 此时shift 为41 bit,即 cpu1的40bit和cpu0的1bit,shift的chain共41bit,通过tdi逐个shift进来,如图所示 ,update_DR之后,cpu1 可以发起DMI操作,访问其debug module,从而实现调试。我理解多个TAP的chain都是相同的原理。

用telnet+openocd+jtag_dpi+vcs仿真调试RISCV的cpu(二,不同cpu的TAP菊花链连接,2TAP)相关推荐

  1. 用telnet+openocd+jtag_dpi+vcs仿真调试RISCV的cpu

    目录 背景: 需要了解的基础知识,此处不做介绍: 如何连结和调试 一些中间过程需要关心,记录 背景: Server    :tcl+telnet SW         :openocd+JTAG_DP ...

  2. Linux 运行vcs仿真命令,VCS使用以及命令行调试

    最近在学习VCS,现将VCS的一些使用心得记录下来. VCS是synopsys的仿真verilog的仿真器.基于linux系统.有命令行模式和图形化模式.图形化模式是用的dve. 以串口verilog ...

  3. ise仿真添加信号_「干货」推荐一款FPGA仿真调试鸟枪换炮的工具

    俗话说,隔行如隔山.非微电子专业没有做过芯片的同学,是不知道这个世界上还有效率更高的用来对Verilog/VHDL代码进行仿真的工具的.具体来讲,对于做FPGA开发的同学而言,需要知道除了ModelS ...

  4. RV-LINK:GDB 使用 RV-LINK 仿真器调试 RISC-V 程序

    RV-LINK:GDB 使用 RV-LINK 仿真器调试 RISC-V 程序 https://blog.csdn.net/zoomdy/article/details/101456186 zoomdy ...

  5. Synopsys VCS仿真编译选项

    VCS仿真编译选项 1. 扩展选项 2. 自带编译选项 1. 扩展选项 1. +vcs+line+wait:一直等待license. 2. +maxdelays/+mindelays:使用SDF文件中 ...

  6. gdb 调试 RISC-V

    优秀的产品需要有高效的调试手段,RISC-V的工具链中提供GDB. 使得切换到RISCV后,底软和内核工程师的工作效率不受损害. 我们使用一个有趣的程序来尝试gdb调试的效果.源文件 rot13.c ...

  7. Keil5的仿真调试

    Keil5基本的仿真调试操作: 首先点击魔法棒 然后输入你板子上所用的晶振,然后进入debug: 然后选择 Use Simulator,然后点击OK: 然后点击调试按钮: 然后就会出现调试页面: 我这 ...

  8. Apollo星火计划学习笔记——参考线平滑算法解析及实现(以U型弯道场景仿真调试为例)

    文章目录 1. Apollo参考线介绍 1.1 参考线的作用 1.2 导航规划的路线 1.3 为什么需要重新生成参考线 1.4 ReferenceLine数据结构 1.5 ReferencePoint ...

  9. 使用VCS 仿真后,通过DVE 观察波形,多维数据显示not load问题及解决方案

    版权声明:本文为CSDN博主「Silent_Majority」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/ ...

最新文章

  1. BCH热门应用SLP发币系统逐渐走向成熟
  2. wpf(c#)中获取ComboBox选项值
  3. fragment入门
  4. 怎么说呢。留个纪念,关于字符串的重载
  5. [零基础学JAVA]Java SE应用部分-35.JAVA类集之二
  6. 函数中的 arguments
  7. (二)Graphivz 简单结构图及子图
  8. 快慢指针算法及其应用
  9. java猜成语,成语疯狂猜-疯狂猜成语下载-javaweb下载站
  10. C++开源DirectUI库SOUI简介
  11. 采用qt技术,开发OFD电子文档阅读器
  12. 数字图像处理及matlab实现第三版相关概念总结
  13. 计算机网络——wireshark抓包
  14. 电脑可以上网,但是仍然显示无网络连接
  15. 开启大功率无线充电新时代
  16. 单精度浮点数计算机存储的理解(IEEE 754)
  17. Python数据分析--统计注册用户
  18. Android 进阶——Framework 核心ANR( Applicatipon No Response)机制设计思想详解
  19. Material Design Lite组件之徽章
  20. 树莓派研究笔记(7)-- lakka 《仙剑奇侠传》的完美移植

热门文章

  1. 小米消息限制 极光推送接入小米通道https://api.xmpush.xiaomi.com/v1/trace/quota/get
  2. python安装urllib3_CentOS7安装Certbot解决提示Python-urllib3安装失败
  3. 如何把录音转换成mp3格式?
  4. Angular 2 核心模块详解
  5. leetcode练习 对角线遍历(二维数组)
  6. CS 寄存器 和 IP 寄存器
  7. mongo里面多个条件之间的and,or组合查询
  8. 数据开放,对于货运行业来说有着怎样的现实意义?
  9. python中try finally的用法_Python中的try-finally子句
  10. 给你的MuseUI应用添加字体、样式