码迷,mamicode.com
首页 > 其他好文 > 详细

Rocket - debug - Example: Selecting Harts

时间:2019-12-09 13:58:41      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:ted   实例   fda   har   run   eee   apt   sele   blank   

https://mp.weixin.qq.com/s/HjG5S9binyniG_amC3Dr5Q

 

介绍riscv-debug的使用实例:如何选择核心,执行Halt/Resume请求。

 

1. Selecting Harts

 

可以有多个核心连接在一个调试模块上,如果要让一个核心暂停、重新执行、复位,或者执行调试命令,需要先选择目标核心。

技术图片

 

A. Selecting a Single Hart

 

可以在hartsel中填入目标核心的编号,选择单个核心:

技术图片

 

B. Selecting Multiple Harts

 

也可以使用核心数组窗口(hart array window)编号(hawindowsel)来选择一组核心,再使用掩码(hawindow)来选择窗口中的核心,来选择多个核心:

技术图片

 

2. dmcontrol

 

选择核心,需要使用dmcontrol寄存器:

技术图片

其中:

A. hartsello/hartselhi组成20位的hartsel,用于填入目标核心编号选择核心:

技术图片

B. hasel用于区分是使用hartsel单选一个核心,还是使用hartsel和hawindow多选多个核心:

技术图片

C. haltreq:用于请求被选中的核心暂停;

D. resumereq:用于请求被选中的核心继续执行;

E. hartreset:用于请求被选中的核心复位;

F. setresethaltreq:用于请求被选中的核心在复位时暂停;

 

3. halt summary

 

用于确定某个核心是否处于暂停状态。顾名思义,这里只是一个摘要。

 

A. halt summary 0

 

以hartsel的高15位选择一个窗口,低5位选择一个比特,每个比特代表一个核心是否暂停。

技术图片

haltsum0可以确定一个核心是否处于暂停状态。

 

B. halt summary 1

 

以hartsel高10位选择一个窗口,低5位选择一个比特,该比特代表最低5位表示的32个核心中是否有核心暂停。

技术图片

技术图片

haltsum1可以用于快速确定某核心是否处于暂停状态。因为一个比特代表32个核心,所以如果haltsum1无法做出判断,需要继续使用haltsum0进行判断。

 

C. halt summary 2

 

以高5位选择一个窗口,低5位选择一个比特,该比特代表最低10位表示的1024个核心中,是否有核心处于暂停状态。

技术图片

 

D. halt summary 3

 

以高5位选择一个比特,该比特代表低15位表示的32768个核心中,是否有一个核心处于暂停状态。

技术图片

 

4. Checking for Halted Harts

 

技术图片

若要确定某一个核心是否暂停,还是使用hartsel&haltsum0最快。

若要确定一个范围的核心是否暂停,可以使用hartsel&haltsum3/haltsum2/haltsum1来进行确定。

 

5. Halting

 

技术图片

 

6. Running

 

技术图片

 

7. Single Step

 

技术图片

 

Rocket - debug - Example: Selecting Harts

标签:ted   实例   fda   har   run   eee   apt   sele   blank   

原文地址:https://www.cnblogs.com/wjcdx/p/12010374.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!