skyeye 求助

62 views
Skip to first unread message

dcsf...@gmail.com

unread,
Mar 7, 2013, 10:46:39 AM3/7/13
to skyeye-s...@googlegroups.com
打算用skyeye做验证,但是有几个问题不知道skyeye能不能做,希望哪位高手能指点一二
1)skyeye如何做memory access 的log? 好像有个bug_module,但我不知道怎么用这个feature
2) 能否用skyeye得到某一个function的执行时间(cycle数)?

非常感谢!!


Michael.Kang

unread,
Mar 10, 2013, 10:29:40 PM3/10/13
to skyeye-s...@googlegroups.com
1、bus_log模块的使用,请阅读文档:http://skyeye.sourceforge.net/wiki/index.php/BusLogUsaage
2、SkyEye只能获得某个function的指令数,而不能获得周期数。因为比较准确的周期数和流水线
模型,cache等都有关系,而SkyEye并没有做这些部件的模拟。

-- 康烁

2013/3/7 <dcsf...@gmail.com>:
> --
> 您收到此邮件是因为您订阅了 Google 网上论坛的“skyeye-simulator”论坛。
> 要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 skyeye-simulat...@googlegroups.com
> 要向此网上论坛发帖,请发送电子邮件至 skyeye-s...@googlegroups.com
> 通过以下网址访问此论坛:http://groups.google.com/group/skyeye-simulator?hl=zh-CN
> 要查看更多选项,请访问 https://groups.google.com/groups/opt_out
>
>



--
www.skyeye.org

dcsf...@gmail.com

unread,
Mar 11, 2013, 10:03:12 PM3/11/13
to skyeye-s...@googlegroups.com
谢谢你的回复!
现在又有两个问题:
1)如果我想看function的指令数,该怎么看?
2)我现在像模拟一块scratchpad memory (这个东西是访问速度很快的内存,有自己的地址空间。我想用SkyEye模拟这个东西,从而使读取这个地址段的时间比读取Main Memory的数据时间少)。 如果SkyEye只能获得指令数,那Load 指令要消耗多长时间?比如说,Load指令应该比ADD R1, R2, R3 要快得多, 每个指令的时间能模拟吗?
3) SkyEye对我现在的工作有很大帮助,我想仔细研究,做一些自己的修改。不知有没有一个介绍源代码的文档。

问了这么多,麻烦你了!
传盛


在 2013年3月10日星期日UTC-4下午10时29分40秒,michael.kang写道:

Michael.Kang

unread,
Mar 12, 2013, 9:30:19 PM3/12/13
to skyeye-s...@googlegroups.com, tsinghua_bsp
2013/3/12 <dcsf...@gmail.com>:
> 谢谢你的回复!
> 现在又有两个问题:
> 1)如果我想看function的指令数,该怎么看?
我们有一个log的模块,其使用如下:
http://skyeye.sourceforge.net/wiki/index.php/LogUsaage
实现原理如下:
http://skyeye.sourceforge.net/wiki/index.php/%E8%AE%B0%E5%BD%95%E8%BF%90%E8%A1%8C%E6%97%B6%E7%9A%84PC%E7%9A%84%E6%A8%A1%E5%9D%97%E7%BC%96%E7%A8%8B%E7%A4%BA%E4%BE%8B

你可以参考一下,但是log只是记录执行过的指令,和你要求的功能不完全一致。

> 2)我现在像模拟一块scratchpad memory
> (这个东西是访问速度很快的内存,有自己的地址空间。我想用SkyEye模拟这个东西,从而使读取这个地址段的时间比读取Main Memory的数据时间少)。
> 如果SkyEye只能获得指令数,那Load 指令要消耗多长时间?比如说,Load指令应该比ADD R1, R2, R3 要快得多,
> 每个指令的时间能模拟吗?
SkyEye本质上是行为级别的模拟,如果要做时序的模拟。需要做额外的一些工作。你可以根据执行过的指令类型,以及
访问内存的速度,来给不同指令添加不同的cycle值,记录下来。

> 3) SkyEye对我现在的工作有很大帮助,我想仔细研究,做一些自己的修改。不知有没有一个介绍源代码的文档。
我们的internal文档如下:
skyeye.sourceforge.net/wiki/index.php/SkyEye_Internal_and_Architecture

写了一部分,但是还有很多地方不足,你如果愿意的话,可以对文档多提些建议和意见,我们慢慢补充。

-- 康烁
Message has been deleted
Message has been deleted
Message has been deleted

dcsf...@gmail.com

unread,
Mar 27, 2013, 4:13:07 PM3/27/13
to skyeye-s...@googlegroups.com, tsinghua_bsp, Chuansheng Dong
Michael,你好:
谢谢你的答复。
1) log-pc 好像在1.3.3中不支持,不过好像bus-log可以替代这个功能,不知我理解是否正确?
2) 对于每个指令cycle的设定,我找了一些数据,貌似下面这个连接可以做这种对应,不止这个信息是否可信,或者有什么问题?
3) 我想把cycle信息加入到skyeye中,看过你写的internal structure之后(如下链接)
是否可以这样做,在
static void
arm_step_once ()
{
//ARMul_DoInstr(state);
step++;
cycle++;
state->EndCondition = 0;
stop_simulator = 0;
state->NextInstr = RESUME;
/* treat as PC change */
state->Reg[15] = ARMul_DoProg(state);
//state->Reg[15] = ARMul_DoInstr(state);
FLUSHPIPE;
}
中,把cycles++ 替换成cycle += cycle_of_this_instruction. 不过我还不知道从哪里才能找到现在正在执行那个instruction。


又问了这么多,多谢!
传盛


在 2013年3月12日星期二UTC-4下午9时30分19秒,michael.kang写道:

dcsf...@gmail.com

unread,
Mar 27, 2013, 8:50:13 PM3/27/13
to skyeye-s...@googlegroups.com, tsinghua_bsp, Chuansheng Dong
还有一个问题,关于对cache的模拟。请问skyeye能否提供cache miss 的信息?在哪里设置cache的大小?

多谢!
传盛

在 2013年3月27日星期三UTC-4下午4时13分07秒,dcsf...@gmail.com写道:

Michael.Kang

unread,
Mar 28, 2013, 10:16:56 AM3/28/13
to skyeye-s...@googlegroups.com, tsinghua_bsp, Chuansheng Dong
没有提供cache miss的信息,不过你可以在内存访问 的时候把访问内存的地址序列记录下来,然后再
实现一个cache的替换算法,应该就可以模拟cache。

-- ksh

2013/3/28 <dcsf...@gmail.com>:

Michael.Kang

unread,
Mar 28, 2013, 10:31:42 AM3/28/13
to skyeye-s...@googlegroups.com, tsinghua_bsp, Chuansheng Dong
2013/3/28 <dcsf...@gmail.com>:
> Michael,你好:
> 谢谢你的答复。
> 1) log-pc 好像在1.3.3中不支持,不过好像bus-log可以替代这个功能,不知我理解是否正确?
恩,这个是我們的一个bug,目前正在修正。log-pc是记录执行的指令流。bus-log是记录的内存访问。

> 2) 对于每个指令cycle的设定,我找了一些数据,貌似下面这个连接可以做这种对应,不止这个信息是否可信,或者有什么问题?
> http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0165b/I1028171.html

应该可以,但是如果cycle-accurate simulation, 要考虑流水线的模型和处理器的部件,相邻指令执行是否有冲突或者并行等。

> 3) 我想把cycle信息加入到skyeye中,看过你写的internal structure之后(如下链接)
> http://skyeye.sourceforge.net/wiki/index.php/ARM%E5%A4%84%E7%90%86%E5%99%A8%E4%BB%BF%E7%9C%9F%E6%A8%A1%E5%9D%97%E5%88%86%E6%9E%90
> 是否可以这样做,在
>
> static void
> arm_step_once ()
> {
> //ARMul_DoInstr(state);
> step++;
> cycle++;
> state->EndCondition = 0;
> stop_simulator = 0;
> state->NextInstr = RESUME;
> /* treat as PC change */
> state->Reg[15] = ARMul_DoProg(state);
> //state->Reg[15] = ARMul_DoInstr(state);
> FLUSHPIPE;
> }
>
> 中,把cycles++ 替换成cycle += cycle_of_this_instruction.
> 不过我还不知道从哪里才能找到现在正在执行那个instruction。
可以,应该比较粗略一些。我们在state这个变量中有两个成员
state->last_instr 和state->CurrInstr, 应该分别记录了上次执行
的指令的opcode和当前执行指令的opcode

另外我们也在补充arm模块的内部实现文档,等完成一部分,可以
分享给大家。希望你能用SkyEye完成你想做的工作。

Thanks
MK
Message has been deleted
Message has been deleted

dcsf...@gmail.com

unread,
Apr 6, 2013, 9:24:35 PM4/6/13
to skyeye-s...@googlegroups.com, tsinghua_bsp, Chuansheng Dong
Michael,你好:
非常感谢你的解答!!
不过我有遇到了问题,还要麻烦您

1)我修改了/arch/arm/common/armemu.c中的 ARMul_Emulate26(ARMul_State * state)
添加了
state->cycle++;
好像之前的cycle是不会改变的,只在init_arm_arch中加1,从次以后,cycle一直是1. 
state中的NumInstr NumScycle NumIcycle 是不是输的是运行skyeye的PC的周期数? 

2)关于timer
我在ucosii4skyeye/arch/atmel-arch/ 中,没有找到到底是timer是在监测哪个变量的改变,来让timer不断累加的? 这个变量与skyeye的cpu周期数有关系吗?
我一直没看懂timer是怎么监测 正在被模拟的processor的周期数的。 


又问了这么多问题,麻烦您了!


在 2013年3月28日星期四UTC-4上午10时31分42秒,michael.kang写道:
2013/3/28  <dcsf...@gmail.com>:
> Michael,你好:
> 谢谢你的答复。
> 1) log-pc 好像在1.3.3中不支持,不过好像bus-log可以替代这个功能,不知我理解是否正确?
恩,这个是我�的一个bug,目前正在修正。log-pc是记录执行的指令流。bus-log是记录的内存访问。

dcsf...@gmail.com

unread,
Apr 6, 2013, 9:29:29 PM4/6/13
to skyeye-s...@googlegroups.com, tsinghua_bsp, Chuansheng Dong
对于问题(2),timer累加所依据的时钟,好像理论上就与arm processor中的时钟没有关系。 

由于我现在像做一些实时操作系统中的应用,所以需要把timer所使用的周期,和被仿真的arm processor的周期连接起来。不知如何才能做到这一点。

非常感谢!!

在 2013年4月6日星期六UTC-4下午9时24分35秒,dcsf...@gmail.com写道:
Message has been deleted

Michael.Kang

unread,
Apr 7, 2013, 3:33:57 AM4/7/13
to skyeye-simulator, tsinghua_bsp, Chuansheng Dong

Michael,你好:
非常感谢你的解答!!
不过我有遇到了问题,还要麻烦您

1)我修改了/arch/arm/common/armemu.c中的 ARMul_Emulate26(ARMul_State * state)
添加了
state->cycle++;
好像之前的cycle是不会改变的,只在init_arm_arch中加1,从次以后,cycle一直是1. 
state中的NumInstr NumScycle NumIcycle 是不是输的是运行skyeye的PC的周期数? 

恩,应该是我说错了。指令执行应该是一直在ARMul_Emulate26里面运行,你在while的大
循环中添加cycle++,应该是可以的。

NumInstr是指令数,NumScycle和NumIcycle这两个统计周期的变量,我现在也不是很清楚。
这些是历史遗留代码,应该好久没有人维护了。你可以用它们来统计不同的cycle。

2)关于timer
我在ucosii4skyeye/arch/atmel-arch/ 中,没有找到到底是timer是在监测哪个变量的改变,来让timer不断累加的? 这个变量与skyeye的cpu周期数有关系吗?
我一直没看懂timer是怎么监测 正在被模拟的processor的周期数的。 

timer是硬件SOC的一个外设,和CPU的周期没有直接关系。它们会有一个倍数,是由PLL决定的。
timer的累加目前比较简单,应该是在 io_do_cycle这个函数中累加的。

你现在的流水线模型是用的什么处理器?

-- ksh

dcsf...@gmail.com

unread,
Apr 7, 2013, 10:48:37 PM4/7/13
to skyeye-s...@googlegroups.com, tsinghua_bsp, Chuansheng Dong
Hi,Michael:
你好,谢谢你的回复!! 真的很有帮助!

我现在还没有考虑流水线结构,如果我想考虑的话,skyeye中有没有相应的函数可以使用? 我该在哪里改?

非常感谢!

传盛


在 2013年4月7日星期日UTC-4上午3时33分57秒,michael.kang写道:

Michael.Kang

unread,
Apr 8, 2013, 2:15:49 AM4/8/13
to skyeye-simulator, tsinghua_bsp, Chuansheng Dong
你也可以参考文档http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0207d/Chddcdbc.html
其中你问的关于Scycle和Icycle在其中的第2.5节“2.5. RVISS cycle types

Thanks
MK

HanChao

unread,
Apr 8, 2013, 2:28:42 AM4/8/13
to skyeye-s...@googlegroups.com, tsinghua_bsp

Hi 传盛
 
别着急考虑复杂的流水线。
先要确认几个问题:
 
1. 关于ARM每条指令周期的数据,你是从哪里得到的?
根据现有的公开资料,ARM每条指令周期的数据,只有ARMv5E版本之前的
现在的处理器都是没有公开的。
不知道你是不是有内部的资料?

2. 指令的周期和运行时间不是乘一个系数关系
在大多数时间内,人们关心的后者。
从ARMv4的ARM7开始就有流水线
指令总周期 = 取指令+译码+执行
但是有了流水线之后,在没有跳转的情况下,典型的情况是
每个流水线干一件事情,所以平均下来“一条指令一个周期”
而这个周期也就简化为“指令的执行周期”
 
3.由于“取指令”“译码”的时间平摊到多流水线中
因此所以很多时候,根除指令的周期,其实就是执行周期。
比如,你可以看一下乘加指令的执行周期,就比一般的MOV,ADD等指令要长

4.即使只考虑三级流水线,由于跳转要清空流水线
因此,那时候的“取指令”“译码”就浪费了。
也就是说,如果想得到总执行时间,还和指令的顺需要关系
 
5.即使ARMv4的ARM9,也是五级流水线
这个问题其实就已经相当复杂了(同样频率,同样代码,在同一个体系结构的运行时间不一定相同)
到了ARMv6,ARMv7,有了更多级流水线,
这是在运行之前,基本不能计算的问题
不知道你有什么特别的思路吗?

6.还有等SDRAM内存周期的实际硬件问题
 

Date: Sun, 7 Apr 2013 19:48:37 -0700
From: dcsf...@gmail.com
To: skyeye-s...@googlegroups.com
CC: tsingh...@googlegroups.com; dcsf...@gmail.com
Subject: Re: skyeye 求助

dcsf...@gmail.com

unread,
Apr 8, 2013, 1:21:59 PM4/8/13
to skyeye-s...@googlegroups.com, tsinghua_bsp
Hi Han Chao:
谢谢细致的指导!!
看来考虑流水线确实很麻烦

关于cycle types我还有一个问题不明白。 
Ncycle 是否可以看做是random access
Scycle 是否可以看做是burst read 中的一个周期? 
所以是不是Scycle可能只等于一个bus cycle, 但是Ncycle就是要有好几bus cycle来完成寻址,预充电等工作?

还有一个问题是官员SDRAM的。
我现在正在用skyeye模拟at91, 频率只有30MHz~70MHz, 这个频率比DRAM的频率还要低。 我的问题是在嵌入式应用中,内存的频率也像PC中的DRAM这么高吗? 66M,133M,200M? 还是会比较低一点? 

麻烦了 谢谢

在 2013年4月8日星期一UTC-4上午2时28分42秒,HanChao写道:

Hi 传盛
 
别着急考虑复杂的流水线。
先要确认几个问题:
 
1. 关于ARM每条指令周期的数据,你是从哪里得到的?
根据现有的公开资料,ARM每条指令周期的数据,只有ARMv5E版本之前的
现在的处理器都是没有公开的。
不知道你是不是有内部的资料?

我用的是ARM7TDMI, 是armv4的,
指令周期数是从这个连接找到的
 
2. 指令的周期和运行时间不是乘一个系数关系
在大多数时间内,人们关心的后者。
从ARMv4的ARM7开始就有流水线
指令总周期 = 取指令+译码+执行
但是有了流水线之后,在没有跳转的情况下,典型的情况是
每个流水线干一件事情,所以平均下来“一条指令一个周期”
而这个周期也就简化为“指令的执行周期”
这是不是就是书里说的Cycles per Instruction? 我现在没有考虑流水线, 其实相当于认为是理想的流水线,一个指令一个周期。另外一个用到的假设就是, 访问特定地址空间(scratchpad memory 地址空间),会很块,用1个cycles,访问main memory 地址空间很慢,4个cycle。 现在的模型却是太粗糙了。所以我也想考虑进流水线,但是感觉应该会很难。
 
3.由于“取指令”“译码”的时间平摊到多流水线中
因此所以很多时候,根除指令的周期,其实就是执行周期。
比如,你可以看一下乘加指令的执行周期,就比一般的MOV,ADD等指令要长
这句话我不太明白
“因此所以很多时候,根除指令的周期,其实就是执行周期。” 
是说 有写指令的周期(比较耗时的指令),就是执行周期,而不能像普通流水线中的指令(MOV, ADD)算作一个cycle?

4.即使只考虑三级流水线,由于跳转要清空流水线
因此,那时候的“取指令”“译码”就浪费了。
也就是说,如果想得到总执行时间,还和指令的顺需要关系
 
5.即使ARMv4的ARM9,也是五级流水线
这个问题其实就已经相当复杂了(同样频率,同样代码,在同一个体系结构的运行时间不一定相同)
到了ARMv6,ARMv7,有了更多级流水线,
这是在运行之前,基本不能计算的问题
不知道你有什么特别的思路吗?

现在我正在做一个关于嵌入式系统调度的东西,想要验证调度算法。 一开始没有意识到skyeye不能做cycle accurate的仿真,所以现在只能做些粗略的修改。 
关于真实的运行时间,这个确实很麻烦,之前看过一些worst case execution time的东西,感觉只能估测出一个上限,具体的值应该算不出来。 
有的软件aiT,sweet, 好像可以做这件事情,但是感觉在skyeye中考虑流水线是件很麻烦的事情。
6.还有等SDRAM内存周期的实际硬件问题
我看一些wcet估测的东西还要考DRAM refresh的不确定性。好像确实很麻烦。 

HanChao

unread,
Apr 8, 2013, 10:49:15 PM4/8/13
to skyeye-s...@googlegroups.com, tsinghua_bsp
现在CPU核的运行已经和指令集仿真软件越差越远了。
所谓N , S , I ,C指的是周期,还不能直接换算成时间,也不代表CPU真是运行的情况。
如果你有ADS,你会发现只有比较老的ARM核,在有这些周期的统计(后面处理器都不一样)
 
kangshuo昨天给你发的连接,是realview的说明,
realview ADS,skyeye其实都是软件,即使realview也不一定能表明CPU真是运行情况。
-----
你用的处理器如果是AT91RM9200就是ARM9的。
ARM7和ARM9都是ARMv4,这指的是指令集外部接口,而不说明内部实现也相同
一个最典型的差别:ARM9是5级流水线,有先后指令用同一寄存器,就要等的情况
此时,指令周期的复杂程度已经不是指令本身的问题了

注意:你用的文档是ARM9的
-----

 
 
 
 
 
 

 

Date: Mon, 8 Apr 2013 10:21:59 -0700
Reply all
Reply to author
Forward
0 new messages