Power PC 与 zynq数据交互(基于LocalBus)

1、 Power PC 地址空间映射:

实现 Power PC LocalBus控制外部设备,首先要把Power PC的effective address 映射到 device address,这里需要搞清楚两个重要的概念:第一个是LAW,第二个是Power PC的内存管理单元MMU。Power PC为了实现灵活性,实现了地址空间的可配置性,当然这增加了开发的门槛。学校很少见PPC估计第一是价格高,第二是民用领域几乎没有,第三是其复杂的配置。

1.1LAW配置:

搞清楚LAW之前,还要明白Power PC 的内存布局,这里使用P2020说明(e500v2内核)。

There are several address domains within the chip, including the following:
• Logical, virtual, and physical (real) address spaces within the e500 core
• Internal local address space
• Internal configuration, control, and status register (CCSR) address space
• External memory, I/O, and configuration address spaces of the PCI Express link
• External memory address space of serial RapidIO

这是器件手册给出的一些片内地址的说明。逻辑地址、物理地址、虚拟地址是针对MMU来讲的。内部地址和外部地址是ATMU用到的。关于LAW我们需要关心的是我们应用程序写入到CPU的地址,以及外部总线的响应,这是最终的目的。
LAW 全称Local access windows,该器件的作用是定义了一套本地地址访问设备地址的映射表。
这是手册上面给出的一个地址表实例,软件开发人员可以通过设置LAW_LAWBARn和LAW_LAWARn来对LAW进行配置。第一个LAW_LAWBARn用来设置对应窗口的高24位基地址。这个比较好理解,需要注意的是P2020的设备地址空间是36位,而且P2020寄存器的赋值是反着来的,不知道是为什么。下面是在vxWorks中的一个串口设置实例:
第3行和第5行分别设置了两个目标地址。0xF0000000和0xe80000000.
LAW_LAWARn寄存器是用来设置目标器件类型、映射地址空间大小的。
由于我们需要的是LocalBus,因此设为00100.
映射地址大小按照该表来设置即可。

1.2MMU配置:

这样就完成了用户空间地址到物理地址的映射。不过不要高兴的太早,中间还有一层MMU,如果不对MMU进行配置,地址是effecitve address是不能直接访问外面的设备的。并且P2020的MMU不能被关闭。
至于P2020 MMU的工作原理,现在还没有很好的认知,只能从之前别人写好的代码去理解怎么使用。

{0xe8000000, 0x0, 0xe8000000,_MMU_TLB_TS_0   | _MMU_TLB_SZ_64M  | _MMU_TLB_IPROT   |_MMU_TLB_PERM_W | _MMU_TLB_PERM_X   | _MMU_TLB_ATTR_I  |_MMU_TLB_ATTR_G},{0xec000000, 0x0, 0xec000000,_MMU_TLB_TS_0   | _MMU_TLB_SZ_64M  | _MMU_TLB_IPROT   |_MMU_TLB_PERM_W | _MMU_TLB_PERM_X   | _MMU_TLB_ATTR_I  |_MMU_TLB_ATTR_G},

以上是在VxWorks中的代码级的映射实例。按照vxWorks给出的说明
/* effAddr, Unused, realAddr, ts | size | attributes | permissions /
/
TLB #0. Flash /
/
needed be first entry here */
主要关注第一行。第一个成员是effective address 第二个成员是 为使用,第三个是real address。这三个最关键。还有一个size,其他的先抄下来吧☺我也不懂。

2 LocalBus配置:

2.1硬件配置:

说了这么多,才到了最关键的部分,前面的内容都是在铺垫。如果是ARM处理器,前面几步早就被忽略了。刚开始拿到P2020总想骂NXP搞得这是什么东西,等正正看了一段时间才发现它的灵活性非常高。高配的处理器和低配的处理器很大的差别是寄存器的数量,寄存器就是一系列的功能开关。高配的汽车开关也会多点吧。
看了下手册,P2020的LocalBus控制器有三个功能配置:

这里我们需要实现的类似于80总线的一种访问形式,80总线是现对于inter CPU来讲的,在Power PC中叫做60x总线,其实都出不多了。
根据手册的描述,GPCM最合适了,FMC是用来控制FLASH的,UPMS没仔细看,类似于内存阵列好像。
接下来重点看下GPCM模式:
这个图很关键,指明了要使用GPMC模式,就必须按照这种方式来接线。注意有一个很明显的地方就是P2020的低位数据接到了外设的高位数据 这点不仅是在寄存器设置的时候要注意,硬件连接也要注意。我们这里使用的是zynq,因此不用关系这个问题会带来灾难性的错误,重新配置下管脚约束不就好了。
低位地址线需要锁存器来进行解复用。我们用的是FPGA,可以很灵活的解决这个问题。

这里我们的硬件连接直接把P2020的LocalBus接到了xcz7045上面。
再来看一下读写时序:
看起来很简单,不分析时序了,直接在zynq上面编码就好了。
这里还有很重要的一步,配置LocalBus的功能寄存器。
LocalBus只需要配置两个寄存器eLBC_BR0和eLBC_ORg0,注意后面的数字代表的是对应的硬件管脚上面的片选信号。

看到了吧,这里主要用了LCS2。
eLBC_BR0寄存器设置了基地址、总行功能模式、ECC校验、写保护、Machine select以及Valid bit。
eLBC_ORg0寄存器配置了AM(地址掩码)以及访问时序。
根据器件手册以及我们要实现的功能,在vxWorks中对这两个寄存器做如下配置:

这里重0xe9000000映射了1M字节的空间到外设。

2.2信号的抓取验证:

首先把示波器调成下降沿触发,接到CS2管脚上。激活触发,等待下降沿的到来。然后在shell中输入d 0xe9000000,这时候,vxWorks会读取0xe9000000上面的数据,如果LAW、MMU、LBS都配置正确,CS引脚会被拉低。

3 FPGA部分程序设计:

3.1设计思路:

1、先把信号全部设置成input,通过ILA来抓取信号,观察信号的规律;
2、根据抓取到的信号进行解复用,解析出地址和数据;
3、写接口只要在写使能信号有效的时刻,准备好相应的数据即可;

下图是在0xe9000000上面写了0x1234
可以看到信号与时序图相符合。
再来看一下读信号:
下面是解复用的逻辑

always @(negedge ps_clk)
beginif(LALE)address_high<={LA[0],LA[1],LA[2],LA[3],LA[4],LA[5],LA[6],LA[7],LA[8],LA[9],LA[10],LA[11],LA[12],LA[13],LA[14],LA[15]};else ;if(LWE0_N==1'b0)data<={LA[0],LA[1],LA[2],LA[3],LA[4],LA[5],LA[6],LA[7],LA[8],LA[9],LA[10],LA[11],LA[12],LA[13],LA[14],LA[15]};else ;
end

4总结一下:

第一步,搞清Power PC的地址空间映射;
第二步,看懂LocalBus协议;
第三步,使用合适的器件对协议进行解析;

Power PC 与 zynq数据交互(基于LocalBus)相关推荐

  1. power bi示例文件_Power BI桌面问答数据交互示例

    power bi示例文件 The Q&A feature in Power BI desktop provides a way to move towards Artificial Intel ...

  2. FPGA----ZCU106基于axi-hp通道的pl与ps数据交互(全网唯一最详)

    1.大家好,今天给大家带来的内容是,基于AXI4协议的采用AXI-HP通道完成PL侧数据发送至PS侧(PS侧数据发送至PL侧并没有实现,但是保留了PL读取PS测数据的接口) 2.如果大家用到SoC这种 ...

  3. 米联客 ZYNQ/SOC 精品教程 S02-CH19 利用BRAM进行PS与PL间数据交互

    软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛:www.osrc.cn答疑解惑专栏开通,欢迎大家给我提问!! ...

  4. ZYNQ PS PL 数据交互 Bram

    文章目录 前言 一.ZYNQ数据交互方式 二.Create Block Design 1.创建硬件工程 2.封装的ip代码 3.使用vitis写ps端程序 输出效果 前言 关于zynq PS PL 数 ...

  5. 基于Apache Thrift的公路涵洞数据交互实现原理

    基于Apache Thrift的公路涵洞数据交互实现原理 Apache Thrift简介 Apache Thrift(以下简称为"Thrift") 是 Facebook 实现的一种 ...

  6. 【阿里内部应用】基于Blink为新商业调控打造实时大数据交互查询服务

    基于Blink为新商业调控打造实时大数据交互查询服务 案例与解决方案汇总页: 阿里云实时计算产品案例&解决方案汇总 从IT到DT.从电商到新商业,阿里巴巴的每个细胞都存在大数据的DNA,如何挖 ...

  7. (转)基于MVC4+EasyUI的Web开发框架经验总结(12)--利用Jquery处理数据交互的几种方式...

    http://www.cnblogs.com/wuhuacong/p/4085682.html 在基于MVC4+EasyUI的Web开发框架里面,大量采用了Jquery的方法,对数据进行请求或者提交, ...

  8. 基于WMS/WCS与PLC数据交互的立体仓库控制系统案例分析

    写在面前 上次分享了文章: TIA Portal实现动态加密的高阶玩法-分级催款密钥授权管理 然后很快就有朋友根据里面的思路实现了,很赞,不过提醒大家的是,我们分享的只是一些思路,不是让大家跟做某件事 ...

  9. Vue第二天学习总结—— Vue全家桶之组件化开发(组件化开发思想、组件注册、Vue调试工具用法、组件间数据交互传递、组件插槽、基于组件的案例——购物车)

    (一) 组件化开发思想 1. 现实中的组件化思想体现 组件化即是对某些可以进行复用的功能进行封装的标准化工作 标准:要想组件能够成功组合在一起,每个组件必须要有标准 分治:将不同的功能封装到不同的组件 ...

最新文章

  1. c++ 异常处理(2)
  2. iPhone12 safeArea顶部区域尺寸变化
  3. qcalendarwidget只显示月_万家基金旗下26只产品规模迷你 万家精选重仓地产股年内收益排名靠后丨基金...
  4. 更新一波,微信第三方开发平台授权流程
  5. LG G8X官方图流出:LG双屏手机也意外曝光 或IFA发布
  6. 【渝粤教育】国家开放大学2018年春季 8612-22T传染病护理学 参考试题
  7. Hyperledger fabric 区块结构、交易结构
  8. 在某网课学习前端笔记整理js篇31-ajax
  9. cmd文件和bat文件的区别+一个的bat脚本+bat基础知识
  10. MIMO技术(一)分集与复用
  11. 介绍几种 Windows10 自带的截图方式
  12. java工厂方法_Java设计模式之工厂方法模式
  13. c课设:快递包裹管理系统
  14. 创业时代的七堂必修课
  15. 翻棋子游戏与Nim游戏
  16. 找了许久,终于找到一篇关于GStreamer架构的说的比较详细和底层的文章
  17. 维度探索:三维空间、四维空间和更高维度
  18. 浙江省中小学信息技术课 9 月换新教材,大数据人工智能占 80%
  19. 有符号数IMUL和无符号数MUL的使用
  20. 哪个品牌的蓝牙耳机降噪好?主动降噪耳机排行榜10强

热门文章

  1. java 批量处理_java批量处理数据
  2. REST是什么 What is REST
  3. 交通标志的检测与标定
  4. js excel转日期 time.getDate()-1 会少一天
  5. 【node.js+html】无聊在家写一个在线客服聊天系统
  6. 华硕PRIME Z370M-PLUS II 魔改BIOS 测试正常
  7. ATX微机开关电源维修教程(典型)
  8. 企业竞争的本质与数字化转型(算法+数据)
  9. C++中使用strtok函数分割字符串String
  10. [mobx] Dynamic observable objects cannot be frozen 解决记录