⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skyeye硬件模拟平台,第三部分 硬件仿真实现之一.htm

📁 你想没有硬件就跑μc OS吗
💻 HTM
📖 第 1 页 / 共 4 页
字号:
          <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-&gt;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>&nbsp;&nbsp;<A class=mainlink 
      href="http://www-900.ibm.com/developerWorks/cn/cgi-bin/click.cgi?url=www-900.ibm.com/cn/ibm/index.shtml&amp;origin=dwhead">关于 
      IBM</A><SPAN class=divider>&nbsp;&nbsp;|&nbsp;&nbsp;</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&amp;origin=dwhead">隐私条约</A><SPAN 
      class=divider>&nbsp;&nbsp;|&nbsp;&nbsp;</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&amp;origin=dwhead">使用条款</A><SPAN 
      class=divider>&nbsp;&nbsp;|&nbsp;&nbsp;</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&amp;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 + -