📄 skyeye硬件模拟平台,第三部分 硬件仿真实现之一.htm
字号:
<LI>ARMword Mode:CPU模式索引值
<LI>ARMword instr, pc:pc是目前正在执行的程序指针,instr是pc所指地址的内容
<LI>ARMword loaded, decoded:loaded是正在加载的指令,decoded是正在解码的指令
<LI>unsigned NfiqSig:FIQ信号
<LI>unsigned NirqSig:IRQ信号 </LI></UL>
<LI>与协处理器模拟相关的域
<UL>
<LI>ARMul_CPInits *CPInit[16]:16个协处理器的初始化函数
<LI>ARMul_CPExits *CPExit[16]:16个协处理器的退出函数
<LI>ARMul_LDCs *LDC[16]:16个协处理器的LDC指令函数
<LI>ARMul_STCs *STC[16]:16个协处理器的STC指令函数
<LI>ARMul_MRCs *MRC[16]:16个协处理器的MRC指令函数
<LI>ARMul_MCRs *MCR[16]:16个协处理器的MCR指令函数
<LI>ARMul_CDPs *CDP[16]:16个协处理器的CDP指令函数
<LI>ARMul_CPReads *CPRead[16]:16个协处理器的读CP寄存器函数
<LI>ARMul_CPWrites *CPWrite[16]:16个协处理器的写CP寄存器函数
<LI>unsigned char *CPData[16]:16个协处理器的数据指针
<LI>ARMword CP14R0_CCD:在xscale体系结构的CP14协处理器中,用于统计时钟周期 </LI></UL>
<LI>与内存和MMU/CACHE相关的域
<UL>
<LI>mmu_state_t
mmu:mmu/cache的数据结构,在armmmu.h中定义,详解请参考"SkyEye的MMU/CACHE和Memory模拟实现"一节
<LI>mem_state_t
mem:memory的数据结构,在armmem.h中定义,详解请参考"SkyEye的MMU/CACHE和Memory模拟实现"一节
</LI></UL>
<LI>与统计相关的域
<UL>
<LI>unsigned long NumScycles, NumNcycles, NumIcycles, NumCcycles,
NumFcycles:用于统计不同状态下的周期数
<LI>unsigned long NumInstrs:当前执行的指令数 </LI></UL></LI></UL>
<P>其它与特定CPU和开发板相关的各种io寄存器的定义放到了各个与开发板相关的文件中,如skyeye_mach_at91/ep7312/pxa/sa.c等处,详解请参考"SkyEye的开发板IO模拟实现"。</P>
<P>与具体开发板相关的io部分<BR xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dw="http://www.ibm.com/developerWorks/">ARMul_io mach_io;<BR
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dw="http://www.ibm.com/developerWorks/">其中ARMul_io的结构目前为</P><A
name=IDAYMRKC><B></B></A><BR>
<TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc
border=1><TBODY>
<TR>
<TD><PRE><CODE>
struct ARMul_io
{
ARMword *instr; //to display the current interrupt state
ARMword *net_flag;//to judge if network is enabled
ARMword *net_int; //netcard interrupt
ARMword *lcd_is_enable; //turn lcd on?
ARMword *lcd_addr_begin; //the begining display mem addr of lcd
ARMword *lcd_addr_end; //the end display mem addr of lcd
};
</CODE></PRE></TD></TR></TBODY></TABLE>
<P>instr是记录当前的中断状态<BR
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dw="http://www.ibm.com/developerWorks/">net_flag判断网络选项是否打开<BR
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dw="http://www.ibm.com/developerWorks/">net_int用来记录网络中断号<BR
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dw="http://www.ibm.com/developerWorks/">lcd_is_enable来记录LCD是否使能<BR
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dw="http://www.ibm.com/developerWorks/">lcd_addr_begin记录lcd显存的起始位置<BR
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dw="http://www.ibm.com/developerWorks/">lcd_addr_end记录显存的结束位置</P>
<P><A name=IDALNRKC><SPAN class=atitle3>7.
SkyEye逻辑执行流程</SPAN></A><BR>了解SkEye的总体逻辑执行流程,对了解硬件的体系结构和软件/硬件的接口有较大帮助。从总体上,可把SkyEye逻辑执行流程按执行的时间顺序划分为两个阶段:</P>
<P>1. SkyEye加载与配置处理过程</P>
<P>2. SkyEye模拟执行过程</P>
<P>第一阶段为第二阶段的正常执行做了充分的准备,具体的执行内容包括;</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dw="http://www.ibm.com/developerWorks/">
<LI>读入带调试信息的操作系统执行文件(由GDB完成)
<LI>根据配置文件skyeye.conf的信息配置模拟硬件
<LI>如果skyeye.conf中存在binary image格式文件,加载这些文件
<LI>根据操作系统执行文件的内容加载调试信息(由GDB完成)
<LI>根据操作系统执行文件信息加载执行文件中的代码段和数据段等(由GDB完成)
<LI>执行相关模拟硬件的初始化函数 </LI></UL>
<P>其中总的初始化函数是位于wrapper.c中的init函数,它调用如下函数完成整个模拟硬件的初始化工作:</P>
<OL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dw="http://www.ibm.com/developerWorks/">
<LI>ARMul_EmulateInit:初始化与执行机器指令相关的数据ARMul_ImmedTable和ARMul_BitList
<LI>ARMul_NewState:初始化结构为ARMul_State的全局变量state
<LI>skyeye_option_init:初始化全局变量skyeye_config
<LI>skyeye_read_config:读取配置文件skyeye.conf并根据配置文件进行相关配置
<LI>nic_init:根据配置文件信息配置网络模拟环境
<LI>skyeye_config.mach->mach_init(state,
skyeye_config.mach):根据配置文件信息配置CPU和开发板的相关I/O函数
<LI>ARMul_Reset(state):进一步初始化全局变量state,并根据配置文件信息配置MMU/CACHE和memory
<LI>io_reset:初始化特定CPU和开发板的IO寄存器 </LI></OL>
<P>第二阶段根据特定硬件的配置描述,开始执行特定硬件模拟处理。整个过程围绕CPU执行指令展开,根据模拟硬件可分为如下几个阶段:</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dw="http://www.ibm.com/developerWorks/">
<LI>CPU执行三级流水线处理,即取指令、译码、执行指令,主要处理集中在armemu.c中的ARMul_Emulate32/26函数。
<LI>在执行指令过程中,如果有中断产生,CPU调整运行模式,并改变指令指向中断向量起始地址,主要处理集中在arminit.c中的函数ARMul_Abort函数、armemu.c中的ARMul_Emulate32/26函数。
<LI>在执行指令过程中,如果指令是协处理器指令,则把指令转交给协处理器模拟模块进行进一步处理,主要处理集中在文件armcopro.c、xscale_copro.c等文件中。
<LI>在执行指令过程中,如果发现指令是访问内存/IO的指令,则根据SkyEye模拟的特定CPU是否有MMU/CACHE分别进行处理:
<UL>
<LI>如果CPU有MMU/CACHE,则进入MMU/CACHE模拟模块,如果还需要内存访问,则进入memory模拟模块处理。如果访问地址属于IO地址空间,则转到特定CPU和开发板的IO模拟模块处理。
<LI>如果CPU没有MMU/CACHE,则直接进入memory模拟模块处理。如果访问地址属于IO地址空间,则转到特定CPU和开发板的IO模拟模块处理。
</LI></UL></LI></UL>
<P>处理访问内存/IO的指令的相关内容集中在armvirt.c;与MMU/CACHE处理、read/write
buffer(用于StrongARM和XScale体系结构的模拟)处理相关的文件包括armmmu.[ch]、mmu/*.[ch];与访问memory模拟有关的内容主要集中在armmem.[ch]中。</P>
<UL xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dw="http://www.ibm.com/developerWorks/">
<LI>如果要执行IO地址访问,这具体的处理过程由特定CPU和开发板IO模拟模块中的read/write_byte/halfword/word函数处理。
<UL>
<LI>为了模拟外设的执行,在执行指令过程的每一个周期,会执行一个io_do_cycle函数,它会调用特定CPU和开发板的IO模拟模块中的*_io_do_cycle函数,完成对时钟、网络输入输出、UART输入输出等的处理,并根据条件产生中断信号。
</LI></UL></LI></UL>
<P>下一篇文章将讨论 CPU/开发板仿真。</P>
<P><A name=resources><SPAN class=atitle2>参考资料 </SPAN></A>
<UL>
<LI>本文节自<A
href="http://www.china-pub.com/computers/common/info.asp?id=21879">《源码开放的嵌入式系统软件分析与实践——基于SkyEye和ARM开发平台》</A>一书的第三章,对
SkyEye 开源项目感兴趣的可以阅读本书。<BR><BR>
<LI><A
href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part1/index.shtml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dw="http://www.ibm.com/developerWorks/"
trackclick="no">SkyEye硬件模拟平台, 第一部分: SkyEye 介绍</A><BR><BR>
<LI><A
href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part2/index.shtml"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dw="http://www.ibm.com/developerWorks/"
trackclick="no">SkyEye硬件模拟平台,第二部分: 安装与使用</A><BR><BR>
<LI>在 <A href="http://www-900.ibm.com/developerworks/cn/linux/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dw="http://www.ibm.com/developerWorks/"
trackclick="no">developerWorks Linux 专区</A> 可以找到更多为 Linux 开发者准备的参考资料。
<BR><BR></LI></UL>
<P></P>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD><A name=author1></A><SPAN class=atitle2>关于作者</SPAN><BR>陈渝,
清华大学,通过<A href="mailto:yuchen@tsinghua.edu.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dw="http://www.ibm.com/developerWorks/"
trackclick="no">yuchen@tsinghua.edu.cn</A>
可以和他联系。</TD></TR></TBODY></TABLE><BR><IMG height=10 alt=""
src="SkyEye硬件模拟平台,第三部分 硬件仿真实现之一.files/c.gif" width=100 border=0><BR>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD align=right width="100%"><A
href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part3/s1/index.shtml#top">到页首</A></TD>
<TD width=5><IMG height=1 alt=""
src="SkyEye硬件模拟平台,第三部分 硬件仿真实现之一.files/c.gif" width=5 border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#000000 colSpan=2><IMG height=1 alt=""
src="SkyEye硬件模拟平台,第三部分 硬件仿真实现之一.files/c.gif" width=100
border=0></TD></TR>
<TR vAlign=top>
<TD bgColor=#ffffff colSpan=2><IMG height=8 alt=""
src="SkyEye硬件模拟平台,第三部分 硬件仿真实现之一.files/c.gif" width=100
border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR vAlign=top>
<TD>
<FORM
action=/developerWorks/cn/cnratings.nsf/RateArticle?CreateDocument
method=post><INPUT type=hidden value="SkyEye硬件模拟平台,第三部分: 硬件仿真实现之一"
name=ArticleTitle><INPUT type=hidden value=Linux name=Zone><INPUT
type=hidden
value=/developerWorks/cn/thankyou/thankyou_feedback.shtml
name=RedirectURL>
<SCRIPT language=javascript>document.write('<input type="HIDDEN" name="url" value="'+location.href+'">');</SCRIPT>
<A name=rating><B>您对这篇文章的看法如何?</B></A>
<TABLE cellSpacing=0 cellPadding=0 width=600 border=0>
<TBODY>
<TR>
<TD colSpan=5><IMG height=8 alt=""
src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之一.files\c(1).gif"
width=100 border=0></TD></TR>
<TR vAlign=top>
<TD width="16%"><INPUT type=radio value=5
name=Rating>真棒!(5)</TD>
<TD width="20%"><INPUT type=radio value=4 name=Rating>好文章
(4)</TD>
<TD width="24%"><INPUT type=radio value=3 name=Rating>一般;尚可
(3)</TD>
<TD width="22%"><INPUT type=radio value=2 name=Rating>需提高
(2)</TD>
<TD width="18%"><INPUT type=radio value=1 name=Rating>太差!
(1)</TD></TR></TBODY></TABLE><BR><B>建议?</B><BR><TEXTAREA name=Comments rows=5 wrap=virtual cols=60></TEXTAREA><BR><BR><INPUT type=submit value=提交反馈意见></FORM></TD></TR>
<TR vAlign=top>
<TD bgColor=#ffffff><IMG height=8 alt=""
src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之一.files\c(1).gif" width=100
border=0></TD></TR></TBODY></TABLE></TD>
<TD width=1><IMG height=1 alt=""
src="SkyEye硬件模拟平台,第三部分 硬件仿真实现之一.files/c.gif" width=1
border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD align=right>(c) Copyright IBM Corp. 2001, (c) Copyright IBM China
2001, All Right Reserved</TD></TR>
<TR vAlign=top>
<TD class=bbg height=21> <A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/index.shtml&origin=dwhead">关于
IBM</A><SPAN class=divider> | </SPAN><A
class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/privacy/index.shtml&origin=dwhead">隐私条约</A><SPAN
class=divider> | </SPAN><A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/legal/index.shtml&origin=dwhead">使用条款</A><SPAN
class=divider> | </SPAN><A class=mainlink
href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/contact/index.shtml&origin=dwhead">联系
IBM</A></TD></TR></TBODY></TABLE>
<SCRIPT language=JavaScript1.2 src="SkyEye硬件模拟平台,第三部分 硬件仿真实现之一.files/stats.js"
type=text/javascript></SCRIPT>
<NOSCRIPT><IMG height=1 alt=""
src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之一.files\c(2).gif" width=1
border=0></NOSCRIPT> </A></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -