在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3909|回复: 8

[求助] 请教设备映射到处理器内存地址

[复制链接]
发表于 2012-4-9 16:27:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
将所有的需要与软件互动的接口按照地址的方式映射到CPU的内存空间范围内。软件就像操作内存一样访问资源,查询外设状态,控制IP工作。

请教该操作的原理。
发表于 2012-4-9 16:51:56 | 显示全部楼层
不完全理解你想知道什么.

SoC通过片内总线,每个外设都需要映射到一个地址空间.CPU可以通过地址空间直接访问.

这在SoC内部,基本上都是这样操作的啊.
 楼主| 发表于 2012-4-9 21:43:55 | 显示全部楼层
回复 2# gordon_m


    外设是如何映射到地址空间的呢
发表于 2012-4-9 22:25:23 | 显示全部楼层
这个在SoC内部硬件逻辑上就是这么做的,每个外设都有自己的地址空间,
硬件进行总线地址译码的时候,就已经映射好了.
 楼主| 发表于 2012-4-10 09:58:38 | 显示全部楼层
本帖最后由 easelive 于 2012-4-10 10:48 编辑

回复 4# gordon_m


    总线上挂载的IP有一个映射寄存器单元,实现通信,但我貌似还是不懂其原理,设备的地址是如何产生的。
比如我使用的是AMBA总线,挂在总线上的外设的地址是如何确定的?
发表于 2012-4-10 18:27:07 | 显示全部楼层
AMBA总线decoder地址译码,已经把地址给指定了.

如果你用的AHB busmaxrix.那么在busmatrix的master decode部分,就要对每个master访问slave的地址进行译码.是这个地方把地址空间指定了.

摘了部分代码给你个直观的印像,能知道多少,看你自己了.

MatrixDecode0.v摘出

//------------------------------------------------------------------------------
// Address phase signals
//------------------------------------------------------------------------------
// The address decode is done in two stages. This is so that the address
//  decode occurs in only one process, p_AddrOutPortComb, and then the select
//  signal is factored in.
  always @ (Addr or REMAP)
    begin : p_AddrOutPortComb
      case (Addr [31:28])
        4'b0000 : begin
            if (REMAP[1:0] == 2'b00)
                // Bus-switch output 2, OTP
                AddrOutPort = 4'b0010;
            else if (REMAP[1:0] == 2'b01)
                // Bus-switch output 1, OCRAM
                AddrOutPort = 4'b0001;
            else
                // Bus-switch output 0, BOOTROM
                AddrOutPort = 4'b0000;
        end
        4'b0001 : begin
            if (REMAP[2])
                // Bus-switch output 2, OTP
                AddrOutPort = 4'b0010;
            else
                // Bus-switch output 0, BOOTROM
                AddrOutPort = 4'b0000;
        end
        // Bus-switch output 1, OCRAM
        4'b0110,
        4'b1000 : AddrOutPort = 4'b0001;
        // Bus-switch output 3, default slave
        default : AddrOutPort = 4'b0011;
      endcase // case(Addr [31:28])
    end // block: p_AddrOutPortComb

  
  // Select signal decode
  always @ (Sel or AddrOutPort)
    begin : p_SelComb
      Sel0  = 1'b0 ;
      Sel1  = 1'b0 ;
      Sel2  = 1'b0 ;
      Sel3  = 1'b0 ;
      if  (Sel)
      begin
        case (AddrOutPort)
          4'b0000 : Sel0  = 1'b1 ;
          4'b0001 : Sel1  = 1'b1 ;
          4'b0010 : Sel2  = 1'b1 ;
          4'b0011 : Sel3  = 1'b1 ;
          default: begin
          end
        endcase // case(AddrOutPort)
      end // if (Sel)
    end // block: p_SelComb
发表于 2012-4-10 20:26:05 | 显示全部楼层
可以自定义映射啊,也可能有固定的映射地址。
我给你一个简单的例子啊。两个Microblaze 组成的mpsoc
两个mb之间用axi总线连接。 外部有一个ddr3,每个mb都有自己的local memory
地址映射如下
bram(local memory):0x80000
MB_1_axi_ctrl:0x90100000
MB_2_axi_ctrl:0x90120000
DDR3_BASE:0x80000000
整个mpsoc共用这个memory map
当mb1写一个数据的时候,是写到bram上。这个时候如果mb2想读这个数据就需要通过MB_1_axi_ctrl来读取。
同样的道理,如果MB2写了一个数据到0x80000000上,那如果MB1读0x80000000读到的就是MB2写入的数据。
 楼主| 发表于 2012-4-12 16:20:11 | 显示全部楼层
回复 6# gordon_m


    谢谢,受教了
 楼主| 发表于 2012-4-12 16:20:42 | 显示全部楼层
回复 7# penn4u


    谢谢,受教了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-1-31 06:15 , Processed in 0.027363 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表