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

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

📁 你想没有硬件就跑μc OS吗
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                        *data = mem_read_word(state, pa);
                else {
                        printf("SKYEYE:2 sa_mmu_read error: unknown 
data type %d\n", datatype);
                        exit(-1);
                }
		return 0;
	}

    /*根据读类型和Endian模式整理结果*/
datatrans:	
        if (datatype==ARM_HALFWORD_TYPE){
             temp = *data;
offset = (((ARMword) state->bigendSig * 2) ^ (real_va & 2)) << 
3; /* bit offset into the word */
             *data= (temp>> offset) & 0xffff;
        } else if (datatype==ARM_BYTE_TYPE) {
             temp = *data;
offset = (((ARMword) state->bigendSig * 3) ^ (real_va & 3)) <<
 3; /* bit offset into the word */
             *data=(temp >> offset & 0xffL);
        }
end:
	return 0;
}
</CODE></PRE></TD></TR></TBODY></TABLE>
      <P>SA MMU的mcr操作</P><A name=IDAX0PTB><B></B></A><BR>
      <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
        border=1><TBODY>
        <TR>
          <TD><PRE><CODE>
static void
sa_mmu_mcr(ARMul_State *state, ARMword instr, ARMword value)
{
	mmu_regnum_t creg = BITS(16, 19) &amp; 15;
	if (!strncmp(skyeye_config.cpu-&gt;cpu_arch_name, "armv4", 5) )
	{	 
	switch (creg) {
		………………….
	case MMU_CACHE_OPS:
		sa_mmu_cache_ops(state, instr, value);
		break;
	case MMU_TLB_OPS:
		sa_mmu_tlb_ops(state, instr, value);
		break;
	case MMU_SA_RB_OPS:
		sa_mmu_rb_ops(state, instr, value);
		break;
	case MMU_SA_DEBUG:
		break;
	case MMU_SA_CP15_R15:
		break;
	case MMU_PID:
		state-&gt;mmu.process_id = value &amp; 0x8e000000;
		break;
		
	 default:
		printf("mmu_mcr wrote UNKNOWN - reg %d\n", creg);
	        break;
	}
	}
}
</CODE></PRE></TD></TR></TBODY></TABLE>
      <P>sa_mmu_mcr实现SA MMU特定的cache, tlb, read buffer, write buffer等操作。</P>
      <P><A name=IDA50PTB><SPAN class=atitle3>8. 
      Memory系统的实现</SPAN></A><BR>SkyEye memory系统的模拟实现的基本思想是:</P>
      <P>1. 地址划分,每个划分区域都提供对应的读写函数</P>
      <P>2. 通过skyeye.conf配置文件配置memory地址区域</P>
      <P>数据结构</P><A name=IDAI1PTB><B></B></A><BR>
      <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
        border=1><TBODY>
        <TR>
          <TD><PRE><CODE>
typedef struct mem_bank_t {
	ARMword	(*read_byte)(ARMul_State *state, ARMword addr);
	void	(*write_byte)(ARMul_State *state, ARMword addr, ARMword data);
	ARMword	(*read_halfword)(ARMul_State *state, ARMword addr);
	void	(*write_halfword)(ARMul_State *state, ARMword addr, ARMword data);
	ARMword	(*read_word)(ARMul_State *state, ARMword addr);
	void	(*write_word)(ARMul_State *state, ARMword addr, ARMword data);
	unsigned long	addr, len;
	char	filename[MAX_STR];
} mem_bank_t;

typedef struct {
	int bank_num;
	int current_num;	/*current num of bank*/
	mem_bank_t mem_banks[MAX_BANK];
} mem_config_t;
</CODE></PRE></TD></TR></TBODY></TABLE>
      <P>配置函数</P>
      <P>int do_mem_bank_option(skyeye_option_t *this_option, int num_params, 
      const char *params[]); /*完成memory bank的配置*/</P>
      <P>读写接口函数</P><A name=IDAS1PTB><B></B></A><BR>
      <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
        border=1><TBODY>
        <TR>
          <TD><PRE><CODE>
ARMword	mem_read_byte(ARMul_State *state, ARMword addr);
ARMword	mem_read_halfword(ARMul_State *state, ARMword addr);
ARMword	mem_read_word(ARMul_State *state, ARMword addr);
void		mem_write_byte(ARMul_State *state, ARMword addr, ARMword data);
void		mem_write_halfword(ARMul_State *state, ARMword addr, ARMword data);
void		mem_write_word(ARMul_State *state, ARMword addr, ARMword data);
</CODE></PRE></TD></TR></TBODY></TABLE>
      <P>实现方式都是先根据地址在mem_config_t中找到对应的mem_bank,再调用mem_bank对应的读写函数。</P>
      <P>内存区域的读写函数</P><A name=IDA11PTB><B></B></A><BR>
      <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
        border=1><TBODY>
        <TR>
          <TD><PRE><CODE>
ARMword	real_read_byte(ARMul_State *state, ARMword addr);
void		real_write_byte(ARMul_State *state, ARMword addr, ARMword data);
ARMword	real_read_halfword(ARMul_State *state, ARMword addr);
void		real_write_halfword(ARMul_State *state, ARMword addr, ARMword data);
ARMword	real_read_word(ARMul_State *state, ARMword addr);
void		real_write_word(ARMul_State *state, ARMword addr, ARMword data);
</CODE></PRE></TD></TR></TBODY></TABLE>
      <P>IO区域的读写函数</P><A name=IDAD2PTB><B></B></A><BR>
      <TABLE cellSpacing=0 cellPadding=5 width="100%" bgColor=#cccccc 
        border=1><TBODY>
        <TR>
          <TD><PRE><CODE>
ARMword	io_read_byte(ARMul_State *state, ARMword addr);
void		io_write_byte(ARMul_State *state, ARMword addr, ARMword data);
ARMword	io_read_halfword(ARMul_State *state, ARMword addr);
void		io_write_halfword(ARMul_State *state, ARMword addr, ARMword data);
ARMword	io_read_word(ARMul_State *state, ARMword addr);
void		io_write_word(ARMul_State *state, ARMword addr, ARMword data);
</CODE></PRE></TD></TR></TBODY></TABLE>
      <P>这些函数将IO的读写转换成模拟的CPU的IO读写</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" 
        target=_blank 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">《源码开放的嵌入式系统软件分析与实践--基于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">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">SkyEye硬件模拟平台,第二部分: 
        安装与使用</A><BR><BR>
        <LI><A 
        href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part3/s1/index.shtml" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">SkyEye硬件模拟平台,第三部分: 
        硬件仿真实现之一</A><BR><BR>
        <LI><A 
        href="http://www-900.ibm.com/developerworks/cn/linux/l-skyeye/part3/s2/index.shtml" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">SkyEye硬件模拟平台,第三部分: 
        硬件仿真实现之二</A><BR><BR>
        <LI>在 <A href="http://www-900.ibm.com/developerworks/cn/linux/" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">developerWorks 
        Linux 专区</A> 可以找到更多为 Linux 开发者准备的参考资料。<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>
            <P>陈渝, 清华大学,通过 <A href="mailto:yuchen@tsinghua.edu.cn" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">yuchen@tsinghua.edu.cn</A> 
            可以和他联系。</P></TD></TR></TBODY></TABLE><BR clear=all><IMG height=10 alt="" 
      src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之三.files\c(1).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/s3/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="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之三.files\c(1).gif" width=100 
            border=0></TD></TR>
        <TR vAlign=top>
          <TD bgColor=#ffffff colSpan=2><IMG height=8 alt="" 
            src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之三.files\c(1).gif" width=100 
            border=0></TD></TR></TBODY></TABLE>
      <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0 
      xmlns:fo="http://www.w3.org/1999/XSL/Format">
        <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><SPAN class=atitle2>对本文的评价</SPAN></A>
            <P>您对这篇文章的看法如何?</P>
            <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="21%"><INPUT type=radio value=1 name=Rating>太差! 
                (1)</TD>
                <TD width="17%"><INPUT type=radio value=2 name=Rating>需提高 
                (2)</TD>
                <TD width="24%"><INPUT type=radio value=3 name=Rating>一般;尚可 
                (3)</TD>
                <TD width="17%"><INPUT type=radio value=4 name=Rating>好文章 
                (4)</TD>
                <TD width="21%"><INPUT type=radio value=5 
              name=Rating>真棒!(5)</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="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之三.files\c(1).gif" width=1 
    border=0></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR>
    <TD><IMG height=1 alt="" 
      src="D:\新建文件夹\SkyEye硬件模拟平台,第三部分 硬件仿真实现之三.files\c(2).gif" width=1></TD></TR>
  <TR vAlign=top>
    <TD class=bbg height=21>&nbsp;&nbsp;<A class=mainlink 
      href="http://www-900.ibm.com/cn/ibm/index.shtml">关于 IBM</A><SPAN 
      class=divider>&nbsp;&nbsp;|&nbsp;&nbsp;</SPAN><A class=mainlink 
      href="http://www-900.ibm.com/cn/ibm/privacy/index.shtml">隐私条约</A><SPAN 
      class=divider>&nbsp;&nbsp;|&nbsp;&nbsp;</SPAN><A class=mainlink 
      href="http://www-900.ibm.com/cn/ibm/legal/index.shtml">使用条款</A><SPAN 
      class=divider>&nbsp;&nbsp;|&nbsp;&nbsp;</SPAN><A class=mainlink 
      href="http://www-900.ibm.com/cn/ibm/contact/index.shtml">联系 
  IBM</A></TD></TR></TBODY></TABLE></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -